ウォーターフォール型開発とアジャイル型開発の違い


ウォーターフォール型開発とアジャイル型開発の違い

システム開発の現場で主流となっている開発手段といえば、ウォーターフォール型開発とアジャイル型開発です。システム開発の第一線で導入されている点では共通するものの、メリットやデメリット、開発の流れには大きな違いがあります。このページではその違いを詳しく解説してゆきます。

そこで今回は、ウォーターフォール型開発とアジャイル型開発の違いについて、くわしく解説します。現時点でエンジニアやプログラマーとして働いている方はもちろん、これからシステム開発の業務に取り組みたい方も必見です。

ウォーターフォール型開発とは

ウォーターフォール型開発とは、システム開発の工程を一つずつ完了させながら進める開発手段です。高いところから水が流れ落ちるように、前工程に戻らずに開発を進めることから「ウォーターフォール型開発」とよばれています。

ウォーターフォール型開発では、下記のプロセスで開発を進めます。

  1. 要件定義(開発するシステムの具体的な内容について、依頼者側と開発側がすり合わせる)
  2. 外部設計(依頼者側の視点から、必要な機能を洗い出す)
  3. 内部設計(開発側の設計から必要なプログラムやコーディングを考える)
  4. 実装(設計を基にプログラミングをおこなう)
  5. 単体テスト(機能ごとに単体でエラーの有無をテストする)
  6. 結合テスト(機能同士を連携させた上でエラーの有無をテストする)
  7. 総合テスト(システム全体をテストし、依頼者の要求を満たしているか判断する)
  8. 運用テスト(実際に運用する環境で問題なく作動するかテストする)
  9. リリース・運用(サービスをリリースし、運用していく)

ウォーターフォール型開発のメリット

ウォーターフォール型開発には、主に3つのメリットがあります。1つ目のメリットは、進捗管理をおこないやすい点です。この開発モデルでは、計画時点で工程ごとに誰がどの作業をおこなうかをあらかじめ明確にし、その計画に沿ってシステム開発を進めます。そのため、現時点でどこまでプロジェクトが進んでいるかを一目で把握できます。

2つ目のメリットは、予算の見積もりをしやすい点です。あらかじめ完成品や必要な人員、開発期間を決めた上で工程を進めるため、最初の時点でどのくらいの予算が必要かを明確にできます。

3つ目のメリットは、人材育成のおこないやすさです。ウォーターフォール型開発では、各工程をそれぞれの専門家が担います(内部設計ならプログラマー、テストはテスターなど)。一つの技術を専任で教えるだけで済むため、比較的人材育成をおこないやすいのです。

ウォーターフォール型開発のデメリット

他方でウォーターフォール型開発には、次にあげる2つのデメリットもあります。

最大のデメリットは、要求変更への対応がむずかしい点です。前述したようにこの開発モデルでは、最終的な機能を明確に定義した上で作業を進めるため、作業を始める時点で要件を明確にしている必要があります。そのため、実装やテストの時点で要求の変更が生じても、簡単には対応できません。場合によっては要件定義の時点まで後戻りする必要も出てきて、時間や費用を大幅にロスしてしまいます。

2つ目のデメリットは、ドキュメント作成やサービスのリリースまでに時間や労力がかかる点です。要件定義や設計の時点で、完成までの全工程の作業を明確化し、それを文書化する必要があります。そのため、ドキュメントの作成だけでたくさんの時間と労力がかかります。また、実際に使えるサービスを利用できるようになるのは、すべての開発工程が終わったタイミングなので、リリースまでの時間も長期化します。

アジャイル型開発とは

アジャイル型開発とは、実装とテストを繰り返しおこなうことで、素早くかつ柔軟にシステム開発をおこなう手段の総称です。具体的な手段として、「XP」や「スクラム」などがあります。

