ウォーターフォールモデルとは?

ウォーターフォールモデルとは、要件定義・設計・開発・テスト・リリース・運用というシステム開発の各工程を順番にこなしていく手法であり、多くの企業で導入されています。ウォーターフォールは日本語で「滝」という意味であり、上から下まで水が流れる滝のように、システム開発を上流工程から下流工程まで順番に行います。
ウォーターフォールモデルには、工程を飛ばさない、各工程が正常に完了していることを確認したうえで先に進める、というルールがあります。例えば、要件定義を済ませた後には要件定義書を作成し、次の設計へと移って良いか顧客や上層部に確認を取る必要があります。
もし設計段階に入ってしまってから問題があると判明した場合、再度要件定義からやり直さないとならず、工数が多くかかってしまいます。こういったことを防ぐため、ウォーターフォールモデルでは各工程を丁寧に行う必要があります。
他の手法と比べたウォーターフォールモデルの特徴

システム開発には、ウォーターフォールモデル以外にもいくつかの開発手法があります。よく使われる手法と比べた際のウォーターフォールモデルの特徴についてまとめました。
アジャイル開発との違い
アジャイル開発とは、要件定義からテストまで短いスパンで何度も繰り返し行う手法であり、Web系企業などで多く導入されています。ウォーターフォールモデルと並んで代表的な開発手法です。アジャイルとは日本語で「素早い」という意味であり、開発を素早く行うことに主軸を置いたやり方と言えます。
アジャイル開発では、要件定義からテストまで1周した後、システムの顧客やユーザーに公開しシステムの改善点を指摘してもらいます。その後、指摘された改善点を盛り込んだうえで要件定義を再度行い、システムの完成度を高めていきます。
アジャイル開発は顧客やユーザーの意見を取り入れやすいのがメリットです。反面、納得するまで要件定義からテストまで繰り返すため、プロジェクトがいつ終了するのか見積もりを立てにくいのが難点と言えるでしょう。アジャイル開発と比べると、ウォーターフォールモデルはこれとは逆のメリット・デメリットを持っています。


スパイラルモデルとの違い
スパイラルモデルは、機能ごとに要件定義、設計、開発、テストを行い、クライアントからの評価を得て改善する、という流れを繰り返す開発手法です。アジャイル開発とよく似ていますが、すべての機能が完成してからリリースする点でアジャイルとは異なります。
機能ごとに確認作業を行うため、ウォーターフォールモデルと同じように高い品質を担保しやすいのがスパイラルモデルです。一方アジャイル開発のような柔軟性も持ち合わせているので、ウォーターフォールにはないメリットもあります。
スパイラルモデルのデメリットとしては、アジャイルと同じようにプロジェクトの全体像が見えにくく工数やコストの見積もりがしにくいことが挙げられ、こちらもウォーターフォールとは異なる点になります。
プロトタイプモデルとの違い
プロトタイプモデルとは、本格的な開発の前にプロトタイプ(試作品)を作り、クライアントなどからのフィードバックを得たうえで実装を進めていく手法です。ウォーターフォールモデルでは要件定義書などによってクライアントの確認を取りますが、実際の成果物を具体的にイメージできるようになるのは開発終盤になることも多いです。
その点、早い段階で試作品を見ることができるプロトタイプモデルでは、開発が進んでからの修正発生リスクを低く抑えられます。認識の相違を防ぎ、手戻りを少なくできる点が、ウォーターフォールとは異なるメリットと言えます。
ただし、ステークホルダーが多数いる大規模開発の場合は、プロトタイプの確認に非常に時間がかかってしまうためこのモデルは不向きであると言われています。ウォーターフォールモデルは大規模開発に向いている手法なので、それぞれ異なるニーズに対応したモデルです。
ウォーターフォールモデルの各工程について

ウォーターフォールモデルは各工程を一つずつ順番にこなしていくのが基本です。ウォーターフォールモデルの各工程で具体的に何の作業を行うのかについて解説します。
要件定義
要件定義とはシステムに欲しい機能を定義し要件定義書にまとめることです。顧客や上層部と打ち合わせを行い、どのようなシステムにしたいのか、最低限必要な機能は何か、競合サービスと差別化を図るために必要な機能は何か、などをヒアリングします。
エンジニアはその機能が実現可能なのか、あるいはもっと良い機能はないのかなどを助言します。何度か打ち合わせを行い、システムの機能を完全に定義します。

