往来の開発手法であるウォーターフォール開発のデメリットを補うような形で、近年アジャイル開発というものが生まれました。今回はそれぞれの特徴や違いを比較してみました。またアジャイルとウォータフォールを併用して開発を行う『ハイブリット開発』にも触れて詳しく解説していきます。
1. アジャイル開発とウォーターフォール開発は何が違う?比較
アジャイル開発とウォーターフォール開発は何が違うのでしょうか。
結論から言えば、ウォーターフォール開発は、仕様に基づいた各工程を分割して開発を進めていくのに対して、アジャイル開発は仕様を臨機応変に変化対応できるように、短い期間でテストと実装を繰り返していく開発手法です。
それらの違いを詳しい解説していきます。
1.1 アジャイル開発とは
アジャイル開発のアジャイル(Agile)とは、『素早い』『機敏な』『頭の回転が早い』という意味です。アジャイル開発は、システムやソフトウェア開発における手法のひとつで、大きな単位でシステムを区切るのではなく、小単位でテストや実装を繰り返していく開発方法です。
往来の開発方法に比べて、『開発効率が短縮される』『修正にかかる工数を削減できる』『顧客が実際に動く画面や機能を試すことができる』等さまざまなメリットがあります。アジャイル開発で期待される効果を高めるために、考え方や原則を理解することを重要視した『アジャイルソフトウェア開発宣言』というガイドラインが作成されています。
出典:アジャイルソフトウェア開発宣言の読みとき方|IPA情報処理推進機構
このガイドラインには、ソフトウェア開発の向上を目指すには、変化に適応しなければならないと記載されています。時代の急激な変化の流れに対応できるように、開発効率の向上を目指すのがアジャイル開発の特徴です。
アジャイル開発について詳しく知りたい方はこちらの記事もどうぞ
1.1.1 アジャイル開発の主な工程
アジャイル開発の主な工程は3つに分けられます。
- ユーザーストーリー
- リリース計画
- イテレーション(スプリント)
『ユーザーストーリー』は、アジャイル開発において『要件』の代わりに用いられる概念です。
『リリース計画』は『いつまでにどの機能をリリースできるか』というプロジェクト全体を管理するための工程です。「プロジェクトのゴール」「イテレーションの長さ」「ユーザーストーリー」の優先順位を決めます。
『イテレーション(スプリント)』はスクラム開発に置ける『スプリント』と同じ意味です。簡単にいうと、短い期間での開発を何回も繰り返すことです。
1.1.2 アジャイル開発のメリット・デメリット
アジャイル開発のメリットは、臨機応変に柔軟な対応が可能で開発スピードが早いことです。
機能単位で実装やテストを繰り返すので、開発効率の向上、修正にかかる手間を減らすことができます。顧客にとっても、コミュ二ケーションを取りながら開発を進めていくため、開発の進捗が見えやすい所もポイントです。
アジャイル開発のデメリットは、仕様・要件ごとにスケジュールを設定するため、全体のプロジェクト像が見えづらく当初の予定と大きくブレが生じてしまう可能性があることです。
1.2 ウォーターフォール開発とは
ウォーターフォール開発では、最初の企画の段階で、ソフトウェアの機能の仕様を決めるという性質があります。『企画』『設計』『実装』『テスト』などのぞれぞれの工程毎に決められた技術者が担当します。例えるなら『パズルピースの埋め合わせ』のような形でしょうか。
どれかひとつでも欠けていてはダメですし、それぞれ各工程ごとに抜け漏れがないかどうかを綿密に管理しながら進めていきます。
顧客にヒアリング調査を行い、要件定義後の基本設計を基に、詳細設計のフェーズへ進むため、前の工程に不具合があると先へ進むことができません。
1.2.1 ウォーターフォール開発の主な工程
開発を複数の工程に分け各工程の終了時に成果物を作成します。『水が流れ落ちる』様に工程が進むことから名付けられており、上流工程から下流工程まで流れる様に開発が行われます。ウォーターフォール開発の工程は細かく分けると10の工程に分かれます。
- 要件定義(要求定義)
→顧客へのヒアリング - 外部設計
→顧客のシステムに必要な機能の選別 - 内部設計
→外部設計を基に、より詳細なシステムの設計 - プログラミング
→実際にプログラミングを用いて実装 - 単体テスト
→モジュール毎にテスト - 結合テスト
→各モジュールを結合してテスト - システム(総合)テスト
→処理速度や大量アクセスなど顧客が求めている仕様を満たしているかの確認 - 運用テスト
→システム稼働下で、不具合が無いかの確認 - システム移行(リリース)
→リリース確認 - 運用・保守
→リリース後の不具合確認・対応
家の建築で例えるなら、設計図作成が要件定義~内部設計、実際に作業する段階がプログラミング~運用・保守ということになります。
1.2.2 ウォーターフォール開発のメリット・デメリット
メリットとしては、工程が明確に区切られているため、各工程を担当するエンジニアは『割り振られた工程』の開発作業のみに専念できます。よって比較的経験が浅いエンジニアでも開発に参加しやすく、新人エンジニアの教育をしやすい手法とも言えます。
デメリットとしては、仕様上前工程に戻る事ができないため、後工程になって仕様の変更や修正が必要になった場合、大幅に開発が遅れることがあります。また、工程を明確に分けているため、顧客にとって何をしているのかいまいち分かりづらいことも多いです。
2. アジャイルとウォーターフォールの使い分けはどのように行う?
アジャイルとウォーターフォールに使い分けはどのように行えば良いのでしょうか。それぞれの開発手法は向き不向きがあります。詳しく解説します。
2.1 それぞれに前提条件・向き・不向きが異なる
ウォーターフォールは計画管理のしやすさがメリットで、仕様変更に弱いです。アジャイルは仕様変更に強く、段階的にシステムをリリースしていけるものの、全体のスケジュール管理や進捗管理がしづらく『完成』が見えづらいです。それぞれ適した開発の前提条件・向き・不向きがあることを覚えておきましょう。
2.1.1 仕様・課題・ゴールが明確ならウォーターフォールが合理的
顧客の要求や、システムの仕様。技術的課題。ゴールが明確ならばウォーターフォール開発が一番シンプルな開発モデルであり、合理的です。ただし要求が途中で変わったり、事前に予見しきれない技術的課題などが出た時に工数が一挙に膨らむ。手戻りが発生したとしても『想定の範囲内』に収めることも大切で、後述するようにハイブリッド開発も広がっています。
2.1.2 予見性が低く『仕様が変わる』ことが前提ならアジャイル
技術的課題が予見しきれず、後々の仕様変更が予測される、また顧客の要望が流動的で、要求が固まりきっていないなどの場合はアジャイルが適しています。顧客に成果物を短いスパンで提出しながら、ブラッシュアップを重ねていけるので特に中流工程に強みを発揮するでしょう。
3. アジャイルとウォーターフォールの併用・ハイブリッド開発をするには?
一般的に両者を併用していくのは好まれません。ハイブリット開発をするには、それぞれの概念やプロセスを理解して現場で活用していく必要があります。
3.1 ウォーターフォール先行型の併用・ハイブリッド開発の場合
開発の全体計画の管理や仕様は事前に明確にしておきたいが、実際の開発では仕様変更や機能追加も予測されるという場合、上流工程はウォーターフォールで行い、中流工程~はアジャイルで行うというハイブリッド開発が良いでしょう。
技術的課題がある程度明確で、予見性が高い案件だが不測の事態には備えておきたい+継続的な機能追加や改修をクライアントが希望しているという時に採用しやすいです。
3.2 アジャイル先行型の併用・ハイブリッド開発の場合
最新のフレームワークや言語、技術が求められるなど予見性が低く不確定要素が多い、技術的課題が明確ではない、クライアントの要求がまだ漠然としており、要求や仕様を固めきれないという場合はアジャイル先行でスタートして、仕様・設計が明確になった段階でウォーターフォール型に切り替えて一方通行型で最後まで作りきるというハイブリッドもあります。
社内のエンジニアがウォーターフォールの開発経験が長かったり、経験が浅いエンジニアが多数在籍しているというケースにおける、アジャイルの部分的導入+ウォーターフォールの仕様変更リスクを大きく軽減する手段として有効です。
4. まとめ
今回はアジャイル開発とウォーターフォール開発の違いやそれぞれの向き不向きについてお話しました。さらに、両者を併用して開発を進める『ハイブリット開発』にも触れました。
一概にどちらが良いと決めるのではなく、それぞれの向き不向きを理解して、現場毎に最適な開発方法を用いる必要があります。本記事を参考にして、どちらの手法が向いているのかを明確にすることでプロジェクトを成功に導くことができるでしょう。