昔からあるウォーターフォール開発と、比較的新しいアジャイル開発。プロジェクトでどちらの開発手法を採用すべきか、迷いますよね。
ウォーターフォール開発とアジャイル開発の違いや、向き不向き、ハイブリッド開発、これらを知ることで自信を持って最初の開発手法の判断をできるようにしましょう。
ウォーターフォール開発とアジャイル開発の違いとは
ウォーターフォール開発とアジャイル開発の大きな違いは、その開発プロセスの進め方にあります。
ウォーターフォール開発は、上から下に各工程を後戻りしない前提で進めていく手法で、アジャイル開発は、機能単位で小さくすばやく開発を繰り返していく手法です。
ウォーターフォール開発は仕様が決まっていて、変更が起きづらいシステムの開発に適しており、アジャイルは仕様や要件が固まっておらず、変更が起きやすいシステム開発に適しています。
これまでのシステム開発は何を作るかの全体像を決め、全体を設計してから開発するといウォーターフォール型の開発が主流でした。ですが近年、時代の変化のスピードが加速するに連れ、すばやい仕様変更が求められるようになり、アジャイル開発の普及が進むようになりました。
デジタル技術を活用した新たな価値創出への取り組みであるデジタルトランスフォーメーションにおいても、アジャイル型の開発によるすばやい市場検証が求められています。
ここからは、ウォーターフォール開発とアジャイル開発それぞれの開発手順、メリット・デメリット、最適な開発業務、不向きな開発業務をまとめそれぞれの違いを解説します。
ウォーターフォール開発とは
ウォーターフォール開発が誕生した背景
1968年、NATO後援の国際会議にてソフトウェア開発を職人芸的な作成方法から工業製品としての作成方法に変える方法として、ウォーターフォール型開発の原形が誕生しました。
ウォーターフォール開発の開発手順
システムやソフトウェアの開発では、下図のようにたくさんの工程があります。
要件定義で、開発を始める前にユーザーの要求を実現するために実装する機能や性能などを定めて具体的にどのように進めるかを決定し、設計、製造、テストと工程を進めていきます。すべての工程が完了すると、ようやくシステムがリリースできる仕組みです。大きな特徴として前工程が完了しないと次の工程に進めないことがあります。
上流から下流へ『水が流れ落ちる』様に工程が進むことから、ウォーターフォール(滝)開発と呼ばれます。
ウォーターフォール開発のメリット
何を作るかが明確で、やるべき事項をあらかじめ決定しているため完成品の品質を確保できます。
また、プロジェクト開始時に必要なエンジニアの数や作業量が把握できるため、予算の見積もりやスケジュール管理が容易になります。
工程ごとに成果物が定められているため、経験が若いエンジニアも開発に参加しやすく、経験を積みやすいです。
ウォーターフォール開発のデメリット
最初にユーザーの要求を実現するために実装する機能や性能などを定めて進めていくため、途中で仕様の見直しをすると大きなコストの増加と納期の遅延が起こります。
また品質を重視した開発手法となるため開発期間は長期化しやすく、市場の変化に合わせて新しい機能の提供が求められるシステム開発には向いていません。
ウォーターフォール開発に最適な開発業務
ではウォーターフォール開発の最適な開発業務が向いている開発はどのようなものでしょうか?それは、「仕様変更を前提としないシステム」です。
例を挙げると、基幹システムを構築するというプロジェクトです。
基幹システムの構築は、当初から細かな仕様を決めてプロジェクトが開始したら仕様変更は基本的には起こりません。
その前提がある上で、要件定義→設計→製造→テストと流れていくプロジェクトにはウォーターフォール開発は最適です。
ウォーターフォール開発が不向きな開発業務
ではウォーターフォール開発が不向きな開発業務とはどのようなものでしょうか?
それは、「仕様変更が後々起きてしまう可能性があるシステム」です。
例を挙げると、ユーザビリティを常に意識しなければならないWebサービスがあります。ユーザビリティによって変化する要件があると仕様変更が頻繁に起こり、ウォーターフォール開発最大のデメリットである仕様変更をした際に手戻り工数が増えてしまい、開発期間が長期化してしまいます。
アジャイル開発とは
アジャイル開発が誕生した背景
2001年に、当時軽量のソフトウェア開発を提唱していた17名の技術者やプログラマーが米国ユタ州に集まり、開発手法の重要な部分について統合することを議論しました。
その際に、不具合が発覚した際に戻る工数が多くなってしまうウォーターフォール型のデメリットを克服するためにアジャイル開発が誕生しました。
アジャイル開発の開発手順
アジャイル開発では、チームを組み、要件定義・設計・開発・テスト・リリースといった開発工程を一つひとつの小さな機能単位で繰り返し行い、文字通り素早く(Agile:アジャイル)、ユーザーを巻き込みつつ、機能をブラッシュアップしながらプロダクトを完成させていくという手順を踏みます。全機能を横断的に進めるウォーターフォール開発と異なり、軽量な開発手法となっています。
アジャイル開発のメリット
小さな単位で計画、設計、実装、テストを繰り返して開発を進めるため、段階的に機能をリリースすることができます。
計画段階で綿密な仕様を決めずに、開発途中でユーザーとコミュニケーションを取りながらフィードバックを行うことができるため、顧客ニーズを反映したシステム開発ができます。
不具合が発生した場合も、1つのイテレーション内の見直しだけで済みます。
アジャイル開発のデメリット
最初の方針を定期的に確認しないと、メリットであるはずの柔軟性が災いして開発の方向性がブレやすくなります。
その結果、プロジェクトの長期化やコストの増加、最悪の場合はプロジェクトが中止になる可能性もあります。
方針を変更するたびにスケジュールや進捗を修正しなければならないので高い管理スキルも求められます。
アジャイル開発に最適な開発業務
ではアジャイル開発の最適な開発業務が向いている開発はどのようなものでしょうか?
それは、「ユーザーニーズにマッチした商品・サービスをいち早くリリースしてブラッシュアップしていくような企画・開発が求められるシステム」です。
例えば、弊社が提供するプロジェクト管理ツール「OBPM Neo」は、アジャイル型で開発しいます。
顧客からの機能強化・改善要望をいち早くサービスに反映させるため、4週間に一回の頻度でバックログから要望の声が大きな機能をサービスに反映させております。
このようなクラウドビジネスの拡大、顧客に継続して利用いただくための製品開発においてはアジャイル開発が最適です。
アジャイル開発が不向きな開発業務
ではアジャイル開発が不向きな開発業務とはどのようなものでしょうか?
それは、「情報を正しく記録するために正確性や安全性が求められるシステム」です。
アジャイル開発最大のデメリットである柔軟性があるあまりに、開発の方向性がブレやすいことやスケジュールや進捗管理がしにくいことが挙げられます。
「正確性や安全性が求められるシステム」であると、前述したアジャイル開発のデメリットが発生してしまう可能性が高いからです。
ここまでウォーターフォールとアジャイルそれぞれの開発手順、メリット・デメリット、最適な開発業務、不向きな開発業務の違いについて説明しました。
ここからはその2つの使い分けについて解説をします。
ウォーターフォール開発とアジャイル開発の使い分け
ウォーターフォール開発とアジャイル開発の使い分けを考えるうえで重要なキーワードは「仕様変更」です。
仕様変更がないシステムであれば、ウォーターフォール開発が向いています。
予見性が低く、仕様変更が考えられるシステムであれば、アジャイル開発が向いています。
ここまでウォーターフォール開発とアジャイル開発の特徴と使い分けに関して説明してきましたが、それぞれのメリットを活かした手法としてハイブリッド開発という開発手法があります。
両者のハイブリット開発について
これは要件定義や基本設計、総合テストなどウォーターフォール開発が得意とする上流工程や下流工程はウォーターフォール開発で行い、詳細設計や製造、単体テストなど、アジャイル開発が得意とする中流工程はアジャイルで開発するという開発手法のことです。
ウォーターフォール開発の、
・仕様や計画の変更がしにくい
・手戻り工数が大きくなり、開発期間が長期化してしまう
といったデメリットや、
アジャイル開発の、
・柔軟性があるあまりに、最初の方針を定期的に確認しないと開発の方向性がブレやすい
・スケジュールや進捗管理がしにくい
といったデメリットをカバーし、それぞれのメリットを活かした開発を行えるのがハイブリット開発の特徴です。
まとめ
ウォーターフォール開発とアジャイル開発の違いや、向き不向き、使い分け、ハイブリッド開発を解説しました。
それぞれの開発の向き不向きを理解した上で、目的やプロジェクトの規模などに合わせて、最も適した開発手法を選択することが重要です。
また様々な開発手法に対応できる「会社や組織のプロジェクト状況を可視化できる仕組み」は、現代のIT企業にとっては必須ではないでしょうか。
弊社が過去に実施した「アジャイル開発のプロジェクト管理手法」セミナー(講師:弊社会長梅田)の講演資料を公開していますので、こちらもぜひご覧ください。
- カテゴリ:
- キーワード: