ウォーターフォールモデルとは?
ウォーターフォールモデルとは、システム開発における開発手法の一つです。
システム開発の工程は主に上流工程の「要件定義」「設計」と、下流工程の「開発」「テスト」で分類されます。上流から下流に向けて順番に開発をおこなう手法がまるで「滝」のようであることから、ウォーターフォールモデルと呼ばれているのです。
実は1970年に誕生した古典的な手法ではありますが、確実性を担保したい概念から、現在でもウォーターフォールモデルを採用している現場は数多く存在します。
ウォーターフォールモデルの特徴
ウォーターフォールモデルは段階的に開発が進みます。そのため、開発プロセスは「前工程に戻さない」ことが鉄則です。
上流から下流に流す開発モデルは、事前に計画した期間や開発内容に沿って開発作業をおこなうため、工程を飛ばすことはありません。また、詳細設計を終えていない状態でテストをかけることもありませんから、品質を担保した開発が可能です。
ただし、ソフトウェアに仕様変更があれば前工程に戻す、いわゆる「手戻り」と呼ばれる修正はごくまれに発生します。
また、人材不足や技術者の減少対策、品質を求めるユーザーからウォーターフォールモデルを求めるケースは多く、今でも欠かせない開発手法となっているのです。
ウォーターフォールモデル型開発の開発フロー
ウォーターフォールモデルは、上流から下流に流れる「滝」と表現されることから、計画順序をもとに着実に開発フローをたどります。そのため、前工程に戻ることはありません。
ウォーターフォールモデルの主な流れは次の通りです。
- 要件定義
- 設計
- 実装
- テスト
- リリース 運用・保守
初期段階から綿密な計画を立てるため、着地地点まで見通せる利点があります。それでは、各項目について詳しく見ていきましょう。
ステップ1:要件定義
要件定義とは、ユーザーが求める内容と開発者とのすり合わせをおこない、要件定義書を作成する工程です。
主に、「開発期間」「機能の詳細」「導入方法や運用方法」などを整理し、スムーズな開発を実施するために定義書を起こします。ウォーターフォールモデルは、要件定義書がベースとなるため要件定義は非常に重要な段階となります。
ステップ2:設計
要件定義書に則り設計をおこなう工程です。
設計とは主に、ユーザーから見えるインターフェースの設計をおこなう基本設計と、基本設計をもとに内部動作や機能、データベースの設計をおこなう詳細設計へと進みます。
この段階はプログラマーが主体となり設計書をかきおこすことから、ユーザーが見えない詳細設計を「内部設計」と称し、基本設計は「外部設計」と呼ぶこともあるようです。
ステップ3:実装
開発段階となる実装では、設計書をもとにプログラマーやエンジニアがコーディングをおこないます。
ステップ4:テスト
実際にシステムを動かしテストをおこないます。
実際におこなうテストは複数存在し、まずは各機能や性能を個別でチェックする「単体テスト」から開始。その後、単体テストを通過してからは、各機能を連携させる「結合テスト」を実施します。
結合テストが通れば、最後に全体の動きをチェックする「システムテスト」をおこない、テストは完了です。この段階でエラーがでてしまったら、前工程に戻り原因を突き止める必要があります。
これらのテストがすべて完了したら、最後に「受け入れテスト」をおこないます。
受け入れテストとは、実際にシステムを走らせ、要件定義を満たしているかをユーザーが判断と検証をおこなうことです。
ステップ5:リリース 運用・保守
開発工程の最後はリリースと運用・保守です。
一般的にリリースは古いシステムから移行が必要です。その際、システムを停止する時間や、トラブルに気をつけながら移行します。
また、無事にリリースしたとはいえ、システムを適切に稼働させるには運用と保守が不可欠です。必要に応じて改修やアップデートも必要となるでしょう。
ウォーターフォールモデル型開発は何ができるのか?
ウォーターフォールモデルの大きな特徴として「大型案件」と「品質重視」のプロジェクトに適している点があります。
主に上流工程で要件定義や人員確保、スケジュール管理などを作り込みます。そのため、先々を把握できた状態で工程が進むことから、期間がかかる案件や遅延が許されない大型案件に適しているのです。
また、スピードよりも品質を重視した開発に適しています。本モデルの下流工程では、機能テストや結合テストを繰り返しおこなうため、時間はかかりますがその分品質は担保される開発モデルです。
そのほか、事前にプロジェクトの計画が決まっているため、途中で開発者に交代があっても引き継ぎがしやすいため、予定通りに進められる利点もあります。
一方で「早く商品をリリースしたい」「スピード感を持って開発に取り組みたい」といった開発フローには不向きといえるでしょう。
そのため、ウォーターフォールモデルはあくまでも、「期間はかかるが確実な物を確実に開発したい」といった概念で進める開発モデルです。そのため、現在でも大型案件に採用されるケースは数多くあります。
ウォーターフォールモデルのメリット
ここからは、ウォーターフォールモデルのメリットを紹介していきます。具体的にあげられるメリットは次の通りです。
- 進捗管理がしやすい
- 品質を担保できる
- 開発にかかるリソースや予算が明確になる
- 対応できる開発会社が多い
進捗管理がしやすい
ウォーターフォールモデルは、要件定義からすべての工程を見渡せるため、計画を立てやすく工程管理もやりやすくなるでしょう。
また、進捗状況が一目瞭然になるため、どのタスクに時間がかかっているのかがすぐにわかります。すると、人員増強などの対策もすぐに打ち出せるでしょう。
品質を保てる
ウォーターフォールモデルは、各工程のタスクがしっかり完了しなければ次には進みません。
そのため、一定の基準や目標をクリアしなければいけませんから、必然的に品質が担保されるのです。
開発にかかるリソースや予算が明確になる
開発当初でおこなう要件定義は、予算や必要な人員など全体的なスケジュールを綿密に計画します。そのため、無駄なコストがかかることもなく、開発からリリースまでスムーズな開発が可能です。
対応できる開発会社が多い
先述の通り、ウォーターフォールモデルは古典的でシンプルな開発モデルのため、ほとんどの開発会社で対応できます。
希望するソフトウェアを検討している方にとって、開発会社の選択肢が広がるでしょう。
ウォーターフォールモデルのデメリット
堅実で確実なウォーターフォールモデルもデメリットは存在します。具体的なデメリットは次の通りです。
- 開発途中で仕様変更が難しい
- 成果物ができるまで時間がかかる
- 世の中のニーズに適した開発が難しい
- 手戻りで工数が増える可能性も
開発途中で仕様変更が難しい
ウォーターフォールモデルの全体の流れは要件定義で決まります。そのため、開発途中の修正や仕様変更が難しくなります。
成果物ができるまで時間がかかる
開発時間よりクオリティ重視なウォーターフォールモデル。各基準をしっかりクリアする利点はありますが、一方で時間がかかってしまうため、急ぎの案件には不向きといえます。
世の中のニーズに適した開発が難しい
開発からリリースまで時間を要するため、リリースまでに世の中のニーズが変わってしまうことも考えられます。世の中の動向は読めないため、その点リスクとなってしまうでしょう。
手戻りで工数が増える可能性も
要件定義がいくら綿密とはいえ、開発が進むにつれ仕様通りにいかないこともあります。すると、軌道修正のため工数が増えることもあるでしょう。
ウォーターフォールモデルとアジャイルとの違いとは?
ウォーターフォールモデルとは綿密な計画から開発、リリースまでを長期的に段階を踏んで進めていきます。一方正反対となるミスと修正を繰り返し、短期的に開発を進める手法をアジャイルと呼びます。
アジャイルは仕様書の詳細までは決めず、まずは開発を進めて試行錯誤するスタイル。そのため、柔軟な仕様変更が可能です。基本的には1週間から4週間で1つの機能を完成させる手法となります。
アジャイル開発とは何か
アジャイルとはウォーターフォールモデルと反対の開発手法になります。
ウォーターフォールモデルは要件定義がすべてですが、一方でアジャイルは試行錯誤がすべてです。そのため、完成までの期間はアジャイルの方が早いですが、完成度でいえばウォーターフォールモデルの方が優れているでしょう。
また、ウォーターフォールモデルは全体を見渡せる手法であることから、コスト面では安定しています。一方アジャイルは、仕様変更は柔軟に対応できますが、その分予算が追加となる可能性がある開発手法です。
どちらも相反する手法のため、目的とするものに適した方法を選択すると良いでしょう。
アジャイル開発が用いられるケース
アジャイルは、開発やリリースをとにかくはやめたいことが最大のポイントです。そのため、短期間でリリースし、ニーズ分析とブラッシュアップを繰り返す目的に適しているでしょう。
その他のシステム開発の種類
システム開発には、ウォーターフォールモデル以外にも開発方法は存在するため、ここでは代表的なシステム開発をいくつか紹介します。
プロトタイプモデル
プロトタイプモデルは、AI導入を検討する案件に活用される手法です。主に、本格的なシステム開発に入る前に簡単なプロトタイプ(試作品)を作成し、ユーザーから意見を聞きながら開発を進める手法です。
常にユーザーとの開発がメインとなるため、ユーザーと開発者の認識のズレをなくす目的があります。
スパイラルモデル
スパイラルモデルとは複数のシステムを分割し、システムごとに要件定義から設計や開発、テストを繰り返す手法です。
最大のポイントは、分割したシステムが完成次第、ユーザーに確認をしてもらえることです。システム開発と確認を繰り返し、次のステップに移行することで、短い期間でも柔軟な開発が可能となります。
まとめ
ウォーターフォールモデルは、実績があり確実性が高い開発モデルです。
要件定義から設計、開発、テストと流れるように進むため基本的に後戻りもしません。そのため、着実に品質を担保しながら開発する手法としては、一番適しているといえるでしょう。
これらを踏まえて、信頼性が高いシステム開発を求めるのであれば、ウォーターフォールモデルを一度検討してみることをオススメします。