設計
続いて、要件定義書を元にシステムの設計を行います。設計は外部設計と内部設計に大きく分かれます。外部設計ではシステムの目に見える部分の設計を行います。例えばWebアプリなら、各Webページにどのような情報を表示させるか、どのようなボタンを追加するか等を決めます。
内部設計では、システムの裏側の設計を行います。例えば、Webページに表示させる情報を作成するためのプログラムやデータベースを設計します。
設計した内容は設計書にまとめます。設計書をどの程度細かく書くかは企業にもよりますが、プログラマーが迷いなくプログラミング作業を行えるように記述するのが基本です。
開発
続いて、設計書を元にプログラマーがプログラミングを行います。アルゴリズムやソースコードの読みやすさも意識しつつ、各プログラムを作成していきます。設計書が問題なく作成されていれば、開発作業自体はすぐ終わることがほとんどです。
テスト
プログラムが一通り完成したらテストフェーズに移ります。最初に1つのプログラムやモジュール単位で正常に動くか確かめる「単体テスト」を行い、次に2つ以上のプログラムが正常に連携やデータ渡しを行えているか確かめ、最後にすべてのプログラムを統合し実際にユーザーが使うことを想定して確認する「結合テスト(統合テスト)」を行います。
バグやユーザーにとって使いにくい点が見つかった場合、すぐに修正を行います。修正したら再度テストを行い、問題が解決しているか、他の箇所に影響を及ぼしていないか確かめます。

受け入れテスト
開発企業内でテストとして問題なければ、次は顧客の環境で受け入れテストを行う必要があります。受け入れテストでは実際のサーバやデータを使って確認しなくてはいけないため、顧客に協力してもらわなくてはいけません。
なお日本では、上記の単体テストと詳細設計、結合テストと基本設計、受入テストと要件定義をそれぞれ対にした「V字モデル」を採用することが多いです。V字モデルでは、上から下に進む開発フェーズから折り返すようにテストフェーズが進んでいきます。
リリース
受け入れテストまで行い問題なければリリースします。事前に作成したリリース手順書に従って、他のシステムやサービスに影響を及ぼさないよう慎重にプログラムを公開します。リリース後は再度テストを行い、問題が見つかればすぐに公開を中断して修正を行います。
運用・保守
システムリリース後は運用・保守を行う必要があります。運用・保守ではシステムが正常に動作するか検証したり、問題のある箇所や問題が起きそうな箇所を修正したりします。基本的に、システム開発を行った企業が運用・保守まで継続して担当する場合が多いです。
以上が、ウォーターフォールモデルの基本的な流れとなります。ウォーターフォールでは要件定義から運用・保守まで順番にこなしていき、途中で順番を替えたり後戻りしたりすることはありません。
ウォーターフォールモデルのメリット

ウォーターフォールモデルでシステム開発をするメリットを解説します。ウォーターフォールモデルは多くの開発企業で導入されていますが、それは次のようなメリットがあるためです。
見積もりを立てやすい
ウォーターフォールモデルでは各工程を順番にこなしていくため、プロジェクト開始前に見積もりを立てやすいです。各工程でどの程度の期間がかかるか想定しやすく、納期に間に合いそうか判断できます。もし納期に間に合いそうにない場合、開発の一部を他企業に外注したり、従業員を増やしたり事前に対策が取れるのもメリットでしょう。
また、開発にかかる予算も算出しやすいため、システム開発を依頼する側からすれば、想定以上に予算がかかってしまう心配が少ないのもメリットです。
手戻りを減らせる
ウォーターフォールモデルは各工程の終了時に問題がないか確認を取るため、手戻りを減らせるメリットもあります。システム開発では、開発途中で設計に無理があったり技術的に不可能な機能があったりすることに気がつき、要件定義からやり直さないといけない場合もあります。
その場合、開発が納期に間に合わなくなったり、開発コストが多くかかることで、顧客満足度を下げることに繋がりかねません。ウォーターフォールでは手戻りを減らせるため、こういったリスクをなくすことが可能です。
作業を分業化しやすい
ウォーターフォールモデルは各工程の見積もりを正確に立てられるため、作業を分業化しやすいのもメリットです。各工程にどの技術が必要かも事前に分かるため、適切に人材を割り当てることができます。
作業の分業化が上手くいかないと、特定の従業員の業務量が増えすぎたり、向いていない仕事を任せてしまう恐れもあります。
ウォーターフォールモデルのデメリット

続いて、ウォーターフォールモデルのデメリットについて解説します。システム開発の種類によってはウォーターフォールモデルでは相性が悪く、アジャイル開発など他の開発手法を取り入れた方が良い場合もあります。
顧客の意見を取り入れにくい
ウォーターフォールモデルはシステムが完成してから顧客に見せるため、顧客の意見を取り入れにくいのがデメリットです。一方、アジャイル開発では、何回も顧客に見せて改善点を指摘してもらえるため、顧客の意見を反映したシステムにしやすく、顧客満足度の向上が期待できます。
ウォーターフォールモデルを導入する場合、要件定義の時点でしっかり顧客の要望をヒアリングし、本当にこの機能で問題ないか確かめる必要があるでしょう。また、顧客がシステムの仕様を正しく理解していない可能性もあるため、システムについてイラストや図を用いてわかりやすく説明することも大切です。
工数がかかる
ウォーターフォールモデルの場合、1つ1つの工程を順番にこなしていくためどうしても工数がかかります。各工程が終了する度に上層部に確認を取る必要があるため、フットワークが軽いとは言えないでしょう。
そのため、開発スピードが要求される分野とウォーターフォールモデルは相性が悪いです。例えばWebアプリ開発は、トレンドに合わせて柔軟にサービスを改良しないといけないため、ウォーターフォールでは開発の遅さがネックになる可能性があります。
ウォーターフォールモデルが適しているケースとは

