FP法:詳細編

FP法の勉強まとめ、その2。

FP法とは

FP法の目的

  • ユーザの求める・受け取る機能に基づいて計測する
  • 使用する技術とは関係なく計測する
  • 組織を超えて一貫した、規模見積もりの手法を定義
  • 計測の手間を最小限にするシンプルな手法

ユーザとは何か

※ユーザとは洗練されたユーザを指す。エンドユーザではない。

※ユーザはロジックを理解するが、技術者ではない

  • 要件を与える立場 技術とは独立している
  • 受け入れテストに参加する
  • 情報の流れを理解している
  • 担当分野についてのエキスパートである

計測手順

  • 計測するアプリケーションを決める
  • 開発種別(新規開発か改版か)、アプリケーション境界を決める
  • 構成要素をテーブル(データファンクション)とプログラム(トランザクションファンクション)に分ける
  • 各ファンクションの機能数を分析し、未調整ファンクションポイント数を得る
  • 非機能要件を分析し、調整係数を得る
  • 未調整FP数に調整係数をかけて、最終FP数を得る

新規開発においてFP計測が完了すると、アプリケーションのFP数が決まる。

改版が行われるたびに、アプリケーションのFP数は変化する。

アプリケーション境界とは何か

プログラムの内部と、外界を分けるもの。

トランザクションの識別(受信・送信)、データの識別(内部・外部テーブル)に使う。

  • アプリケーションのスコープを確定する
  • 入力は境界の外から入ってくる
  • 出力は境界の外へ出て行く

''境界の中のものだけを見積もること''

ファンクションタイプ

テーブルの種類、プログラムの種類がそれぞれ二つある。

  • テーブル
    • 1)あなたが使用・維持するもの
    • 2)他者が使用していて、あなたが参照するもの
  • プログラム
    • 1)入力
    • 2)レポート(出力)

データファンクション(DBのテーブルに相当)

  • 内部論理ファイル(internal logical file)>複雑
    • select/insert/update/delete可能
  • 外部インタフェースファイル(external interface file)>単純
    • select操作しか行えない


トランザクションファンクション(プログラムに相当)

  • 外部入力(external input)
  • 外部出力(external output)
  • 外部問い合わせ(external query)

この結果をすべて合計すると未調整FP数(unadjusted FP count)が得られる。

調整係数

調整係数(Value Adjustment Factor)を求め、未調整FP数にかけることで調整済みFP数が得られる。

  • 14の項目で算出
  • 統計に基づいている
  • 非機能要件をカバーする(非科学的要件)

開発種別による計測方法の違い

  • 新規開発→言うまでもなし
  • 機能追加(既存機能の変更)→機能が増減する場合は見積もり可能
  • 保守(バグ修正、予防的修正等)→機能に変化がない場合はFP法は不適

データファンクションタイプ

※ユーザのデータ要件を満たす機能

2種類に分かれる。

  • 内部論理ファイル(ILF)
  • 外部インタフェースファイル(EIF)

複雑度をDET/RETによって計測する

  • DET:データ要素型(Data Element Type)
  • RET:レコード要素型(Record Element Type)

データ要素型

以下の条件を満たすフィールド

  • ユニーク
  • ユーザによって識別可能(ユーザと開発者両方が合意していること)
  • 繰り返し項目ではない

一つのフィールドは1DETに相当する

※複数のアプリがILFを共有している場合は、自分が使うDETだけをカウントする

(他のアプリが使っていても自分のカウントには含めない)

  • 履歴を保持する等で、変更前のイメージをそのまま持っている場合は繰り返しと見なす。(=1DET)
  • 複数テーブル間で主キー・外部キーの関係が成り立つ場合、同一のキーはまとめて1DETと数える。

レコード要素型

以下の条件を満たすフィールド

  • ユニーク
  • ユーザによって識別可能(ユーザと開発者両方が合意していること)
  • サブグループ
  • 二つの種類がある(必須または任意)
    • 必須=必ず指定 任意=1以上

DET-RETの関係は親子関係に似ている。通常はILF/EIF内の再帰データに相当する

  • ILF/EIFのサブグループごとにRETを一つ数える
  • サブグループがない場合、ILF/EIFそのものを1RETと数える

ILFとRETの使い分け

エンティティが2つある時、2ILFとするのか? 1ILF/2RETとするのか?

  • プロセスがエンティティを操作するプロセスに注目する
  • Create/Delete処理に着目すると考えやすい
    • 複数のエンティティがまとめて生成・削除される場合は、おそらく1論理ファイルにまとめて扱うのが適切
  • RETは少なくともDETを一つ必要とする

