ウォーターフォールとアジャイルの違い:進め方・計画・変更への対応・テスト・向いている開発を比較

ウォーターフォールモデルは、要件定義、設計、プログラミング、テストの工程を上流から順に進め、原則として前の工程の成果物を確定させてから次の工程に進む開発モデルです。最初に全体の計画を立てるので、進み具合や費用を管理しやすい一方、後の工程で要件の誤りが見つかると手戻りが大きくなります。アジャイル開発は、数週間程度の短い期間の反復を繰り返し、そのたびに動くソフトウェアを作って利用者の意見を取り入れ、変化する要求に合わせて計画を見直していく進め方の総称で、代表的な手法にスクラムやエクストリームプログラミング(XP)があります。要求が明確で変わりにくいならウォーターフォール、要求が変わりやすく、早く使える機能を届けたいならアジャイルが向きます。

項目ウォーターフォールモデルアジャイル開発
工程の進め方要件定義 → 設計 → プログラミング → テストの工程を、上流から順に1回ずつ進める計画・設計・実装・テストを含む短い反復(スクラムではスプリント)を、何度も繰り返す
計画の立て方最初に全体の範囲、日程、費用を決め、その計画に沿って進める大まかな方向を決め、反復ごとに、優先順位の高いものから計画を見直す
要求の変更への対応前の工程の成果物を確定させた後の変更は、手戻りが大きい。変更の管理の手続きを経て行う変更を前提にしており、次の反復の計画に取り込みやすい
動くソフトウェアができる時期主に開発の終盤。テストを終えてから、まとめて引き渡す反復ごとに、動くソフトウェア(スクラムではインクリメント)ができる
テストの時期プログラミングの後に、単体テスト・結合テスト・システムテスト・受入れテストを順に行う(V字モデルで設計の工程と対応させる)反復ごとに行う。自動化したテストと継続的インテグレーションで、変更のたびに確かめることが多い
文書工程ごとに要件定義書や設計書などを作り、レビューで確定させる動くソフトウェアを重視し、文書は必要な分に絞ることが多い
利用者(発注者)の関わり方主に最初の要件定義と、最後の受入れテスト反復ごとに成果物を見て意見を伝える。スクラムでは、プロダクトオーナーが作るものの優先順位を決める
進み具合の管理工程の完了と成果物で測る。WBSやガントチャートで管理しやすい反復ごとに、完成して動く機能で測る
向いている開発要件が明確で変わりにくい開発、ハードウェアと一緒に仕様を早く固める開発、契約で範囲と費用を先に決める必要がある開発要求が変わりやすい開発や、作りながら利用者の反応を確かめたい新しいサービスの開発

数値は代表的な目安で、世代や製品によって異なります。

どんなときに使うか

ウォーターフォールモデル
要件が最初からはっきりしていて変わりにくいとき、多くの組織が関わり、工程ごとの承認や文書が求められるとき、組込み機器のように、ハードウェアの仕様と合わせて早く固める必要があるときに向きます。
アジャイル開発
何を作れば利用者の役に立つかが最初からは分からないとき、市場や要求の変化に合わせて優先順位を変えたいとき、少しずつでも早く使える機能を届けたいときに向きます。利用者や発注者が、続けて開発に関わることが前提になります。

よくある質問

アジャイル開発では、計画や設計書を作らないのですか?

作ります。アジャイル開発は計画をしないのではなく、最初に細部まで決め切らずに、反復ごとに計画を見直す進め方です。スクラムでも、スプリントの初めにスプリントプランニングで、そのスプリントで何を作るかを計画します。文書も、必要なものは作ります。

アジャイルソフトウェア開発宣言とは何ですか?

2001年に、ソフトウェア開発者のグループがまとめた、アジャイル開発の考え方を示す宣言です。プロセスやツールよりも個人と対話を、包括的なドキュメントよりも動くソフトウェアを、契約交渉よりも顧客との協調を、計画に従うことよりも変化への対応を価値とする、という4つの価値を掲げています。右側のものにも価値があることを認めたうえで、左側のものをより重んじる、という書き方になっています。

スクラムとアジャイル開発は、どう違いますか?

アジャイル開発は、短い反復で変化に対応しながら開発する考え方や進め方の総称です。スクラムは、それを実践するための代表的な枠組みの1つで、プロダクトオーナー、スクラムマスター、開発者の3つの役割と、1か月以内の決まった長さのスプリントの中で行うイベントを定めています。

ウォーターフォールとアジャイルを組み合わせることはありますか?

あります。例えば、全体の要件と大きな設計は最初に決め、その後の実装とテストは短い反復で進める、といった組み合わせです。また、ウォーターフォールモデルの中でも、試作品で要求を確かめるプロトタイピングや、工程を何度か繰り返すスパイラルモデルなど、手戻りを減らす工夫が使われてきました。

理解度チェック

ソフトウェア開発のウォーターフォールモデルの特徴として、適切なものはどれか。

  1. A要件定義・設計・実装・テストなどの工程を上流から順に進め、原則として前の工程の成果物が確定してから次の工程に進む
  2. B短い期間の反復を繰り返し、そのたびに動くソフトウェアを作って利用者の意見を取り入れる
  3. C最初に試作品(プロトタイプ)を作って利用者に見せ、要求を確かめてから本格的に開発する