手段により若干の違いはあるものの、アジャイル型開発はおおむね下記のプロセスで進めます。

  1. 完成物の大まかな仕様や要件を設定する
  2. 全体のプロセスを1〜2週間で実装できる範囲(イテレーション)に分割し、それぞれの優先度を決める
  3. 優先度の高いイテレーションから順番に、「計画」→「設計」→「実装」→「テスト」というプロセスで機能を実装する
  4. 一つの機能を実装したら、次のイテレーションを回す(以降は繰り返し)

簡単にいうと、機能ごとに計画や実装、リリースをおこない、それを繰り返すのがアジャイル型開発の特徴です。

アジャイル型開発のメリット

アジャイル型開発には、主に3つのメリットがあります。

最大のメリットは、要件で不明確な部分や要求の変更を許容できる点です。アジャイル型開発では開発フェーズを細かく区切り最低限の機能から設計/実装するため、最初の時点で完成物の要件を明確化していなくても、とりあえず必要な機能から開発できます。また途中で要求に変更があっても、一部の機能のみを修正すれば済むため、大幅な後戻りをせずに済みます。

また、顧客のニーズを汲み取りやすい点もメリットの1つです。アジャイル型開発では、依頼者側と開発側が緊密にコミュニケーションをおこない、希望する機能を一つ一つ実装していきます。開発途中で都度顧客の要望を聞くため、顧客のニーズを汲み取ってシステム開発を進められます。

3つ目のメリットは、スピーディーにプロダクトをリリースできる点です。アジャイル型開発では機能ごとに切り分けて、その中で優先度の高い順番に実装します。そのため、実用的なプロダクトを最短で1〜2週間で実装・リリースできるのです。

アジャイル型開発のデメリット

アジャイル型開発を進めるにあたっては、次にあげる3つのデメリットに注意が必要です。

1つ目のデメリットは、当初考えていたコンセプトと完成物にズレが生じる可能性が高い点です。要件定義や設計の時点で厳密に仕様を決めないため、実装したい機能を都度開発していくうちに、当初考えていたものとは異なる完成物が出来上がるリスクがあります。

2つ目のデメリットは、進捗管理がむずかしい点です。計画を厳密に立てずに開発を進めるため、完成まであとどのくらいの期間やコストがかかるのかを把握しにくいです。

3つ目のデメリットは、経験者が少ない点です。アジャイル型開発はモダンな開発手段であるため、実際の業務で経験した人材は少ないです。そのため、アジャイル型開発で仕事を進めたいと思っても、対応できる人材を確保できない可能性があります。

ウォーターフォール型開発とアジャイル型開発の違いとは

ウォーターフォール型開発とアジャイル型開発には、どのような違いがあるのでしょうか?この章では、ウォーターフォール型開発とアジャイル型開発の間にある5つの違いをご説明します。

依頼者とのコミュニケーション

アジャイル型開発では、最初の時点では要件を明確には定義せず、開発を進める過程で依頼者側の要求を取り入れます。そのため、開発を依頼してから完成するまでの間、開発側と依頼者側で頻繁にコミュニケーションが必要となります。

他方でウォーターフォール型開発では、最初に完成物の要件を明確にした上で、実装やテストなどの工程を進めます。ですので、一度完成物の要件を明確にすれば、その後はほとんど依頼者と開発者側でコミュニケーションは発生しません。

依頼者の要求への対応

依頼者から要求があった場合の対応についても、二つの開発手段にはおおきな違いがあります。

アジャイル型開発では、都度顧客の要求に対応しながら開発を進めます。他方でウォーターフォール型開発では最初に決めた計画に沿って開発を進めるため、後から依頼者の要求に対応することはむずかしいです。

製品リリースの速度

もう一つおおきな違いとして挙げられるのが、実用的な製品をリリースするまでの速度です。

アジャイル型開発の場合は、最低限必要な機能が備わった製品を最短1〜2週間でリリースできます。他方でウォーターフォール型開発では、すべての機能が完成してからでないとリリースできないため、圧倒的に長い時間がかかります。

テストの頻度

