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

更新履歴情報と静的情報を用いて
同一機能を実装しているクラス群を
抽出する手法の提案
檜皮 祐希 松下 誠 井上 克郎
大阪大学 大学院情報科学研究科
Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
背景
• ソフトウェア開発・保守において、特定の機能を実装
している箇所を知る必要がある
– ソフトウェア理解
• 理解する範囲の特定
– ソフトウェア部品の再利用
• 再利用に必要な部分の特定
• ソフトウェアが巨大になるとソースコードを見て抽出
するということが困難になる
Feature Location
2
Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
2006/12/15
既存手法とその問題点
• ソースコードから得られる静的情報を解析する
– 呼び出し関係を解析する
• オブジェクト指向への適用が困難
• ほとんどの手法で完全に自動化されない
• 動的な実行履歴を解析する
– それぞれの手法にはそれぞれ欠点がある
テストケースを実行し、その実行履歴を解析する
組み合わせる
• テストケースを作成するコストが大きい
• 外部から実行しにくい機能は抽出が困難
• 開発履歴を解析する
– 版管理システムに蓄えられた開発履歴を解析する
• 版管理システムの使用状況によって抽出が困難
• プログラムの中身を全く見ていない
3
Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
2006/12/15
研究の概要
• 目的
– あるクラスと同一の機能を実装しているクラス群
を抽出する
• 提案手法
– 開発履歴情報に静的情報を組み合わせる
• 更新傾向グラフ(開発履歴情報)
– クラス間で同時更新される頻度を表したグラフ
• コールグラフ(静的情報)
– クラス間の呼び出し関係を表したグラフ
4
Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
2006/12/15
提案手法(概要)
更新傾向グラフ
手順1
開始クラス
の決定
A
手順2
更新傾向グラフ
コールグラフ
の作成
開始クラス
版管理システム
のリポジトリ
{A, B, C ,F,G}
同一機能を
実装している
クラス群のリスト
コールグラフ
手順4
抽出クラスと
コールグラフ
の比較
{A, B, D,F,G}
手順3
更新傾向グラフ
でのクラス群の
抽出
抽出クラス
リスト
5
Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
2006/12/15
手順1 開始クラスの決定
• 抽出する機能の中の1つのクラスを決定する
– 開始クラスを元にクラス群の抽出を行う
• 決定方法の例
– 機能を表す単語を用いてのキーワード検索
– ソースコード部品検索システムを用いての検索
6
Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
2006/12/15
手順2.1 更新傾向グラフの作成
同時更新された
クラス群のリスト
• 更新傾向グラフ
– 同時更新情報を元に作成したグラフ
– 頂点はクラス
– 頂点間の辺は同時更新傾向の強さ
(confidence)を保持
{A,B,C}
{A,B}
{C,D}
{A,B}
{A,C,D}
{C,D}
Aと Bが同時に更新された回 数
confidenceA, B 
Aが更新された回数
• 版管理システムのリポジトリから同時
更新情報を抽出
• クラス間の同時更新傾向の強さ
(confidence)を計算
confidence

3
 0.75
4
0.75
A
0.5
1.0
B
0.5
0.33
0.25
C
Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
A, B
0.25
0.33
0.75
1.0
D
7
2006/12/15
手順2.2 コールグラフの作成
• コールグラフ
– クラス間の呼び出し関係を表現
– 頂点はクラス
• ソースコードを解析し、呼び出し関係を抽出すること
でコールグラフを作成する
class A {
a1() {
・・・
B.b1();
・・・
C.c2();
・・・
}
}
class B {
b1() {
・・・
C.c1();
・・・
}
}
Class C {
c1() {
・・・
}
c2() {
・・・
}
}
A
B
C
8
Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
2006/12/15
手順3 更新傾向グラフでの
クラス群の抽出
• 開始クラスとの同時更新が強い
ものを抽出していく
• 更新傾向グラフからconfidence
が閾値Eth以下の辺を削除する
• 開始クラスから到達可能な頂点
集合C1を求める
• 開始クラス、及びC1のいずれか
の頂点へ到達可能な頂点集合
C2を求める
• 開始クラス、C1、C2の和集合を
抽出クラスとする
開始クラス
C1
C2
9
Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
2006/12/15
手順4 コールグラフとの比較
誤って抽出したクラスの除去
• 更新傾向グラフで誤って
抽出したクラスを除去
• 抽出クラス距離を用いる
3
3
1
1
1
– 2つのクラス間のパスで
の抽出されていないクラ
スの数の最小値
• 開始クラスとの抽出クラ
ス距離が2以上のクラス
を誤って抽出したクラス
として除去する
開始クラス
抽出クラス
10
Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
2006/12/15
手順4コールグラフとの比較
抽出できなかったクラスの補完
• 以下の条件のいづれかを満
たすクラスを抽出する
– 呼び出しているクラスのうち3つ
以上が抽出されている
– 呼ばれているクラスのうち3つ
以上が抽出されている
– 呼び出しているクラスのうちい
づれかが抽出されており、呼ば
れているクラスのうちいづれか
が抽出されている
• 呼び出しているクラスと呼ば
れているクラスのすべてが抽
出されているクラスを抽出す
る
開始クラス
抽出クラス
11
Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
2006/12/15
適用実験
• 実験対象
– XBrowser
• Javaで書かれたオープンソースウェブブラウザ
• クラス数171クラス、行数28,881行、総更新回数165回、総リビジョン数
1,388個
• 実験内容
– 履歴情報のみ、静的情報のみ、提案手法の3つについて機能抽出
• ブックマーク機能の抽出
– 開始クラス:xbrowser.bookmark.BookmarkFinder
– 閾値Eth=0.95
• ヒストリ機能の抽出
– 開始クラス:xbrowser.history.HistoryFinder
– 閾値Eth=0.95
– それぞれ適合率、再現率を用いて評価
• 正解クラスはソースコードから判定
12
Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
2006/12/15
ブックマーク機能
正解 抽出 該当
クラス クラス クラス
適合率
再現率
更新履歴情
報のみ
34
10
10 1.00 0.29
静的情報の
み
34
32
16 0.50 0.47
提案手法
34
29
25 0.86 0.74
更新傾向グラ
フでの抽出
10
10
1.00
コールグラフ
での除去
0
0
0.00
コールグラフ
での補完
19
15
0.79
適合率、再現率
ともに提案手法
は高く、
再現率は最大
更新傾向グラフ
で抽出できな
かった多くのクラ
スを抽出できた
13
Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
2006/12/15
ヒストリ機能
正解 抽出 該当
クラス クラス クラス
適合率
再現率
更新履歴情
報のみ
30
15
6
静的情報の
み
30
31
13 0.42 0.43
提案手法
30
27
14 0.52 0.47
0.40 0.20
更新傾向グラ
フでの抽出
15
6
0.40
コールグラフ
での除去
2
0
0.00
コールグラフ
での補完
14
8
0.57
適合率、再現率と
もに提案手法が
最大
誤って抽出して
しまったクラスを
除去しきれな
かった
14
Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
2006/12/15
まとめと今後の課題
• まとめ
– あるクラスと同一の機能を実装しているクラス群
を抽出する手法の提案
• 更新傾向グラフを用いて抽出
• コールグラフを用いて誤りの除去と抽出漏れの補完
• 今後の課題
– 誤って抽出したクラスの除去の精度の向上
– 抽出精度の向上
15
Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
2006/12/15
16
Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
2006/12/15