機能駆動型開発(FDD)
ほとんどのアジャイル開発手法は一握りの原則や特定のプロセスセットから始まりますが、機能駆動型開発(FDD)の中心はドメインモデルです。ドメインのモデルを作成することが、FDDの基礎を成すステップであり、そのためにはすべてのドメインエキスパート(サブジェクトマターエキスパート(Subject Matter Expert:SME)と呼ばれる)からドメインの知識を集め、この知識を問題のドメインを表す1つの統一化モデル(つまりモデルの集合)に統合することが必要になります。このモデルとその他の要件の評価が終わると、大まかな計画が策定され、プロダクトを作成するために必要なリソースが決まります。チームが作業する推奨期間は2週間以内であるため、小さな機能セットを選びます。最初の機能セットを引き渡したら、別のセットに取り掛かります。複数のチームが並行して別々の機能セットに取り組むことができ、機能ごとにすべてアクティビティが追跡されます。
FDDにおける基本作業単位は機能です。機能は、小さな、クライアント価値のある処理として、次のような英文の形式で表現されます。
<action><result>[of|to|for|from]<object>.
この表現は、「アクション(action)によって、オブジェクト(object)に結果(result)がもたらされる」と言い換えることができます。角かっこで囲まれたセクションはオプションで、機能の定義を読みやすくするためのものです。例えば、「Calculate the monthly interest rate for an adjustable rate mortgage(変動金利型住宅ローンの月利を計算する)」という機能があるとします。この例では、「calculate」が<action>、「monthly interest rate」が<result>、「an adjustable rate mortgage」が<object>です。
機能を組み合わせて機能セットにし、機能セットを集約してサブジェクトエリアにすることができます。通常、要件はトップダウン式アプローチで収集し、システムのすべてのサブジェクトエリアを定義し、それを機能セットに分割し、最終的に機能に分割して、そこからタスクを実際に定義して見積もることができます。一般に、機能セットはビジネスアクティビティを反映し、サブジェクトエリアは一般的なビジネスプラクティスに対応します。例えば、機能セットには「預金する」「引き出す」「口座残高を表示する」などがあり、それらはすべて「口座を管理する」サブジェクトエリアに含まれます。
FDDでは、次の順序で5つの具体的なプロセスを指定します。
- 全体モデルを作成する
- 機能のリストを作成する
- 機能別に計画する
- 機能別に設計する
- 機能別にビルドする
前にも述べたように、すべてのものを機能単位で計画、ビルド、管理、追跡するという点に注意してください。機能セットやサブジェクトエリアなど、他の単位を上位の計画やレポートに使用することはできますが、主となる単位は機能です。
FDDは、他のアジャイル開発手法よりも具体的な役割と責任に依存しています。また、FDDは他のアジャイル方法論が推進しているコード所有権や成果物の共有から離れる傾向もあり、チームの役割はこれを反映しています。FDDで定義されている9つの役割は次のとおりです。
- プロジェクトマネージャ
- チーフアーキテクト
- 開発マネージャ
- チーフプログラマ
- クラスオーナー
- ドメインエキスパート
- テスタ
- デプロイヤ
- テクニカルライタ
FDDでは、いくつかの独自の固有のメカニズムを使ってプロジェクトのアクティビティと進捗状況を報告します。これらの中で最も独自性が低いものが、機能リストとタスクリストです。多くのアジャイル開発手法は何らかの種類のリストを使用して要件および要件に基づいて実行された作業を追跡します。FDDでは、これらのリストはすべて具体的な機能に対応します。
機能が開発サイクルのどこに位置しているかを正確に把握するには、次の6つの具体的なマイルストーンを追跡する表を使います。
- ドメインウォークスルー
- 設計
- 設計インスペクション
- コード
- コードインスペクション
- ビルドへのプロモート
これらのマイルストーンは、それぞれが完了した日付ごと、およびその具体的な機能を担当するチーフプログラマごとに追跡します。
機能のマイルストーンを集めると、機能セットを示す表になります。ここから、プロジェクトのステークホルダはプロジェクトの進捗状況を判断できます。そうすることに価値があれば、機能セットを集めてサブジェクトエリアにすることもできます。また、完了した機能をプロジェクト全体で折れ線グラフを使って追跡することもできます。このグラフには、完了したすべての機能の累積総数が日単位または週単位で示されます。
レポートの最後のグループは、FDDに非常に固有の機能セット進捗レポートです(図3を参照)。下図のようにレポートは色分けされ、プロジェクト内の各機能セット、機能セットの完了率、各エリア内の機能の数、各機能セットを担当するチーフプログラマの名前、各機能セットの完了目標年と月を示しています。薄緑色は進行中で予定どおりの機能セット、深緑色は完了した機能セット、灰色は予定より遅れている機能セットを表しています。
第2回の予告
本稿1回ですべてのアジャイル開発手法を取り上げることはできませんでした。実は、2回に分けてもすべてのアジャイル開発手法を取り上げることはできないのですが、主要なものはすべて紹介したいと思っています。第2回では、アジャイルユニファイドプロセス(Agile Unified Process)、クリスタル(Crystal)、およびDSDMを分析し、説明を続けます。また、こうした内容に交えてさまざまなアプローチを概説しながら、それぞれの開発手法が真価を発揮するコンテキストを考えます。最後に、プロジェクトに適した開発手法または開発手法の組み合わせを選ぶ場合のヒントを紹介します。

