履歴情報と静的情報を用いて同一機能実装クラス群を抽

同時更新情報と呼出情報を用いて
機能実装クラス群を抽出する手法
の提案
井上研究室
博士前期課程2年
檜皮 祐希
Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
背景
• ソフトウェア開発・保守において、特定の機能※を実
装している箇所を知る必要がある
※機能:要求仕様に示されているソフトウェアの特徴[1]
– ソフトウェア理解における理解する範囲
– ソフトウェア再利用における再利用に必要な部分
• ソフトウェアが巨大になるとソースコードを見て抽出
するということが困難になる
Feature Location
ソフトウェアの持つ機能がソースコード中のどこに
実装されているかを効率的に特定する手法
[1] IEEE Std 1008-1987: IEEE Standard for Software Unit Testing
修士論文発表会
Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
2
2007/2/19
既存手法とその問題点
• ソースコードから得られる静的情報を解析する
– 呼出関係を解析する
• オブジェクト指向への適用が困難
• 完全に自動化することが困難
• 動的な実行履歴を解析する
– テストケースを実行し、その実行履歴を解析する
• テストケースを作成するコストが大きい
• 実行に時間がかかる
• ソフトウェアの開発履歴を解析する
– 版管理システムに蓄えられた開発履歴を解析する
• 版管理システムの使用状況によって抽出が困難
• ソースコードの中身を全く見ていない
修士論文発表会
Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
3
2007/2/19
研究の概要
• 目的
– ある機能を実装しているクラス群を抽出する
• 提案手法
– 同時更新情報に呼出情報を組み合わせる
• 更新傾向グラフ(同時更新情報)
– クラス間で同時更新される頻度を表したグラフ
• コールグラフ(呼出情報)
– クラス間の呼出関係を表したグラフ
修士論文発表会
Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
4
2007/2/19
提案手法の概要
手順1
開始クラス
の決定
A
手順3
更新傾向グラフ
からの抽出
開始クラス
{A, B, D,F,G}
手順4
抽出結果と
コールグラフ
の比較
抽出クラス
リスト
{A, B, C ,F,G}
機能実装クラス群
のリスト
版管理システム
のリポジトリ
手順2
更新傾向グラフ
コールグラフ
の作成
更新傾向グラフ
コールグラフ
修士論文発表会
Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
5
2007/2/19
手順1 開始クラスの決定
• 抽出する機能に含まれる1つのクラスを決定
する
– 開始クラスを元にクラス群の抽出を行う
• 決定方法の例
– 機能を表す単語を用いたキーワード検索
– ソフトウェア部品検索システムを用いた検索
修士論文発表会
Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
6
2007/2/19
手順2.1 更新傾向グラフの作成
同時更新された
クラス群のリスト
• 更新傾向グラフ
{A,B,C}
{A,B}
{C,D}
{A,B}
{A,C,D}
{C,D}
– 同時更新情報を元に作成したグラフ
– 頂点はクラス
– 頂点間の辺は同時更新傾向の強さ
(confidence)を保持
confidenceA, B 
confidence
Aと Bが同時に更新された回 数
Aが更新された回数
• 版管理システムのリポジトリから同時
更新情報を抽出
• クラス間の confidenceを計算
A, B

3
 0.75
