Document

履歴情報を用いた同一ユースケース
実装クラス群抽出法の提案
楠田泰三, 川口真司, 松下誠, 井上克郎
大阪大学大学院情報科学研究科
井上研究室
Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
1
ソフトウェアの可視化
ソフトウェア可視化技術
ソフトウェアの構造や振る舞いを、図やグラフを用いて表現することで、
ソフトウェア理解を支援
例) UMLのクラス図
オブジェクト指向ソフトウェアの構造理解を支援
クラスの継承、依存などの関係を記述できる
StateSetter
setState()
State
printMsg()
MsgPrinter
state : State
StateA
StateB
setState()
printMsg()
printMsg()
printMsg()
Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
2
ソフトウェア可視化技術の問題点
オブジェクト指向開発では、開発が進むにつれクラス数が増加する
大規模なオブジェクト指向ソフトウェアは、その全てのクラスを
可視化しても、出力された図も大規模になり理解が難しい
クラス数100余りのソフトウェアのクラス図
同じユースケースを実装しているクラス群のみを抽出して、可視化する
⇒ 要素数の少ない図を出力
Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
3
既存研究の問題点
ユースケース抽出の既存手法[1]
静的にコールグラフを解析する
動的な側面を考慮せず、呼ばれる可能性がある全てのメソッドに呼び出し辺を
つけたコールグラフを作成
入力があるメソッドから出力があるメソッドまでの経路を一つのユースケースとする
⇒実際には存在しないメソッドの実行系列が抽出され、多くのユースケースが抽出
される
ソースコードを静的に解析するだけではユースケースを実装している
クラス群を抽出するのは難しい
[1] Lucca et al. Recovering Use Case models from Object-Oriented Code: a Thread-based
Approach. WCRE2000
Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
4
研究の目的
同一のユースケースを実装しているクラス群は同
時に更新されることが多いのではないか
版管理システムの保持している開発履歴情報を用い、
同時に更新される傾向が強いクラス群を同一のユース
ケースを実装しているクラス群として抽出
版管理システム
•管理下にある全てのソフトウェアプロダクトに対して行われた
全ての更新の履歴を保持
•いつ、誰が、なぜそのような更新を行ったかという情報も含む
Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
5
提案手法概要
{A , B , C , D}
{A , B , C}
{A , C}手順6.1
閾値を再設定
手順6.2
{B
,
D}
版管理システムの
同時更新傾向の強い
手順4
リポジトリ
手順5
クラス群を抽出
手順1
閾値を設定して
閾値を設定して
手順3手順2
メトリクス値の計算
フィルタリング
同時更新情報の抽出
クラスタリング
更新傾向グラフの作成
:
( 1, 0.67 )
{A , C}
A
B
A
B
A
B
{B , D}
( 3, 1.0 )
C
D
C
D
C
Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
D
6
手順1 - 同時更新情報の抽出
{A , B , C , D}
{A , B , C}
{A , C}
版管理システムのリポジトリ
{B , D}
同時更新されたクラス群のリスト
同じコミット作業により更新されたクラス群を同時に更新されたクラス群
と考える
以下の情報を用いて同じコミット作業により更新されたことを特定
更新者
更新時のコメント
更新時間
同時更新されたクラス群のリストを作成
Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
7
手順2 - 同時更新の強さを表すメトリクスの計算
{A , B , C , D}
{A , B , C}
{A , C}
{B , D}
:
メトリクス値
同時更新されたクラス群のリスト
同時更新の強さ = どの程度同時に更新される傾向があるかを数値で表現
Zimmermann らが提案したメトリクス[2]を用いる
support - 同時に更新された回数
クラス
と
が同時に更新された回数
confidence - 同時に更新された頻度
が更新されたとき、
も同時に更新される割合
[2] Zimmermann et al. How History Justifies System Architecture ( or not ) . IWPSE2003
Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
8
手順3 - 更新傾向グラフの作成
( 2, 0.67 )
A
B
( 3, 1.0 )
:
メトリクス値
C
D
更新傾向グラフ
頂点はクラス
頂点間の辺は始点と終点のクラスの同時更新の強
さを保持
始点をクラス A 、終点をクラス B とした時 A → B の辺は
と
を保持
Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
9
手順4 - support を用いてフィルタリング
複数の関係の無い作業によって偶然同時に更新された
場合を考慮しないようにするため
support 値として閾値 以下の値を持っている辺を更新
傾向グラフから除去
A
( 2, 0.67 )
( 2, 0.67 )
B
A
( 2, 0.67 )
B
( 2, 0.67 )
( 3, 1.0 )
( 3, 1.0 )
( 3, 1.0 )
( 2, 1.0 ) ( 2, 0.67 )
( 2, 0.67 )
( 3, 1.0 )
( 2, 1.0 )
C
( 1, 0.33 )
( 1, 0.5 )
更新傾向グラフ
D
C
D
フィルタリングした更新傾向グラフ
Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
10
手順5 - confidence を用いてクラスタリング
群平均法を用いる
初期状態の頂点の一つずつをクラスタする
クラスタ間の近さの値が最大の2つのクラスタを一つのクラスタに統合
1.
2.
クラスタ間の近さの値は、各クラスタに含まれる頂点間のすべての組み合わせの近さの値の平均
終了条件が満たされるまで統合を繰り返す
頂点A,B間近さは
ただし、フィルタリングによりA,B間に辺が無い場合は近さは0
終了条件は「全てのクラスタ間の近さが閾値
A
( 2, 0.67 )
より小さい」
B
A
( 2, 0.67 )
( 3, 1.0 )
( 2, 0.67 )
( 3, 1.0 )
1.0
( 2, 1.0 )
C
C
D
フィルタリングした更新傾向グラフ
0.67
0.67
0.67
0.330
0
0
B
0.83
D
クラスタ化更新傾向グラフ
Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
11
手順6 - 同時更新傾向の強いクラス群の
抽出
閾値を変化させ、一つのクラスタに含まれるクラス群が適切な数にな
るように、フィルタリングとクラスタリングを繰り返す
クラスタ化更新傾向グラフ中の各クラスタに含まれるクラス群を同時
更新傾向の強いクラス群として抽出を行う
1.
2.
閾値を再設定
A
B
A
B
{A , C}
{B , D}
フィルタリング、
C
D
更新傾向グラフ
クラスタリング
C
D
同時更新傾向の
強いクラス群
クラスタ化更新傾向グラフ
Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
12
検証実験
対象とするソフトウェアに対し本手法を適用し、抽出されるク
ラス群が同一ユースケース実装クラス群となっているかどうか
を調べる
実験対象
CREBASS ( Cvs REpository Browse and Search
System )
CVS リポジトリ閲覧・検索システム
規模
– クラス数 70クラス
– 行数 7513行
– 総更新回数 140回
実装されている主なユースケース
– プロジェクトデータの変遷の折れ線グラフによる表示
– リビジョン情報の検索
– プロジェクト内のファイルのログの表示 など
Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
13
実験結果
の時のクラスタ化更新傾向グラフ
ユースケース
実装クラス
の時のクラスタ化更新傾向グラフ
抽出クラス
適合クラス
抽出クラス
適合クラス
折れ線グラフによる表示
4
4
4
20
4
リビジョン検索
7
0
0
7
7
ファイルのログの表示
4
4
4
3
3
Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
14
実験結果の考察
ユースケース
実装クラス
抽出クラス
該当クラス
抽出クラス
該当クラス
折れ線グラフによる表示
4
4
4
20
4
リビジョン検索
7
0
0
7
7
ファイルのログの表示
4
4
4
3
3
support の閾値
複数の関係の無い作業によって偶然同時に更新されたクラス間の
support は1, 2程度 [2]
フィルタリングは有効
クラスの更新回数が少ない時には用いるべきではない
ユースケース「リビジョン検索」を実装しているクラス群は更新回数が高々2回
適切に閾値を設定する必要がある
[2] Zimmermann et al. How History Justifies System Architecture ( or not ) . IWPSE2003
Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
15
まとめ
ソフトウェアの開発履歴を用いて同一のユースケースを
実装しているクラス群を抽出する手法を提案
可視化に用いることで、一部を詳細に理解することを支援
手法の妥当性を評価するための実験
ユースケース実装クラス群を抽出することは可能
適切に閾値を設定する必要がある
今後の研究
手法の改良
手法の定量的な評価
可視化の方法について考案
Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
16