ウォーターフォールモデルの基本をわかりやすく解説
ウォーターフォールモデルとは、システム開発を上流から下流まで複数の工程に分けることにより、定められた工程を順次たどって計画的に開発を進めていく手法です。
ウォーターフォールとは、文字通りに滝(waterfall)のことです。工程が次の段階に移行したら、基本的に前の工程には戻らず、上から下へ流れていくことから滝の動きにたとえられたものです。
ウォーターフォールモデルは古くから用いられてきた開発手法です。そして今でも主流となっている開発手法であり、大規模な開発案件とは一般的に相性が良いと言われています。
そのため、フリーランスのSEやプログラマーが単独でプログラミングをするような受注案件でも、その一部の工程(たとえば製造工程)が発注されることもありますし、上流から下流まで複数のITエンジニアが担当する大規模なプロジェクトで多く用いられています。
ウォーターフォールモデルの歴史
1968年に、当時のNATOが後援する国際会議において、ウォーターフォールモデルの原型となる手法が発表されたといわれています。限られた人材だけが作成できる一種の職人芸と見なされていたソフトウェア開発の手法を、広く取得できる工業製品として活用しようとしたものです。
提唱された手法のポイントは、製品の製造がいくつかの過程に分けられるように、ソフトウェア開発もいくつかの工程に細分化しようとしたことです。
ウォーターフォールモデルの基本工程
ウォーターフォール開発の基本的な工程の概要
ウォーターフォールモデルの基本的な作業では、システム開発を要件定義、外部設計(基本設計)、内部設計(詳細設計)、プログラム設計、プログラミング、単体試験、結合試験、総合試験、受入試験などに分けて行います。
それぞれの工程の基本的な作業は以下のとおりです。
【要件定義】要求されるシステム要件を定義する作業。実現すべき要件やシステム化すべき範囲を確認。
【外部設計(基本設計)】システム実装方法を設計。画面設計、外部インターフェース設計など。
【内部設計(詳細設計)】基本設計で定めた機能毎に詳細で具体的な設計を実施。
(データ編修仕様や画面編集仕様、使用する共通部品、処理手順の骨格、処理フローなど)
【プログラム設計】詳細設計に従って、一本一本のプログラムの設計を実施。
(プログラムのクラス設計、コード設計など)
【プログラミング】実際にプログラミングを実施。また策定した規約に基づいて実装を行います。
【テスト】不具合やバグがないかのテスト。
(仕様書に基づく単体試験、プログラム間連携チェックの結合試験、システム全体の運用まで考慮した総合試験など)
フリーランスエンジニアのスキルや得意とする技術領域により異なりますが、これらの工程のいずれかに参画されていると思います。
ウォーターフォール開発の工程管理手法
開発の流れを複数の工程に分け、工程が完了する際にそれを示す文書を作成します。これは工程完了報告書等と呼ばれます。フリーランスエンジニアであっても、上流工程等を担当されるSEの方であれば、この工程完了報告に立ち会うことが多いものと思います。
主に以下のような工程の内容について記述します。
・工程の概要
・ステップあたりの試験項目数の密度や設計書の時間あたりのレビューページ数密度
・ステップあたり、または頁あたりのバグ(故障)密度
・目標とする指標(試験密度、故障密度)との対比結果
・定量評価(数値で測れるもの)と定性評価(数値で測れないプロジェクトの諸条件や原因)
・故障の収束状況と品質分析結果
・次工程への申し送り事項、今後の課題
・総評など
このような工程毎の品質分析や評価を行いながら進めることによって、作業の進捗やシステムの品質が管理しやすくなるのです。
ウォーターフォールモデルのメリット
ウォーターフォールモデルによるシステム開発は、以下のようなメリットがあります。フリーランスエンジニアのSEであれば、その多くを経験していると思いますので、非常にイメージしやすいでしょう。
・上流工程でシステムの概要を綿密に定義するため、何を作ればいいのか明確にしやすい。完成イメージをメンバー間で共有しやすい。
・工程が終わるごとに、その成果をドキュメント化し評価するため、開発進捗を管理しやすい。成果を文書化することで誰にとっても課題や改善点などが把握しやすくなる。
・各工程の役割が明確であり、手戻りを抑制し開発が進めやすくなる。
・要件定義から総合試験まで、開発の初期段階でスケジュールを明確化するため、開発完了までの期間を把握しやすい。
ウォーターフォールモデルのデメリット
ウォーターフォールモデルには以下のようなデメリットがあります。
・開発の初期段階で主要な決定を行うため、改善すべき点などが発覚しても、後から仕様変更するのが難しい。または変更に関するコストが高くなる傾向にある。
・開発の後半に検証を行うので、大幅な改善措置を実施するのが難しい。それによって、システムを利用するユーザーの意見を反映しにくくなる。受入試験まで担当されるフリーランスエンジニアの方であれば、多くの方が経験されているかもしれません。
・手戻りが発生した場合に、工程をさかのぼってやり直すことになるため、システムの修繕や改善に手間がかかってしまう。コストも当初想定よりも加算されてします。
まとめ
ウォーターフォールモデルとは、システム開発を要件定義やテストなどの複数の工程に分け、滝が上流から下流に下っていくように順番に工程を処理していく手法です。
システム開発の手法として古くから用いられており、完成イメージを共有しやすいことから、複数のメンバーで行う大規模なシステム開発などに適しています。一方、後から仕様変更するのは難しいなどのデメリットもあります。
フリーエンジニアが案件を受注する際にも、このようなウォーターフォールモデルのメリットとデメリットを把握しつつ、効率の良いシステム開発のために自らの役割に対して何を求められているのかを常に意識していけば、評価にもつながっていくはずです。