アジャイルとウォーターフォールの違いって?

はじめに

はじめまして。iOSアプリエンジニアの高橋と申します。
この記事では社内向けに実施されたアジャイルトレーニングを受け、みなさんがソフトウェア開発時に適したプロセスを選択できるよう、アジャイル開発とウォーターフォール開発の違いをまとめたいと思います。

アジャイル開発の特徴

アジャイル開発とは一定の期間ごとに「要件定義、設計、実装、テスト、リリース」を繰り返し、機能を一つずつ作り上げていく手法となります。
上記を繰り返し行うことで、アジャイルでは迅速かつ柔軟な対応が可能となるため、開発中の要求変更に強いという特徴があります。
そのためアジャイル開発では顧客を中心に考え、コミュニケーションを密に取ることを重要視しています。

ウォーターフォール開発の特徴

ウォーターフォール開発とは「要件定義、設計、実装、テスト、リリース」を時系列に分割し作業工程を順番に実行することで、最初に定義した多くの機能をまとめて作り上げる手法となります。
原則として前工程が終わっていない、もしくはドキュメントのレビューが終わっていないと次工程に進めないため、綿密な計画を立てる必要があり、企画の段階で開発する機能の仕様全てを決めるという特徴があります。
ウォーターフォール開発ではリリース計画を中心に考え、これらの工程を一度で終わらせるため、後戻りの発生しない計画を立てることを重要視しています。

各開発プロセスの流れ

f:id:mti-techblog-writer:20210825083713p:plain

各開発プロセスのメリット、デメリット

ここまでは各開発プロセスについて特徴をまとめてきましたが、ここからはアジャイル開発、ウォーターフォール開発のメリットとデメリットを紹介します。

アジャイル ウォーターフォール
柔軟性 短期間でサイクルを繰り返すため、柔軟な対応が可能 計画通りに作業工程をこなすため、柔軟な対応が困難
顧客フィードバック 機能単位での動作確認が可能なため、都度フィードバックを受け、改善することができる 全ての工程を終えてから動作確認となるため、フィードバックを受け改善を行うことができない
全体像の把握 各サイクルで細かく仕様を検討するため、全体像の把握がしにくい 開発するソフトウェアの仕様が明確なため、全体像を把握しやすい
スケジュール管理 仕様変更や改善を繰り返すため、スケジュールや進捗の管理が困難 綿密な計画を立てるため、スケジュールや進捗の管理がしやすい
ドキュメント作成 開発においてドキュメントは重要視されていないため、必要最低限のボリュームで済む 各工程でのドキュメント作成が膨大になる可能性が高い
顧客志向 顧客目線でストーリー(要求)を挙げるため、価値ベースで考えやすい システムに求められる機能や画面ベースで考えるため、本当にユーザーのために作られるか不明
顧客との関係 顧客との関係がそのまま仕事のやりやすさに直結するため、協調することを重要と考える 契約や手続きを重視しがちで顧客と壁ができる傾向にある

アジャイル開発が向いているケース

  • 顧客の要望や業界の変化が流動的であり、開発中に頻繁に要求が変更される前提である
  • 顧客とのコミュニケーションを密に取ることが可能である
  • 試作品での評価やテストを早い段階で行う必要がある
  • 開発者の成長、及びチームの成長に繋げたい

ウォーターフォール開発が向いているケース

  • 案件のゴール/成果物が明確であり、開発中に要求が変更されない前提である
  • 命に関わるなど、ミッションクリティカルなシステムの開発である
  • 開発経験の浅い開発者が多いチームである
  • 秩序を重視する組織的文化である

まとめ

今回はシステム開発プロセスである「アジャイル開発」と「ウォーターフォール開発」の違いについて紹介しました。
実際に両方の開発を経験した私の意見としては、「どちらが良い悪いと決めつけるのではなく、それぞれのメリット/デメリットを理解した上で、開発に向いているプロセスを選択することが大切である」と思っております。
ただ私たちのような業界、顧客要望の変化が激しい環境においては、都度動作するソフトウェアを基に顧客からフィードバックを受け、柔軟な対応が行えるアジャイル開発が向いていると言えるでしょう。

会社でのアジャイルトレーニングを経て、自身が経験した開発プロセスの良い点、悪い点を振り返る良い機会となりました。今回のまとめた記事が、少しでもみなさんの参考になれば幸いです。