機能駆動開発( FDD ) は、反復的かつ増分的な ソフトウェア開発プロセスです。これは、ソフトウェアを開発するための軽量[誰によると? ]またはアジャイルな方法です。FDD は、業界で認められた[誰によると? ]ベスト プラクティスを 1 つにまとめたものです。これらのプラクティスは、クライアントが重視する機能 (フィーチャ) の観点から推進されています[明確化が必要]。その主な目的[誰によると? ]は、アジャイル宣言の背後にある原則に従って、実体のある動作するソフトウェアをタイムリーに繰り返し提供することです。[1]
歴史
FDD は、 1997 年にジェフ デ ルカ氏によって、シンガポールの大手銀行で 15 か月間、50 名の人員が関わるソフトウェア開発プロジェクトの特定のニーズを満たすために考案されました。その結果、全体的なモデルの開発と機能の一覧表示、計画、設計、構築をカバーする 5 つのプロセス セットが生まれました。最初のプロセスは、ピーター コード氏のオブジェクト モデリングへのアプローチに大きく影響を受けています。2 番目のプロセスは、機能リストを使用して機能要件と開発タスクを管理するというコード氏のアイデアを取り入れています。その他のプロセスは、ジェフ デ ルカ氏の経験から生まれたものです。シンガポール プロジェクトで FDD が成功して以来、FDD はいくつかの実装が行われています。
FDD の説明は、1999 年に Peter Coad、Eric Lefebvre、Jeff De Luca の共著『 Java modelling in Color with UML [1] 』の第 6 章で初めて紹介されました。その後、Stephen Palmer と Mac Felsing の共著『 A Practical Guide to Feature-Driven Development [2]』(2002 年出版)で、Java モデリングから切り離された FDD のより一般的な説明が示されました。
概要
FDD は、5 つの基本アクティビティで構成されるモデル駆動型の短期反復プロセスです。ソフトウェア開発プロジェクトの状態を正確に報告し、追跡するために、各機能の進捗状況を示すマイルストーンが定義されています。このセクションでは、アクティビティの概要を説明します。右の図には、これらのアクティビティのメタプロセス モデルが表示されています。最初の 2 つの連続アクティビティで、全体的なモデル形状が確立されます。最後の 3 つのアクティビティは、各機能ごとに反復されます。

