FDD(ユーザー機能駆動開発: Feature-Driven Development)とは、アジャイルソフトウェア開発手法の1つで、具体的で動作するソフトウェアをタイムリーに繰り返し提供することを目的としています。FDDは、業界で認知されている多くのベストプラクティスを統合したもので、その名が示すように、「機能」の進捗を中心にソフトウェア開発を組織化します。
FDDにおいて「機能」とは、「売上の合計を計算する」「ユーザーのパスワードを検証する」といった、「アクション・結果・オブジェクト」という形で表現される小さな、クライアントの価値を持つ機能のことを指します。
ここで、FDDのプロセスを簡単に分解してみます。
システムの範囲についてハイレベルなウォークスルーを行い、主要な要素とそれらがどのように相互作用するかを特定します。
システムに必要なすべての機能をリストアップし、関連するセットにグループ化します。
開発計画書を作成し、機能の依存関係や優先順位に基づいて順序付けを行います。
各フィーチャーを詳細に設計し、サインオフ前にその設計を検証する。
各機能は、2週間の反復作業で構築されます。各反復の結果は、具体的で動作するソフトウェアの一部となります。
例えば、新しいオンラインショッピングプラットフォームを開発するプロジェクトを考えてみましょう。FDDアプローチでは、まずシステム全体のモデリングを行い、ユーザーインターフェイス、商品データベース、ショッピングカート、決済ゲートウェイなどの主要コンポーネントを特定することからプロジェクトをスタートします。
次に、「商品の詳細を表示する」「ショッピングカートに商品を追加する」「クレジットカードの支払いを処理する」といった機能の詳細リストを作成します。そして、これらの機能に優先順位をつけて、開発計画に落とし込んでいきます。
そして、各機能の設計や検証を経て完成に至る流れです。例えば、「商品の詳細を表示する」では、データベースから商品データを取得し、ユーザーに表示する方法を設計し、商品が見つからなかった場合のエラー処理も行います。この設計が承認されると、その機能が構築され、システム全体に統合されます。
FDDは、開発プロセスを通じて、定期的に目に見える結果を提供します。これにより、関係者は進捗状況を確認でき、早期にテストの機会を得ることができ、クライアントが最も重視する機能の提供に向けてプロジェクトを軌道に乗せることができます。