以上のようにウォーターフォールモデルにはメリット・デメリットがありますが、どのような開発で採用すると良いのでしょうか。ここでは、ウォーターフォールモデルが適しているケースについて解説します。
大規模な開発プロジェクト
プロトタイプモデルの解説でも少し触れましたが、ウォーターフォールモデルは大規模開発に適しています。大規模なプロジェクトは開発期間も長くなるためスケジュール管理が難しく、大規模であるがゆえに少しの変更の発生でも全体のスケジュールに大きく影響してしまうこともあるでしょう。
その点、要件定義を重視するウォーターフォールモデルであれば、プロジェクト初期の段階でシステム完成までの道筋を立てやすいです。しっかりとした要件定義とスケジュールをもとに開発を進めることで、大規模案件でも品質・コスト・納期の管理がしやすくなります。
仕様変更の必要性が低い開発
完成形が明確に定まっていて仕様変更の必要性が低いシステムやソフトウェアの開発も、ウォーターフォールモデルに適しています。具体例としては、ハードウェアと連携させる組み込みソフトウェアの開発、OSの開発、大規模な通信システムの開発などが挙げられます。
例えば組み込みソフトウェアは、前提としてハードウェアがあるため仕様を明確にしてから開発するのが一般的です。また、OSや通信システムは安定的な稼働が何よりも求められるため、リリース時点で完璧な状態に仕上げなければなりません。こうした開発では、ウォーターフォールモデルで品質を高く保つことが推奨されます。
ウォーターフォール開発を行う際のポイント

ウォーターフォール開発を行う際には、いくつか押さえておきたいポイントがあります。これらのポイントに留意することが、開発を成功に導きます。
要件定義やスケジューリングを詳細に行う
要件定義やスケジューリングがあいまいな状態で開発を進めてしまうと、後の工程で遅れが出るなどして納期に間に合わない可能性が出てきます。ウォーターフォール開発は見積もりを立てやすいのがメリットですが、そのメリットを発揮するにはこのステップが重要です。
クライアントの要望や必要な機能は要件として細かくかつ明確に定義し、また全体のスケジュールと各工程のスケジュールを的確に算出することで、開発の遅れやトラブルを防ぎましょう。
各工程でドキュメントを作成する
ウォーターフォール開発では、各工程を別の担当者が担当するのが一般的です。しかし、各工程はそれぞれが密接に関連しているため、連携を取れるような体制にしておくことは欠かせません。
そのために必要となるのが、仕様などについて示したドキュメントの作成です。文書化することによって、工程をまたいでも確認がしやすくなり、エラーなどを回避することができます。特に特殊な仕様や注意点については必ずドキュメントに残しておきましょう。
また、チームメンバーと積極的にコミュニケーションを取り、問題が発生した時にすぐに把握・対応できるようにしておくことも重要です。
ウォーターフォールモデルの今後について

「ウォーターフォールモデルは古い」という意見もあります。確かに昨今はIT技術の進化により、ユーザーの意見をよりシステムに取り入れやすくなったため、アジャイル開発などを採用する企業も増えています。例えばゲーム開発分野でも、最近のスマホゲームはリリース後にSNSでの評判も取り入れて改良を重ねていくことが多いです。
とはいえ、ウォーターフォールモデルが必要ないものになる可能性は低いでしょう。長年使われ続けてきた手法ですし、確実性の高いプロジェクトに対して有効なことは変わりません。エンジニアの方は、ウォーターフォールでも他の開発手法でも対応できる柔軟さを持つことが肝心と言えるでしょう。
ウォーターフォールモデルはシステム開発の代表的手法

本記事ではウォーターフォールモデルとは何かについて解説しました。ウォーターフォールモデルの各工程やメリット・デメリットなどがお分かりいただけたかと思います。
ウォーターフォールモデルはシステム開発の代表的手法であり、多くの企業で導入されています。Webアプリやスマホアプリなど仕様変更が多発する開発には向いていませんが、その他の大規模開発には適した方法と言えるでしょう。本記事がウォーターフォールモデルについて知見を深めたい方にとって有意義なものとなれば幸いです。


編集部オススメコンテンツ
アンドエンジニアへの取材依頼、情報提供などはこちらから