Facebook x

ジャンル

開発技法・工程 2024.04.16
x hatenabookmark

ウォーターフォール開発とは?アジャイル開発との違いやメリット・デメリット

監修: 江添 智之

バルテス・ホールディングス株式会社 R&C部 副部長

ウォーターフォール開発とは?アジャイル開発との違いやメリット・デメリット

ウォーターフォール開発は、ソフトウェア開発の各プロセスにおいて、あらかじめ決めた順番に従い着実に各工程の開発を進めていく開発手法です。1970年代に誕生してから現在まで、特に日本においては幅広く利用されています。

しかし、近年では「現在の開発スピード感のもとではあまり使えない」「時代遅れ」といったややネガティブなイメージを持たれることも多く、モバイルファーストの流れによってアジャイル開発が一般的になりつつあります。

そこで今回は、ウォーターフォール開発のメリット・デメリットを改めて解説し、アジャイル開発との違いについてご紹介します。

また、ウォーターフォール開発とアジャイル開発を組み合わせた「ハイブリッド開発」についても解説しています。

もくじ
  1. ソフトウェア開発におけるウォーターフォール開発の進め方
    1. ウォーターフォール開発とは?
    2. ウォーターフォール開発の工程
  2. ウォーターフォールモデルと関係が深い「V字モデル」
  3. ウォーターフォール開発とアジャイル開発の違い
  4. ウォーターフォール開発の3つのメリット
    1. 大規模システム開発の人的リソース・工程管理に対応できる
    2. 機能・予算・納期が明確になり、プロジェクトを安定的に進められる
    3. 高品質を保ちやすく、多くの開発ベンダーが対応できる
  5. ウォーターフォール開発の2つのデメリット
    1. 手戻りが発生すると工数が増える
    2. 開発途中で要件や仕様を変更しにくい
  6. いま、注目の「ハイブリッド開発」とは
  7. まとめ

1.ソフトウェア開発におけるウォーターフォール開発の進め方

ソフトウェア開発におけるウォーターフォール開発について、概要や開発の流れを解説していきます。

1-1 ウォーターフォール開発とは?

ウォーターフォール開発とは、ソフトウェア開発の各プロセスにおいて、流れる川にある滝の水が上流から下流へ流れ落ちるように、あらかじめ決めた順番に従い着実に各工程の開発を進めていく手法です。ウォーターフォール型開発モデルとも呼ばれます。

ウォーターフォール開発では1つの工程が完了してから次の工程を開始します。具体的には、まずソフトウェアの要件定義を行い、完了後に基本設計を行います。その後も同様に基本設計が完了してから詳細設計を行い、コーディング(実装)、テストと進めていきます。

1-2 ウォーターフォール開発の工程

ウォーターフォール開発は、①要件定義⇒②設計⇒③実装⇒④テスト⇒⑤リリース~保守・運用という基本的な流れで進められます。

一般的に、要件定義から実装までの工程を「上流工程」と呼び、その後の工程を「下流工程」と呼びます。

また、ウォーターフォール開発では、開発を確実に進めるために各工程で中間成果物をレビューして確認する点が大きな特徴になります。以下、システム開発を例に各工程について見ていきましょう(図1)。

スクリーンショット 2022-11-15 101022.png

図1 ウォーターフォールモデル

①要件定義

どのような開発でも、要件定義が当然ながら必要です。発注側で求める要件を開発側とすり合わせ、「開発目的」「開発期間」「機能」「導入・運用方法」などを整理して要件定義書としてまとめます。

ここでスムーズな開発を行うために、要件定義書をしっかり作ることがポイントになります。

なお、類似のものとして提案依頼書「RFP」(Request for Proposal)がありますが、これは発注側の企業がSIerやベンダーに対し、実現したいことや解決すべき課題を明らかにして、必要な要件を示すものです。要件定義はシステム設計の基本となるもので、基本的にはRFPよりも詳細な内容が記載されます。

②設計(基本設計、詳細設計)

次に、要件定義書に基づいて設計に着手します。

ここでいう「設計」は、コーディングする際にプログラマーが参考にする「基本設計」と、動作・機能・データベースなどに対する「詳細設計」に分ける考え方に基づいて作成します。

インターフェイスを決める基本設計を行ったのち、これをベースにプログラマーが詳細設計書を作成します。

③開発(実装)

いよいよ、ここからが実装、すなわち開発段階に入ります。詳細設計書を確認しながら、プログラマーが実際にコーディングします。

④テスト(単体テスト、結合テスト、システムテスト)

ここでは出来上がったアプリケーションのテストを実施します。テストにはいくつかの種類があります。

