プログラム実行履歴を用いたファンクションポイント計

ファンクションポイント計測のための
実行履歴からトランザクションファンク
ションを抽出する手法の提案
井上研究室
博士前期課程2年
森岡 佑
2007/2/19
CS専攻 修士論文発表会
1
構成
 ファンクションポイント計測の概要
 研究の動機と目的
 プログラムを利用したファンクションポイント計
測法
 提案手法の説明
 トランザクションファンクション抽出手法
 適用実験、考察
 まとめ、今後の課題
2007/2/19
CS専攻 修士論文発表会
2
ファンクションポイント(FP)計測の概要
 アプリケーションソフトウェアに含まれるデータや処理を
分類し,それぞれ点数をつけて数値化し,機能量を算
出
 データファンクション(データのまとまり)
 トランザクションファンクション(データの入出力処理)
トランザクション
ファンクション
ユーザ
データ
ファンクション
入力(EI)
出力(EO)
照会(EQ)
計測対象ソフトウェア
2007/2/19
CS専攻 修士論文発表会
3
研究の動機と目的
 ファンクションポイントはソフトウェアの設計仕様書から
求められることが多い
 過去に開発されたソフトウェアのFP計測は困難
 設計仕様書が存在しない
 最終成果物で実現されている機能が設計仕様書と一致しな
い
最終成果物であるプログラム自身からファンク
ションポイントを計測したい
 トランザクションファンクションの検出に着手
2007/2/19
CS専攻 修士論文発表会
4
プログラムからのFP計測方針
 プログラムから計測する際のデータファンクション(DF), トランザク
ションファンクション(TF)の仮定
 DF ・・・ 対応するクラスとして実装されている [1]


フィールド値にデータを保持する
getter, setter メソッドをもつ
 TF ・・・ メソッド呼び出しのまとまりとして実装されている

DFに対して何らかの処理を行うメソッド群を含んでいる [1]

トランザクションファンクションは「アプリケーションに対するデータの出入りを伴う処理」を指す
 仮定に基づいた計測方針
 DFはユーザがクラス単位で指定
 「DFに相当するクラス」を以降DFCとする
 TFは実行履歴上から自動で特定
 DF ・ 特定したTFからFP値計測
[1] G.Antoniol, C.Lokan, G.Caldiera, R.Fiutem: “A Function Point-Like Measure for ObjectOriented Software”, Empirical Software Engineering, vol.4, No.3, pp.263-287, 1999.
2007/2/19
CS専攻 修士論文発表会
5
各クラスタで使用しているデータファンクションクラスと
プログラムを実行して履歴を
類似したクラスタがあればまとめる
クラスタの種類を決定する
メソッド呼び出しをクラスタリング
各クラスタからもFPを求める
データファンクションクラスからFPを求める
FPを求める
そのフィールド値の個数を求める
取得する
プログラムからFPを計測する手順
データファンクション
クラス
テストケース
実行履歴
DFC1
DFC1
DFC2
DFC3
DFC4
DFC2 DFC3 DFC4
FP
EQ
プログラム
EO
ユーザ
2007/2/19
CS専攻 修士論文発表会
自動化
6
想定するFP値計測の手順
1.
2.
3.
4.
メソッド呼び出しのクラスタリング
TFの抽出
各クラスタの種類(EI,EO,EQ)の判定
類似したクラスタをまとめる
残ったクラスタをTFと考えてそれぞれFP値を計
測
5. 各DFのFP値を計測
6. 合計して全体のFP値を求める
2007/2/19
CS専攻 修士論文発表会
7
メソッド呼び出しのクラスタリング:手順1
 DFCのフィールド値から
のデータ依存関係(デー
タフロー)とフィールド値
へのデータ依存関係を
解析
 実行履歴上でのデータ
フロー範囲を決定
実行履歴
DFC1
DFC2 DFC3 DFC4
データフロー範囲
2007/2/19
CS専攻 修士論文発表会
8
メソッド呼び出しのクラスタリング: 手順2
 次の条件にあてはまるデータフローを
除去
 複数のトランザクションに跨っている
と考えられるデータフロー
実行履歴
DFC
 例. ログイン時に入力した情報を他ト
ランザクションで使用
 データベース - DFC 間のデータフ
ロー
 DFCのデータの一時格納処理
 メソッド外に出て行かないデータフ
ロー
 データが他メソッドに遷移しない
 DFCの同一インスタンスへの処理を行
う、隣接するデータフローを結合
 1つのトランザクションファンクション
中の処理とみなす
隣接データフローの結合
2007/2/19
CS専攻 修士論文発表会
9
メソッド呼び出しのクラスタリング:手順3
 範囲が重複するデータフ
ローの範囲を1つにまとめる
実行履歴
DFC1
DFC2 DFC3 DFC4
 1つのトランザクション中で
複数のデータを処理してい
ると考える
 得られたデータフロー範囲
中に含まれるメソッド呼び出
し群を1つのクラスタとする
 1クラスタがトランザクション
1回の実行に対応
データフロー範囲が
重なる部分
2007/2/19
CS専攻 修士論文発表会
10
適用実験1
 対象プログラム
 ツール貸し出しシステム
 約37000LOC
 38トランザクションファンクション
 データファンクション
 データファンクションに対応するク
ラスを8個指定
 実行するテストケース
 一般ユーザが実行できる全ての
処理を実行
 16種類のトランザクションファンク
