設計とアーキテクチャ
目的は?
ソフトウェアアーキテクチャの目的は以下であると説明。
- ソフトウェアアーキテクチャの目的は、求められるシステムを構築・保守する人材を最小限に抑えること
システムは拡張・変更のコストを抑える重要な鍵はアーキテクチャにある。
保守・運用コストがかかりすぎてしまう原因は、汚いコードにあり、そうなってしまうのはアーキテクチャが良くないからだ。
本書は柔軟なソフトウェアを作るためのアーキテクチャを設計するための原則を紹介する。
アーキテクチャとは?設計とは?
アーキテクチャとは、大枠から細部に至るまでの構造で、大枠と詳細との厳密な境界の明確な基準はない。
設計とは、大枠から細部に至るまでの決定の連続のことで、こちらも大枠と詳細の境界の明確な基準はない。
一般的には、アーキテクチャとは上位レベルの構造を指し、下位レベルの詳細と切り離して捉えられていたり、設計は細部の決定をすることと捉えられていることがあるが、それは開発手法やフェーズを踏まえた場合に発生している考え方であって、実際はそれが一般的な基準となる考え方になるわけではない。
ケーススタディ
- 人材をリリースごとに増やす。図1-1
- 人が増えているにも関わらず、リリースが進むごとに生産性が下がっていく。図1-2。図1-4。
- しかし、人は増えているからリリースが進むごとにコード行あたりのコストも爆増し、開発者に払う給料も爆増。図1-3、図1-5
何が間違ったのか?
開発者は、後でクリーンにできると自信過剰になり、市場に出すことを急いだ。
しかし、実際には後でクリーンにすることはない。
市場、競合他社のプレッシャーがあるから。
そしてコードはどんどん汚くなり、生産性は落ちていく。
あとでクリーンにできるから先に出すという考え方は、汚いコードは長期的には生産性が下がるが、短期的には上がるという考え方が起因している。
しかし、この考え方は間違っていて、実際には短期的にも長期的にも遅いのが正しい。(TDDで進めたプロダクトとそうでないプロダクトで検証。)
だから、あとでクリーンできるという考え方は根本から変えないといけない。
うさぎとかめは良い教訓を教えてくれる。
- 遅くとも着実なものが競争に勝つ
- 競争は短期的ではない。強いものが勝つわけでもない。
- 急げば急ぐほど遅くなる
学びを活かすアイディア・行動
- 今の所特になし