機能が問題なく作動するか確認する目的でおこなうテストの頻度にも、おおきな違いが見られます。

アジャイル型開発の場合は、一つ一つの機能について、「計画」→「設計」→「実装」→「テスト」というプロセスを回して開発します。そのため、最終的な完成物が出来上がるまでにたくさんのテストをおこなう必要があります。

他方でウォーターフォール型開発の場合、すべての機能を実装したタイミングで、単体テストや結合テストなどをおこないます。そのため、テストの頻度で言うとアジャイル型開発と比べると少ない傾向があります。

向いているプロジェクト

アジャイル型開発とウォーターフォール型開発において、最も大きくかつ重要な違いは「向いているプロジェクト」です。

アジャイル型開発は、都度顧客の要望に対応できる開発手段であるため、作りたいものが不明確なプロジェクトに最適です。また、アジャイル型開発には「当初のコンセプトと完成物に相違が出やすい」、「進捗管理がむずかしい」というデメリットがあるため、大規模で時間のかかるプロジェクトや、複雑な機能を実装するプロジェクトには不向きです。たとえば新規事業で使うシステムの開発など、小規模なプロジェクトに適しているといえます。

他方でウォーターフォール型開発は、あらかじめ立案した計画に基づいて開発を進めるため、作りたい完成物が明確に定まっているプロジェクトに最適です。また、進捗管理がおこないやすいため、開発までに多くの工数や時間を要する大規模なプロジェクトにも適しているでしょう。

アジャイル型開発とウォーターフォール型開発の違いをまとめると、下記の通りです。

アジャイル型開発ウォーターフォール型開発
顧客とのコミュニケーション頻繁なコミュニケーションが必要要件を定義したあとは、あまり発生しない
要求への対応柔軟に対応できる変更には対応しにくい
製品をリリースするまでの速度速い(最低限の機能が備わった物を1〜2週間でリリース)遅い(最終的な完成物を数ヶ月〜1年ほどでリリース)
テストの頻度多い少ない
向いているプロジェクト作りたいものが不明確、小規模作りたいものが明確、大規模

ウォーターフォール型開発のノウハウがあって初めて、アジャイル型開発は成功する

ここまでアジャイル型開発とウォーターフォール型開発について、明確な違いがある手段として紹介しました。ですが、実際にシステム開発をおこなうにあたっては、ウォーターフォール型開発のノウハウや経験なしにアジャイル型開発に取り組むのは困難です。

前述したように、アジャイル型開発には最終的なコンセプトや計画が明確でないと、当初作りたかったものとずれるリスクがあります。また、進捗管理やスケジュール管理がむずかしい上に、アジャイル開発に精通した人も少ないです。

つまりアジャイル型開発は、あらゆる開発手段の中でも成功難度が非常に高いのです。システム開発の経験が豊富にない技術者がアジャイル型開発に取り組むと、明確なゴールや計画がないためどう進めれば良いか分からなくなり、結果的に顧客の要望とは見当違いのプロダクトが出来上がってしまいます。

明確なゴールやスケジュールなしに、作りたいものをいき当たりばったり作っているだけではアジャイル開発は成功しません。アジャイル型開発をスムーズに進めるには、最初に完成物の要件や開発スケジュールを明確化する「ウォーターフォール型のノウハウ」が必要です。

ウォーターフォール型開発によりシステム開発の進め方を覚えることで、はじめて柔軟な対応を要するアジャイル型開発が上手くいくのです。

まとめ

今回お伝えしたように、アジャイル型開発とウォーターフォール型開発には、顧客とのコミュニケーションや開発スピードなど、あらゆる点で違いがあります。メリットやデメリット、向いているプロジェクトの種類にも違いがあるため、担当する案件に応じて最適な開発手段を導入する必要があります。

ただしアジャイル型開発には不確実要素が多く、スムーズに進める上では難易度が高いです。そのため、まずはウォーターフォール型開発でシステム開発の基礎を学んだ上で、アジャイル型開発にチャレンジするのがベストです。