Traffine I/O

日本語

2022-09-04

Feature-Driven Development (FDD)

Feature-Driven Development (FDD)とは

Feature-Driven Development(FDD)は、優先順位をつけて段階的に機能を開発することで、最終的なユーザー価値を提供することに焦点を当てたアジャイルソフトウェア開発方法論です。FDDにおける「機能」とは、特定のユーザーのニーズや要件を満たす小さくて完全で有価値な機能の単位を指します。このアプローチによって、開発者やステークホルダーはソフトウェアのもっとも重要な側面に焦点を当て、開発プロセスをより効率的、適応的、価値駆動型にします。

FDDは、開発者、デザイナー、テスター、ビジネスアナリスト、プロジェクトマネージャーなど、クロスファンクショナルチーム間のコミュニケーションと協力を常に必要とする協同的な反復プロセスです。ソフトウェア開発において増分的かつ反復的なアプローチを採用することにより、FDDはチームが変化する要件に効果的に対応できるようにし、最終的な製品が高品質でユーザーのニーズを満たすようにします。

FDDの採用によるメリット

Feature-Driven Developmentの採用には、以下のような組織や開発チームに対する数多くのメリットがあります。

  • 協同作業の強化
    FDDは、クロスファンクショナルチーム間での効果的なコミュニケーションと協力を促進し、全てのステークホルダーが共通の目標に向けて協力するようにします。

  • 短い製品開発期間
    FDDは、機能の増分的な提供に重点を置くことにより、製品をより迅速に市場に投入し、要件の変更により効果的に対応することを可能にします。

  • 品質の向上
    FDDでは、ドメインモデリング、デザイン、テストに重点を置くことで、最終的な製品が堅牢で信頼性が高く、ユーザーのニーズを満たすことができるようになります。

  • 高い顧客満足度
    ユーザーに有形な価値を提供する機能に焦点を当てることで、ソフトウェアがターゲットオーディエンスのニーズと期待に合致することが保証され、顧客満足度が高まり、採用が増加することが期待されます。

FDDプロセスの概要

Feature-Driven Developmentプロセスは、5つの主要なフェーズに沿って構成されており、各フェーズには特定の目標と成果物があります。これらのフェーズは、開発チームに明確なロードマップを提供し、ソフトウェアが段階的に構築され、ユーザーのニーズに合わせたものになるようにします。5つのフェーズは以下のとおりです。

  1. 全体モデルの開発
  2. 機能リストの構築
  3. 機能による計画
  4. 機能による設計
  5. 機能による構築

全体モデルの開発

FDDプロセスの最初のフェーズは、システムの主要なコンポーネントとその関係を表す高レベルのドメインモデルを作成することです。このモデルは、問題領域の共通理解として機能し、チームメンバーやステークホルダー間の効果的なコミュニケーションを可能にします。

このフェーズでは、ドメインエキスパート、ビジネスアナリスト、開発者が協力して、システム内の主要なエンティティ、属性、および関係を特定します。

Develop overall model
Feature Driven Development

機能リストの構築

全体モデルが完成したら、チームはシステムに必要な機能を特定し、定義するために次のフェーズに移行します。機能とは、特定のユーザーのニーズや要件を満たす小さくて完全で有価値な機能の単位を指します。

このフェーズでは、機能を関連するグループに整理し、それらをシステム内の特定のドメインまたは機能領域に属する関連する機能グループに分類します。この構造化により、開発プロセスが構造化され、リソースの効率的な割り当てが可能になります。

Build feature list
Feature Driven Development

機能による計画

機能リストが完成したら、チームは次に、開発作業を優先順位付けして計画することができます。機能は、ユーザーへの価値、依存関係、および技術的複雑性に基づいて優先順位付けされ、もっとも重要で実現可能な機能が最初に提供されるようにします。

このフェーズでは、チームは各機能を開発者または開発チームに割り当て、それらを完成させるための大まかなタイムラインを確立します。この計画プロセスは反復的であり、新しい情報が入手可能になったり、優先順位が変更されたりするたびに定期的に更新されます。

Plan by feature
Feature Driven Development

機能による設計

設計による機能フェーズでは、開発者は各機能の詳細な設計を作成し、全体的なドメインモデルや機能間の依存関係を考慮します。この設計プロセスには、シーケンス図、クラス図、および状態遷移図を作成して、機能の振る舞いと構造を説明することが含まれます。

このフェーズでは、システムアーキテクチャに必要な変更を特定して設計することも含まれ、機能がシームレスに統合され、全体的なシステムが安定して堅牢であることを保証します。

Design by feature
Feature Driven Development

機能による構築

FDDプロセスの最後のフェーズは、実際の機能の実装とテストです。開発者はコードを書き、ユニットテストを実行し、既存のコードベースにそれらを統合します。このフェーズにはコードレビューも含まれ、コードが高品質で、確立された規格やベストプラクティスに準拠していることを確認します。

機能が完成すると、それらはシステムに統合され、チームは優先順位リストの次の機能に移ります。この段階的アプローチにより、ソフトウェアが進化し、変化する要件に適応しながら、プロセスの各ステップでユーザーに価値を提供することができます。

Build by feature
Feature Driven Development

進捗トラッキングと報告

FDDでは、進捗トラッキングと報告がプロジェクトが進行する上で重要な役割を担い、ステークホルダーがプロジェクトの状況について常に把握できるようにします。FDDでは、機能ベースの進捗トラッキングメカニズムを使用して、開発プロセスが明確に可視化され、チームが解決すべきボトルネックや問題を特定できるようにします。

通常、進捗は、フィーチャーボード、バーンダウンチャート、またはデジタルプロジェクト管理ツールなどのビジュアル管理ツールを使用して追跡されます。これらのツールを使用すると、チームは各機能の状態を確認し、プロジェクト全体の進捗を監視することができます。

定期的な進捗報告は、ステークホルダーを情報提供し、期待管理を行う上でも重要です。FDDでは、進捗報告には通常、完了した機能、進行中の機能の状況、プロジェクト計画や優先順位の変更などの情報が含まれます。これにより、ステークホルダーがプロジェクトの進行状況を理解し、必要に応じてアクションを起こすことができます。

参考

https://www.nimblework.com/agile/feature-driven-development-fdd/
https://www.lucidchart.com/blog/why-use-feature-driven-development
https://www.inflectra.com/Ideas/Topic/Feature-Driven-Development.aspx

Ryusei Kakujo

researchgatelinkedingithub

Focusing on data science for mobility

Bench Press 100kg!