企業やさまざまなサービスにおいて、ITシステムやソフトウェアの導入はとても身近なものになってきています。システムの開発には、いくつかの開発手法がありプロジェクトに最適な開発手法を選択する必要があります。
その中の1つにウォーターフォール型開発があり、最も認知度が高いと言われています。今回は、ウォーターフォール型開発の概要やメリット・デメリット、活用例やウォーターフォール型開発以外の開発手法について解説します。
目次
1.ウォーターフォール型開発とは?
ウォーターフォール型開発とは、システムやソフトウェア開発で用いられる開発手法の1つです。要件定義をはじめとした上流工程から下流工程まで順に開発を進めていく手法です。ウォーターフォールモデルと呼ばれることもありますが、同じ意味です。
ウォーターフォール型の開発手法が誕生したのは1970年ごろで認知度が高く、現在でも多くの企業で採用されています。後から誕生した開発手法にはアジャイル開発やプロトタイピング開発がありますが、現在でも品質を重視したシステム開発や、大規模なプロジェクトなどで採用されています。
基本的には、前の工程に戻ることはなく開発が進められていくのが前提です。工程ごとに開発担当者やその関係者が成果物を確認し、双方で認識を合わせながら工程を完了させていきます。
ウォーターフォール型開発を含む開発手法には、アジャイル開発やV字モデルなどの用語をよく耳にします。それぞれウォーターフォール型開発との違いを解説します。
ウォーターフォール型開発とアジャイル型開発の違い
特徴・開発規模・開発期間・仕様変更・向いているケースという観点を用いて、ウォーターフォール型開発とアジャイル型開発の違いについて解説します。
ウォーターフォール型 | アジャイル型 | |
---|---|---|
開発の進め方 | 上流工程から下流工程まで手戻りなく順に進める | 機能単位ごとに小さなサイクルを繰り返す |
開発規模 | 大規模 | 小〜中規模 |
開発期間 | 長め | 短め |
仕様変更 | 仕様変更に対応しづらい | 仕様変更に柔軟に対応可能 |
向いているケース | ・要件が明確 ・仕様変更の可能性が少ない ・開発工数が多く多数のエンジニアが必要な大規模開発 | ・要件が明確に決まっていない ・市場動向やユーザーの反応によって仕様変更が生じる可能性が高い ・短期間でシステムをローンチしたい場合 |
大きな違いは開発の進め方にあります。ウォーターフォール型開発では前述したように上流工程から下流工程まで手戻りがない前提で、開発が進められます。
一方でアジャイル開発では機能単位で素早く開発を繰り返していく手法です。
ウォーターフォール型開発では要件が明確に決まっており、変更が起きづらいシステムの開発に最適で、アジャイル型開発では要件が明確に決まっておらず市場動向やユーザーの反応によって変更が起きやすいシステム開発に適しています。
システム開発において、何をシステム化するのかの全体像を決め、全体を設計してから開発するウォーターフォール型開発が主流でした。しかし、近年では時代の流れに合わせて仕様変更に柔軟に対応できる開発が求められるようになり、アジャイル型開発の普及が進むようになりました。そのため、ウォーターフォール型開発は時代遅れだという意見もよく出てきていますが、それぞれ向き不向きがあるためどちらかが劣っているというようなことはありません。
ウォーターフォール型開発とV字モデル開発の違い
V字モデルとは、ウォーターフォール型開発の表現形式をV字に変更したものです。そのため、それぞれは別物ではなくウォーターフォール型を発展させた形と捉えるのがいいでしょう。
V字モデルは、開発工程とテスト工程を詳細レベルに応じて対に並べ、各工程の対応関係を明確にしているモデルです。各工程の対応関係は下記の通りです。
要件定義⇄システム/受け入れテスト
基本設計⇄結合テスト
詳細設計⇄コンポーネントテスト(単体テスト・ユニットテスト)
実装
開発工程である要件定義とテスト工程である受け入れテストまでがV字に並び、開発の方向性や作業工程を資格的にわかりやすくするために活用されたのがV字モデルです。ウォーターフォール型開発をもとにした開発工程とその工程に合わせたテスト工程を結びつけることで、ウォーターフォール型開発よりも検証の制度と効率性の向上を可能にします。
V字モデルを活用するメリットは下記の通りです。
テスト内容を明確にできる
作業進捗がわかりやすい
手戻りのリスクを軽減
V字モデルでは、開発工程に対応したテスト工程が決められており実施するテストの内容が明確になります。要件定義の内容を確認するためのテストはシステムテスト、基本設計の内容を確認するためのテストは結合テスト、詳細設計の内容を確認するためのテストはコンポーネントテストでそれぞれをテストします。
このように、テスト内容が明確にできるため開発工程で実施した内容をもれなく検証でき、品質向上に繋がります。また、テスト内容が明確になることで、最終的なゴールも明確になります。そのため、スケジュールも見積もりやすくテストの結果で判明する不具合や修正工数をチェックすることで、高精度の作業進捗状況を把握可能です。
V字モデルでは、機能レベルからテストを実施し、確実に不具合を検出し修正したうえで次の工程に進むため手戻りのリスクを軽減可能です。
2.ウォーターフォール型開発の基本となる9つの工程
ウォーターフォール型開発は、上流工程から下流工程まで順に進める開発手法です。一連の流れには下記の9つの工程があります。
工程 | 内容 |
---|---|
要件定義 | システム化する機能や条件を明確にする。 |
基本設計 | ユーザー目線からソフトウェアの仕様を設計。外部設計とも呼ばれる。 |
詳細設計 | 実装の観点からコード化するための設計。内部設計とも呼ばれる。 |
実装 | 基本設計と詳細設計に基づいて、プログラムを作成・実装する。 |
単体テスト | 実装したプログラムが正常に機能するかをテストする。 |
結合テスト | 複数のプログラムとモジュールを組み合わせて正常に機能するかテストする。 |
システムテスト | 全てのシステムの構築が完了し、実際の運用を想定した環境で実施するテスト。運用テストや総合テストとも呼ばれる。 |
リリース | テストが完了したシステムをリリースする。 |
運用・保守 | リリースされたシステムの稼働が停止しないように監視する。また、不具合が発生した際に修正対応する。 |
これらの工程を上から順に進めていくのがウォーターフォール型開発です。大まかな手順としては、システムに搭載する機能や細かな仕様を全て決定してから開発をスタートさせます。スタートした後は1つひとつの工程を完了させながら進める流れです。前提として前の工程に戻ることはありません。これはウォーターフォール型開発の特徴です。各工程について解説します。
要件定義
ソフトウェアを使用して何をしたいのか、どのような機能をシステムに搭載するのかなどを実現するための機能やスペック、その他の条件などを検討し明確にします。明確になった要件は要件定義書という成果物として発注者と開発者で共有します。
基本設計
要件定義書に基づいてユーザー目線からのソフトウェア使用を設計します。要件定義をクリアするためにどのようなシステム構成が必要かを検討する工程です。具体的にはシステムアーキテクチャ・ユーザーインターフェース・データ入出力方法などが含まれます。
詳細設計
実装の観点からコード化するための設計を行います。基本設計で決定したシステム構成を実現させるために具体的な実装方法を設計します。プログラムの最小単位であるモジュールに分割し、構造化設計を行います。
実装
詳細設計に基づいて、プログラムを記述します。プログラマーやシステムエンジニアによってコーディングしていきます。大規模なプロジェクトの場合は大人数で作業を分担します。
単体テスト
モジュール単位で、要件定義の内容を満たしているかを確認するテスト工程です。モジュールごとにテストケースを準備し、正常に動作することを確認します。
結合テスト
複数のプログラムとモジュールを組み合わせた動作の確認をする工程です。単体テストをクリアしたモジュール同士でも組み合わせると不具合が見つかることがあるため、さまざまなパターンの結合テストを繰り返す必要があります。
システムテスト
全てのシステムの構築が完了し、実際の運用を想定した環境で実施するテストです。リリースした後に不具合が発生しないように観点を用いて検証します。
リリース
全ての工程を終えたシステムを正式に公開することをリリースと呼びます。実際にユーザーに提供される瞬間です。
運用・保守
リリースしたシステムの稼働が停止しないように監視することを運用と呼びます。また、不具合が発生した際に修正対応することを保守と呼びます。システムの安定した稼働や更なる改善を目指して、システムが提供終了されるまで運用・保守を継続的に行います。
関連記事
基本設計と詳細設計の違いは?進め方や注意点などシステム開発の工程別に解説!
要件定義と要求定義の違いは?進め方と注意するべきポイントなどを徹底解説!
3.ウォーターフォール型開発のメリット
ウォーターフォール型開発を採用するかどうか判断するために、メリットを理解しておくことは重要です。ここではウォーターフォール型開発のメリットについて解説します。
プロジェクト全体の計画が立てやすい
上流工程である要件定義から確実に工程をクリアして進めていく手法であるため、プロジェクト全体のスケジュールを把握できます。開発する内容やスケジュールを決定してからプロジェクトを進行するため、計画を実行しやすいでしょう。
一定の品質を担保できる
ウォーターフォール型開発では何を作りたいのかを明確にした上で、各工程で必要なタスクが決められているため、一定の品質を担保できます。そして基本的には仕様変更が起きないまたは、前の工程に戻らないことが前提とされていることも、品質を担保できる理由の1つです。仕様に沿ったものが予定通りに開発される分、クライアントに安心感を与えやすいのもメリットです。
進捗管理が比較的容易にできる
要件定義の段階で、各工程で必要なタスクを洗い出した上で進められるため、進捗がわかりやすいのがメリットです。全体を通して進捗が管理しやすく、無理なくタスクを担当者に割り振ることができます。また、開発当初から作業量が明確であるため、必要な人員だけを確保できるので、コスト面においても無駄がありません。
4.ウォーターフォール型開発のデメリット
メリットと同様デメリットも理解しておきましょう。ここではウォーターフォール型開発のメリットについて解説します。
開発途中の仕様変更に対応しにくい
上流工程から順に開発を進めていくため、開発途中の仕様変更に対応しにくいデメリットがあります。ウォーターフォール型開発では要件定義が命と言われることもあり、開発途中の仕様変更は発生しない前提で計画を立てます。
そのため、仕様変更が発生すると本来の工程に逆らって同じ工程を再度実施する必要があります。その結果工程やタスクが複雑化し、全体スケジュールが後ろ倒しになる可能性もあります。このような事態を防ぐためには、要件定義の段階でクライアントとのコミュニケーションを綿密に行い、認識を合わせる必要があるでしょう。
開発期間が長期化しやすい
要件定義に時間をかけて開発を開始するため、プロジェクトの開発期間が長期化しやすいデメリットがあります。スタートアップのビジネスで使用するシステムやソフトウェアなど、開発にスピード感が求められる開発には向いていません。
一定の品質と安定性を引き換えに、開発にかかる時間が犠牲になりやすい開発手法です。
手戻りが発生した場合に工数が増大する
ウォーターフォール型開発では、手戻りが発生しないことを前提に進めることが特徴である開発手法です。しかし、仕様変更が発生する可能性や、手戻りが発生する可能性はゼロではありません。
もし、トラブルやシステム修正が発生すると工数が大幅に増大します。実装の工程に入った段階で機能追加やデータ入出力先の変更などの要望があると、またスタートに戻り設計する必要があります。すでに終わった工程を再び実行するため、追加の工数が発生します。
工数が増えると、企画段階よりも開発コストが膨らんでしまいます。ビジネスにおいてコストは利益に影響する重要な要素であるため、要件定義の段階で修正やトラブルのリスクは可能な限り取り除いておく必要があります。
5.ウォーターフォール型開発が時代遅れといわれる理由
一定の品質が担保できることや進捗管理がしやすいメリットをもつウォーターフォール型開発ですが、スピード感のあるアジャイル開発が普及して以降ウォーターフォール型開発は「時代遅れ」と言われるようになりました。
上流工程から順に進めていくウォーターフォール型開発ですが、スピード感が求められる開発や臨機応変に対応する必要がある開発には向いていません。しかし近年では、スマートフォンの普及やIT技術の進化に伴うユーザーニーズの多様化が進んでおり、顧客の期待がより速いサービス提供や頻繁な機能更新にシフトしています。
また、グローバル競争が激化しているため、製品やサービスの市場投入までのスピードが重要視されるようになっています。
上記のような市場動向によって臨機応変な対応が求められるケースや、クライアントも参加して開発を進めながら仕様を決定できるアジャイル開発を採用するケースが増えてきています。
2023年のDX白書によると、日本国内でのアジャイル開発の普及率は22.9%です。2021年のDX白書では19.3%であったため2年の間で3.6%上昇しています。なお、2023年のアジャイル開発の普及率のおいて「活用を検討している」企業も含めると41.5%になるため、これからも増加することが考えられます。
このようなことから、ウォーターフォール型開発は時代遅れという意見もあります。しかし、どちらも向いているケースと向いていないケースがあるため、時代遅れであるということはありません。ここでは、ウォーターフォール型開発が向いているケースと向いていないケースについて解説します。
ウォーターフォール型が向いているケース
金融システムやERPシステム導入のプロジェクトのように、開発期間が比較的長いかつ、高い品質が求められる大規模なシステム開発に向いています。
ウォーターフォール型開発を採用したからといって、一切不具合のない開発が可能というわけではありませんが、一定の品質は担保できるというメリットがあります。各工程において定めた基準をクリアしてから次の工程に進むため、アジャイル開発よりも高い品質を担保しやすい開発手法です。
ウォーターフォール型が不向きなケース
ターゲットとするニーズや市場の変化が多い開発や、スタートアップのビジネスでスピード感が求められる場合はウォーターフォール型開発には不向きです。
このようなプロジェクトは、開発工程の途中で変更が多く発生する可能性があるからです。このような開発をする場合には、ウォーターフォール型開発ではなく柔軟性が高く臨機応変に対応できるアジャイル開発の方が向いているでしょう。
6.ウォーターフォール型開発の活用例
ウォーターフォール型開発に向いているケースを把握した上で、ウォーターフォール型開発の活用例について紹介します。基本的には、仕様変更を前提としていないシステムやソフトウェア開発に適しています。
大規模なソフトウェア開発
大規模なソフトウェア開発では、スケジュール管理や進捗管理がしやすいというメリットをもつウォーターフォール型開発が採用されます。大規模なソフトウェア開発の例は以下です。
家電や自動車の組み込みソフトウェア
OS開発
携帯キャリアの通信システム
金融システム
手戻りしないで進行することから、大人数や長期間といった大きな資源を投下を伴う開発に向いています。
ERPシステム導入
ERPとは企業資源計画という意味をもち、統合基幹業務システムや基幹システムと呼ばれます。ERPシステムやERPパッケージのような呼び方をされることもあります。ERPは企業の会計・人事・生産・物流・販売などの基幹となる業務を統合して、効率化や情報の一元化を図るためのシステムとして誕生しました。
このERPシステムを導入する際は、会社全てのプロジェクトや部署に関わってくるため、入念な準備が必要です。そのため、アジャイル開発ではなくウォーターフォール型開発を採用するケースが多いでしょう。
7.ウォーターフォール型以外の開発手法
プロジェクトに最適な開発手法を選択するためには、ウォーターフォール型開発の特徴だけでなく、その他の開発手法の特徴を理解しておく必要があります。ウォーターフォール型開発以外の開発手法には下記のようなものがあります。
アジャイル型開発
プロトタイピング型開発
スパイラル型開発
DevOps
MVCモデル
それぞれの開発手法の特徴について解説します。
アジャイル型開発
アジャイル型開発は素早いシステム開発を可能とした開発手法です。計画→設計→実装→テストの工程を反復して進めます。この開発工程を小さくする分、リリースまでの期間を短くできるのが特徴です。クライアントも参加して開発するシステムの動作を確認しながら進めたい場合や、仕様変更を前提としたゲームアプリやWebサービスの開発に適しています。
プロトタイピング型開発
開発の早い段階でプロトタイプを完成させ、システムの依頼者チェックのもと、仕様やプログラムを肉付けしながら進めていく開発手法です。依頼者の中には、実現させたいシステムはあっても具体的な機能やイメージが思い付かない場合があります。そのような場合に役立つのが、プロトタイピング型開発です。依頼者とのコミュニケーションを深め、不具合を早期発見できることがメリットです。
スパイラル型開発
アジャイル型開発と同様に開発作業を反復してシステムの品質を向上させていく開発手法です。アジャイル型開発と比べて、スパイラル型では、品質がまだ保証されていない段階で依頼者へシステムを公開するという点に違いがあります。臨機応変に対応できるメリットを保ちながら、品質重視のプロジェクトにも対応しやすいためウォーターフォール型開発とアジャイル型開発のよさを取り入れた開発手法です。
DevOps
開発チーム(Development)と運用チーム(Operations)を組み合わせた造語がDevOpsです。それぞれのチームが連携することによって品質向上と無駄な工数削減など、システム開発と運用を効率よく進められる開発手法です。小さなサイクルでシステムをリリースしたのち、ユーザーの声を反映させながら工程を繰り返す流れで進めます。
MVCモデル
MVCとは、Model・View・Controllerの頭文字からとった用語で、プログラムをわかりやすく整理するために用いる手法です。
それぞれには下記のような役割があります。
Model:システム処理
View:画面への表示
Controller:指令や指示
それぞれの部位で別々に開発を進めるのが特徴です。
関連記事
システム要件定義とは?サンプル付きで成果物作成までの流れやポイントを解説
8.まとめ
今回は、システム開発を担当する新任のプロジェクトマネージャーや開発手法を検討している企業のIT部門担当者、ソフトウェア開発の基本を学びたいプログラミング初学者に向けてウォーターフォール型開発について解説しました。
ウォーターフォール型開発は上流工程から下流工程までを順に開発を進めていく手法で、システム開発において最も認知度が高いと言われています。アジャイル型開発の誕生によって時代遅れと言われることもありますが、それぞれによさがあり向き不向きがあるため、ウォーターフォール型開発もまだまだ現役です。
ウォーターフォール型開発のメリット・デメリットやウォーターフォール型開発以外の開発手法の特徴を踏まえて、最適な開発手法を選択しましょう。
本記事が皆様にとって少しでもお役に立てますと幸いです。