ウォーターフォール開発とは何か。概要を解説

ウォーターフォール開発とは何か。概要を解説

システム開発における有名な手法のひとつである「ウォーターフォール開発」。近年流行の「アジャイル開発」と対比させて語られることも多く、アジャイル開発に取って代わられることも増えています。しかし、ウォーターフォール開発について名前は知っているものの、具体的にどのような開発手法か分からない方も多いはず。

発注者としても開発者としても、もっともポピュラーな開発モデルといわれるウォーターフォール開発について、深く理解しておきたいところ。そこで、今回はウォーターフォール開発について、その概要、特徴、メリット・デメリット、ウォーターフォールが適しているプロジェクトについて解説します。

ウォーターフォール開発とはどのような開発手法なのか

以下ではまず、ウォーターフォール開発の概要について解説していきます。

ウォーターフォール開発の特徴

ウォーターフォール開発とは、ソフトウェア開発におけるプロジェクト開発手法の一種で、開発工程をフェーズごとに分割し、各工程を順に完了させることでソフトウェアを構築する方法です。建築や機械製造などの開発手法を参考にしたもので、各工程が分かれていることからプロジェクトが管理しやすい点が特徴です。

開発チームや案件によっても異なりますが、ウォーターフォールモデルの開発工程は主に「要件定義」「調査」「設計」「プログラム開発」「テスト」「運用・保守」の6ステップに分けられます。

一つの工程が完了すると、ミスがない限りは以前の工程に戻らないという前提で運用されるので、下流から上流に戻ることはないという水の流れに例えて、ウォーターフォールという名がつけられました。この用語は、1970年にウィンストン・W・ロイス博士によって発表された論文で初めて紹介され、現在でもソフトウェア開発の業界で一般的な開発手法のひとつとして使用されています。

ウォーターフォール開発の流れ

次に、具体的なウォーターフォール開発の開発工程を解説していきます。

要件定義

最初に、開発されるシステム・ソフトウェアにおいて求められる要件を定めるフェーズがあります。ここでは、開発するシステムの目的から機能を具体化し、スケジュールを組み、それらを仕様書にまとめる作業をおこないます。

要件定義はウォーターフォール開発における最上流工程であり、認識がずれていると大きな手戻りが発生するリスクが高くなるので、念入りに議論を積み重ねる必要があります。

調査

次の段階では、要件が決まったシステムをどのように実現するかを検討するための調査がおこなわれます。前例や競合などを参照して、主に技術的・財政的側面から実現可能性を検討することが多いです。

設計

次のステージでは、上記で決定された事項と調査結果を元に、技術的な設計要件を具体化して設計仕様書を作成していくことになります。

設計仕様書に記載される主な内容としては、使用するハードウェア・データベース・プログラミング言語、データベースとテーブルの設計、運用方針、セキュリティ方針、外部システムとの連携方法などが挙げられます。

プログラム開発

設計仕様書を元に、実際にプログラムを開発する工程です。まずはチームごとに、システムを機能や画面ごとなどの単位に分けて開発を進めて、その後に各プログラムを統合するというフローになることが多いです。また、開発後にはテスト仕様書を作成します。

テスト

前工程で作成した仕様書を参考にしながら、以下のような観点からテストをおこない、その結果をテスト結果報告書にまとめます。

  • 開発されたプログラムにおいて画面遷移やデータの受け渡しなどを含む各種機能が設計通りの挙動となっているか
  • 処理速度は適正か
  • 他システムとの連携が可能か

テストをパスしたプログラムは、本番環境にリリースされます。

運用・保守

ソフトウェアのリリース後は、運用・保守フェーズに入ります。システムを運用していて不具合があった時にはパッチアップデートを開発し、追加開発の要求が挙がった場合には新バージョンをリリースすることとなります。

ウォーターフォール開発のメリット・デメリット

それでは、ウォーターフォール開発にはどのようなメリット・デメリットがあるのでしょうか。

ウォーターフォール開発により期待されるメリット

計画性が高い

要件定義から設計までの段階で、システムの仕様のほぼすべてが決定されることがウォーターフォール開発の特徴です。そこから各機能にかかる工数を計算することも比較的容易にできるので、リリースまでのスケジュールの見通しが良いものになっています。

プロダクトの安定性が高い

ウォーターフォール開発では、各工程ごとに計画的に開発をして、設計に基づいた動作の確認が取れた時点でプロダクトをリリースします。そのため、品質の担保がしやすく、完成したプロダクトの安定性が高いものとなります。

