データファンクションの算出
“ファイル”の抽出
データファンクションのファンクションポイントは“ファイル”によって決まる.ファンクションポイント法で言う“ファイル”とは,“ユーザが認識しているシステムの構成要素で,データを保管する機能を持つもの”のことである.
具体的に何を当てはめるかと言えば,ER図で作成したエンティティと設定ファイルやログファイルを“ファイル”と考える.あくまでも,ユーザの視点から見て認識できるものであるため,プログラム内部で使用するワークテーブルやワークファイル・ログはデータファンクション算出の対象外である.
データモデルの作成で作成したER図とアプリケーションルールの定義で作成したDFDを元に,データファンクション算定の対象となるファイルを決定しよう.以下の通りとなる.
| ファイル | 種類 | |
|---|---|---|
| 1 | 著者 | エンティティ |
| 2 | 著作 | エンティティ |
| 3 | 著作・著者 | エンティティ |
| 4 | 分類内著作 | エンティティ |
| 5 | 分類 | エンティティ |
| 6 | ファイル | エンティティ |
| 7 | ダウンロードランキング | エンティティ |
| 8 | ダウンロード履歴 | エンティティ |
| 9 | ユーザ | エンティティ |
| 10 | 保管日数設定ファイル | 設定ファイル |
| 11 | 削除ログ | ログファイル |
削除ログについては,登録ユーザからの問合せ対応用の確認データとして提供する.例えば,「久しぶりにアクセスしたら,ユーザ登録していたのになくなっていた」という場合は,指定日数を過ぎて削除したかどうかはこのログを見れば分かる.ログの確認は,市販アプリケーションを使用して行うため,開発対象には含めない.また,削除ログ以外のプログラム動作確認用のログについては,ユーザへ提供しないため“ファイル”としては数えない.
ILFとEIF
ファイルを内部論理ファイル(Internal Logical File:以下ILF)と外部インタフェースファイル(External Interface File:以下EIF)に分ける.分ける基準は以下の通りである.
- ILF
- 対象アプリケーション内部で作成・更新・参照・削除を行うファイル
- EIF
- 他のアプリケーションで作成したファイルで,対象アプリケーションは参照のみ
では,前述したファイル一覧をILFとEIFで分けてみよう.
| ファイル | 種類 | ILF/EIF | |
|---|---|---|---|
| 1 | 著者 | エンティティ | ILF |
| 2 | 著作 | エンティティ | ILF |
| 3 | 著作・著者 | エンティティ | ILF |
| 4 | 分類内著作 | エンティティ | ILF |
| 5 | 分類 | エンティティ | ILF |
| 6 | ファイル | エンティティ | ILF |
| 7 | ダウンロードランキング | エンティティ | ILF |
| 8 | ダウンロード履歴 | エンティティ | ILF |
| 9 | ユーザ | エンティティ | ILF |
| 10 | 保管日数設定ファイル | 設定ファイル | ILF |
| 11 | 削除ログ | ログファイル | ILF |
外部とのデータのやり取りがないので,全ファイルILFである.
DETとRET
ファイルの内部の項目の数と登録パターンによりDET(Data Element Type)とRET(Record Element Type)を算出する.分ける手順は以下の通りである.
- DET
- ILFやEIF上の繰返しを含まないユーザが識別可能なデータ項目
- RET
- 特定の条件で登録の要否が分かれる,または特定の条件で登録する項目が異なる場合の組合せ数.ファイルの属性内のサブグループの数.サブグループは「任意サブグループ」と「必須サブグループ」に分かれるが,ファンクションポイントの算出には影響はない
DETは正規化してあればエンティティの属性数と等しくなる.
RETについて説明しよう.RETはファイルの属性内のサブグループの数のことである.例えば「登録ユーザがメールアドレスを登録すれば,新刊の案内をメールで受取ることができる」機能があるとする(今回のシステムにはない).つまり,登録ユーザにはメールアドレスを登録しているユーザと,していないユーザが存在することになる.この場合RETは2(メールアドレス登録ユーザと非登録ユーザ)となる.ちなみに,メールアドレスの登録有無は任意であるため「任意サブグループ」となる.
同様に,例えば「ダウンロードするファイルの種類により必要な属性が異なる」とする(今回のシステムでは属性は同じ).例えば,テキストファイルの場合は文字コード,HTMLの場合は文字コードとバージョン,PDFの場合はファイルの大きさと作成したAcrobatのバージョンである.ファイルの種類(テキスト/HTML/PDF)で登録する属性が変わるわけである.この場合,RETは3(ファイルの種類)となる.ちなみに,ファイルの種類により属性のどれかを必ず登録しないといけないため「必須サブグループ」となる.
今回の場合,RETが1を超えるファイルは保管日数設定ファイルと削除ログである.保管日数設定ファイルの場合,以下の2種類のデータを登録する.
- ユーザ削除日数
- 最後のログインからこの日数分経過した登録ユーザのデータは削除
- ダウンロード履歴削除日数
- この日数を経過したダウンロード履歴は削除
したがってRETは2となる.
同様に,削除ログを考えよう.削除ログには3種類のデータを登録する.
- ユーザ削除データ
- ユーザ削除日数を経過してアクセスがなく削除したユーザ
- ダウンロード履歴削除データ
- ダウンロード履歴削除日数を経過して削除したデータ
- ダウンロードランキング削除データ
- 1年を越えたダウンロードランキングデータ
したがってRETは3となる.
では,前述したファイル一覧にDETとRETを追加しよう.
| ファイル | 種類 | ILF/EIF | DET | RET | ||
|---|---|---|---|---|---|---|
| 1 | 著者 | エンティティ | ILF | 1 | 著者id | 1 |
| 2 | 氏名 | |||||
| 2 | 著作 | エンティティ | ILF | 1 | 著者id | 1 |
| 2 | 著作id | |||||
| 3 | 書名 | |||||
| 3 | 著作・著者 | エンティティ | ILF | 1 | 分類id | 1 |
| 2 | 著作id | |||||
| 3 | 著者id | |||||
| 4 | 分類内著作 | エンティティ | ILF | 1 | 分類id | 1 |
| 2 | 著作id | |||||
| 3 | 著者id | |||||
| 5 | 分類 | エンティティ | ILF | 1 | 分類id | 1 |
| 2 | 分類名 | |||||
| 3 | 上位分類id | |||||
| 6 | ファイル | エンティティ | ILF | 1 | 著者id | 1 |
| 2 | 著作id | |||||
| 3 | フォーマット | |||||
| 4 | ファイル名 | |||||
| 5 | 公開開始日付 | |||||
| 6 | 公開終了日付 | |||||
| 7 | ダウンロードランキング | エンティティ | ILF | 1 | 著者id | 1 |
| 2 | 著作id | |||||
| 3 | フォーマット | |||||
| 4 | ダウンロード日付 | |||||
| 5 | ダウンロード回数 | |||||
| 8 | ダウンロード履歴 | エンティティ | ILF | 1 | 著者id | 1 |
| 2 | 著作id | |||||
| 3 | ユーザ名 | |||||
| 4 | フォーマット | |||||
| 5 | 最新ダウンロード日付 | |||||
| 6 | ダウンロード回数 | |||||
| 9 | ユーザ | エンティティ | ILF | 1 | ユーザ名 | 1 |
| 2 | パスワード | |||||
| 3 | 登録日付 | |||||
| 10 | 保管日数設定ファイル | 設定ファイル | ILF | 1 | ユーザ削除日数 | 2(*1) |
| 2 | ダウンロード履歴削除日数 | |||||
| 11 | 削除ログ | ログファイル | ILF | 1 | ユーザid | 3(*2) |
| 2 | 最新アクセス日付 | |||||
| 3 | 著作id | |||||
| 4 | フォーマット | |||||
| 5 | ファイル名 | |||||
| 6 | ダウンロード日付 | |||||
| 7 | ダウンロード回数 | |||||
*1:ユーザの削除日数とダウンロード履歴の削除日数を同一ファイルに保管するのでRETは2
*2:ユーザ・ダウンロード履歴・ダウンロードランキングの3種類の削除データを同一ファイルに出力するのでRETは3
ファイルの複雑度とファンクションポイント
DET・RETが決まったら,以下の算定表でファイルの複雑度を決定する.複雑度はlow(低い)・average(平均的)・high(高い)の3種類である.
| 1~19DET | 20~50DET | 51以上 | |
|---|---|---|---|
| 1RET | low | low | average |
| 2~5RET | low | average | high |
| 6以上 | average | high | high |
ファイルの複雑度が分かればILF/EIFとの対応でファンクションポイントを算定できる.
| low | average | high | |
|---|---|---|---|
| ILF | 7 | 10 | 15 |
| EIF | 5 | 7 | 10 |
データファンクションのファンクションポイント
データファンクションのファンクションポイントは以下の通りとなる.
| ファイル | ILF/EIF | DET | RET | 複雑度 | FP | |
|---|---|---|---|---|---|---|
| 1 | 著者 | ILF | 2 | 1 | low | 7 |
| 2 | 著作 | ILF | 3 | 1 | low | 7 |
| 3 | 著作・著者 | ILF | 3 | 1 | low | 7 |
| 4 | 分類内著作 | ILF | 3 | 1 | low | 7 |
| 5 | 分類 | ILF | 3 | 1 | low | 7 |
| 6 | ファイル | ILF | 6 | 1 | low | 7 |
| 7 | ダウンロードランキング | ILF | 5 | 1 | low | 7 |
| 8 | ダウンロード履歴 | ILF | 6 | 1 | low | 7 |
| 9 | ユーザ | ILF | 3 | 1 | low | 7 |
| 10 | 保管日数設定ファイル | ILF | 2 | 2 | low | 7 |
| 11 | 削除ログ | ILF | 7 | 3 | low | 7 |
| データファンクション合計 | 77 | |||||