全体モデルの開発
FDD プロジェクトは、システムの範囲とそのコンテキストの高レベルのウォークスルーから始まります。次に、各モデリング領域について、小グループで詳細なドメイン モデルを作成し、ピア レビューに提出します。提案されたモデルから 1 つ以上が選択され、各ドメイン領域のモデルになります。ドメイン領域のモデルは、徐々に全体モデルに統合されます。
ビルド機能リスト
初期モデリング中に収集された知識は、ドメインを機能的にサブジェクト エリアに分解して機能のリストを識別するために使用されます。サブジェクト エリアにはそれぞれビジネス アクティビティが含まれており、各ビジネス アクティビティ内の手順が分類された機能リストの基礎となります。この点で、機能は、クライアントが重視する機能の小さな断片であり、「<アクション> <結果> <オブジェクト>」の形式で表現されます。たとえば、「売上の合計を計算する」や「ユーザーのパスワードを検証する」などです。機能は、完成までに 2 週間以上かかることはありません。2 週間を超える場合は、さらに小さな断片に分割する必要があります。
機能別に計画する
機能リストが完成したら、次のステップは開発計画を作成し、機能 (または機能セット) の所有権をクラスとしてプログラマーに割り当てることです。
機能別のデザイン
各機能ごとに設計パッケージが作成されます。チーフ プログラマーは、2 週間以内に開発する機能の小グループを選択します。チーフ プログラマーは、対応するクラス所有者とともに、各機能の詳細なシーケンス図を作成し、全体的なモデルを改良します。次に、クラスとメソッドのプロローグが記述され、最後に設計検査が行われます。
機能別に構築
機能を作成するための各アクティビティの設計検査が正常に完了すると、クラス所有者はクラスのコードを開発します。ユニット テストとコード検査が正常に完了すると、完成した機能がメイン ビルドに昇格されます。
マイルストーン
機能は小さいため、機能の完了は比較的小さなタスクです。正確な状態レポートとソフトウェア開発プロジェクトの追跡のためには、各機能の進捗状況を記録することが重要です。したがって、FDD では、機能ごとに 6 つのマイルストーンを定義し、それらを順番に完了します。最初の 3 つのマイルストーンは機能別設計アクティビティ中に完了し、最後の 3 つは機能別ビルドアクティビティ中に完了します。進捗状況を追跡するために、各マイルストーンに完了率が割り当てられます。下の表に、マイルストーンとその完了率を示します。コーディングを開始する時点で、機能はすでに 44% 完了しています (ドメイン ウォークスルー 1%、設計 40%、設計検査 3% = 44%)。
ベストプラクティス
機能主導型開発は、クライアントが重視する機能の観点を目的とした ソフトウェア エンジニアリングの ベスト プラクティスのコア セットに基づいて構築されます。
- ドメイン オブジェクト モデリング。ドメイン オブジェクト モデリングは、解決する問題のドメインを調査して説明することから成ります。結果として得られるドメイン オブジェクト モデルは、機能を追加するための全体的なフレームワークを提供します。
- 機能別に開発します。2 週間以内に実装するには複雑すぎる機能は、各サブ問題が機能と呼べるほど小さくなるまで、さらに小さな機能に分解されます。これにより、正しい機能を提供したり、システムを拡張または変更したりすることが容易になります。
- 個別のクラス所有権(コード所有権)。個別のクラス所有権とは、個別のコード部分またはコードのグループが 1 人の所有者に割り当てられることを意味します。所有者は、クラスの一貫性、パフォーマンス、および概念的な整合性に責任を負います。
- 機能チーム。機能チームは、小規模なアクティビティを開発する、小規模で動的に構成されたチームです。各設計決定には常に複数の考えが反映され、1 つが選択される前に複数の設計オプションが評価されます。
- 検査。検査は、主に欠陥の検出によって、設計とコードの品質を保証するために実行されます。
- 構成管理。構成管理は、現在までに完了したすべての機能のソース コードを識別し、機能チームがクラスを強化する際にクラスへの変更履歴を維持するのに役立ちます。
- 定期的なビルド。定期的なビルドにより、クライアントにデモンストレーションできる最新のシステムが常に確保され、機能のソース コードの統合エラーを早期に特定できるようになります。
- 進捗と結果の可視性。マネージャーは、完了した作業に基づいて、プロジェクト内外のすべてのレベルから頻繁かつ適切で正確な進捗レポートを使用してプロジェクトを指揮します。
メタモデル(メタモデリング)

メタモデリングは、メソッドのプロセスとデータの両方を視覚化するのに役立ちます。これにより、メソッドを比較できるようになり、メソッド エンジニアリングプロセス内のメソッド フラグメントを簡単に再利用できます。この手法の使用は、 UML標準 と一致しています。
メタデータ モデルの左側には、FDD を使用したソフトウェア開発プロジェクトに含まれる 5 つの基本アクティビティが示されています。すべてのアクティビティには、FDD プロセス記述のサブアクティビティに対応するサブアクティビティが含まれています。モデルの右側には、関連する概念が示されています。これらの概念は、図の左側に示されたアクティビティから派生したものです。
参照
参考文献
- ^ 「アジャイル宣言の背後にある原則」 2019-06-11。
- 1. ^ Coad, P.、Lefebvre, E. 、De Luca, J. (1999)。Javaモデリング In Color With UML: Enterprise Components and Process。Prentice Hall International。( ISBN 0-13-011510-X )
- 2. ^ Palmer, SR, & Felsing, JM (2002).機能駆動開発の実践ガイド。Prentice Hall。( ISBN 0-13-067615-2 )
外部リンク
- 機能重視の開発コミュニティ
- Nebulon FDD ページ - Nebulon は Jeff De Luca のコンサルティング会社です
- 成功する Web 開発方法論 - Web 開発プロジェクトにおける FDD の使用
- 機能駆動開発による真のビジネス価値の提供 - この記事では、FDD の基本的な概要を説明します。
- FDDとアジャイルモデリング
- Better Software Faster - 機能駆動開発に関する Coad シリーズの別の書籍。著者: Andy Carmichael および Dan Haywood ISBN 0-13-008752-1
- FDD クリエイター Jeff DeLuca 氏へのインタビュー (ポッドキャスト)
