ウォーターフォールが危険なのは各フェーズでのテスト不可能だから。

  • お客様から要件をヒアリングし、要件定義としてまとめる
    • 要件定義は本来の要件を満たしているか? ←レビューのみ
  • 要件定義から基本設計*1をまとめる
    • 基本設計は要件定義を満たしているか? ←レビューのみ
  • 基本設計から詳細設計*2をまとめる
    • 詳細設計は基本設計を満たしているか? ←レビューのみ
  • 詳細設計からプログラムをコーディングする。
    • プログラムは詳細設計を満たしているか? ←動作試験

製造業的な感じであれば、…例えばネジなら長さは正しいか、ピッチは正しいか、破損はないか等の工程での客観的検査が可能で、それを以ってネジ工程はOKで次の組立工程を行うというような…各フェーズでのテストは可能だが、システム構築だとそもそもテスト対象が曖昧で、客観的な、有用なテスト項目はない。ってか見たことがない。で、結局はレビューに頼らざるを得ない。

結局、プログラムの動作試験が行われるまでに客観的・物理的・システム的なテストはまったく行われない。だから、唯一のプログラム動作テスト…といっても名目上は一応「単体テスト」やら「結合テスト」やらに分かれてはいるが、それら全てがそろわない限り、そのシステムは本来の要件を満たしているかの検証がされない。最後の最後になって、ようやく本来の要件とシステムとが合致するかがテストできる。そして大抵は、既に遅いと諦める。諦めきれない人がいれば、めでたくデスマーチに突入。
実際、各フェーズのレビュー結果の議事録とか承認印は、後で問題が起こった場合の責任の擦り付け合いという泥臭い政治闘争の根拠くらいにしか使われない。問題が起こらなければ誰も見ない。

逆に言えば、各フェーズでの有効なテスト方法が確立できれば問題はかなり解決するんだろうけど。

*1:外部設計でも

*2:これももちろん内部設計でも