IT業界

アジャイル開発とウォーターフォール開発の違い【開発手法】

この記事のターゲット

  • 開発手法の違いがイメージできていない人
  • アジャイルソフトウェア開発とウォーターフォール開発の違いが説明できない人

[line]開発手法ってどんな種類があるの?アジャイルとかウォーターフォールとか、参考書では聞いたことあるけど何が違うのかイメージできないな[/line]

アジャイルソフトウェア開発とウォーターフォール開発の違いについて、お仕事で開発をしている人なら感覚で理解している人は多いかもしれませんが、実際に開発をしたことないとイメージが湧かないですよね。

今回はこの2つの開発手法の違いについて説明します。

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

ウォーターフォールとは、名前の表す通り滝が落ちるようにシステム開発の工程が進んでいく開発手法の事です。システム開発はざっと見て

  1. 要件定義
  2. 設計(外部設計・内部設計)
  3. プログラミング(実装)
  4. テスト(単体テスト・結合テスト・システムテストなど)
  5. リリース

詳細に工程を分けるとまだまだ足りないのですが、分からない用語が増えるよりこれくらいの流れを理解してもらえれば大丈夫です。

要件定義とは

要求定義というときもあります。今回の開発の目的や顧客の要望といったシステムの要件を定義します。ここでは上流SEが顧客と打ち合わせを行い、念入りに要件を決めます。

上流SEについては別記事を書くので、今回は読み飛ばしてください。

設計とは

外部設計と内部設計に分かれますが、細かい事は抜きにしましょう。ロボットの設計書とかアニメとかで出てきますよね、それを作る工程だと思ってもらえれば大丈夫です。まだコーディングはしていません。「こういうものを作るよ!」という仕様を詳細に決めるためのフェーズがここです。

プログラミング・実装とは

要件定義で決めた仕様をもとに設計した資料を見て、プログラミング(コーディング)していくフェーズです。一般にイメージされるSE像というのはここですね。パソコンに向かってひたすらゴリゴリ黒い画面を眺めてキーボードを打ち続けます。

テスト

単体テスト、結合テストが分かればOK。単体テストは自分が作った機能そのものが思った通りに動くかどうかのテスト。複数の機能を結合させてテストするのが結合テストです。AさんとBさんがお互いに単体テストも完璧に仕上げた機能同士が全然上手く動かないなんてことはよくあります。

テスト中に修正が必要になった場合はここで修正を行ったりもします。

リリース

完成したシステムをユーザーが使える状態にすることです。完成品のお披露目だと思ってください。

ウォーターフォールのメリット・デメリット

ウォーターフォールのメリット

メリットは全体的な計画を立てやすいという点でしょう。プロジェクトのスタートとともに要件を把握し、その要件を元にリリースまでにやるべきタスクを洗い出してプロジェクトの進捗管理を行うことが出来ます。とにかく仕様書さえ出来ていれば、新しく入ってきたメンバーでもその仕様を元に引継ぎを容易に行うことが出来ます。

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

一番大きな問題点としては、仕様変更に弱いという事です。「あ、やっぱりこれこうしたいな!」と思っても出戻ることはしません。出戻りの発生はすなわち開発スケジュールの遅延を意味します。しかし実際の開発現場ではこの仕様変更が頻発します。これが起きると大変です、その前に完成していた仕様書や設計書など色々な資料を新しい仕様に書き直す必要があります。

仕様変更が重なるたびに人的ミスが発生します。「この仕様変更をもとにプログラムのコードは書き換えたけど、そのもとになっている仕様書は書き換えるのを忘れてしまった。」なんてことになると、後から見た時にコードが間違っているのか、仕様書が間違っているのかの判断が出来なくなってしまいます。

ユーザーとしても、1年後にリリースする予定のシステムの仕様を完全に定義するのは難しいのです。作り始めて、形が見えてくると「やっぱりこっちのほうが良かったな!」となる気持ちは分かりますよね。

一方アジャイル開発はというと

簡単に言えばアジャイル開発はウォーターフォールの逆をいく開発手法です。最初にある程度の要件が決まったらもう開発をスタートさせます。アジャイル開発は仕様変更や出戻りは発生して当然だという考えのもと、小さなサイクル(イテレーション)を何度も繰り返します。

大体1週間~2週間程度のサイクルを何度も繰り返して、少しずつ性能の良いシステムが作られていきます。

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

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

なんといっても柔軟性の高さです。多少の仕様変更ならすぐに出戻って修正します。それに、小さなサイクルを終えるたびにユーザーとの打ち合わせが発生するので、開発物の方向性を都度確認することが出来ます。ユーザーとしても柔軟な仕様変更に対する満足度が得られます。

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

全体のスケジュール管理がしにくいという点があり、かつ度重なる仕様変更のために本来の目的と方向性がずれてしまい、最終的に品質を落としてしまう可能性があるという事です。

特に、数年かけて開発するような大きなプロジェクトにアジャイルは向かないと言われています。

まとめ

アジャイル開発とウォーターフォール開発、イメージはついたでしょうか。

簡単にまとめると、スケジュールをしっかり把握したいような大きなプロジェクトにはウォーターフォール。

ユーザーのフィードバックを受けつつ少しずつ開発を進めたい場合にはアジャイル開発を用いることが多いです。