たとえば、実装した各機能と性能を確認する「単体テスト」や、単体テストでパスした機能を連携(結合)させて上手く動くかどうかを確認する「結合テスト」、さらに全体の機能を連結させた「システムテスト」を行います。もしここでエラーが出たら、また前行程に戻って原因を追及し解決する必要があります。

以上のテストをすべて通ったら「受け入れテスト」を実施します。

ここでは本番環境で実際にプログラムを走らせ、エラーがないかをチェックします。当初の要件定義の内容が満たされているのかを、ユーザー目線で検証していきます。

⑤リリース~保守・運用

システム開発の場合、完成品をリリースする際に新規案件でなければ、以前より稼働しているシステムからの移行となります。仕様の変更で何らかのトラブルが起きても、影響の出ない時間内に確実に移行していく必要があるからです。

もちろんリリース後の運用と保守も大切です。必要に応じてトラブルシュートや改修、アップデートをしていくことになります。

2.ウォーターフォール開発と関係が深い「V字モデル」

ウォーターフォール開発を理解する場合、「V字モデル」との関わりを知っておくと役立つでしょう。

V字モデルとは、上流の各開発工程に対応させテスト工程を分割したものです。

スクリーンショット 2022-11-15 102404.png

図2 V字モデル

上図のように、V字の左側が開発工程(ソフトウェアを作る工程)、右側がテスト工程(ソフトウェアをテストする工程)になります。

基本的に開発の流れはウォーターフォール型開発モデルと同じですが、V字モデルの特徴は図のように開発工程とテスト工程の各作業が破線で結んだようにリンクさせていることです。

工程ごとにテストを行う場合に、検証作業を効率よく実施できます。そのため品質を高める手法としてV字モデルが広く採用されています。

なお、V字モデルをさらに発展させたW字モデルもあります。これはV字モデルの流れに加えて、開発工程とテスト工程を同時に行うための手法です。開発工程の結果をテスト工程で検証するだけでなく、開発工程の中でも、それぞれ検証を行います。

3.ウォーターフォール開発とアジャイル開発の違い

ウォーターフォール開発が昔から開発手法として用いられている中、近年、ソフトウェア開発のアプローチとしてアジャイルが主流になりつつあります。

では、ウォーターフォール開発と手法が異なるアジャイル開発について、あらためて具体的にどのような点で違いがあるのか見てみましょう。

ウォーターフォール開発 アジャイル開発
手法の概要 上流工程から下流工程へという流れでシステム開発を行う手法 大まかな計画を細分化して要件定義・設計・実装・テストを何度も繰り返す開発手法
メリット
  • きめ細やかな要件定義を行うことで、大規模システム開発の人的リソースや工程管理に対応できる
  • 機能・予算・納期が明確になるため、プロジェクトを安定的に進められる。
  • 高品質を保ちやすく、多くの開発ベンダーが対応できる
  • 開発とリリースのサイクルを早めることができる
  • 開発中に使用の変更や追加が予想されるようなプロジェクトに向いている
  • 変更に臨機応変に対応できる
デメリット 
  • 手戻り発生により工数が増える
  • 開発中途でクライアントからの要望を取り入れにくい
  • 要件や仕様の変更にも対応しにくい
  • 開発期間全体の厳密なスケジュール管理が難しい

アジャイル開発は、ソフトウェアの開発とリリースのサイクルを早めたいというニーズに応える開発手法です。

開発中に仕様の変更が発生、あるいは追加が予想されるようなプロジェクトに向いているといわれています。アジャイル(Agile)には「素早い」「機敏」「頭の回転が速い」といった意味があります。

最初に要件をきっちりと定義し、計画に従って開発・実装していくウォーターフォール開発に対し、アジャイル開発は、あまり厳密な要件を定義せず、機能と仕様を大雑把に決めていくアプローチです。変更に臨機応変に対応できるのが大きなメリットといます。

アジャイルでは、スプリント(sprint)、イテレーション(iteration)という小さな単位で「計画」→「設計」→「実装」→「テスト」の反復サイクルを繰り返します。

スプリント・イテレーションの期間は約1週間から2週間ほどで、短期間に機能をリリースして、ユーザーの反応を見ながら、また改善して品質を高めます。

小さなサイクルで動くため、修正や仕様の変更にも柔軟に対応できる半面、開発期間全体の厳密なスケジュール管理が難しいというデメリットもあります。

4.ウォーターフォール開発の3つのメリット

冒頭でも触れたようにウォーターフォール開発は、少々古臭いと思われるかもしれませんが、まだメリットを十分に発揮できる開発アプローチといわれています。

この章では3つのメリットをご紹介します。

4-1 大規模システム開発の人的リソース・工程管理に対応できる

ウォーターフォールモデルは、仕様を途中で変更しないように、最初の段階で綿密に要件定義を行います。

