アジャイル・ブームの再来
はじめに
"アジャイル"という言葉が、ソフトウエア開発現場において、広く知られています。皆さんも1度は耳にしたことがあると思います。
筆者は、開発者として、新人時代、社外常駐時代、プロジェクト・リーダー時代に、アジャイル開発に携わりました。本連載では、これらの経験から得たアジャイルの知見を示します。
第1回では、アジャイルの経緯と現状など、事前に知っておくべき内容を説明します。2000年代前半に立ち上がったアジャイルが「試行錯誤の時代」を経て再び注目されるようになった要因について解説します。
アジャイルに共通する4つの価値と12の原則
あらためて、アジャイルとは何かをおさらいします。
アジャイルとは、いくつかのソフトウエア開発手法の総称です。数多くのアジャイル開発手法が存在します。以下は、具体的なアジャイル開発手法の例です。
- Agile Modeling
- Agile Unified Process (AUP)
- Dynamic Systems Development Method (DSDM)
- Essential Unified Process (EssUP)
- eXtreme Programming (XP)
- Feature Driven Development (FDD)
- Open Unified Process (OpenUP)
- Scrum
これらはもともと、それぞれ異なる開発手法として提案されました。その後、各手法の提唱者たちが集まり、アジャイルの理念となる4つの価値と、アジャイル・ソフトウエアの12の原則をまとめ、アジャイル・マニフェストとして発表しました。
アジャイル・マニフェストは、あらゆるアジャイル開発方法に共通する根底となっています。
図1: アジャイル・マニフェスト(http://agilemanifesto.org/) |
アジャイル・マニフェストに記された価値や原則を実現する手段として、個々のアジャイル開発手法は、フレームワークやプラクティス(習慣)を定義しています。
例えば、アジャイル開発手法の1つである「Scrum」では、開発の流れを以下のように説明しています。
- チームは "スプリント"と呼ばれる2~4週間のタイム・ボックスを切って、この期間に開発・テストを実施し、納品可能なプロダクトをアウトプットする
- スプリントの前には、"スプリント計画"と呼ばれる、ビジネスを考慮して優先順位が付けられた作業一覧(プロダクト・バックログ)から、次のスプリントで着手する項目の選定と詳細化、見積もりを実施する
- スプリント期間中は毎日、 "デイリー・スクラム" と呼ばれるチーム内の状況確認ミーティングを行い、進ちょく、その日の作業内容、問題点を共有する
- スプリント終了時には、成果を確認し、次のスプリントで何をやるかを検討する"スプリント・レビュー"や、"ふりかえり" と呼ばれるスプリント期間での問題の改良点の検討を行う
- プロジェクトの期間中、上記の内容を繰り返す
また、「eXtreme Programming (XP)」では、チームが行うべき19のプラクティス(習慣)を定義しています。
具体的にプラクティスの一部を抜粋したものは、以下の通りです。いずれも、何をやればどのような効果が得られるのか、を示しています。
- テスト駆動開発
- やること: 実装を行う前に、自動化されたテスト、もしくは手順を明確化したテストを作成し、実装はそのテストをパスすることを目標に行う
- 効果: 入力に対する期待値が明確になり、テストを通すことだけに専念できる。これにより、設計や実装がシンプルになる
- ペア・プログラミング
- やること: すべてのコードは、2人のプログラマで書く
- 効果: 技術力の向上、実装内容の共有、相互レビューによるプロダクトの品質の向上が図れる
- リファクタリング
- やること: 実装されたコードに対し、動作を変えずに内部構造の改善を行う
- 効果: コードの継続的な改善により、保守性が高くなる
このように、個々のアジャイル開発手法ごとに、いろいろな要素が定義されています。しかし、軸となるのは、共通のマニフェストです。まずはアジャイル・マニフェストを理解したうえで、個々の開発手法ごとに用意されたフレームワークやプラクティスを利用することが大切です。