4
0.75
A
0.5
修士論文発表会
Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
1.0
B
0.5
0.33
0.25
C
0.25
0.33
0.75
1.0
D
7
2007/2/19
手順2.2 コールグラフの作成
• コールグラフ
– クラス間の呼出関係を表現
– 頂点はクラス
• ソースコードを解析し、呼出関係を抽出し、コールグ
ラフを作成する
class A {
a1() {
・・・
B.b1();
・・・
C.c2();
・・・
}
}
class B {
b1() {
・・・
C.c1();
・・・
}
}
Class C {
c1() {
・・・
}
c2() {
・・・
}
}
修士論文発表会
Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
A
B
C
8
2007/2/19
手順3 更新傾向グラフからの抽出
• 開始クラスとの同時更新傾向が
強いものを抽出する
1. 更新傾向グラフからconfidence
が閾値Eth以下の辺を削除する
2. 開始クラスから到達可能な頂点
集合C1を求める
3. 開始クラス、C1のいずれかの頂
点へ到達可能で、その頂点が始
点でconfidenceが最大となる辺
の終点が抽出されている頂点集
合C2を求める
4. 開始クラス、C1、C2の和集合を
抽出クラスとする
0.6
修士論文発表会
Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
0.7
0.7
0.6
開始クラス
C1
C2
9
2007/2/19
手順4 コールグラフとの比較
開始クラスとの呼出関係が弱いクラスの除去
• 更新傾向グラフで誤って
抽出したクラスを除去
• 抽出クラス距離を用いる
3
3
1
1
1
– 2つのクラス間の経路で
抽出されていないクラス
の数の最小値
• 開始クラスとの抽出クラ
ス距離が2以上のクラス
を誤って抽出したクラス
として除去する
開始クラス
抽出クラス
修士論文発表会
Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
10
2007/2/19
手順4コールグラフとの比較
特定の呼出関係があるクラスの補完
• 抽出クラスを継承しているク
ラス、抽出インタフェースを実
装しているクラスを抽出する
• 以下の条件のいずれかを満
たすクラスを抽出する
– 呼び出しているクラスのうちCth
個以上が抽出されている
– 呼ばれているクラスのうちCth個
以上が抽出されている
– 抽出クラスのいずれかを呼び
出しており、抽出クラスのいず
れかに呼び出されている
開始クラス
Cth=3のとき
抽出クラス
修士論文発表会
Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
11
2007/2/19
適用実験
• 実験対象
– XBrowser
• オープンソースウェブブラウザ
• ブックマーク機能の抽出
開発言語
Java
クラス数
171
総行数
28,881
総更新回数
165
• 実験内容
– 複数の開始クラスで機能抽出を実行
– 適合率・再現率・F値で評価
修士論文発表会
Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
12
2007/2/19
実験結果
開始クラス
抽出クラス
該当クラス
適合率
再現率
F値
XAbstractBookmark
30
26
0.87
0.76
0.81
Xbookmark
26
26
1.00
0.76
0.87
XBookmarkComparator
30
26
0.87
0.76
0.81
XBookmarkFinder
31
27
0.87
0.79
0.83
XBookmarkFolder
26
26
1.00
0.76
0.87
XBookmarkManager
26
26
1.00
0.76
0.87
正解クラス数:34
• Bookmarkパッケージ内のクラスはすべて適合率、再現率と
もに高い値を得ることができた
– ほぼ同じ正解クラスを抽出でき、再現率はほとんど等しい
– ノイズの量がクラスによって違い、適合率にばらつきがある
修士論文発表会
Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
13
2007/2/19
実験結果(詳細)
開始クラス
Eth
Cth
正解クラス数
: xbrowser.bookmark.BookmarkComparator
: 0.85
:3
: 34
抽出
クラス
該当
クラス
全体
30
26
0.87 0.76
更新傾向グラフでの
抽出
13
11
0.85 0.32
コールグラフでの除
去
1
0
0.00
コールグラフでの補
完
18
15
0.83 0.44
適合率
高い適合率で機能
の中心を抽出
再現率
誤って抽出したクラ
スの一部を除去
更新傾向グラフで
抽出できなかった
多くのクラスを抽出
修士論文発表会
Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
14
2007/2/19
まとめと今後の課題
• まとめ
– ある機能を実装しているクラス群を抽出する手法
を提案
– 適用実験により高い適合率・再現率でクラス群を
抽出できていることを確認
• 今後の課題
– さらなる精度の向上
– 既存手法との比較
修士論文発表会
Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
15
2007/2/19
修士論文発表会
Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
16
2007/2/19