アジャイル開発とは?ウォーターフォール開発との違いとスクラム手法・失敗の原因
アジャイル開発は、「スクラム」「XP」などの手法を活用する、従来のウォーターフォール開発とは異なるアプローチの開発手法です。開発がよりスピーディーに加速し、顧客ニーズにも柔軟に対応できる手法のため、いまではさまざまな現場で用いられています。
ただし、アジャイル開発には多くのメリットがあるものの、「時代遅れ」とされる向きや、進め方によっては失敗に終わることもあります。開発手法はプロジェクトに応じて選択するべきものです。
アジャイル開発とウォーターフォール開発の違いはなにか、アジャイル開発のメリットや懸念される課題も含め、開発手法の特徴を紐解いていきます。
Contents
アジャイル開発とは
アジャイル(Agile)は日本語で「素早い」と訳される通り、従来の開発手法と比較して開発スピードが速まることが大きな特徴です。具体的には、開発するシステムを小単位に切り分け、プランニング、設計、開発、テストまでの一連の工程を単位ごとに繰り返し、システム全体の開発を進めていきます。
各単位における開発工程は、プロジェクトの内容にもよりますが、おおむね5つに分類できます。
- 要件定義
- システム設計
- 開発・実装
- テスト
- リリース
アジャイル開発における要件定義やシステム設計では、厳密な粒度は求められません。ある程度の余白を残したまま迅速に開発に取りかかり、テスト・リリースまでの工程をサイクルさせる「イテレーション」と呼ばれる手法を採用することで、スピード感と柔軟性をもった開発環境を構築します。
プロジェクトが進行中の段階での仕様変更は、開発現場において珍しいことではありません。仕様変更をあらかじめ想定し設計に余白を持たせ、仕様変更に小単位ごとに対応できるようサイクルを細分化しておくことで、開発途中であっても顧客のニーズをシームレスに反映できるようになります。
アジャイルソフトウェア開発宣言
アジャイルソフトウェア開発宣言とは、2001年、アメリカのユタ州に集まった17名のエンジニアが提唱した、ソフトウェア開発を行う際の考え方です。アジャイル開発の普及のトリガーとなりました。
アジャイルソフトウェア開発宣言
私たちは、ソフトウェア開発の実践
あるいは実践を手助けをする活動を通じて、
よりよい開発方法を見つけだそうとしている。
この活動を通して、私たちは以下の価値に至った。
プロセスやツールよりも個人と対話を、
包括的なドキュメントよりも動くソフトウェアを、
契約交渉よりも顧客との協調を、
計画に従うことよりも変化への対応を、
価値とする。すなわち、左記のことがらに価値があることを
認めながらも、私たちは右記のことがらにより価値をおく。
「左記のことがら」「右記のことがら」は「従来の開発価値」「アジャイル開発の価値」とも言い換えられるでしょう。
従来の開発価値(左記のことがら) | アジャイル開発の価値(右記のことがら) |
---|---|
プロセスやツール | 個人と対話 |
包括的なドキュメント | 動くソフトウェア |
契約交渉 | 顧客との協調 |
計画に従う | 変化への対応 |
アジャイルソフトウェア開発宣言の考え方は、従来の開発価値を否定するのではなく、開発を通じて顧客とのコミュニケーションにも価値を置くことです。コミュニケーションに価値を置くことで、柔軟性に優れた開発手法を採用することが、アジャイル開発の本質となるでしょう。
加えて、アジャイルソフトウェア開発宣言を実践するための「12の原則」も定められました。この12の原則には、アジャイルソフトウェア開発宣言に取り組む姿勢や考え方が列挙されており、いまでもアジャイル開発を実行する際の指針となっています。
アジャイル開発の手法
アジャイル開発にはいくつかの手法があります。
- スクラム
- エクストリームプログラミング(XP)
- ユーザー機能駆動開発(FDD)
この3つの開発手法では、それぞれ重視されるポイントが異なるため、プロジェクトに適した手法が選ばれます。
スクラム
スクラムはアジャイル開発の手法でもっとも有名なものです。ラグビーのスクラムを語源としており、チーム開発を重視した開発手法となります。
スクラムでは、チームメンバーは以下の3つの役割にわかれます。
- プロダクトオーナー:プロジェクト全体を管理する
- スクラムマスター:開発を管理するリーダー、プロダクトオーナーへの進捗報告も行う
- 開発者:システムを実際に組み立てる
スクラムの特徴は、役割の垣根を越えて積極的にコミュニケーションを取り交わしていくことです。エラーや問題の早期発見や、工数管理のしやすさがメリットになります。
ただし、割り振られた役割を各メンバーが正しく理解できていないと、効率的な開発は望めません。振りわけられたポジション単位での役割の把握や、スケジュールの自己管理が重要になります。
エクストリームプログラミング(XP)
エクストリームプログラム(XP)は、要件や仕様変更への柔軟な対応を重視した手法です。
エンジニア2人1組による「ペアプログラミング」により効率的かつスピーディーに開発を進めていきます。ペアプログラミングでは、コードを共有し合いながらシステムを組みあげていくため、仕様変更やエラーにも2馬力で対応できる点がメリットになります。
ただし、ペアとなる技術者のスキル不足や経験不足が目立つ場合、サポートに追われることを余儀なくされるなど、効率が低下してしまう可能性もはらみます。技術者のスキルに左右される振れ幅が大きい手法ともいえるでしょう。
ユーザー機能駆動開発(FDD)
ユーザー機能駆動開発(FDD)は、開発システムの「顧客価値」にフォーカスした手法です。顧客の課題を抽出し、解決に向けた機能を選定していくなど、プロジェクトマネジメントを重視した手法ともいえるでしょう。
FDDでは、2週間以上などの開発期間が必要とされる機能を「feature」と呼ばれるさらに小さな機能に細分化します。featureの開発はバグの発生を低減し、開発完了後のシステム改修や機能拡張がしやすくなるメリットがあります。
一方、イテレーションの期間が短く定められるため、開発工程の後戻りのリスクは増大します。そのため、マイルストーンをさらに細かく設置して開発の進捗を定量的に管理していきます。
開発工程の管理に重点が置かれる点や、工程の後戻りにリスクを抱える特徴から、アジャイル開発の中でもウォーターフォール開発に近い手法とされています。
アジャイル開発とウォーターフォール開発
アジャイル開発が普及する以前、主流となっていた手法がウォーターフォール開発です。現在でもウォーターフォール開発を採用するプロジェクトは多く、システム開発の基本となるアプローチといえるでしょう。
開発手法に優劣を付けるのではなく、プロジェクトごとに最適な手法を選択できるよう、ウォーターフォール開発についてもいま一度理解しておきましょう。
ウォーターフォール開発とは
ウォーターフォール開発はアジャイル開発とは異なり、各開発工程を一本化させた開発手法です。水が下に落ちていく(Waterfall)の名称の通り、要件定義からテストまで後戻りせずに開発を進めていきます。
後戻りしない工程を前提とするため、要件定義や仕様計画には厳密な粒度が求められます。包括的な計画に沿って進行するため正確性の高い開発を行え、納期までのスケジュール管理が容易になる点もメリットになります。
こうした特徴から、ウォーターフォール開発は金融機関や医療、官公庁などの基幹システムの開発や大規模開発などで重宝されています。
ただし、テストまでの全行程の完了をもって納品されるため、機能単位で切り分けてリリースすることはできません。また、テスト工程でエラーが生じた際には、すべての機能をチェックして問題点を探っていくアプローチを取るため、修正に工数がかかってしまうことがウォーターフォール開発のデメリットです。
アジャイル開発とウォーターフォール開発の違い
アジャイル開発とウォーターフォール開発、両者の違いをあらためて確認していきましょう。
アジャイル開発 | ウォーターフォール開発 | |
---|---|---|
顧客ニーズへの対応 | 柔軟に対応できる | 仕様変更に対応しづらい |
開発のスピード感 | 相対的に速い | 相対的に遅い |
エラー発生への対応 | 柔軟に対応できる | 工数がかかる |
要件定義・仕様計画 | 余白を持たせる | 厳密に定める |
スケジュール管理 | 相対的に難しい | 相対的に容易 |
アジャイル開発では、小単位に切り分けた機能ごとに開発からテストまでのサイクルを回していくため、顧客ニーズへの柔軟な対応が可能です。一方、ウォーターフォール開発では工程の後戻りは想定されていないため、顧客ニーズの変化に対応しづらいという大きな違いが見て取れます。
しかし、ウォーターフォール開発は厳密な計画に基づいて開発を一本化して進めていくため、各機能をチーム単位ごとで開発していくアジャイル開発と比較して、スケジュール管理は容易になります。
アジャイル開発の流れ
アジャイル開発の作業工程は、俯瞰してみるとシンプルです。
- リリース計画
- イテレーション
リリース計画では要件定義や仕様設計、イテレーションでは開発やテストに細分化されますが、余白を持ちながら柔軟に工程を進行していきます。
1.リリース計画
リリース計画ではシステムに必要な機能の要件定義と仕様を定めます。
ポイントとなるのは、開発内容やスケジュールをあえて厳密に定めないことで、顧客ニーズに対応する余白を残すことです。開発する各機能の優先順位を付け、開発のおおまかな流れやスケジュールを決定していきます。
顧客の要望を抽出しておおよその仕様や要件定義が決まれば、見積もり書を含めた仕様書を作成し、内容に問題がなければ速やかに開発に取りかかります。
2.イテレーション
イテレーションとは日本語で「反復」や「繰り返し」を意味する言葉です。開発から実装、テストまでのサイクルを回しながら、効率的に開発を進めます。
要件が小単位ごとに切り分けられているため、イテレーションによる開発期間は短縮され、テストが完了した機能から順次納品していきます。
アジャイル開発のスピードが速いとされる要因は、このイテレーションにあるのです。
アジャイル開発は時代遅れ?失敗する原因と成功のポイント
アジャイル開発を採用したプロジェクトが上手くドライブしない、その原因にはさまざまな要素が考えられます。
- スクラムマスターが機能していない
- コミュニケーション不足
- 知識・技術不足
失敗する原因を深掘りし、成功に導くための対策を考えてみましょう。
スクラムマスターが機能していない
アジャイル開発のフレームワーク「スクラム」において、スクラムマスターは開発リーダーのポジションを担います。開発者の管理、および円滑なコミュニケーションを行い、チームの動きを最大化させることが求められる立場です。
このスクラムリーダーの役割が機能しなければ、開発はほぼ間違いなくとん挫するでしょう。開発者の進捗を管理できず、開発の遅れや要件とのズレが生じた機能となってしまうなど、深刻な問題の発生を招くからです。
スクラムリーダーは、プロジェクトの要件を的確に理解し、開発に求められるスキルや環境を担保しなければいけません。開発者を管理するなかで、必要に応じてサポートするなどのフォローも必要です。
コミュニケーション不足
アジャイル開発では、顧客とだけではなく、開発者同士でのコミュニケーションも必要不可欠です。機能ごとに構成された開発チーム内で十分にコミュニケーションを図り、積極的な情報共有や進捗管理を行わなければいけません。
また、コミュニケーション不足は、機能に求められる要件のメンバー間同期を妨げる要因となります。結果、機能が正常に動作しなかったり、要求通りの機能でなかったりという重大な問題にも発展しかねません。
毎日5~15分のミーティングを行う、「昨日のタスクの進捗」「今日やるタスク」「起こった問題点」の3点をそれぞれ共有するなど、密なコミュニケーションをオペレーションとして落とし込めるよう工夫しましょう。
知識・技術不足
アジャイル開発に限った話ではないですが、知識や技術不足は開発の失敗に直結します。
なかでもエクストリームプログラミングでは、技術不足の影響は顕著に現れます。エクストリームプログラミングでは2人1組でコードを共有しながら開発を進めるため、技術や知識が不足したエンジニアに対して、もう片方のメンバーによるサポート負荷は増大します。結果、開発効率が著しく低下するのです。
無理にコストを抑えようと経験の浅いエンジニアの割合を増やしてしまうことは、開発の失敗を招きます。チーム全体の半数は熟練したエンジニアを採用するなど、知識や技術が不足したエンジニアのフォローが容易になるような体制を整えるようにしましょう。
アジャイル開発が向いているプロジェクト
優れた開発アプローチであるアジャイル開発ですが、どのような手法にも向き・不向きがあり、万能なものはありません。アジャイル開発の特徴を踏まえ、適しているプロジェクトを見極めて採用しましょう。
開発途中で仕様や要件定義が変更される可能性のあるプロジェクト
IT業界やスタートアップ事業のような技術や環境の移り変わりが激しい分野では、開発途中にニーズが変化することは少なくありません。仕様変更へ柔軟に対応できる、アジャイル開発が適した領域といえるでしょう。
開発途中で仕様や要件定義が変更される可能性のあるプロジェクト
IT業界やスタートアップ事業のような技術や環境の移り変わりが激しい分野では、開発途中にニーズが変化することは少なくありません。仕様変更へ柔軟に対応できる、アジャイル開発が適した領域といえるでしょう。
リリースまでにスピードが求められるプロジェクト
リリースまでに余裕がなく、なによりもスピード感が求められるプロジェクトにもアジャイル開発が適しています。包括的なドキュメント作成を待つことなく、小単位ごとに迅速に開発に取り組むことで、プロジェクトの進捗を加速させます。
アジャイル開発のメリットとデメリット
ウォーターフォール開発との差分から、アジャイル開発の特徴・課題をまとめます。
【メリット】開発スピードが速い
小単位に切り分けた機能ごとに開発を進め、テストまで完了した機能から都度納品ができるため、開発にスピード感が生まれます。
ただし、アジャイル開発はスケジュール管理が煩雑化し、想定よりも時間がかかる可能性があるのは否めません。プロジェクトの管理者には、細やかなオペレーション管理が求められます。
【メリット】顧客ニーズの変化に対応しやすい
機能ごとに開発とテストのサイクルを回す、アジャイル開発の大きなメリットです。
ただし、要件定義や当初の設計から大幅に逸脱した機能改修など、すべての要望に対応できるわけではありません。顧客主体のプロジェクトとはいえ、要望に過剰な対応を取ってしまうと、開発環境や成果物は歪なものになってしまうでしょう。
【デメリット】全体のスケジュール管理が難しい
厳密な粒度で計画を策定せず、機能単位で適宜開発を進めていく手法であることから、プロジェクト全体の管理は難しくなります。
【デメリット】開発の指針からそれる可能性がある
顧客のニーズを優先させ過ぎると、システム開発の当初の指針や目的からそれる可能性があります。
顧客の新たな要望は、当初の計画からギャップがないか、目的達成において的確なものなのか? こうしたすり合わせはアジャイル開発において非常に重要となるため、顧客と円滑にコミュニケーションを取らなければいけません。
アジャイル開発の本質は顧客への適応性
アジャイル開発の本質は、顧客とのコミュニケーションに価値を置き、適応性を最大化することです。ひとつの開発手法、画一的なフレームワークと捉えるだけではなく、その本質の部分を理解しておきましょう。
アジャイル開発は万能な手法ではありません。プロジェクトに応じた最適な開発を選択できるよう、顧客のニーズや重視するポイントに向き合うことが大切です。
- アジャイル開発はスピーディーで柔軟性の高い、システムやソフトウェア開発の手法
- 2001年のアジャイルソフトウェア開発宣言により考え方が定められ、本格的に普及し始めた
- アジャイル開発には「スクラム」「エクストリームプログラミング(XP)」「ユーザー機能駆動開発(FDD)」の3つの手法がある
- イテレーションにより開発速度は加速するが、全体のスケジュール管理が煩雑化するリスクがある
- ウォーターフォール開発を含め、プロジェクトごとに最適な開発手法を選択する必要がある