3. Evolutionary Architecture: Guiding Architecture with Testability and Deployability
テスト容易性とデプロイ可能性を追求することによって、本質的な複雑さと偶発的な複雑さを分離するシステム設計ができる。
その結果アーキテクチャレベルの根本的な変更に対して柔軟に対応できる。
3.1 The Importance of Learning and Discovery
複雑なシステムは、漸進的な進歩と学習のプロセスの結果作り上げられるものである。
3.2 The Tools of Sustainable Change
持続可能で進化的なアプローチを実現するのに役立つ5つの性質:
- モジュール性: 独立して変更できるようにシステムを分割する
- 凝集性: 同時に変更するコードをまとめておく
- 関心事の分離: 1つの問題を解決する要素単位にコードやシステムを分離する
- 抽象化・情報隠蔽: システムに継ぎ目を作って、詳細を知ることなく機能を利用できるようにする
- 結合度: システム間における、同時に変更する必要がある度合い
3.3 Testability: Creating High-Quality Systems
この5つの品質に関する特性を、どのようにシステムに組み込めばいいのか。
システムが期待通りに動いているかをテストで検証する。
高凝縮で疎結合なソフトウェアはテストを容易にする。システムが常にテスト可能であることを保つ。
テストの容易性は、時間の経過とともにシステムの修正を自由にする。
3.4 Deployability: Scaling Development of Our Systems
デプロイ可能性はシステムレベルで機能する性質。
デプロイメントパイプラインがすべての評価に合格したなら、それはリリース可能、の状態にする。
リリースのためにもっと幅広くテストする必要があるのであれば、それもデプロイメントパイプラインのスコープに含める。
目指すべきところは、本番環境に導入されるコードを厳密に評価し、できる限り完璧にその挙動を確認すること。