「テスト駆動開発」(Kent Beck)を読んでます.
メモ
Value Object パターン
- オブジェクトを値として使える.
- 別名参照(aliasing)を気にする必要がなくなる
- コンストラクタで設定したインスタンス変数の値が変わってはならない
三角測量
- 任意の無線信号の方向を測定できる2つの受信機の間の距離がわかっている場合,信号の発信地点までの距離と方角を算出すること
- コードにおいて,2つ以上の実例があるときに,一般化できる.
- リファクタリングしたらよいか全くわからないときにしか使わない(著者)
- しかし,三角測量は少し異なる角度から問題を考える機会を与えてくれる
- 異なる角度についての検証を TDD の ToDo リストに追加する
原則をあえて破るとき
- (コピー&ペーストなどの)重複は原則を破るが,TDD においてはとりあえずグリーンバーを目指すので一時的に許容する
歩幅の調整
- 大きめの調整にのめり込みそうになる,その前に手前にある小さな変更に着手する
- 小さな調整の熱中するのではなく,TDD ではステップを小さくすることが可能であることが重要
テストに聞く
- TDD を積み重ねることによって,そのコードが動作しているという地震をテストが与えてくれる
- 優秀なソフトウェアエンジニアが10分考えて出す結論を,コンピュータなら 15 秒でだす
- テストがなければ選択の余地はなく,慎重に検討せざるをえない
- テストがあれば,試したほうが早いかどうかを選択できるよになる.
不要になったら消す
- サブクラスの仕事を減らし続け,とうとう消す
- サブクラス削除の構造では意味があるものの,削除後は冗長になってしまうテストたちを削除する
設計とメタファー
- Imposter パターン
- 処理に新しいバリエーションを導入するときは,既存オブジェクトと同じプロトコルを備え,実装とは異なる新しいオブジェクトを作ること
- いったんメタファーとして適当な名前のクラスを作成して,コンパイルとテストを通す.
- リファクタリングは後でおこなう.