• home
  • ブログ
  • アジャイル開発におけるユーザー機能駆動開発(FDD)とは?メリットやデメリットも解説!
  • 用語集

22.07.12

  • twitter
  • facebook

アジャイル開発におけるユーザー機能駆動開発(FDD)とは?メリットやデメリットも解説!

アジャイル開発について調べていたら、「ユーザー機能駆動開発(FDD)」という言葉を目にしたことがある人は多いのではないでしょうか?

本記事ではユーザー機能駆動開発とは何かを解説し、そのメリット、デメリットについて解説していきます。

アジャイル開発とは

アジャイル開発とは、「素早い」「機敏な」といった意味のアジャイル(Agile)という単語が名前の由来となっている、システム開発の手法の一つです。「仕様変更に強く」「開発速度が速い」のが特徴です。

従来の開発手法ではシステム全体の要件定義を行なった後、システム全体の設計を行い、設計された情報を基に実装を行い、全ての開発が終わってからテストを行なっていました。このような開発を「ウォーターフォール開発」と呼びます。

「ウォーターフォール開発」については以下の記事で詳しく解説しています。
ウォーターフォール開発の特徴とは?メリット・デメリットもわかりやすく解説!

 

アジャイル開発の特徴

アジャイル開発の特徴は「仕様変更に強く」「開発速度が速い」ことです。

アジャイル開発では従来の開発手法とは違い、システム全体ではなく「機能単位」で「計画→設計→実装→テスト」の工程を繰り返して開発を行います。反復 (イテレーション) と呼ばれる一週間から一ヶ月ほどの短い開発期間単位の中で、どの機能を開発するかを決定し、開発する機能の要件をまとめて開発を行い、実装した機能の検証を行います。

テスト後、実装に問題がなければ新たな機能へ、要望や仕様変更があれば新しい反復の中で更なる機能追加を行う、というように柔軟に開発を行うことができます。

「アジャイル開発」については以下の記事で詳しく説明しています。
アジャイル開発の特徴とは?メリット・デメリットもわかりやすく解説!

 

ユーザー機能駆動開発(FDD)とは

ユーザー機能駆動開発(Feature Driven Development:FDD)とは、ユーザー目線で価値のある機能を中心に開発を進める、アジャイル開発手法の一つです。顧客にとって価値のある小さな単位の機能(feature)という観点から開発を行い、稼働するシステムを2週間未満の短い期間で作成し、顧客に提供します。

 

ユーザー機能駆動開発の特徴

ユーザー機能駆動開発の特徴は「5つの基本活動」と呼ばれる開発工程と、ソフトウェア工学における「ベストプラクティス」を中心に構成されている点です。

それぞれどのようなものなのか、詳しく見ていきましょう。

 

ユーザー機能駆動開発の「5つの基本活動」とは

ユーザー機能駆動開発はモデル駆動型の開発工程で、2週間未満の短い開発期間を繰り返して開発を行います。

モデル駆動開発とは、モデル図と呼ばれる仕様を基に、プログラミングを行いシステム開発を行う開発のことです。ユーザー機能駆動開発では以下の5つの基本活動を基に活動を行います。

1.全体モデル開発

ユーザー機能駆動開発ではプロジェクトは、システムの範囲と内容についてのウォークスルーから開始されます。

ウォークスルーとは、プロジェクトのメンバーが仕様や構成の問題点を探したり解決策を討論したりする作業のことです。次に部門ごとのウォークスルーを行い、より専門的にモデルの作成を行います。こうして出来上がった各部門の複数のモデルをまとめたものが全体モデルとなります。

2.フィーチャーリストの構築

全体モデル開発にて収集された知識を基に、顧客の考える重要度ごとに分類されたフィーチャー(feature:機能)のリストアップを行います。

このリストは<action>、<result>、<object>という様式で記述され、利用者の操作(action)、その操作の結果(result)、実装するオブジェクト(object)を指定して記述されます。フィーチャーとは2週間以内で開発できる小さな機能のことで、2週間以上かかる場合はそのフィーチャーを更に小さく分割し、2週間以内で開発できる粒度まで小さくします。

3.フィーチャーごとの計画

フィーチャーリストの作成が完了したら次はその開発計画を立案します。

フィーチャーの依存関係や開発チームの負荷状況、フィーチャーの複雑さなどを考慮し、着手するフィーチャーの順番、フィーチャーを実装先のクラスを担当する開発者を割り当てます。各クラスにはそのクラスの開発責任を負うプログラマー(オーナー)を決定します。

