バグの少ない設計のためのValueObject
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
]
開始行:
* 言いたいこと、簡単に言うならば [#k9d15b45]
この、記事で言いたいことを先に言うならば、イソップ童話に...
* 開発よりも、テストにコストがかかる [#e73bdfff]
自分はいろいろな開発プロジェクトに参画してきた経験からい...
バグというのは、勘違いからくる。
* よくある時間関連の間違いの例 [#s35e2121]
たとえば、時間関連の勘違いも多い。
よく、深夜1時のことを25時として扱うというのがあったりする...
期間についても、開始と、終了を一つの期間という入れ物に持...
終了が、開始の前になっても、なんのチェックもしてないとい...
これらは、小さなデータの単位をStringやDate形などで持つの...
それがValueObjectの使い方なのだ。イソップ童話の3匹の子豚...
* 現場リーダのプライドが導入の遅れ [#qa5ae571]
しかし、それを現場のリーダにレクチャーなどしようものなら...
中には、ValueObjectについて、まちがった認識を逆にレクチャ...
そういう時は、「あぁ、そうだったんですね。勉強になりまし...
そういう現場は、謎のバグになやまされてかわいそうなことが...
* 最近の自分の体験 [#y79e2344]
そんな自分も最近Mysqlに格納したタイムスタンプと、格納した...
Mysql5.7以降は、データを取り込む再に値を四捨五入するよう...
ValueObjectでこの場合の時間の型のとらえ方を分けるのだ。な...
例えばシステム時刻のことをRawDateとかいう名称のクラスに格...
そして、RawDateからStoredDateに変換する場合は、MySQL5.7以...
そうすれば、その四捨五入しなければならないという知識を、...
クラスを利用する側は、そのMySQL5.7以降の知識を持たずに、...
* 結局はレンガで家をたてばコストが安い [#sef0190e]
プログラム量は増えるが、そこに使うコストがもったいない、...
疎通確認がおわり、単体テストがおわり、結合テストと、進め...
* まだ、わかってない人が多い [#g03f2326]
ところが、よのなかの、プロジェクトのリーダはそれがわかっ...
** 数学的に説明を試みる [#ad12bf71]
人間には、ワーキングメモリーというものがあり、平均は7だ...
MySQLのミリ秒四捨五入のような、しらないと、バグになるレベ...
ソースコードに含まれる込み入った知識が必要な確率をpとする。
ソースコードの量をcodeAmmountとする
したがって以下の式になる。
knowledge = codeAmmount x p
人間が注意を払うには、ワーキングメモリーに知識が入ってい...
** 不注意でバグを生み出しだす条件式 [#mf74c585]
knowledge > workmem = 7
*** ワーキングメモリーがすくないバカなひとほど、開発方法...
workmenには、個人差があり、優秀な人ほど高くなる。
またコード量が増えまくてはじめて、「あっ、このやり方は限...
バカほど、早めに気が付き、怪我が少ないので、優秀というこ...
* バリューオブジェクト作るコストと、ややこしいバグを解消...
そこで、ValueObjectを作って、知らないとバグになる知識を、...
しらないとバグになるややこしい知識1個あたりのvalueオブジ...
valueObjectをつかうことで支払うコストは
knowledge x costValueobject である。
valueObjectを使わないことで支払うコストは、1知識あたりの...
knowledge x bugFixCost である。
** costValueobject の見積り [#y3325c2d]
知識を得るためのコスト
クラスに作りこむためのコスト
このクラスを利用する側は、知識をもっていなくてもこのクラ...
知識をもった状態と同等のことになる
** bugFixCost [#y5fe49cd]
知識を得るコストを修正箇所を別の担当者が行うたびに支払う
再テストのコスト
バグが起きるタイミングは、本番時など、後工程になりがち。...
大きなプロジェクトになれば、なるほど分業化されるので、問...
他にも、そのうち、こういうコストがかかると、おもいつくと...
個人的にやばいと思うのは、本番時に、ややこしい間違えやす...
信用を失うというのは、プライスレスなコストではないだろう...
終了行:
* 言いたいこと、簡単に言うならば [#k9d15b45]
この、記事で言いたいことを先に言うならば、イソップ童話に...
* 開発よりも、テストにコストがかかる [#e73bdfff]
自分はいろいろな開発プロジェクトに参画してきた経験からい...
バグというのは、勘違いからくる。
* よくある時間関連の間違いの例 [#s35e2121]
たとえば、時間関連の勘違いも多い。
よく、深夜1時のことを25時として扱うというのがあったりする...
期間についても、開始と、終了を一つの期間という入れ物に持...
終了が、開始の前になっても、なんのチェックもしてないとい...
これらは、小さなデータの単位をStringやDate形などで持つの...
それがValueObjectの使い方なのだ。イソップ童話の3匹の子豚...
* 現場リーダのプライドが導入の遅れ [#qa5ae571]
しかし、それを現場のリーダにレクチャーなどしようものなら...
中には、ValueObjectについて、まちがった認識を逆にレクチャ...
そういう時は、「あぁ、そうだったんですね。勉強になりまし...
そういう現場は、謎のバグになやまされてかわいそうなことが...
* 最近の自分の体験 [#y79e2344]
そんな自分も最近Mysqlに格納したタイムスタンプと、格納した...
Mysql5.7以降は、データを取り込む再に値を四捨五入するよう...
ValueObjectでこの場合の時間の型のとらえ方を分けるのだ。な...
例えばシステム時刻のことをRawDateとかいう名称のクラスに格...
そして、RawDateからStoredDateに変換する場合は、MySQL5.7以...
そうすれば、その四捨五入しなければならないという知識を、...
クラスを利用する側は、そのMySQL5.7以降の知識を持たずに、...
* 結局はレンガで家をたてばコストが安い [#sef0190e]
プログラム量は増えるが、そこに使うコストがもったいない、...
疎通確認がおわり、単体テストがおわり、結合テストと、進め...
* まだ、わかってない人が多い [#g03f2326]
ところが、よのなかの、プロジェクトのリーダはそれがわかっ...
** 数学的に説明を試みる [#ad12bf71]
人間には、ワーキングメモリーというものがあり、平均は7だ...
MySQLのミリ秒四捨五入のような、しらないと、バグになるレベ...
ソースコードに含まれる込み入った知識が必要な確率をpとする。
ソースコードの量をcodeAmmountとする
したがって以下の式になる。
knowledge = codeAmmount x p
人間が注意を払うには、ワーキングメモリーに知識が入ってい...
** 不注意でバグを生み出しだす条件式 [#mf74c585]
knowledge > workmem = 7
*** ワーキングメモリーがすくないバカなひとほど、開発方法...
workmenには、個人差があり、優秀な人ほど高くなる。
またコード量が増えまくてはじめて、「あっ、このやり方は限...
バカほど、早めに気が付き、怪我が少ないので、優秀というこ...
* バリューオブジェクト作るコストと、ややこしいバグを解消...
そこで、ValueObjectを作って、知らないとバグになる知識を、...
しらないとバグになるややこしい知識1個あたりのvalueオブジ...
valueObjectをつかうことで支払うコストは
knowledge x costValueobject である。
valueObjectを使わないことで支払うコストは、1知識あたりの...
knowledge x bugFixCost である。
** costValueobject の見積り [#y3325c2d]
知識を得るためのコスト
クラスに作りこむためのコスト
このクラスを利用する側は、知識をもっていなくてもこのクラ...
知識をもった状態と同等のことになる
** bugFixCost [#y5fe49cd]
知識を得るコストを修正箇所を別の担当者が行うたびに支払う
再テストのコスト
バグが起きるタイミングは、本番時など、後工程になりがち。...
大きなプロジェクトになれば、なるほど分業化されるので、問...
他にも、そのうち、こういうコストがかかると、おもいつくと...
個人的にやばいと思うのは、本番時に、ややこしい間違えやす...
信用を失うというのは、プライスレスなコストではないだろう...
ページ名: