アジャイルとウォーターフォールを比較!開発手法の選び方

システム開発の基礎知識
システム開発にはいくつか手法が存在します。
作成したいシステムやプロジェクト内容によって適している手法が異なるため、開発手法の選択は非常に重要な選択です。
ITベンダーにシステム開発を依頼する際は、想定している開発手法を提案されますが、他にはどんな手法があるのか、またそれぞれどのようなメリットがあるのか、理解しておくと提案への理解もスムーズになるでしょう。
そこで今回は、システム開発手法の中からアジャイル開発とウォーターフォール開発をご紹介します。
それぞれのメリット・デメリットを簡単に見比べながら、最適な開発手法を選ぶ方法を解説します。
1.アジャイル開発とウォーターフォール開発とは?
まずは簡単にアジャイル開発とウォーターフォール開発の開発方法を解説します。
アジャイル開発
アジャイル開発とは、設計~開発~テスト~リリースの工程を細かく何度も繰り返して開発を進める手法です。
作成したいシステムを小さな機能単位に分け、ひとつずつ開発を行い、ぐるぐると工程を繰り返すイメージです。
アジャイル開発では、後から内容を変更・追加するハードルが比較的、低くなります。
また完成した機能からリリースができるため、プロジェクトをスモールスタートして状況を見ながら拡大するかどうかの検討も可能です。
ウォーターフォール開発
ウォーターフォール開発とは、要件定義~設計~開発~テスト~リリースまでの工程を順番に進めていく手法です。
書いて名のごとく、開発工程の流れを滝の流れに例えて、滝の上流から下流へ流れるイメージです。
ウォーターフォール開発では、要件定義、設計の段階でしっかりと内容を作りこみ確定させます。
その後、確定した仕様をなぞりながら開発を進めていきます。
すべての工程で細かく内容が固まっていくため品質の安定性が担保されます。
簡単にまとめると、アジャイル開発は同じ工程をぐるぐると繰り返す開発手法。
ウォーターフォール開発はすべての工程を順々に進めていく開発手法と言えます。
アジャイル開発とウォーターフォール開発の違いについて、大まかにイメージができたでしょうか。
2.違いを比べて開発手法の選び方を考えよう
次にアジャイル開発とウォーターフォール開発のメリット・デメリット、そして開発手法に合うプロジェクト内容はどのようなものかを見比べてみましょう。
アジャイル開発
<メリット>
- リリースまでの時間を大幅短縮可能
アジャイル開発はシステムを細かい機能単位に分け、設計~開発~テストが終わった機能からリリースしていくことが可能です。
そのためすぐに使いたい機能など優先順位の高い機能から着手していけば、事実上リリース時間の大幅短縮をすることができます。 - 仕様変更への強さ
- 顧客ニーズへの寄り添いやすさ
少しずつリリースしていくことが可能な性質上、ユーザーからのフィードバックも反映させやすくなります。
トラブル発生時同様、フィードバックのあったシステムのみをピックアップして、改修やブラッシュアップできるのがアジャイル開発です。
顧客ニーズに寄り添いやすい開発手法といえるのではないでしょうか。
同じ工程を何度も繰り返すアジャイル開発は仕様変更にも強い開発手法です。
一機能ずつ開発していくため、要求が具体的には固まっていないプロジェクトや途中で仕様変更があった際などに対応がしやすいというメリットがあります。
トラブルが発生した際もシステムを細かく切り出しているため、トラブルが発生したシステムへの早急な改修が可能になります。
<デメリット>
- コンセプトがあやふやになる危険性
仕様や要求を確定させずに開発に着手できる開発手法は、柔軟に仕様変更が可能になるメリットがあります。
しかし、裏を返すと仕様や要求が確定していないことから、途中で方向性や目的を見失ってしまい、システムの軸がぶれてしまうという危うさも持ち合せています。 - スケジュールの見通しが立てづらい
アジャイル開発は、最初にしっかり要件を固めなくても着手可能、仕様変更にも柔軟に対応が可能でフィードバックを受けやすいと考えると非常に魅力的な開発方法です。
一方で、柔軟性の高さは曖昧な計画と表裏一体で、スケジュールの見通しの立ちづらさにもつながります。
このようにメリットの半面、プロジェクトの全体像が分かりにくくなるデメリットもあります。 - 予算の把握が難しい
スケジュールの見通しが立ちづらくなると、出てくる懸念事項が予算把握です。
アジャイル開発はスケジュールの見通しが立ちづらいという性質上、システムをひとつ作ることをベースに費用が決まっていくのではなく、かかった時間や期間で費用が変わります。
だからこそ、仕様変更も柔軟に対応できるというわけです。
潤沢に予算を準備できる場合であれば、ニーズに柔軟に寄り添うアジャイル開発はマッチしやすいでしょう。
しかし、そういったケースは稀ではないでしょうか。
アジャイル開発の柔軟性の裏に潜む予算問題は、頭を悩ませる問題のひとつです。
<アジャイル開発がおすすめのケース>
- 仕様変更または追加開発が予想されるシステム
- 要求が初期段階では不確定だが改修リリースを重ね詳細を固める予定のプロジェクト
- 市場変動が激しく要求に変化がある可能性の高いシステムの開発
ウォーターフォール開発
<メリット>
- スケジュール管理、進捗管理のしやすさ
ウォーターフォール開発では、要件定義でしっかり要求を固め、設計もぬかりなく行い、開発~テスト~リリースと順番に工程を踏んでいく開発手法です。
初期段階で要求を固めるためスケジュールにぶれが発生することが少なくなります。
またスケジュールがほぼ確定していることから人員の確保もしやすく、人手が足りずにスケジュールが延びるケースもほとんどありません。
そのためスケジュール管理や進捗管理がしやすい開発手法といえます。 - 品質の安定性
要求や設計をきちんと固めて開発を進めるということは、品質の安定性にもつながります。
スタート地点もゴール地点も確定しているため、開発道中のビジョンもわかりやすくなり、結果として品質も安定しやすいと言われています。
アジャイル開発の品質が悪いというわけではありませんが、安定性という面を考えるとウォーターフォール開発に軍配が上がります。 - 予算把握のしやすさ
スケジュール把握がしやすく人員確保もしやすいということは、予算把握もしやすいのがウォーターフォール開発の特徴です。
要件定義や設計の段階でしっかりと構想を決めるため、最初に想定よりも時間がかかり予算がぶれる可能性はあります。
しかしその先はゴールに向かって突き進むだけのため、予算把握がしやすいのも納得です。
<デメリット>
- リリースまでに時間がかかる
ウォーターフォール開発では、機能ごとに分けて開発をすることがないため、開発が終わった機能からリリースするようなことは難しい開発手法です。
リリースまでに時間がかかることから、時間に余裕をもって取り組む必要があります。
どんどん新しい製品が出てくる現代には、生真面目すぎて合わないというケースも少なくはないでしょう。 - 仕様変更やトラブルの対処に時間がかかる
ウォーターフォール開発は一工程ずつしっかりと確認しながら進めていく開発手法のため、前の工程に戻ることが難しいというデメリットがあります。
横スクロールのテレビゲームのように、進んでしまうと入口には戻れない、戻りづらいのが特徴です。
仕様変更やトラブル対応で前の工程に戻る場合は、最悪の場合もう一度工程をやり直す必要があるため大幅に工数がかかります。
アイテムを取り忘れたら戻るのではなく再度チャレンジしなくてはならない、まさに横スクロールゲームのようなデメリットです。 - ユーザーのフィードバックを受けながら開発することができない
ウォーターフォール開発では、全ての工程を順番に進め、終わってからリリースすることになるため必然的にフィードバックを受けながらの開発は難しくなります。
もしフィードバックを受けるとしたらシステム改修や追加開発として新たに依頼を出す必要性が出てきます。
<ウォーターフォール開発がおすすめのケース>
- 安定的で高品質なシステムが求められる場合
- 障害発生時に被害の重大性が高いシステム
- 要求が具体的に決まっておりシステム開発に時間を取れるプロジェクト
<アジャイル開発とウォーターフォール開発のメリット・デメリット>
2つの開発手法を一覧でまとめると以下のように整理できます。
アジャイル開発 | ウォーターフォール開発 | |
メリット | 1. リリース時間が短縮できる 2. 開発中の仕様変更が可能 3. 開発中の顧客ニーズ対応が容易 |
1. スケジュール管理がしやすい 2. 安定的で高品質 3. 予算把握がしやすい |
デメリット | 1. コンセプトがぶれやすい 2. スケジュール管理が難しい 3. 予算把握が難しい |
1. リリースに時間がかかる 2. 仕様変更対応が難しい 3. 開発中に顧客ニーズ対応は不可 |
おすすめ | ・要求が固まっていない場合 ・要求が変わる可能性がある場合 |
・障害発生時の被害が甚大な場合 ・時間より品質が重要な場合 |
今、直面している課題があるのであればどちらの開発手法がよりマッチしているか? など、照らし合わせて想像していただくとよりわかりやすいかもしれません。
3.必殺!アジャイルとウォーターフォールの合わせ技
アジャイル開発とウォーターフォール開発のメリット・デメリットを見比べてみてどのように感じましたか。
こうして見ると、アジャイル開発のメリットはウォーターフォール開発のデメリットで、ウォーターフォール開発のメリットはアジャイル開発のデメリットにあたることが分かります。
そのためどちらの開発手法も魅力的に見えるし、双方のデメリットを無視するのが難しく感じるのではないかと思います。
ここでお勧めするのがアジャイル開発とウォーターフォール開発の合わせ技、ハイブリット開発です。
お互いの苦手な部分をお互いで補おうという方法です。
要求や大まかな仕様は決まっているが細かいところがまだ未確定であり、開発をしていく上で追加開発の可能性が高そうという場合はハイブリット開発の方法をお勧めします。
イメージとしては以下のようになります。
工程 | 開発手法 |
要件定義~基本設計 | ウォーターフォール開発 |
詳細設計~開発~単体テスト | アジャイル開発 |
結合テスト~リリース | ウォーターフォール開発 |
要件定義~基本設計までをウォーターフォール開発で行うことで、大まかですがスタートとゴールが決まります。
コンセプトのぶれをふせぐことができ、またアジャイル開発よりはスケジュール管理がしやすくなります。
詳細設計~開発~単体テストまでをアジャイル開発で行うことで、細かい仕様修正や機能追加を可能にします。
アジャイル開発の持ち味を最大に生かせる工程のみアジャイル開発で行うことにより、予算やスケジュール管理が比較的やりやすいアジャイル開発を実現できます。
結合テスト~リリースはウォーターフォール開発で行います。
アジャイル開発で作成してきた機能を結合させ、エラーなく動くかを確認する最後のフェーズです。
もちろんハイブリット開発にもデメリットがあります。
例えば、要件定義~基本設計まではウォーターフォール開発の流れで進むため、基本設計が終わった後にやっぱり仕様から変更したいとなると、ウォーターフォール開発と同じく工程をやり直さなければならないという問題が生じます。
しかし、アジャイル開発とウォーターフォール開発のいいとこどりがしたい場合には、ハイブリッド開発という方法もあります。
どの手法を選択するかによってスケジュールや予算が変動してくるため、プロジェクト内容に合わせて検討・選択していくことが大事です。
4.まとめ
今回はアジャイル開発とウォーターフォール開発を比較と開発手法の選び方をご紹介しました。
どちらの開発の方がより優れているというわけではなく、プロジェクトによって最適の方法があるということですね。
そして、その選び方で予算もスケジュールも変わってくるということがおわかりいただけたかと思います。
とはいえ、今抱えているプロジェクトはどちらの開発手法を使った方がよりマッチするのかという判断はなかなか難しいかもしれません。
また、どの手法で進めた方が現実的でコストに見合うか、実際の数字を見ると課題解決の進め方の参考になる可能性もあります。
システムエグゼでは複数パターンの概算見積をご提案し、見比べていただくことも可能です。
まずはご相談をお待ちしています。