4.フィーチャーごとの設計

2週間で開発が可能なフィーチャーをいくつか選択し、それらの設計パッケージを作成します。

フィーチャーに関連するクラスのオーナーと連携し、フィーチャーごとの詳細なシーケンス図を作成し、全体モデルを更新します。シーケンス図とは、クラスやオブジェクト間のやりとりを時間軸に沿って表現する図のことです。その後開発者はクラスとメソッドの概要を書き、設計インスペクションと呼ばれる第三者による「設計の不具合や問題」の確認を行います。

5.フィーチャーごとの構築

フィーチャーごとの設計が完了すると、フィーチャーを実装するためのコーディングを行います。

コーディングが終わったら単体テストを行い、コードインスペクションと呼ばれる第三者によるコードの確認を行います。

 

ユーザー機能駆動開発の「ベストプラクティス」とは

ユーザー機能駆動開発ではソフトウェア工学に基づく「ベストプラクティス」を採用しています。ソフトウェア工学とは、有用なソフトウェアが持つ特性や構造を探り、それらの構築や管理に有用なプロセスを見出す学問です。

ユーザー機能駆動開発を構成するベストプラクティスは以下になります。

プラクティス名 内 容
ドメイン・オブジェクト・モデリング 解決すべき問題の領域を探査し、説明します。
フィーチャー毎の開発 2週間以内に実装できない機能は更に小さな部分機能に分割され、最終的にフィーチャー(feature)と呼ばれる小さな機能単位になります。
クラス毎のオーナーシップ オーナーは、クラスの一貫性、性能、概念的完全性に責任を負います。
フィーチャーチーム 小規模で動的に結成されるチーム。動的にチームを結成することで、個人や固定的なチームで陥り易い独善的な開発が防げます。
インスペクション インスペクションは、第三者による検証によって不具合や問題を見つけることです。不具合を検出することで設計やコードの品質を保証します。
構成管理 全フィーチャーのソースコードについて、進捗を管理し、フィーチャーチームによる改変の履歴を保守します。
定期ビルド 定期的にビルドを行うことで、顧客に対してデモンストレーション可能な最新システムを提供することができます。また、ソースコード結合時のエラーを早期に発見します
進捗と成果の可視化 プロジェクト内外に頻繁で適切で正確な進捗報告をすることで、マネージャがプロジェクトを適切に運営する補助となります。

 

ユーザー機能駆動開発のメリット、デメリット

ユーザー機能駆動開発のメリット

機能重視のシンプルなシステムが開発できる

ユーザー機能駆動開発では、顧客が必要な機能とする機能を重要度ごとにまとめたフィーチャーリストを作成し、そのリストを基に開発を進めます。フィーチャーリストには不必要な機能はなく、必要な機能のみを実装する開発を行うため、完成したシステムがシンプルになりやすいです。

大規模なプロジェクトにも対応しやすい

ユーザー機能駆動開発では、最初に全体モデルを作成し、フィーチャーごとにチームを分けて開発を行います。フィーチャーごとにチームが独立しているため、並行して別の機能の開発を行うことができ、開発機能が多い大規模なプロジェクトにも対応が可能です。

 

ユーザー機能駆動開発のデメリット

ユーザーの求める機能を引き出すため、コミュニケーションコストが発生する

ユーザー機能駆動開発では、ユーザーが必要とする機能を中心に開発する開発する開発手法です。そのため、ユーザー自身がどのようなシステムを求めているのかを明確に把握し、プログラマーに共有する必要があります。しかし、ユーザーは漠然と欲しい機能は決まっているがどのようなシステムが欲しい、という明確な方針を持っているとは限りません。

そのため、開発者はユーザーが真に求める機能をユーザー目線で考え、システムに落とし込むためのコミュニケーションを行う必要があるため、コミュニケーションコストが多く発生します。

シンプルなシステム開発に適した開発手法

ここまで、ユーザー駆動開発とはどういったものなのか、どのようなメリット、デメリットがあるのかを解説してきました。

ユーザー機能駆動開発とはユーザー目線に立ち、ユーザーが本当に必要な機能を開発する開発手法です。顧客が本当に求めるものを明確にするためのコミュニケーションコストが多く発生するなどのデメリットがありますが、必要な機能のみを実装するため、シンプルなシステムになりやすいです。

開発したいプロジェクトの性質を踏まえ、ユーザー機能駆動開発を行うのか、別の開発手法を選択することでよりよい開発が行えるでしょう。