ウォーターフォール開発を徹底解説!アジャイル開発との違いとは?
数あるシステム開発手法。
どの開発手法にも一長一短があり、求められるシステムの性質に合わせて適切に選択していくことが必要です。
また選択した開発手法で大きな効果を得るためには、前提となる条件や原則を念頭に置いておかなければいけません。
その方法を間違えると、逆効果を招いてしまう恐れがあるためです。
ウォーターフォール開発の特徴を理解し、この手法が好まれるケースで適切に選択できるようにしましょう。
適切なプロジェクト管理が、システム開発を成功に導く近道です。
この記事では、システム開発の手法のうちウォーターフォール開発について、アジャイル開発との比較を行いながら解説をしていきます。
ウォーターフォール開発とは
ウォーターフォール開発では、『要件定義・設計・実装・テスト』のサイクルを大きな工程ごとに分割します。
そして上流工程から下流工程へと段階的に進めていく開発手法です。
工程ごとに成果物を作成し、ステークホルダーに合意を得た上で次の工程に移行します。
前の工程の成果物を元に次の工程を進めるため、前の工程の成果物の品質が次の工程の成果物の品質に影響します。
前の工程に戻らないのが原則です。例えば設計が終わった段階で、仕様や設計の変更は禁止します。
要件定義から詳細設計・基本設計については、以下の各記事でそれぞれ詳しく解説しています。
各工程について詳しく知りたい方は、ぜひ併せてご参照ください。
要件定義の意味と必要性を徹底解説!必要な基礎知識とスキルとは?スムーズな進め方と確認すべき重要なポイント3点も紹介。
詳細設計とは?詳細設計書の書き方を徹底解説!成果物の作成方法や記載すべき項目は?内部設計や仕様書との違い・サンプルも紹介
基本設計の意味と作り方を徹底解説!必要な視点は?仕様書と要件定義の違いにも迫る。設計課題の解決方法とサンプルも紹介
ウォーターフォール開発の3つのメリット
ウォーターフォール開発のメリットを確認していきましょう。
全体のスケジュールが管理しやすい
ウォーターフォール開発では、プロジェクト開始時にプロジェクト全体の計画を作成します。
この計画に則って開発を進めていきます。計画駆動型の開発手法と呼ばれる所以です。
このため全体の進捗状況の把握やスケジュール管理がしやすく、全体的なスケジュールの大幅な遅れを防ぐことができます。
プロジェクトの方向性が一貫している
ウォーターフォール開発では、要件定義・設計の段階で決定した仕様を途中で変更しないのが原則です。
プロジェクトの初期段階で最終的な仕様を定義することで、プロジェクトのゴールを明確に設定することができます。
開発事例や経験者が多い
ウォーターフォール開発は、日本国内で長年採用されてきた開発手法です。
このため日本企業のほとんどの開発者は、ウォーターフォール開発を経験したことがあります。
またウォーターフォール開発をマネジメントできるプロジェクトマネージャーも多く、人員を確保しやすいでしょう。
開発経験者であれば、大抵のエンジニアがウォーターフォール開発と伝えるだけで通じます。
即座に開発手法を把握し、然るべき開発作業を行うことが可能です。
ウォーターフォール開発が好まれる4つのケース
ウォーターフォール開発が好まれるケースを整理しましょう。
大規模な開発プロジェクト
大規模なプロジェクトで避けて通れないのが、リソース管理やコスト管理です。大規模開発では多くの人員が並行して開発を進めます。
ウォーターフォール開発では、最初に立てたプロジェクト計画や見積をベースにして管理を行います。
プロジェクト全体の見通しが立てやすく、予算や人員などのリソースの手配を円滑に行うことができます。
またプロジェクトの初期段階から、必要なスキルを持つ人員を手配したり不足する資材を調達する準備が可能です。
仕様が決まっていて変化しないシステム
状況が変化しても要件が変化しない、確実性の高いシステムの開発に適しています。例えば銀行や保険、流通などの基幹系システムです。
法律的な制約もあるため、これらのシステム仕様が将来的に大きく変化することはほぼありません。
高品質が求められるシステム
好まれるケース2で触れた基幹系システムで、重大な不具合や深刻な障害が発生すると大きな損失に繋がります。
ウォーターフォール開発では、綿密な設計を行い実装に着手します。
このため全機能の実装後、システム全体としてテストを行う際も、不具合が発生しにくくなっています。
またリリース前に全ての機能を実装し、集中的にテストを実施することができます。
したがってリリース後の障害発生が許されないシステムの開発に向いています。
請負契約でのシステム開発
請負契約では「どのような機能を・いつまでに・いくらで」実装するかを契約時点で明確にしておかなければなりません。
ウォーターフォール開発ではプロジェクトの初期段階で要件や仕様を決定するため、請負契約でのシステム開発に向いています。
また業務委託をする場合も、どのような機能を作れば良いかが明確で、小さな単位で切り出して仕事を依頼することができます。
ウォーターフォール開発の3つの注意点
ウォーターフォール開発のデメリットを押さえておきましょう。
問題が発生したときの手戻り工数が多い
ウォーターフォール開発の原則は、前の工程に戻らないことです。各工程ごとに細部まで作り込み、品質を高めていきます。
仕様不備や考慮漏れが発覚すると、手戻りにかかる工数が非常に大きくなります。
前の工程の成果物の修正や、仕様不備の影響の調査、再テストなどが必要になってしまうでしょう。
問題の発生が後の工程であればあるほど、手戻りにかかる工数は大きくなります。
仕様変更に対応しづらい
同様の理由で、仕様変更に対応するには大きな手戻り工数がかかります。
また開発途中での仕様変更は、プロジェクト開始時に作成した計画や予算に含まれていない場合がほとんどです。
仕様変更に対する追加費用が膨れ上がり、トラブルの原因になることもあります。
ユーザーの要望を反映しにくい
ウォーターフォール開発では、ユーザーが実際に動くシステムを確認するのは、プロジェクトの終期段階になります。
具体的には受け入れテスト時や納品後などです。
そしてユーザーが想定していたシステムと異なるケースや、必要な機能が不足しているケースが発生します。
これを回避するために要件定義・設計の段階でプロトタイプ型開発を併用するケースもあるようです。
しかしユーザーを取り巻く環境や市場の状況が変化し、プロジェクト初期と異なる要望が出てくることもあります。
アジャイル開発とは
アジャイル開発は、『要件定義・設計・実装・テスト』のサイクルを機能ごとに繰り返しながら進めていく開発手法です。
優先度の高い機能から順番に開発を行います。
機能ごとに成果物を作成し、ステークホルダーへの確認やユーザーへの要望のヒアリングを行う手法です。
ユーザーの要件に素早く対応し、顧客満足度を向上させることができます。
アジャイル開発では積極的にユーザーの意見を取り入れ、仕様変更や機能修正を行うのが特徴です。
アジャイル開発の3つのメリット
アジャイル開発のメリットを確認していきましょう。
問題が発生したときの手戻り工数が少ない
アジャイル開発は、小さな機能ごとに開発を行います。手戻りが発生したときに影響を受けるのは対象の機能のみです。
結果、不具合が発生しても修正対象となる範囲が限定されているため、手戻りにかかる工数が少なくなります。
仕様変更に臨機応変に対応できる
同様の理由で、仕様変更にかかる工数は少ないです。
また仕様変更を小さな機能、1サイクルとみなして対応するため、並行して開発している別の機能や人員への影響も軽微で済みます。
ユーザーの要望を反映しやすい
アジャイル開発は、ユーザーが実際に動くシステムを確認しながらレビューを行う手法です。
ゆえにユーザーの想定と異なる動きをしているケースや必要な機能の不足を、早い段階で発見できます。
またユーザーの最新状況に合わせた要望にも対応可能です。
サイクルは短い期間で繰り返されます。開発者はある機能の開発を終了後、記憶が新しいうちに不具合の修正や要望の反映に着手できます。
アジャイル開発が好まれる4つのケース
アジャイル開発が好まれるケースを整理しましょう。
小規模な開発プロジェクト
小規模なプロジェクトでは、少人数のチームで開発を進めます。
アジャイル開発ではメンバーが積極的なコミュニケーションを取りながら、チームとして課題や問題を解決していかなければなりません。
充分なコミュニケーションと連携が取れる、10人以下のチームが良いとされています。
要件や仕様が変化しやすいシステム
アジャイル開発では、仕様変更や機能追加に柔軟に対応が可能です。
そのため価値駆動型の開発手法とも呼ばれています。
近年のWebアプリケーションやモバイルアプリケーションの開発では、変化の激しい市場状況に迅速かつ柔軟に対処していく必要があります。
また要件や仕様をシステムが稼働するまで決定できないケースにも採用されます。
一定の品質が許容されるシステム
先に触れたように、近年のアプリケーション開発は品質よりもスピードが重視です。
障害発生率を0にするよりも、軽微な不具合は許容し、早期リリースや顧客満足度を高めることを優先します。
頻繁に仕様変更が加わる手法ゆえに不具合が発生しやすく、別途テスト自動化などを行い、一定の品質を維持することが多いです。
またアジャイル開発では、プロジェクト開始時に候補に上がっていた機能を、指定された期間内に全て実装することは難しくなります。
自社開発でのシステム開発
自社開発のシステムは、要件や仕様・リリース時期などを自社の裁量で決められるため、アジャイル開発に向いています。
一方で請負契約とは相性の悪い開発手法です。どのような機能を作るか決まっていないため、期間や費用を見積もることが困難です。
もう1つの契約形態である準委任契約を行う場合もあります。
しかし企業が負うリスクが大きいため、タイム・アンド・マテリアル契約などの新しい種類の契約を行う企業もあるようです。
アジャイル開発の3つの注意点
アジャイル開発の注意点を押さえておきましょう。
全体のスケジュールが管理しにくい
アジャイル開発では、システムを機能ごとに分割しサイクルを回していく手法です。
個々の機能開発にかかる工数見積もりは難しく、プロジェクト開発全体の進捗状況の把握やスケジュール管理が難しくなります。
プロジェクトの方向性が定まりにくい
アジャイル開発では機能ごとにサイクルを繰り返し、ユーザーの要望に応じて柔軟に仕様を変更します。
このためシステム全体としての要件や設計が定まりにくく、機能ごとの狭い視野で開発を進めてしまうことがあります。
また個々の機能が適切に設計されているように見えても、システム全体を通して見たときに整合性のないものになってしまうことがあります。
開発事例や経験者が少ない
アジャイル開発のなかでもさまざまな開発手法が存在します。かんばんやスクラム、ユーザー機能駆動開発など種類が豊富です。
アジャイル開発ではこれらの開発手法をチームごとにカスタマイズしていることも多く、人員増加時の説明コストがかかります。
またアジャイル開発において特殊な役割の経験がある開発者を確保するのは大変です。
チームをまとめる資質があるリーダー、プロダクトオーナーやスクラムマスターはなかなか確保できません。
ウォーターフォール開発を行っていたチーム、つまりアジャイル未経験の開発者達が移行に取り組みます。
アジャイル開発に「挑戦する」という表現は、言い得て妙なりという訳です。
アジャイル開発については以下の記事でも詳しく解説していますので、宜しければぜひ併せてご参照ください。
アジャイル開発とは?要件定義やメリットを徹底解説!他の開発手段との違いは?失敗事例とその理由から正しい対策方法もご紹介!
ウォーターフォール開発とアジャイル開発の違い
ウォーターフォール開発とアジャイル開発の違いを理解しておきましょう。
工程で分割するか、機能で分割するか
ウォーターフォール開発では、工程ごとに分割し開発を行うのに対し、アジャイル開発では、機能ごとに分割し開発を行います。
ウォーターフォール開発もアジャイル開発も、『要件定義・設計・実装・テスト』を行う点では同じです。
分割単位の違いが各々の開発手法に違う特徴を付与しています。
開発手法によるメリットとデメリットの違い
本記事では以下が各々、対になるように解説を行っています。
- ウォーターフォール開発のメリットとアジャイル開発の注意点
- ウォーターフォール開発のデメリットとアジャイル開発のメリット
また好まれるケースについても、違いとなる特徴ごとに対になる順番で記述しています。
各々の開発手法の違いを理解するための参考になれば幸いです。
ウォーターフォール開発が時代遅れといわれる理由
「ウォーターフォール開発は時代遅れ」「今どきはアジャイル開発」といわれて久しいでしょう。
しかしそれは、ウォーターフォール開発のメリットを活かせるケースが減少してきたからです。
絶えず変化するユーザーの要望に対応しきれなくなった
アジャイル開発では、仕様変更に迅速に対応することが可能です。
必要な機能を需要のあるタイミングでリリースし、ユーザーのビジネスにおける機会損失を防ぐことができます。
一方でウォーターフォール開発は長期の開発期間を要するため、加速するビジネス・スピードに追いつけなくなってしまいました。
海外ではアジャイル開発が主流
ウォーターフォール開発とアジャイル開発の普及率を見ると、世界的にはアジャイル開発が主流です。
日本は海外に比べてアジャイル開発の導入が進んでいませんでした。
これにはいくつかの原因がありますが、先に述べたように請負契約とウォーターフォール開発の相性が良いことが1つの大きな要因です。
日本の雇用形態や契約形態がアジャイル開発向きでないため、導入への妨げとなっています。
しかしアジャイル開発を求める声は年々強まり、新しい契約形態の検討が行われています。
アジャイル開発を採用する企業が増加
近年では日本国内でも大企業を中心に、ウォーターフォール開発からアジャイル開発への移行が進んでいます。
もはやベンチャー企業だけの開発手法ではなくなってきました。
近年では自動車やハードウェア製造などの、ソフトウェア製造以外の分野にも導入されています。
適切な開発手法の選択を
本記事ではウォーターフォール開発について、アジャイル開発との比較を行いながら解説行いました。
またウォーターフォール開発が、時代遅れといわれている理由もご紹介しました。
開発方法はあくまでシステムを開発するための手段です。
開発するシステムの特徴やユーザーの状況を把握し、適切な開発手法を選択しましょう。