12章 プラクティス8 設計は最後に行う
内容
ソフトウェア開発では、保守性の設計は最後にしたほうが良い傾向がある。
プロジェクトの終盤の方が、システムの全体に対して理解が深くなっており、適用させるデザインパターンの判断もしやすくなる。
実現の手段として、ユニットテストのサポートを受けながら、再設計とリファクタリングを行う。
反復開発は設計を創発する。
創発とは、最初の設計よりも開発が進むに連れ、もっと良い設計が見えてくることを指す。
12.8 創発する設計
原則として、テストファースト開発を行いながら、理解容易性、テスト容易性に注意を配りながら開発していけば、修正しやすいプログラムになり、あとから生まれた設計を取り込むことも、テストがサポートしてくれる。
創発した設計を取り込むことができないということは、修正がしづらいことを意味し、それを続けているといずれ保守可能でないシステムになり、システムはビジネスの拡張についていけなくなるし、エンジニアたちも苦しむことになる。
学び
- 保守性を加味した設計とリファクタリングは、テストが書かれている前提であれば、プロダクトの全体像が見えるプロジェクトの後半が適している。
- テストファースト開発は創発した設計を取り込むことができる。
- 最初に設計しきるのは現実的ではない。だから、創発した設計を取り込めるプロセスを作ることが重要だ。
学びを活かすアイディア・行動
- まずは実践し、メンバーに手法として展開する
- テストコードの目的の事前知識整理