要件定義に従ってプロジェクトを進められれば、スケジュールのズレも生じにくくなり、人的リソースや工程の管理がしやすくなります。そのため大規模な開発プロジェクトに向いているといるでしょう。

4-2 機能・予算・納期が明確になり、プロジェクトを安定的に進められる

同様の理由で、要件定義をしっかり行うことになるため、あらかじめ開発に何が必要で、何が求められるのかが分かり、開発スケジュールや内容も明確になります。

もし開発者の交代があった場合でも引き継ぎがスムーズに行えます。そのためプロジェクトをストップせずに安定的に進めていくことが可能です。

4-3 高品質を保ちやすく、多くの開発ベンダーが対応できる

ウォーターフォールモデルは、各工程の進捗に応じて目標や基準が明確に設定されています。

そのため設計段階で設定された高い品質を保ちやすいというメリットもあります。また古くから使われている標準的な手法なので、多くの開発ベンダーが対応できます。

5.ウォーターフォール開発の2つのデメリット

ここまでウォーターフォール開発のメリットを見てきました。ではなぜ敬遠されてしまうのでしょうか。

ウォーターフォール開発のデメリット・弱点を解説していきます。

5-1 手戻りが発生すると工数が増える

ウォーターフォールモデルのメリットとして最初の段階で要件定義を綿密に行うと書きました。しかし、これは諸刃の剣にもなります。

どんなに綿密に要件を定義しても、設計時に何らかの「抜け」が発生しないとは保証はできないからです。

もし「抜け」があってそれに対応するために仕様を変更すると、その部分に手戻りが発生することで全体の計画が狂い、逆に必要な工数が増えてしまうリスクもあります。

5-2 開発途中で要件や仕様を変更しにくい

ウォーターフォールモデルは上流工程から下流工程に向けて確実に進めていくように計画されているため、開発途中でクライアントからの変更や追加の要望に応えることが難しいです。

実際の成果物と、最終的にユーザーが求めているイメージが異なってしまう可能性もあります。

これらのリスクを避けるためには、やはり最初の要件定義の段階でユーザーと十分に検討し、互いに認識を一致させたうえで、要件漏れがないように細心の注意をはらう必要があります。

ウォーターフォールモデルは、とにかく要件定義が「命」といえるでしょう。

6.いま、注目の「ハイブリッド開発」とは

ウォーターフォール開発もアジャイル開発も一長一短があるため、最近では両者の良いところ取りをした「ハイブリッド開発」も注目を集めるようになりました。

ハイブリッド開発では、ウォーターフォール開発の「プロジェクトの計画をしっかり立てること」と、

アジャイル開発の「細かい単位で開発期間を区切り、レビューを行いながらユーザーニーズも取り込む」ことを行います。

これにより後工程での認識の齟齬を削減することができます。その一方で、結合テストやシステムテスト以降の検証工程は、ウォーターフォール開発に準じることで、品質を担保します。

ウォーターフォール開発とアジャイル開発、それぞれの良い点を取り入れたハイブリッド開発も開発手法の一つになっています。

まとめ

ウォーターフォール開発とは、水が上流から下流へ流れ落ちるように、あらかじめ決めた順番に従い着実に各工程の開発を進めていく手法です。

①要件定義⇒②設計⇒③実装⇒④テスト⇒⑤リリース~保守・運用 という基本的な流れで進められます。

どちらかというと旧世代の開発手法というイメージがありますが、開発プロジェクトの規模や内容によっては採用するメリットがあります。

例えば、ウォーターフォール開発はプロダクト開始後の変更が少なく、品質を担保しやすいことから、変化の少ない開発プロジェクトの場合には有効です。

現在は、ソフトウェアの目的も用途も多様化しています。そのため、開発案件によって、アジャイル開発の手法を選んだり、あるいはハイブリッド型で開発したり、どれが最適なアプローチなのかを決定することが求められます。

開発技法・工程
x hatenabookmark

監修: 江添 智之

バルテス・ホールディングス株式会社 R&C部 副部長

WEB系、エンタープライズ系、医療系など様々な開発業務にプログラマ、システムエンジニア、プロジェクトリーダーとして携わった後、バルテスにてテストエンジニア・コンサルタント業務に従事。現職では主にテスト業務に関する研究開発および人材育成を担当。Scrum Alliance認定スクラムマスター、ディープラーニング検定(G資格)、ネットワークスペシャリスト、データベーススペシャリスト、JSTQB Advanced Level(テストマネージャ、テストアナリスト)など、ソフトウェアの開発およびテストに関する資格を多数取得。JaSST Kansai 実行委員。現在の関心は機械学習のテスト分野への応用と効率的なテスト自動化。