開発手法を徹底比較!アジャイル vs ウォーターフォール
チーム開発をする上でアジャイル開発とウォーターフォール開発が主流の手法でしょう。開発手法が書籍にもなっているほど採用している企業は多くあります。それぞれの開発手法でのメリット・デメリットを紹介しているので、ぜひ参考にしてみてください。
テックアカデミーマガジンは受講者数No.1のプログラミングスクール「テックアカデミー」が運営。初心者向けにプロが解説した記事を公開中。現役エンジニアの方はこちらをご覧ください。 ※ アンケートモニター提供元:GMOリサーチ株式会社 調査期間:2021年8月12日~8月16日 調査対象:2020年8月以降にプログラミングスクールを受講した18~80歳の男女1,000名 調査手法:インターネット調査
本稿は、Eminesoftのブログ記事を了解を得て日本語翻訳し掲載した記事になります。
本記事は、Eminesoftの編集長でありマーケターのEllina Bereza氏によって投稿されました。
アジャイル開発とウォーターフォール開発という方法論の対立は、少し前まで非常に注目を集めていました。
2つの手法の特性からしても話題性があるのは当然のこと。たくさんの専門家によって分析がおこなわれ、多くの本が発行されるなど、この論争は多岐にわたって検証されてきました。
いまだにどちらの方法論を使うか迷う、という冗談は開発者の間でよく聞かれますが、この冗談は実は的を射ています。ここではアジャイルとウォーターフォールの違いについて説明し、どのような場面でどちらが最適かを述べていきます。
まずはウォーターフォールとアジャイルについて概要を説明していきましょう。
ウォーターフォール開発
ウォーターフォールという手法は非常に簡潔で、極めて古典的な発想の開発マネジメントシステムです。配信日やプロジェクト完了期日が決定しており、さらに製品の最終仕様が開発の途中で変更されないなど、緻密な計画を立てて開発するのがウォーターフォール型の手法です。
そのためしっかりと計画が立てられた長期のプロジェクトで最もよく採用されます。
この手法は機械の製造や造船業、そして宇宙産業などさまざまな種類の開発に応用できます。
ウォターフォール型の開発は、例えばERPシステム(統合業務ソフト)の導入やすでに人気を得ている大規模なソフトウェアまたはオペレーションシステムの新バージョンの開発など、ソフトウェア開発にも非常によく応用されています。
アジャイル開発
しかし、もし新しい技術を取り入れるなど、開発の途中でやり方を頻繁に変えざるをえないタイプの場合、どのような対処をするべきでしょうか。現実にモバイル業界は常に高速で成長しており、新しい枠組みはほぼ6カ月ごとに開発されているような状態です。
このような業界ではソフトウェアの開発のために、どの開発手法を採用するのか臨機応変に決める必要があります。そんな時はアジャイルの出番です。ウォーターフォールに対してアジャイルは柔軟な開発手法です。
アジャイル開発には「スクラム開発」という代表的な方法があります。「スクラム開発」は速いスピードで変化するモバイル業界にとって、臨機応変に対応することができる理想的な解決方法といってもいいでしょう。
実際にスクラム開発は求められる最終仕様に近づけるために、タイミングごとに作業を分析し修正します。プロジェクトには製品開発を担当するチームやテストを担当するチームなど幾つかのチームが参加し、密に連携を取りながら「小さな」機能を開発する作業を繰り返し、完成を目指します。
開発の過程を見守ることができる点、そして修正を加える時間がある点が、顧客だけでなくエンドユーザーにとっても最大の利点です。「スクラム開発」はチーム一丸となって開発に取り組むため、作業を行う上で大きなモチベーションになります。
また、顧客のニーズに臨機応変に応えることができるため、顧客との信頼関係を築くことが可能なのです。
メリットとデメリット
ここからはウォーターフォールとアジャイルのメリットとデメリットを紹介します。
ウォーターフォールのメリット
- 簡潔。ウォーターフォール開発手法は簡潔で分かりやすく、例外を除いて大多数の企業に適しています。
- 高品質。ウォーターフォールは、技術的な作業、データ入力と同様にデモにも厳密な品質の線引きとルールがあります。時間やコストよりも品質が優先されます。
- 安定。製品の仕様は1度決まったらほぼ変わりません。
- 広い適応性と構造のため、低価格でプロジェクトを開始することが可能です。
- 必ずしも開発過程でエンドユーザーと関わるわけではありません。
ウォーターフォールのデメリット
- ウォーターフォールのほとんどの欠点は、上記に挙げた利点の裏返しです。例を挙げると、ウォーターフォールを使った開発プロセスは、長期にわたり、コストがかかります。
- ウォーターフォールは「自分の首を絞める」タイプの手法です。必要な仕様、機能、品質全てにおいて高いレベルを求めるため、膨大な量のドキュメントを作らざるを得なくなるからです。しかも技術的なドキュメントは、エンドユーザーにとって理解しにくいものになりがちです。
- 作業に入る前に何よりも先に、必要事項と技術的な設計仕様書を微に入り細に入り決定しなければなりません。
- 柔軟性がなく、大幅なプロジェクトの変更はできません。
アジャイルのメリット
- 可変的で双方向的でクリエイティブな開発方法。1週間ごともしくは2週間単位のスプリント(時間枠)で、プロジェクトの方向に修正を加えることができます。もしくは追加でチームまたは開発者、品質管理の専門家などを雇うということもありえます。(例えばプロジェクトが予想外に大きく変更されたり、技術的に大きく変更があった場合に、当初のチームは継続して仕事を完成させる一方で、新たなチームは新たな部分を作業するなど臨機応変に対応。)
- カスタマイズできる点はアジャイルの特徴ですが、カスタマイズはあくまで作業工程に含まれているもので、作業の流れ自体を乱すものではありません。
- アジャイルはおそらく最速で試作品を立ち上げることができる方法論です。そのためデモを使った評価やテストも早い段階で可能ということになります。
- エンドユーザーとコミュニケーションをとり、そのフィードバックを開発に生かすことができます。
- タイムボックスを使うことで開発過程と全体的な製品の進捗状況がよく把握できます。
アジャイルのデメリット
- アジャイルには致命的な弱点があります。アジャイル開発ではその都度ごと頻繁な変更が可能なため、さまざまな技術を使い実験が繰り返されます。そのため製品の仕様や設計を綿密に定めておかないと、最終製品の品質を落としかねません。この問題は、プロジェクトマネージャーなしにプロジェクトを進めようとする初心者や企業が陥りやすい深刻な問題です。
- さらに、このような方法は将来的にプロジェクトのスケーラビリティを制限してしまう可能性があります。小さなプロジェクトなら修正可能な場合も、プロジェクトが大規模になれば開発を根底から覆すことになりかねません。
- 定期的な修正、または技術の変更という条件のもとでは、プロジェクトを完成できないリスクもあります。配信後の製品がどうあるべきかを十分に想定できない、または望まれる結果をどのように達成するかがわからない場合、経験の浅いチームは停滞してしまいます。
まとめ
アジャイル vs.ウォーターフォール、どちらのほうが優れていると思いましたか。
アジャイルとウォーターフォールの方法論はそれぞれプラス面とマイナス面があります。ほとんどの場合、開発はどちらか一方の方法論によって実現することが可能です。
世界的な傾向をいうならば、プロジェクトが求める仕様とインプットするデータによって、どちらのメソッドを選ぶかが決まります。言い換えると、方法論の選択は開発における力量と締め切りまでの期間、そして最終製品に求められる品質によって変わってくるのです。
モバイルソフトウェアの開発に最適なプロジェクトマネジメントの方法、そしてそれを選ぶ基準は以下の通りです。
- プロジェクトの特性
- 製品の仕様
- インプットデータとクライアントの好み(デベロッパー企業チームとビジネス相手のインタラクションで決まる)
- 開発製品の規模と重大さ
いかがでしたでしょうか。
どちらかに絞るのではなく、ウォーターフォール開発とアジャイル開発両方の良い点を生かすように組み合わせるというのもひとつの方法ですね。いろいろ検討してみてください。
また、TechAcademyでは初心者でもエンジニアになれるオンラインブートキャンプを開催しています。
現役エンジニアがパーソナルメンターとして受講生に1人ずつつき、マンツーマンのメンタリングで学習をサポートし、最短4週間でオリジナルWebサービスを開発することが可能です。
プログラミングスキルを身につけたい方もこれからエンジニアとして働きたいと考えている方もぜひご覧ください。