答えと解説を見る

正解:A. 要件定義・設計・実装・テストなどの工程を上流から順に進め、原則として前の工程の成果物が確定してから次の工程に進む

ウォーターフォールモデルは、水が上から下へ流れるように、要件定義、設計、プログラミング、テストの順に工程を進める開発モデルです。工程ごとに成果物をレビューで確定させるので、計画を立てやすく進み具合も管理しやすい一方、後の工程で要件の誤りが見つかると手戻りが大きくなります。要件が明確で変わりにくい開発や、ハードウェアと一緒に仕様を早く固める必要がある開発で使われます。反復して利用者の意見を取り入れるのはアジャイル開発などの反復型、試作品で要求を確かめるのはプロトタイピングモデルの特徴です。

ソフトウェア開発のV字モデルで、要件定義の工程に対応し、その工程で決めた内容を満たしているかを確かめるテストはどれか。

  1. A単体テスト
  2. B結合テスト
  3. C受入れテスト
答えと解説を見る

正解:C. 受入れテスト

V字モデルは、左側に要件定義から設計・実装へと下りていく工程を、右側にテストを上っていく工程を並べ、左右の対応する工程どうしを結び付けた開発モデルです。要件定義には受入れテスト(運用テスト)が対応し、設計の工程が細かくなるにつれて、システムテスト(総合テスト)、結合テスト、単体テストが対応します。中間の工程の対応は組織や文献によって少し異なり、要件定義にシステムテストも対応させることがありますが、発注者・利用者の立場で要件を確かめる受入れテストが要件定義に対応する点は共通です。テストの計画や合格の基準を、対応する設計の工程の時点で作っておくことが、このモデルの要点です。

スクラムで、プロダクトバックログの項目の内容と並び順(優先順位)に責任をもち、プロダクトの価値を最大にする役割はどれか。

  1. Aスクラムマスター
  2. Bプロダクトオーナー
  3. C開発者
答えと解説を見る

正解:B. プロダクトオーナー

スクラムのチームは、プロダクトオーナー、スクラムマスター、開発者の3つの役割からなります。プロダクトオーナーは、作るべきものの一覧であるプロダクトバックログを管理し、どの項目を先に作るかを決めて、プロダクトの価値を最大にすることに責任をもちます。スクラムマスターはスクラムの考え方をチームと組織に広め、進め方の障害を取り除く支援役です。開発者は、各スプリントで動くインクリメント(成果物)を作る人たちです。

  1. スクラムで、スプリントの終わりに、できあがったインクリメント(動く成果物)を利害関係者に見せてフィードバックを受け、今後の方針やプロダクトバックログを見直すイベントはどれか。
  2. エクストリームプログラミング(XP)などのアジャイル開発で行われる、プログラムの外部から見た振る舞いを変えずに、内部の構造を分かりやすく変更しやすいものに整理する作業はどれか。
  3. 継続的インテグレーション(CI)の説明として、適切なものはどれか。

ソフトウェア開発とプロジェクト管理の練習問題へ

関連する用語の解説

ウォーターフォールモデル
要件定義、設計、プログラミング、テストなどの工程を上流から順に進め、原則として前の工程の成果物を確定させてから次の工程に進むソフトウェアの開発モデル。計画と進み具合を管理しやすい一方、後の工程で要件の誤りが見つかると手戻りが大きくなる。
アジャイル開発
数週間程度の短い期間の反復を繰り返し、そのたびに動くソフトウェアを作って利用者の意見を取り入れ、変化する要求に合わせて計画を見直していく開発の進め方の総称。代表的な手法にスクラムやエクストリームプログラミング(XP)がある。
スクラム
アジャイル開発の代表的な枠組み。プロダクトオーナー、スクラムマスター、開発者の3つの役割と、1か月以内の決まった長さのスプリントの中で行うスプリントプランニング、デイリースクラム、スプリントレビュー、スプリントレトロスペクティブのイベントで、動く成果物を少しずつ作っていく。
V字モデル
要件定義から設計・実装へと下りていく工程と、単体テストから受入れテストへと上っていくテストの工程をV字の形に並べ、要件定義と受入れテスト、設計と結合テスト・システムテスト、モジュールの設計と単体テストのように、左右の工程を対応させた開発モデル。どの設計の工程をどのテストに対応させるかは、組織や文献によって少し異なる。
テスト駆動開発(TDD)
これから作る機能のテストを先に書き、そのテストを通す最小限のコードを書き、テストが通る状態を保ったままリファクタリングする、という短い繰り返しで開発を進める方法。エクストリームプログラミング(XP)のプラクティスとして広まった。
CI/CD(継続的インテグレーション・継続的デリバリー)
開発者の変更を頻繁に共有のブランチに統合し、そのたびにビルドと自動テストを行う継続的インテグレーション(CI)と、テストした変更をいつでも本番環境に公開できる状態に保つ継続的デリバリー(CD)を合わせた呼び方。公開まで自動で行う場合は継続的デプロイと呼ぶ。
WBS(作業分解構成図)
プロジェクトで作る成果物とそのための作業を、上位から下位へ木の形に分解したもの(Work Breakdown Structure)。最も下の要素をワークパッケージと呼び、見積もり、日程、担当の割当て、進み具合の管理の単位にする。

関連する比較