FP法:詳細編
FP法の勉強まとめ、その2。
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を保守、またはシステムの挙動を変更してもよい
注意点:
外部問い合わせ
基本機能:
- データをアプリケーション境界の外に送る。
- 情報をユーザに提示する
- データの加工を一切行わない
数え方:
- 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とカウントする
マスタデータでの考慮
ただのコード一覧はDETに数えない
調整係数
FP数の調整に用いる。14の「一般システム特性」を元にして算出。
プラスマイナス35%の範囲内。
調整係数=(TDI x 0.01) + 0.65