次にウォーターフォール型の開発の具体的な進め方について見てみましょう。
ウォーターフォール型の開発では、右図のように「抽象的な仕様から具体的なプログラムの構造を詳細化する」設計段階と、「細かく分割されたプログラムを段階的にひとつにまとめていく」テスト段階に分けることができます。
設計段階
基本計画において最も抽象度の高い決定を行い、これをより具体的にする形で外部設計を行います。外部設計で決めたことを内部設計によってさらに詳細化します。内部設計までで決めたことを元にプログラム設計を行い、最初の段階で決定したことをプログラムを作る段階まで具体化していきます。
テスト段階
テスト段階では、詳細化されて作られたプログラムを段階的に統合してテストをしていきます。プログラムの最小単位であるモジュールをテストする「単体テスト」から始まり、単体テストの済んだモジュールをいくつか統合して「結合テスト」を行います。次にデータベースなどと連携して、システムとして動作するかをテストする「システムテスト」を経て、最終的に実際に運用する状態と同じ環境で実務上問題がないかどうか確認する「運用テスト」を行って終了します。
ウォーターフォール型が適用されるケース
ウォーターフォール型の開発手法が実際に使われるのはどのような開発の場合なのでしょうか。主に以下のような開発で利用されることが多いようです。
- 大型システム
大型システムの場合はたくさんの開発者が役割分担し、平行して作業を行います。その中で機能変更がしょっちゅう起こるようでは検討し直す範囲が大きすぎていつまでたってもシステムが完成しないということになりかねません。そのため、全員がひとつの目的に向かって作業に集中できるように、ウォータフォールを採用し、あらかじめ到達点を決めます。
- ユーザの要件が明確になっているシステム
要件が明確に決まっているのですから、試作品を作成しながらユーザと検討するなどの作業は必要が少ないはずです。そのため、順当な作業を進められるウォータフォールを採用します。