テストのための設計
http://www.threeriversinstitute.org/AbstractVsConcreteParameters.html
Kent Beckによる設計論。テストしやすいソフトウェアのデザインについて。
流し読みで要約。
- テストしやすいソフトウェアは"Contorollable"だ
- Controllabilityとは、オブジェクトが動作するコンテキストを簡単に構築できること
- パラメータを具体的なものにするとControllabilityが増すケース
- 例:死亡表から、男性・非喫煙者のデータを取ってくる機能のテスト
- 死亡表から検索するというメソッドのパラメータとしてCustomerオブジェクトを渡していると、テストのために完全なCustomerオブジェクトを作成しないといけない。
- パラメータを変更して、必要な情報だけ(性別・喫煙者かどうか)を具体的なプロパティで渡すようにすると、テストのために完全なオブジェクトを作成する必要がなくなる。→controllable
- パラメータを抽象的なものにするとControllabilityが増すケース
- まーこの両者ってトレードオフだよね
- 前者は「コストを下げることによるControllability」であるのに対し、後者は「柔軟性を高めることによるControllability」であるという違いがある。
- どっちを優先した方がよいか、設計を議論するときのヒントとして使ってください。柔軟性がいらなかったら前者、必要だったら後者とか。