アジャイル開発は既にシステム開発やアプリケーション開発において、従来のウォーターフォールに替わり主流となっている開発手法です。
しかし、アジャイル開発はどのようなプロジェクトでも適しているというわけではありません。開発の種類やプロジェクトの規模などによって、最適な開発手法を選定する必要があります。
アジャイル開発を用いれば、従来の方法よりも大幅に開発期間を短縮できると言われています。
ではどのようなプロジェクトが向いているのか気になりますよね。
この記事では、システム開発における代表的な開発手法の一つである「アジャイル開発」について、開発手法の特徴、メリットやデメリットなどを解説します。
■□■□プログラマーなどITエンジニアを目指しているならIT業界専門転職サイト「Javaキャリ」が最適!完全無料の会員登録はこちらから■□■□
Contents
アジャイル開発とは
アジャイルとは
アジャイルとは、直訳で「素早い」「機敏な」「回転の速い」という意味を持ちます。アジャイル開発とは、システムやソフトウェアの開発手法の一つです。「計画→設計→実装→テスト」という開発工程を機能単位の小さいサイクルで繰り返すのが最大の特徴です。
開発を進める中での学びや顧客やユーザーからのフィードバックといったさまざまなインプットを得ながらプロダクトの完成度を高めていくアプローチを採用しています。優先度の高い要件から順番に開発を進めていき、開発した各機能の集合体として1つのシステムを形成します。プロジェクトに変更はつきものだという前提で進められるため、仕様変更に強いのが特徴です。
アジャイルソフトウェア開発宣言
アジャイルソフトウェア開発宣言(※)とは、2001年にソフトウェア開発手法分野で活躍していた複数の専門家によってまとめられた文書です。この宣言がアジャイル開発を公式に定義した文書だと考えられています。
この文書では、以下の4つの事項について特に価値をおくと述べられています。
- 個人との対話
- 実際に雨読ソフトウェア
- 顧客との協調・コミュニケーション
- 変化への対応
この4つの事項は、「より動的で高い対応力や柔軟性につながる要素」を特に重要視しているということがポイントです。
※参考:アジャイルソフトウェア開発宣言
従来のウォーターフォール開発との違い
アジャイルが活用される前までは、ウォーターフォール開発といった手法でシステムが開発されることが一般的でした。これら二つの手法の大きな違いは、開発プロセスの進め方です。
ウォーターフォール開発は、上から下に各工程を後戻りしない前提で進めていく開発手法に対して、アジャイル開発は後戻りがある前提で、とにかく機能単位で素早く開発を繰り返していく手法です。
ウォーターフォール開発は、仕様が決まっており、仕様変更が発生する可能性がないシステムの開発に適しています。アジャイル開発は、仕様や要件が固まりきっておらず、仕様変更が発生する可能性があるシステムの開発に適しています。
これまでのシステム開発では、全体を設計してから開発するというウォーターフォール開発が主流でしたが、近年では、時代の変化や最新技術の登場により、素早い仕様変更がもとめられることが増え、アジャイル開発の普及が進むようになりました。
アジャイル開発のメリット
アジャイル開発のメリットについて解説します。
トラブル発生時の修正工数が少なくなりやすい
アジャイル開発では、小さい機能単位で開発しているため、修正が発生した場合も影響範囲が小さいため工数が少なくなるメリットがあります。ウォーターフォール開発では、いくつかの機能をまとめて開発しているため、トラブルの発生箇所によっては、手戻りの工数が多くなりやすいことが難点です。
柔軟性と拡張性が高い
各スプリントで顧客要望とのすり合わせが行われ、改善点が見つかれば次回のスプリントで反映されます。そのため、柔軟性が高く顧客のニーズに応えやすいというメリットがあります。また、追加の機能を求められた場合も素早く対応することができ、拡張性が高いです。
とにかく開発スピードが速い
各機能を切り分けて開発し、優先度の高い機能からテストを完了させ、その都度リリースするため、開発にかける時間を短縮して実装することができます。
アジャイル開発のデメリット
全体スケジュールを管理しにくい
機能ごとにスケジュールをたてることや、仕様変更がある前提の開発手法であるため、プロジェクト全体のスケジュールや進捗状況を把握しにくい傾向にあります。開発スピードは速くても、開発期間が長くなることもあり、デッドラインが決まっており、リリースタイミングをコントロールしなければいけないプロジェクトにはアジャイル開発は向いていません。
開発の方向性がぶれやすい
明確な仕様を決めずに、要件の追加や変更を繰り返していくため、開発の方向性がぶれやすい傾向にあります。仕様変更に対して柔軟な対応が可能であるがゆえに、テストや改善を繰り返した結果、当初の計画の方向性がぶれることが発生することもあります。また、あまりに多くの要望や仕様変更を受け入れてしまうことによって、予定よりも工期がかかり、最終的にコストも高くなってしまうことも考えられます。
アジャイル開発の種類
一言でアジャイル開発といっても、その手法はさまざまあります。手法によって、進め方やプロジェクトに適している状況も異なります。アジャイル開発の中でも最適な手法を選択することで、より一層開発プロジェクトを進めやすくなるでしょう。
ここでは、3つの開発手法について解説します。
スクラム
スクラムは、数多くの開発で利用されており、アジャイル開発の代表的な例の一つです。スクラム開発では、スプリントと呼ばれる短い期間で開発を繰り返し行い、頻繁にフィードバックを行う手法です。スプリントごとに少人数でチームを組んで1つ以上の成果物を仕上げます。他の手法に比べて、プロジェクトの進捗やスケジュール管理を重視しており、シンプルな構成の手法であるため、さまざまな開発に応用しやすいのが特徴です。
エクストリーム・プログラミング
エクストリーム・プログラミングは、他の手法に比べて、仕様変更への対応力を高めた手法です。プロジェクト開始時に、プロジェクト全体の細かな計画は立てずに短期間の開発サイクルを繰り返し、計画を決めていくことで、仕様変更が発生した場合のコストを抑えます。
ソフトウェアを設計して開発し、テストまでのサイクルをイテレーションといいます。エクストリーム・プログラミングでは、このイテレーションを何度も反復することが特徴です。反復する中で、開発の方向性を固めるために他のプログラマーや顧客との密接なコミュニケーションを重視します。
ユーザー機能駆動開発
ユーザー機能駆動開発とは、機能ごとにチームを分けて大規模開発にも対応しやすい手法です。ユーザーから見た機能の単位で開発チームを分割することで、大規模なプロジェクトにも対応できます。英語を省略してFDDと呼ばれることもあります。流れは、全体モデルを作成し開発の全体像明らかにした上で、機能ごとに切り分けて計画や設計と構築を行います。
アジャイル開発には向き不向きがある
アジャイル開発に向いているケース
顧客ニーズが漠然としている場合
顧客の要件が固まっておらず、漠然としていて開発内容の全体像が明確でない場合に、アジャイル開発は向いています。
開発の途中で、仕様変更があることを前提としているアジャイル開発では、開発の方向性が大体決まっていれば、開発を進めながら要件を決めることができます。
仕様変更が想定される場合
優先順位が変わる場合や、仕様変更が想定される場合など、開発の内容に影響するような状況であれば、アジャイル開発が向いています。アジャイル開発は、機能ごとの小さいまとまりに分割して開発を繰り返していくので、開発途中でも手戻りが少ない状態で仕様変更ができます。
アジャイル開発に向いてないケース
コミュニケーションが取りにくい場合
顧客だけでなく、開発チームの中を含めてコミュニケーションが取りにくい場合がは、アジャイル開発は向いていません。日々、フィードバックを繰り返し、開発のクォリティを高めるアジャイル開発では、コミュニケーションが活性化しないと開発が思うように進まなくなり、余計な時間やコストがかかる可能性があるからです。
納期のデッドラインが決まっている場合
最終的なリリース時期が確定していて、納期のデッドラインが求められる場合はアジャイル開発は向いていません。アジャイル開発は、複数の開発サイクルを反復したり、仕様変更を前提していることから、スケジュール管理が難しいためです。
まとめ
アジャイル開発は実装を進行中のプロジェクトの仕様変更・拡張にも柔軟に対応し、従来よりも短い期間での開発を実現する手法です。ウォーターフォール開発と違い、アジャイル開発では、あらかじめ厳密に仕様決定をせず、例えば機能ごとのような小さな単位での開発を繰り返していきます。こうすることで、仕様変更が発生した際に、後戻りが少なく機能改善がしやすくなるのです。
しかし、仕様が決定しており、プロジェクト進行中に検討する必要がない場合などは従来のウォーターフォール開発のが効率がいいケースもあります。
大切なのは、プロジェクトの内容によってどのような開発手法が適しているのかを判断することです。