進捗を把握・管理しやすい

ウォーターフォール開発の各工程では、文書や各機能などの成果物が作成されることになります。これによって進捗状況が明確になるので、案件の管理者にとっては、進捗を把握しやすく、管理をしやすい点がメリットといえるでしょう。

業務内容が明確

現場の開発者にとっては、業務内容が明確になる点がメリットです。設計の段階で、必要となる機能やプロダクトの要件・仕様が明確になっているので、前工程までで作成されたドキュメントを見ながら業務を進めることができます。

ウォーターフォール開発におけるデメリットやリスク

設計の制約が強く、仕様変更に対応しにくい

ウォーターフォール開発では、上流工程である要件定義から設計までの段階でシステムの仕様が決定されます。途中で要件の変更があったとしても、それに対応するためには工程をさかのぼって作業をやり直す必要が出てくるため、その変更に対応することが難しくなっています。

開発プロセスが長期に渡ることがある

仕様変更や設計ミスの修正を反映する場合には、実際に工程をさかのぼって再びその作業をおこないます。その場合、開発プロセスがその分だけ伸びることになります。

これが繰り返されたり、下流工程時点で上流まで戻る必要があるミスが発覚したりすると、開発プロセスが長期化してしまう点がリスクと言えるでしょう。

ドキュメントの量が多くなる

ウォーターフォールモデルでは、作成するドキュメントの作成量が多くなります。上流工程ではシステムのすべての要件を定め、仕様の設計をおこなう必要がありますし、開発・テストの段階では機能説明書やテスト結果報告書を作成しなくてはなりません。

このようなドキュメントを作成するコストと、受け取った側がそれを理解するコストがかかってしまう点がデメリットとなります。

ウォーターフォール開発に適した案件とは

品質重視の大規模案件はウォーターフォール開発がおすすめ

先述したように、ウォーターフォール開発のメリットはプロジェクトの管理のしやすさと、プロダクトの安定性の高さです。一方で、すべての機能が開発された後でなければソフトウェアをリリースすることができないので、システムが稼働するまでに時間がかかる上に、上流工程にミスがあった場合にはその工程まで戻ってやり直す必要があり、修正コストも大きくなりやすいデメリットがあります。

このような特徴からウォーターフォール開発は、ある程度の時間をかけてでも品質を担保したい大規模なシステム開発に向いていると言われます。また、小規模であっても、制作したい要件が明確に決まっているプロダクトには適しています。

仕様の変更が発生しやすい現代のソフトウェア開発にはアジャイル開発がおすすめ

一方で、仕様変更が多くなることが想定される案件には、ウォーターフォール型の開発は向きません。

ソフトウェア開発の現場では、先述したようなウォーターフォール開発の問題点を解決するために、ウォーターフォール型の開発工程のステップを、いくつかの機能別に区切り、重要な機能から作成するということを繰り返して、最終的にソフトウェアの完成を目指す開発手法が考案されるようになりました。これが後のスパイラル型、アジャイル型と呼ばれる開発手法です。

近年では、WebやPC・スマホの普及、インターネットの進化によって、変化とスピードが要求される環境に対応するため、開発サイクルの細分化を大きく推し進めたアジャイルという開発手法が支持されるようになってきました。

より早くユーザーニーズを汲み取り、柔軟性の高いプロダクトを開発したいという場合には、このようなアジャイル型の開発手法を採用するとよいでしょう。

案件に合わせた適切な手法選択を

市場環境の変化から、アジャイル開発に取って代わられることも増えているウォーターフォール開発。

しかしながら、アジャイル開発など他の開発手法でも採用されている「設計→実装→テスト」というソフトウェアの開発サイクルの考え方は、ウォーターフォール開発の手法に依拠しており、その意味ではウォーターフォール開発が最も基礎的な開発手法といえます。案件の性質によっては計画性が高く、確実にプロジェクトを進めることができるウォーターフォール開発が適していることもあるので、発注者・開発者としてどちらにも対応できるように、知識として押さえておきましょう。

記事監修:早坂貴大(メンバーズエッジカンパニー)

採用情報

メンバーズエッジで最高のチームで最高のプロダクトを作りませんか?

最高のプロダクトをつくる 最高のチームで働く

在宅でも、地方でも、首都圏でも。多様な働き方で最高のチームをつくり、お客様のプロダクトパートナーを目指します。アジャイル開発を通じ、開発現場の第一線で活躍し続けたいエンジニアを募集しています。