複雑度マトリクス

マトリクスに従い、DETやRETの数から、機能の複雑度を低・中・高に分類する。

DETやRETがいくらあっても、複雑度の上限は「高」である。

※DETやRETが多すぎるような設計をしないこと。


複雑度マトリクスについてはこちらを参照

http://cafe.eyln.com/cgi-bin/wiki/wiki.cgi?page=FP%CB%A1%A4%CB%A4%C4%A4%A4%A4%C6#p18

トランザクションファンクションタイプ

3種類ある

    • EI:外部入力(external input)
    • EO:外部出力(external output)
    • EQ:外部問い合わせ(external query)


定義:アプリケーションがユーザに提供する、データ処理のための機能


処理ロジックとは:単純な操作を完了するためのユーザ要件

例:

  • 入力値検証
  • 演算・計算の実行
  • 値の変換
  • 1以上のILF更新
  • 1以上のILF/EIF参照
  • データや制御情報の取得


複雑度マトリクスについてはこちらを参照

http://cafe.eyln.com/cgi-bin/wiki/wiki.cgi?page=FP%CB%A1%A4%CB%A4%C4%A4%A4%A4%C6#p21


FP数カウントはこちらを参照

http://cafe.eyln.com/cgi-bin/wiki/wiki.cgi?page=FP%CB%A1%A4%CB%A4%C4%A4%A4%A4%C6#p27

外部入力

アプリケーション境界の外から来るデータを処理する。(ユーザや外部アプリからの入力)


基本的な意図:ILFの維持(書き込み)あるいはシステムの挙動変更(例:侵入検知やセキュリティ)

数え方:

  • データを外から受け取る処理
  • データは単純な操作で維持する
  • Insert/Update/Delete操作はそれぞれ別に数える
    • 追加・変更・削除といった単語に注意すること

外部出力

アプリケーション境界の外にデータを送る。

基本的な意図:データをユーザに提示する


数え方:

  • データを外に送る処理
  • データは単純な操作で送る
  • 最低一つの算術式、計算、派生データを含む
    • ※一つも含まない場合、それはEQになる
  • 途中の処理系が出力に見える必要はない
  • 1以上のILFを保守、またはシステムの挙動を変更してもよい

注意点:

  • バッチ処理(例:日次でテーブルをクリアするような処理)は、ユーザが明示的に要求していなければトランザクションとして計上しない
    • こうした処理は非機能要件として数える。調整係数でカバーする。
  • EOはILFを維持したり、システムの挙動を変えたりすることもある
    • 出力ではあるが、データ更新を行うことも出来る→EI同様入力を受け取ることもある

外部問い合わせ

基本機能:

  • データをアプリケーション境界の外に送る。
  • 情報をユーザに提示する
    • データの加工を一切行わない

数え方:

  • ILF/EIFからデータまたは制御情報を取得する
  • この処理ロジックは演算・計算処理を一切含まず、派生データも生成しない
  • ILFの更新やシステムの挙動の変更は発生しない

注意点:

  • ※ILFを更新することはできない

FTR(ファイル型参照)

FTRとは:

  • ファンクションタイプによって参照・維持されるILF
  • ファンクションタイプによって参照されるEIF
  • EIがILF/EIFをさわるごとに、それぞれFTRx1とカウントする
  • EIがあるILFを同時に参照・更新する場合、FTRは1とする(2ではない)

DET(データ要素型)

DETとは:ユーザが認識可能な、非繰り返し項目

EI/EO/EQについて

  • 入力
    • ユーザが認識するデータ入力項目一つにつきDETx1とカウントする
    • アプリケーション境界を越えないフィールドはカウントしない
    • データ選択要件を定義するフィールドは1とカウントする
  • 出力
    • ユーザが認識する出力項目一つにつきDETx1とカウントする
    • 項目が入力・出力両方に現れる場合は、1回だけカウントする
    • リテラルはDETに数えない
    • ページング変数はDETに数えない
    • 物理的には複数のフィールドだが、ユーザ要件上は一つの情報の塊である場合、1とカウントする

GUIへの適用

マスタデータでの考慮

ただのコード一覧はDETに数えない

調整係数

FP数の調整に用いる。14の「一般システム特性」を元にして算出。


プラスマイナス35%の範囲内。

調整係数=(TDI x 0.01) + 0.65

最終的な工数

言語・プラットフォームに応じてFPごとの工数は変化する。

FP数x単位工数x管理係数(1.xx)=総工数

適用範囲

変換機能や導入時の処理は開発FPに追加する

バグ修正や予防修正にはFPは使えない

リファクタリングにもFPは使えない