# ソフトウェア開発方法論(ウォーターフォールからアジャイルへ)
## 定義
ソフトウェア開発方法論とは、複雑な問題を管理可能な部分問題に分割し、部分問題間の相互作用を制限する枠組みである。『Security Engineering』第3版第27章は、これをトップダウン型と反復型の2系統に大別する。**ウォーターフォールモデル**は1960年代にWin Royceが米空軍向けに定式化した、要件→仕様→実装/単体テスト→統合/システムテスト→運用保守という一方向の開発モデルで、1970年代から2000年代半ばまで米国防総省の標準だった。安全重視のV字モデル(V model)はドイツ政府標準・航空宇宙業界標準(ISO 26262に採用)で、左から右に書かれる点を除けばウォーターフォールと同じく一方向プロセスである。ウォーターフォールの強みは、システム目標・アーキテクチャ・インターフェースの早期明確化を強制し、明確なマイルストーンを提供し、コスト透明性を高める点にあるが、要件が事前に完全に判明している場合(コンパイラ開発、既知のトランザクション集合を実装する暗号プロセッサ等)にしか機能しない。(Source: [[@2020__Wiley__Security Engineering 3e - Chapter 27 Secure Systems Development]] ch.27 §27.5.1)
**スパイラルモデル**はBarry Boehmが考案した反復型モデルで、事前に合意した反復回数だけプロトタイプ構築・試験を繰り返し、各段階でリスクを評価して継続/中止を判断する。**アジャイル開発**("Solve your worst problem. Repeat")はHarlan Millsの進化的アプローチに由来し、最小限の動くシステムを構築して実ユーザーで試し、小さな増分で機能を追加していく。中核技術は毎日のビルド・自動リグレッションテストであり、IBMが分析者・プログラマ・テスタの役割を分離していたのに対し、Microsoftはこの分離を廃止して開発者に自分のコードの設計・修正双方の責任を持たせ、これが32ビットOS市場でIBMから1000億ドル規模の市場を奪う原動力になったとされる。(Source: [[@2020__Wiley__Security Engineering 3e - Chapter 27 Secure Systems Development]] ch.27 §27.5.1, §27.5.2)
**セキュア開発ライフサイクル(SDL)**はMicrosoftが2008年に確立した、要件・設計・実装・検証・リリースの5段階からなる実質ウォーターフォール型のプロセスである。2002年のBill Gatesによる「trustworthy computing」メモを起点に、Michael Howard・David LeBlancの『Writing Secure Code』(2002年)を経て発展した。各段階に「バグバー」という品質ゲートを設け、脅威モデリング・静的解析・動的解析・ファジングテストを組み込む。この背景には、Watts Humphreyが1989年にカーネギーメロン大学のSEIで開発したCapability Maturity Model(CMM、能力成熟度モデル)——チームの能力は個々の開発者の能力の総和ではなく、チームとして予測可能な開発時間・低い分散を達成できるかで測られるという考え方——があり、Microsoftはこれを4段階のセキュリティ成熟度モデルに適応させた。アジャイル化が進んだ業界最大手のMicrosoft自身が、セキュリティパッチについては**ゲート開発(gated development)**——定期的にリリース候補版を追加テスト・レビューの列に通す方式——というウォーターフォール的な仕組みに回帰したことは、自動テストだけでは創発的で多様なセキュリティ特性を捉えきれないことを示唆する。(Source: [[@2020__Wiley__Security Engineering 3e - Chapter 27 Secure Systems Development]] ch.27 §27.5.3, §27.5.4)
## 横断的知見
- **本章のCMM記述は、Watts Humphrey entity(既存)が1990年のMahoney論文経由で伝える「ソフトウェア工学の定義自体が20年間停滞していた」という懐疑的な文脈とは対照的に、Humphreyの具体的な制度的貢献(CMM、1989年、SEI/CMU)を独立の一次的文脈で伝える**: 既存の[[Watts Humphrey]] entityは、Mahoney(1990)が引用する「ソフトウェア工学とは規律ある工学・科学・数学原理の経済的な適用である」という定義を、F.L. Bauer(1971)の定義とほとんど変わっていない停滞の証左として位置づけていた。本章はこれとは独立に、同じHumphreyが1989年にCMUのSEIで開発したCMMを、Microsoftがセキュリティ成熟度モデルへ具体的に適応させた実例として肯定的に描く。同一人物の業績が、一方(Mahoney論文)では「定義の停滞」の象徴として、他方(本章)では「チーム能力の定量化という具体的な実務ツール」として異なる評価軸で言及されており、Humphreyの仕事が抽象的な定義策定と具体的な実務改善の両面を持つことが、2つの独立ソースを合わせて初めて分かる。(Source: [[@2020__Wiley__Security Engineering 3e - Chapter 27 Secure Systems Development]] ch.27 §27.5.3, [[Watts Humphrey]])
## 未解決の問い
- 本章はアジャイル・スパイラル・ウォーターフォールの選択基準を「要件が事前にどこまで判明しているか」に一元化するが、[[DevOps]] concept が集積するVelocity 2009由来のDevOps運動の議論(6ツール+4文化)とは、方法論選択の語彙がどこまで同じか、それとも別の関心軸(組織文化 対 開発プロセス)なのかは、両concept間の突き合わせをまだ行っていない。
- 本章はゲート開発をMicrosoftのセキュリティパッチの例で説明するが、アジャイル開発全般でセキュリティ特有の「ゲート」がどこまで一般化されているか(業界横断の実態)は本章単独では分からない。
- CMMの「チームが最もよく機能するのは、予測可能な平均開発時間と低い分散を達成したとき」という知見は、[[アジャイルな計画づくり]]が扱う見積もり手法(不確実性コーンなど)とどう接続するか。
- ウォーターフォールの前身とされるPahl・Beitzの機械工学設計手法(ドイツ、第二次大戦後)は、本章では脚注的に触れられるにとどまる。この系譜と、ソフトウェア工学の要件工学の起源([[ソフトウェア要件工学]]が扱う1976年のBoehmのサーベイ)との関係は未整理。
## 関連
- 概念: [[ソフトウェア要件工学]](要件が事前に判明しているかという同じ問いを1976年時点で論じる) / [[技術的負債]](ウォーターフォール/アジャイルいずれの方法論でも生じる、本章§27.5.2で言及) / [[DevOps]](SaaS化・DevSecOpsへの接続)
- source: [[@2020__Wiley__Security Engineering 3e - Chapter 27 Secure Systems Development]] — ウォーターフォール・スパイラル・SDL・ゲート開発を体系的に扱う一次資料
- 実体: [[Barry W. Boehm]](スパイラルモデル考案者) / [[Watts Humphrey]](CMM開発者) / [[Fred Brooks]](「銀の弾丸はない」)
## 出典
- Ross Anderson, *Security Engineering: A Guide to Building Dependable Distributed Systems*, 3rd Edition, John Wiley & Sons, 2020, Chapter 27, §27.5.1-§27.5.4.