# ソフトウェアライフサイクル
## 定義
ソフトウェアシステムの誕生から廃棄までの一連の活動・フェーズを指す枠組み。Boehm(1976)が示したライフサイクルは以下のフェーズで構成される:
1. システム要件 + 検証(VALIDATION)
2. ソフトウェア要件 + 検証
3. 予備設計(Preliminary Design) + 検証
4. 詳細設計(Detailed Design) + 検証
5. コード/デバッグ(Code and Debug)
6. 開発テスト(Development Test)
7. 受入テスト前テスト(Test and Preoperations) + 検証テスト
8. 運用・保守・再検証(Operations and Maintenance / Revalidation)
各フェーズに検証(Validation)が付随する点が特徴的で、欠陥を早期発見することの重要性を構造的に示している(Source: [[@1976__IEEE-TC__Software Engineering]])。
## フェーズ間コスト比の原則
ソフトウェアライフサイクルで最も重要な経験則の一つ: **欠陥の発見が遅れるほど修正コストは指数的に増大する**。
Boehm(1976)が IBM・GTE・TRW のデータから示した相対コスト:
- 要件フェーズ: 0.1–0.2
- 設計フェーズ: 0.5
- コーディングフェーズ: 1.0(基準)
- 開発テスト: 2–5
- 受入テスト: 15–20
- 運用: 15–100
(Source: [[@1976__IEEE-TC__Software Engineering]], Fig. 3)
## 横断的知見
- 保守フェーズがライフサイクルコストの大半(~70%)を占めることは 1976 年のデータでも 2000 年代以降のデータでも一貫している。ライフサイクルモデルの設計時に保守コストを明示的に含めることの重要性は長年にわたって繰り返し強調されている(Source: [[@1976__IEEE-TC__Software Engineering]])。
## 未解決の問い
- フェーズ間コスト比は組込みシステムや AI/ML システムでも同様の傾向を示すか? 要件が反復的に更新されるアジャイル開発では「フェーズ」概念自体が再定義されるが、コスト比の原則は維持されるか?
- Boehm が 1976 年に「近い将来」と予測した形式的要件言語・自動プログラミングは実現したか? その後の展開は?
## 関連
- [[ソフトウェア要件工学]]
- [[ソフトウェア保守]]
- [[@1976__IEEE-TC__Software Engineering]]
- [[@2007__FOSE__Software Reliability Engineering - A Roadmap]](ロードマップ的後継視点)
## 出典
- Boehm, B. W. (1976). Software Engineering. *IEEE Transactions on Computers*, Vol. C-25, No. 12, pp. 1226–1241.