アジャイル開発テストの全て!4象限とは何?実践方法からTDDまで
近年主流になっているアジャイル開発を円滑に進めるためには、開発手法の選択が重要です。
アジャイル開発の手法にはいくつか種類があり、それぞれ特徴や定義されている範囲が異なるため、プロダクトの要件や体制などに合わせて適切なものを選ぶ必要があります。
本記事では、アジャイル開発の手法の種類やそれぞれの違い、選び方について解説します。
各手法の特徴やそれぞれの違いを理解し、プロジェクトにあった手法を選択しましょう。
1.アジャイル開発とは?
アジャイル開発とは、「一つのプロジェクトをいくつかのサイクルに分け、素早く機敏に、短いスパンでリリースを繰り返す開発手法」のことです。
そもそも「アジャイル(Agile)」という言葉には、「素早い」「機敏な」という意味があり、その言葉の通りの開発手法といえます。
これまでの主流であったウォーターフォール開発では、企画から計画・設計・実装・テストの順に、川が上流から下流に流れるように順次実施していました。
アジャイル開発では、機能ごとにいくつかのサイクルに分け、計画・設計・実装・テストをサイクルごとに行うのが特徴です。
これにより、エンドユーザーへのサービス提供スピードが早くなるため、いち早くフィードバックをもらえます。受け取ったフィードバックをもとに、システムの改善をスピーディーに行えるのがアジャイル開発のメリットです。
2.人気のあるアジャイル開発手法6選
先述の通り、アジャイルの開発手法はいくつも存在するため、全てを把握するのは難しいでしょう。ここでは、実際の開発現場で選ばれている、人気の開発手法に絞って紹介します。
①スクラム
アジャイル開発の手法のなかで最も一般的なのが「スクラム」です。
スクラムでは、プロジェクト管理を重要視します。プロジェクトを「スプリント」と呼ばれる期間に分割し、そのなかで計画・設計・実装・テストを行います。
スクラム期間中は毎日デイリースクラムで進捗や課題を共有。チームメンバー全員が一丸となって、プロジェクトを管理しながら、プロジェクトの成功に向けて協力し合います。
また、各チームメンバーに次の3つの役割のどれかを与え、それぞれが責任を持ってプロジェクトを進行する点も特徴です。
役割 | 担当する領域 |
プロダクトオーナー | プロジェクトの最高責任者。 プロダクト全体のビジョンを決定し、スプリントごとの評価を担当。 |
開発者 | プロダクトのビジョンに沿って開発。 進捗管理や作業完了の意思決定など、スプリントへの責任を持つ。 |
スクラムマスター | スクラムを確立させることに責任を持つ。 ステークホルダーとチームの間に立ち、プロジェクト遂行に向けて働きかける。 |
スクラムの定義やチーム構成についてはスクラムガイドにまとめられているので、目を通してみてください。
②カンバン
カンバンは、視覚的にタスクを管理するフレームワークです。作業を可視化し、進行する作業に上限を設けることで、効率を最大化することを目的としています。
カンバン単体で開発を進めるというよりは、スクラムなど他の手法と併用されることがほとんどでしょう。
カンバンでは、以下のような情報を視覚的に確認することが可能です。
・タスクや成果物
・タスクの担当者
・タスクの詳細
・期限
・優先度
・ステータス など
③リーン開発
リーン開発は、製造業で使われるリーン生産方式をソフトウェア開発に適用したものです。英語の頭文字を取って、LSD(Lean Software Development)と表されることもあります。
リーン生産方式は、「ムダ、ムラ、ムリ」を最小化するための方法論です。それをソフトウェア開発に置き換え、「無駄を排除し、必要最小限のリソースで最大限の利益をあげる」ことを目的とします。
具体的には、「構築・計測・学習」という3段階のサイクルを極力短期間で回します。
ステップ | 対応内容 |
構築 | 仮説をもとにプロダクトを企画し、必要最低限の機能のみを実装したプロダクト(MVP:Minimum Viable Product)を開発する |
計測 | 開発されたプロダクトを実際に使ってもらい、フィードバックを得る |
学習 | フィードバックをもとにプロダクトを改善する |
必要最低限の機能を備えたMVPの作成によりコストを抑え、エンドユーザーのフィードバックを聞いて改善を重ねることで、リソースの無駄を削減できるのです。
④エクストリーム・プログラミング(XP)
エクストリーム・プログラミング(XP:eXtreme Programming)では、スクラムと同様に設計・実装・テストを短期間で繰り返します。
スクラムとの違いとして最もわかりやすく、かつXPで最も特徴的な点として、いくつかのプラクティスに従って開発を進めることが挙げられるでしょう。
プラクティスは以下4つのカテゴリに分けられます。
カテゴリ | 対象 | 主なプラクティス |
共同プラクティス | 全員 | ・反復 ・共通の用語 ・オープンな作業空間 ・回顧 |
開発プラクティス | 開発者 | ・ペアプログラミング ・リファクタリング ・TDD(テスト駆動開発) |
管理者プラクティス | 管理者 | ・責任の受け入れ ・援護 ・四半期ごとの見直し ・持続可能なペース |
顧客プラクティス | 顧客 | ・ストーリーの作成 ・リリース計画 ・受け入れテスト |
ここから、XPにおいて重要度の高い「共同プラクティス」「開発プラクティス」の2つに焦点をあてて説明します。
共同プラクティス
XPに関わる全員を対象としたプラクティスです。主に以下4つのプラクティスから構成されます。
・反復:1〜2週間で一つのイテレーションを終了し、これを何度も繰り返す
・共通の用語:用語集を作成し、コミュニケーションの齟齬が発生するのを防ぐ
・オープンな作業空間:密にコミュニケーションをとる
・回顧:ミスが再発しないよう、状況の把握やフィードバックによる振り返りを行う
開発プラクティス
開発プラクティスは、その名前の通り開発チームを対象としています。
代表的な開発プラクティスは以下です。
・ペアプログラミング:2人1組でプログラミングを行う
・リファクタリング:完成したコードを改善し、メンテナンス性を高める
・TDD(テスト駆動開発):実装前にテストコードを作成する
⑤ユーザー機能駆動開発(FDD)
ユーザー機能駆動開発(FDD:Feature Driven Development)とは、その名前の意味する通り「ユーザーの目線に立った開発を目指す開発手法」のこと。英語名に含まれる「Feature(フィーチャー)」とは、ユーザーから見た機能の単位を指します。
ユーザー視点で見た機能単位で開発チームを分けることで、大規模なプロジェクトにも対応できるのが特徴です。
FDDでは、まず全体モデルを作成したうえで、機能(フィーチャー)ごとに計画・設計・構築を行います。
フィーチャー単位のサイクル期間が短く、1〜2日程度で実施する点も特徴的です。
⑥動的システム開発手法(DSDM)
動的システム開発手法(DSDM:Dynamic System Development Methodology)は、ソフトウェア開発プロジェクトのライフサイクル全般をカバーするために生まれた開発手法です。
DSDMでは、以下の8つを原則としています。
- ビジネス要求にフォーカスする
- 納期通りに提供する
- 協力する
- 品質に妥協しない
- 確固たる基礎を築いてから漸進的に構築する
- 反復的に開発する
- 継続的に、明確にコミュニケーションする
- プロジェクトを制御する
参考:アジャイル開発(アジャイルソフトウェア開発)|住友電工情報システム
この原則をもとに、アジャイルプロセスはもちろん、ツールやマンパワーを適切に組み合わせて駆使し、プロジェクトを円滑に進めます。
開発者やエンドユーザー、ステークホルダーなど、関係者全員の積極的な関わりを重視している点も特徴です。
3.アジャイル開発手法の違いとは?
ここまでで紹介した6つの開発手法について、それぞれの特徴を表にまとめました。
開発手法 | 価値・理念 | チーム構成 | プロセス・流れ | プラクティス・技法 |
スクラム | 反復・増分型の開発によるプロジェクト管理 | プロダクトオーナー、スクラムマスター、開発者 | スプリントプランニング、デイリースクラム、開発作業、スプリントレビュー、スプリントレトロスペクティブ | バックログリファインメント、スプリントゴール、定義されたワークフロー |
カンバン | ワークフローの可視化と制約による無駄の削減 | – | タスクの可視化、制限付きのワークフロー | ボードによるタスクの可視化、WIP(Work in Progress)リミット |
リーン開発 | ムダを省くための7つの原則(ムダの排除、遅延の排除、在庫の最小化など) | – | プロジェクトの全体最適化、価値ストリームマッピング、カンバンを利用した可視化 | |
XP | 要求の変化に対応、全体的な品質向上、チーム内のコミュニケーション強化 | 流動的なチーム構成 | ユーザーストーリーの作成、リリースとイテレーション計画、テスト駆動開発、リファクタリング | ペアプログラミング、集中コード所有、継続的インテグレーション |
FDD | ユーザー目線で価値のある機能の実装 | 動的に決定される役割ベースのチーム | 5つの活動:全体モデル開発、フィーチャーリスト構築、フィーチャー毎の計画、フィーチャー毎の設計、フィーチャー毎の構築 | ドメインオブジェクトモデリング、開発の進行管理、ソースコード管理 |
DSDM | プロジェクトの具体的なベネフィットを提供する | – | 8つの主要なプロセス:プロジェクトのライフサイクルを通じてフェーズとアクティビティを定義 | モジュール性、プロトタイピング、タイムボクシング |
ここからは、手法ごとの違いについて詳しくみていきましょう。
①手法が重視するポイントが違う
アジャイル開発の手法はいくつも存在しますが、それぞれで重視するポイントが異なります。
最も一般的な手法であるスクラムではプロジェクト管理を重視する一方、XPではコミュニケーションを重視して開発を行います。リーン開発は徹底的に無駄を省き、少ないリソースで最大限の利益をあげることを重視している点が特徴です。
このように、手法ごとに重視するポイントは異なるので、プロジェクトの方向性やリソース状況、チームの状態に応じて適切な手法を選択しましょう。
②手法がカバーする範囲が違う
また、各手法がカバーする範囲についても違いがあります。
例えばスクラムではスクラムチームのメンバーの種類まで定義されていますが、カンバンにおいてはチームメンバーが定義されておらず、主にワークフローを可視化する技術的な定義のみされています。
共通するのは、各手法で重要視するポイントについて定義されているという点です。
XPやFDD、DSDMにおいては具体的なプロセスやプラクティスまで定義されており、チームメンバー同士で認識を揃えやすい反面、開発の柔軟性が損なわれることもあります。
このように、カバーする範囲やそれによる注意点がそれぞれ異なるので、きちんと理解したうえで開発手法を選ぶ必要があります。
4.アジャイル開発手法の選び方
それぞれの手法について理解したところで、ここでは開発手法の選び方について解説します。
開発手法 | プロジェクトの規模 | 開発チームの経験値 | 開発期間の長さ | その他の特性 |
スクラム | 小〜中規模 | 中~高 | 中期(数週間~数ヶ月) | チームが自己組織化でき、定期的なリリースが可能なプロジェクト |
カンバン | 任意 | 任意 | 短~長期 | タスクの優先順位が頻繁に変わり、継続的な改善が求められるプロジェクト |
リーン開発 | 任意 | 中~高 | 長期 | 無駄を排除し、全体最適化を追求するプロジェクト |
XP | 小~中規模 | 高 | 短~中期 | 品質に重きを置き、顧客との協働が可能なプロジェクト |
FDD | 大規模 | 高 | 長期 | 多数のチームが関与し、明確な機能リストに基づいて開発を進めるプロジェクト |
DSDM | 中大規模 | 高 | 中~長期 | 時間や予算が厳しく制約され、ビジネス要求が高いプロジェクト |
①プロジェクトの規模で決める
アジャイル開発の手法を決める際、まずプロジェクトの規模を起点に考えてみましょう。
プロジェクトの規模が大きい場合は、具体的な機能リストに基づいて開発を進めるFDDや、開発フェーズを細かく管理するDSDMなどが適切です。
これらは柔軟さが求められるアジャイル開発のなかで、比較的厳しいルールのもと開発を行うという共通点があります。細かく管理することで、大規模なプロジェクトにおいても崩壊せずに開発を進めやすいためです。
反対に、規模が小さく柔軟な対応が求められる場合には、変化に対応しやすいスクラムやXPを選ぶと良いでしょう。
②開発チームの経験値で決める
次に考慮したいのが、開発チームの経験値です。
前提として、アジャイル開発においてはチームが主体的にプロジェクトを推進する「自己組織化」が重要になるため、どの手法を選択するとしても一定以上のスキルは必要です。
なかでも、XPやFDD、DSDMにおいては、より開発チーム全体の経験値の高さが求められます。これは、ペアプログラミングを行ったり、具体的なプラクティスが決まっていたりと、ある程度の技術スキルを有している前提の開発手法であるためです。
また、スクラムはチームメンバーごとに役割が与えられ、それぞれがその範囲に責任を持つので、中〜高程度のスキルがある場合に向いています。
③開発期間の長さで決める
開発手法を決める際に、開発期間の長さも判断材料になります。
開発期間が短い場合は、短期間にリリースを繰り返し、柔軟かつ迅速に開発を進められるスクラムやXPを選ぶと良いでしょう。
期間が長い場合には、タスクの遅延や滞留などが起こらないよう、リソース管理やプロジェクト全体の流れを考慮しているFDDが適しています。
5.開発手法を組み合わせて使うには?
前項で開発手法の選び方を解説しましたが、実は開発手法は一つにこだわる必要はありません。
複数の手法を組み合わせることで、より効率的かつ円滑に開発を進められる場合もあります。
例えば、カンバンはタスクの可視化という技術的な側面が強い手法なので、他の手法のなかでテクニックとして使用できます。また、リーン開発については無駄を省くという理念・原則なので、それを他の手法に応用することも可能です。
実際の開発現場においては、以下のような組み合わせで使われています。
・スクラムとカンバン
・リーン開発とFDD など
また手法は他にもあるため、実際に使用する際には各手法の特徴や定義を理解したうえで、どの手法を使うべきか・どう組み合わせるべきかを判断しないといけません。
開発手法の選択や組み合わせを決定し、開発現場で取り入れるためには、各手法についての知識やスキルを持った、アジャイル開発を促進できる人材の確保が必要になるでしょう。
6.まとめ
アジャイル開発にはスクラムだけでなく、様々な手法があります。手法ごとにカバー範囲や重視するポイントが異なるため、プロジェクトの方向性や、体制によって選ぶ必要があります。
また、複数の手法を組み合わせることで、円滑に開発を進められます。
アジャイル開発は、優れた開発手法ですが、メンバーには一定のスキルが求められます。
トレノケートでは、今後アジャイル開発を推進できる人材を教育するカリキュラムを提供する予定です。
またエンジニア人材育成のための「伴走型メンタリングサービス」も提供しています。
即戦力となる人材育成にお役立ててください。
※掲載された社名、製品名は、各社の商標及び登録商標です。