システム開発における開発手法には、さまざまな手法が存在しています。
現在、ビジネスにおけるスピードと変化の早さは増し続けており、ITシステムの開発にもスピードが求められるようになりました。
そこで誕生したのがアジャイル開発です。これは、従来の上流工程から下流工程へ作業が流れていくウォータフォールの欠点を改善するために生まれたものです。
本記事では、アジャイル開発に関する基礎知識やメリット・デメリット、アジャイル開発に向いているプロジェクトなどについて解説していきます。
アジャイル開発とは
アジャイル開発は、短い期間で「設計・開発・テスト・リリース」のサイクルを繰り返し行う開発手法のことです。アジャイルには「俊敏な」や「素早い」といった意味があります。
アジャイル開発では、ステークホルダー(チームメンバー・クライアント・顧客)と協力しながら柔軟に変化に対応することを重要としています。そのため、短期間で開発サイクルを回し、それを繰り返すことによってユーザーニーズの変化や市場の変化に対応したシステム開発を行うことができます。
アジャイル開発の歴史
2001年に「アジャイルソフトウェア開発宣言」が出されてから、アジャイルという言葉は広く知られるようになりました。
アジャイルソフトウェア開発宣言は、アメリカのユタ州にて当時ソフトウェアの開発者が集まり、開発手法のあるべき姿をまとめたもので、「4つの価値」が提唱されています。
アジャイルソフトウェア開発宣言
アジャイルソフトウェア開発宣言の「4つの価値」には、次のようなものがあります。
- プロセスやツールよりも個人との対話を重視する
- 包括的なドキュメントよりも動くソフトウェアを重視する
- 契約交渉よりも顧客との協調を重視する
- 計画に従うよりも変化への対応を重視する
1. プロセスやツールよりも個人との対話を重視する
プロセスや良いツールに頼るのではなく、個人とのコミュニケーションを重視することによってチームの対応力を向上しようとする考え方。
2. 包括的なドキュメントよりも動くソフトウェアを重視する
ドキュメントの作成や管理に膨大な時間を割くのではなく、フィードバックを踏まえながらソフトウェア開発にフォーカスすることで、本当の価値のあるソフトウェアを開発できるという考え方。
3. 契約交渉よりも顧客との協調を重視する
顧客を契約上の相手として考え、契約交渉することに注力するのではなく、顧客を協調して一緒になって良いものを作り出すパートナーとして捉えるという考え方。
4. 計画に従うよりも変化への対応を重視する
当初の計画が全てというわけではないため、顧客やユーザーニーズの変化に柔軟に対応できるようにするという考え方。
アジャイル開発工程
アジャイル開発は、優先度の高い機能から実装されます。アジャイル開発における開発工程には次のような工程があります。
1.リリース計画
リリース計画では、要件や仕様、スケジュールなどを開発者側と発注者側の意見をすり合わせながら決定していきます。また、アジャイル開発のリリース計画はとても流動的なため、チームパフォーマンスや進捗状態によって更新され、精度をあげていきます。
リリース計画で決定することには次のような項目があります。
- 開発する機能の優先順位
- プロジェクトのゴール(機能・納期・費用)
- イテレーションの長さ(リリースまでの期限)
イテレーション
定められた要件に合わせて「設計→開発→テスト→リリース」をイテレーション内で実施し、その結果を元にフィードバックを受けて改善していきます。
フィードバックの結果を次回のイテレーションに反映していくことで、クライアントの要望に沿ったシステム開発を短期間で実現することができます。
1. 要件定義
要件定義は、クライアントからの要求をヒアリングすることで、実際に開発するシステムの目的を決定します。
要件定義を適切に行い、クライアントが求めているものを明確にすることで、認識の相違を無くしていくことが重要です。
2. 設計
開発を行う前には、「基本設計」や「詳細設計」といった、仕様や機能を具体的に決定していくことが必要です。
基本設計はクライアントに向けて行われる設計のことで、外部設計とも言われます。これは、要件定義でヒアリングした要求をもとに設計を行い、システムの概要をクライアントへ伝えるために実施されます。
一方、詳細設計はプログラマーの視点で行われる設計のことで、内部設計とも言われます。どのようなシステムをどうやって開発するかを設計し、データの流れや処理のフローなどを設計書にまとめていきます。
3.開発
開発の工程では、実際にプログラマーが設計書を参考にプログラムを組んで開発していきます。この段階で設計ミスなどが発覚した際には、再度設計の工程に戻って再設計を行ったりします。
4.テスト
開発が完了したら、テストを実施してシステムが要件通りに動作するかどうかを確認していきます。テストには「単体テスト」「結合テスト」「総合テスト」などがあります。
単体テストでは、機能ごとのプログラムが正常に動作することを確認していきます。一方、結合テストでは外部システムとの連携や他の機能と連携させた際の動作が正常かどうかを確認します。総合テストでは本番環境と同様の環境でシステム全体の動作確認を実施します。
5.リリース
テストの工程でシステムに問題が発生しないことが確認できれば実際にリリースされます。リリースされた成果物をクライアントに実際に触ってもらい、フィードバックをもらいます。
アジャイル開発の特徴
開発サイクルを繰り返す
アジャイル開発では、「設計・開発・テスト・リリース」といった小さなサイクルを何度も繰り返します。こうすることで、定期的にクライアントの要件を見直すことができ、リリースまでのリードタイムを短縮することができます。
柔軟な変更対応
小さな開発サイクルを回すことで、ユーザーニーズやクライアントの要望を素早く取り入れることができるため、仕様変更や修正作業に柔軟に対応することができます。また、リリース後はフィードバックを受けることができるため、システムの改善なども迅速に対応することができます。
開発スピードが早い
アジャイル開発では、機能単位で要件の見直しや設計を実施するため、設計ミスによる出戻りのリスクが低くなります。そのため、重大な問題となりうる要因を早期に発見することができます。
ウォータフォールモデルとアジャイル開発の違い
ウォータフォールモデルは、あらかじめ要件や仕様をすべて決定し、計画に沿って開発を実施していきます。システム全体の要件定義や基本設計といった上流工程から、開発やテストといった下流工程にかけて順番に作業が進んでいくため、設計段階での問題や仕様変更があった場合、追加で多くのコストや時間が必要となります。
一方、アジャイル開発は計画の変更があることを前提とした開発手法であるため、柔軟な対応をすることができます。また、ウォータフォールモデルは大規模なプロジェクトに用いられますが、アジャイル開発は小規模なプロジェクトに適している開発手法となります。
アジャイル開発のメリットとデメリット
アジャイル開発のメリット
アジャイル開発は、ユーザーニーズやクライアントの要件、仕様の変更などに柔軟に対応することができます。また、開発期間中もコミュニケーションを図りながら開発をすることで、最大限にクライアントの要望に応えることができます。
また、トラブルが発生した際には前の工程に戻る工数が少なくすむため、トラブル時のコストや時間が発生しにくいというメリットがあります。
アジャイル開発のデメリット
アジャイル開発は、プロジェクト全体のスケジュール管理が難しいというデメリットもあります。これは変更された仕様や計画により、さらに工数が必要となってしまう可能性があるため、全体的なスケジュールをきちんとコントロールする必要があります。
また、要件や仕様の変更を繰り返すことで、開発の方向性がぶれてしまう可能性もあるため、適切な管理が求められます。
アジャイル開発の種類
アジャイル開発にはさまざまな開発手法があります。代表的なアジャイル開発の手法には次のようなものがあります。
スクラム開発
スクラム開発は、開発者やクライアントがチーム一体となって開発を行う手法です。これはアジャイル開発の手法の中で最もメジャーな手法となっています。
スクラム開発では、メンバーそれぞれがイテレーションごとに計画・設計・実装を行うことで、メンバーの一人一人が役割を持って開発に取り組むことができます。そのため、あらゆる作業を同時に遂行することができる一方、各自の進捗報告や問題共有ができていないとプロジェクトが停滞してしまうため、チーム内でのコミュニケーションが非常に重要となります。
エクストリーム・プログラミング(XP)
エクストリームプログラミング(XP)は、仕様変更や追加要件があることを前提に開発を進めるための手法です。プログラマー中心の開発手法となっており、プログラマーのスキルに依存してしまう可能性があります。
エクストリームプログラミング(XP)を実践するにあたり、重視するべき「5つの価値(コミュニケーション・シンプル・フィードバック・勇気・尊重)」が定義されています。
- コミュニケーション
- チーム内だけのコミュニケーションではなく、クライアントやその他のステークホルダーとのコミュニケーションも重視する。
- シンプル
- 設計は極力シンプルに行い、その上で必要な機能が出てきた際には、その都度設計に追加する。
- フィードバック
- クライアントからのフィードバックを重視することで、成果物の制度を高めていく。
- 勇気
- あらかじめ綿密な計画を立てないため、途中で大胆な変更が求められることがある。
- 尊重
- チーム開発を実施する上で、他のメンバーを尊重する。
ユーザー機能駆動開発(FDD)
ユーザー機能駆動開発とは、ユーザーの視点から価値のある機能を中心に開発を進めていく開発手法です。ユーザーが求める要求を明確にする必要があるため、計画の段階から密なコミュニケーションを取ることが重要になります。
また、機能単位でチームを編成して開発をおこない、機能に重点を置いているため価値の高い機能を実装しやすい特徴があります。
アジャイル開発が向いているプロジェクト
要件がはっきりとしていないプロジェクト
プロジェクトには要件が固まっていない状態でも発進されるプロジェクトがあります。
アジャイル開発では、プロジェクト要件の全体像がはっきりとしていないプロジェクトでも、クライアントと成果物を確認しながら生合成を保ちつつ最終的な形へ近づけていくことができます。
環境や状況によって開発の優先度が変更されるプロジェクト
ビジネスを取り巻く環境やユーザーのニーズは常に変化しています。そのため、クライアントの要望が変化することもよくあることです。
アジャイル開発では、開発する優先度を自由に変更することができるため、主要な機能から開発を着手することができます。また、完成したものからリリースしていくため、状況に応じて迅速に機能を提供していくことが可能です。
クライアントが協力して参画してくれるプロジェクト
アジャイル開発ではクライアントもチームの一員として参画することで、柔軟かつ迅速な開発を実施することができます。
また、チーム内にクライアントが参画しているため、開発メンバーにとっても要件がすぐに共有されることで、よりスピード感の高い開発をおこなうことができます。
アジャイル開発の基本用語
ユーザーストーリー
ユーザーストーリーとは、アジャイル開発においてユーザーにシステムがどのような価値をもたらすかを定義したものです。これは、「要件」に代わって用いられる概念で、「どのようなユーザーの立場で、どんな目的を達成したいのか」や「どのような課題があって、どのような目的のために必要なのか」といったことを細分化して作成します。
プロダクトオーナー
プロダクトオーナーとは、スクラム開発において開発の方向性を定義したり、チームマネジメントやステークホルダーとの調整業務を行う役割を担う人物のことです。
開発プロセスの各工程や製品品質などの最終的な責任を負い、最終的な決定を下す役割なども果たします。
ベロシティ
ベロシティとは、イテレーション内に完了する平均作業量をストーリーポイントや時間数で表現したもので、進捗状況や開発の完了時期の予測などに役立ちます。
タスクごとにポイントを設定し、チームの開発がどの程度進んでいるのかを可視化することで、さまざまな要素を把握するための材料として利用することができます。
まとめ
本記事ではアジャイル開発についての基礎的な知識やメリット・デメリットなどを解説しました。
アジャイル開発では柔軟かつ効率的な開発ができる一方、適さないプロジェクトなどもあるため、プロジェクトにあっている開発手法を採用することがとても重要となります。
アジャイル開発の特徴やそれぞれの開発手法をきちんと理解することで、プロジェクトの成功に一歩近づけるため、きちんと理解を深めるところから初めてみてはいかがでしょうか。
コメント