ションが含まれる
表1. テストケースに含まれる
トランザクションファンクション
利用中物品検索
使用中物品検索(条件付)
物品検索
物品詳細
物品貸出
物品登録未承認案件一覧
物品新規登録(一般向け)
物品登録未承認案件詳細
物品管理品一覧
物品管理品詳細
物品追加登録
備考表示
備考更新
アイテムグループ検索(大分類)
アイテムグループ検索(中分類)
コードテーブル検索
 重複を含む35回のTF実行
2007/2/19
CS専攻 修士論文発表会
11
評価方法
 TFが実行されているメソッド呼
び出し群の範囲を、実行履歴
やソースコードから特定しておく
TFを実行する
メソッド呼び出し群の
範囲
提案手法で検出した
データフロー範囲
 提案手法によって検出したデー
タフロー範囲と、TF実行メソッド
呼び出し群の対応を確認


2007/2/19
1対1で対応するとき、TFが抽
出できたと判定
同一TFが複数回出現する場
合は、全ての出現時において
データフローと1対1で対応す
るときのみ正しくTFが抽出で
きたと判定
CS専攻 修士論文発表会
12
結果
履歴中のTF出現回数(重複含む) 35回
検出したデータフロー数
32個
TFに対応するデータフロー数
28個
 適合率 : 0.875
 再現率 : 0.800
TF16種類のうち、11種類のTFを正しく検出
2007/2/19
CS専攻 修士論文発表会
13
TF検出結果
 16種類中11種を正しく検
出
 TFを正しく検出できなかっ
たケース
 あるTFで生成されたデータ
が、次に実行されるTFでも利
用される (表2.※)
 複数のTFが同時に実行され
る (表2. *)
2007/2/19
表2. TF抽出結果
トランザクションファンクション名 判定
利用中物品検索
○
使用中物品検索(条件付)
○
物品検索
○
×
※ 物品詳細
物品貸出
○
物品登録未承認案件一覧
○
物品新規登録(一般向け)
○
物品登録未承認案件詳細
○
物品管理品一覧
○
※ 物品管理品詳細
×
物品追加登録
○
備考表示
○
備考更新
○
* アイテムグループ検索(大分類) ×
* アイテムグループ検索(中分類) ×
×
* コードテーブル検索
CS専攻 修士論文発表会
14
適用実験2
 目的


同一の設計仕様に基づいて実装が行われた複数
のシステムに対して、提案手法を適用
同じ結果が得られることを検証
 対象プログラム

図書管理システム


学生4グループが同じ設計仕様に基づいて作成
各グループが作成した4個のシステム(A,B,C,D)が対象
 データファンクション

データファンクションに対応するクラスを2個指定
 実行するテストケース


ユーザが実行できる全ての処理を実行
12種類のトランザクションファンクションが含まれる

2007/2/19
表3. テストケースに含まれる
トランザクションファンクション
ログイン
新規ユーザ登録
図書一覧表示
ウォッチリスト表示
貸出中図書表示
図書詳細表示
ラック一覧照会
図書追加
図書貸出
図書返却
図書ウォッチ開始
図書ウォッチ解除
重複を含む21回のTF実行
CS専攻 修士論文発表会
15
結果
表4. グループA
表5. グループB
履歴中のTF出現回数(重複含む)
21回
履歴中のTF出現回数(重複含む)
21回
検出したデータフロー数
89個
検出したデータフロー数
97個
TFに対応するデータフロー数
12個
TFに対応するデータフロー数
12個
表6. グループC
表7. グループD
履歴中のTF出現回数(重複含む)
21回
履歴中のTF出現回数(重複含む)
21回
検出したデータフロー数
105個
検出したデータフロー数
109個
TFに対応するデータフロー数
12個
TFに対応するデータフロー数
12個

トランザクションファンクションと対応していなかったデータフロー範囲



DFCのデータ項目から読み出したURLを使って画像を表示
仕様上のTFではないが,本手法ではシステム内で実装されたひとつの
機能として抽出された
4グループ全てのTFに対応するデータフロー数が一致
TF12種類のうち、5種類のTFを正しく検出
2007/2/19
CS専攻 修士論文発表会
16
TF検出結果
 12種類中5種を正しく検出
表8. TF抽出結果
TF
 TFを正しく検出できなかった
ケース
 データファンクションクラスの実
装が提案手法の想定と異なる
(表8. ▲)
2007/2/19
CS専攻 修士論文発表会
▲
▲
▲
▲
▲
▲
▲
ログイン
新規ユーザ登録
図書一覧表示
ウォッチリスト表示
貸出中図書表示
図書詳細表示
ラック一覧照会
図書追加
図書貸出
図書返却
図書ウォッチ開始
図書ウォッチ解除
判定
×
×
○
○
○
○
×
○
×
×
×
×
17
考察
 あるTFで生成されたデータが、次に実行されるTFで
も利用される場合に正しく検出できない
 取得した情報をそのまま次のTFで処理
 異なる実行履歴を使用した実験では検出可能
 データファンクションクラスの実装が提案手法の想定
と異なる場合に、TFを検出できない
 適用対象の実装に依存
 複数のTFが同時に実行される場合に正しく検出でき
ない
 データフローは発生しているが、1つの大きなデータフロー
に含まれる
 現状の提案手法ではデータフローのマージ処理を行うため
検出できない
 データフローのマージの際に条件を設定
2007/2/19
CS専攻 修士論文発表会
18
まとめと今後の課題
 まとめ
 実行履歴を利用してメソッド呼び出し群をクラス
タリングすることによって、トランザクションファン
クションを抽出する手法を提案
 実際のプログラムを対象に適用実験
 今後の課題
 適用実験によって見つかった問題点への対策
 更に他の実験対象を用いた適用実験
2007/2/19
CS専攻 修士論文発表会
19