履歴情報用いた関連クラス群抽出法の提案 - Software Engineering

履歴情報を用いた同一ユースケー
ス実装クラス群の抽出法の提案
大阪大学大学院
情報科学研究科井上研究室
M1 楠田泰三
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
ソフトウェア可視化技術の問題点の解決策の
提案
図が大規模すぎて全体を把握するには要素数が多すぎる
⇒ 要素数の少ない図を出力する
処理の流れにおいて使われる時期が離れているクラス群を
同時に可視化しても意味がない
⇒同じユースケースを実装しているクラス群のみを抽出して、
可視化する
同じユースケースを実装しているクラス群 ⇒ 「関連クラス群」
同じ関連クラス群に属する各クラスには「関連がある」
例) ユースケース「入力ファイル解析する」を実装しているクラス群
関連クラス群を抽出して、可視化する
Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
4
関連クラス群の見つけ方
バージョン管理システムの保持している開発履歴情報を
用いて関連クラス群を見つける
同時更新傾向が強いクラス群を関連クラス群とする
関連クラス群は同時に更新されることが多いと考えられるため
手順
1. バージョン管理システムから同時更新情報を抽出
2. 同時更新傾向の強いクラス順序対を求める
3. 同時更新傾向の強いクラス群を求め、関連クラス群とする
Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
5
バージョン管理システム
バージョン管理システムを用いた開発
オープンソースソフトウェア開発ではよく用いられる
コピー
開発者
更新を反映
リポジトリ
開発のプロセス
1. リポジトリとよばれるデータベースから必要なリソースをコピー
2. コピーしたリソースを更新する
3. 行った更新をリポジトリに反映させる(コミット)
コミットによって複数のリソースが同時に更新され、
その履歴がリポジトリに存在する
Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
6
手順1 - 同時更新情報の抽出
バージョン管理システムCVS ではどのファイルが同時
に更新されたかは記録していない
同時に行われた更新を特定
同じ開発者
同じコミットログ
3分以内
の更新を同時に行われた更新とする
Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
7
手順2 - 同時更新傾向の強いクラス順序対を求める
Zimmermann らが提案したメトリクス[1]
support
confidence
クラス順序対の同時更新の support、confidence が
閾値以上である場合、そのクラス順序対を「同時更
新傾向の強いクラス順序対」とする
[1] 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
support メトリクス
S(A,B) = AとBが同時に更新された回数
support が高い方が同時更新傾向が強い
3
2
2
Class A
3
Class D
5
Class C
2
Class B
S(A,B) = 5
S(A,D) = 3
3
A と B は AとD より 同時更新傾向が強い
Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
9
confidenceメトリクス
C(A,B) = Aが変更された時にBも同時に変更される頻度
confidence が高いほど同時更新傾向が強い
Class A
5
Class C
100
5
Class B
10
Class D
5
200
C(A,B) = 1
C(B,A) = 0.5
C(C,D) = 0.05
C(D,C) = 0.025
クラス順序対(A,B) は クラス順序対(C,D) より 同時更新傾
向が強い
Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
10
同時更新傾向の強いクラス順序対の求め方の例
support の閾値を 13 , confidence の閾値を 0
0.6
とし
と
した場合の同時更新傾向の強いクラス順序対
た場合の同時更新傾向の強いクラス順序対
(B,A) , (A,C)
(A,B)
(C,A) , (B,A) , (C,A)
S(A,B) = 5
C(A,B) = 0.5
(B,C) , (C,A) , (C,B)
C(B,A) = 1
Class A
Class B
S(A,C) = 4
S(B,C) = 2
C(A,C) = 0.2
C(C,A) = 0.8
C(B,C) = 0.2
Class C
C(C,B) = 0.4
Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
11
手順 3 関連クラス群の決定 ( 1 / 2 )
1.
クラスをノードとし、同時更新傾向が強いクラス順序対(A,B)に有効辺
A → B を引いたグラフ(更新傾向グラフ)を作成
Class A
Class B
同時更新傾向の強いクラス順序対
( A,
B, A
B ) ,,((A,
A,
C, C
A
C))),,((B,
B,AA)),,( C, A )
Class C
( B, C ) , ( C, A ) , ( C, B )
更新傾向グラフ
Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
12
手順 3 関連クラス群の決定 ( 2 / 2 )
Fruchterman らによって提案されたFR レイアウト[2]を用いて更新傾
向グラフを描画
2.
•
エッジが多く存在するノード群は近くに、エッジが少ないノード群は遠くに配置さ
れる
近くに配置されるクラス群を同時更新傾向の強いクラス群とし、関連
クラス群とする
Class A
3.
Class A
Class B
Class F
Class B
Class C
Class C
Class D
Class F
Class E
Class G
Class G
関連クラス群
Class D
Class E
[2] Fruchtermann et al. Graph drawing force-directed placement. Software, Practice
and Experience 21 ( 1998 ) 1129-1164
Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
13
関連クラス群を用いた可視化
着目したクラスの属する関連クラス群のみを抽出して
クラス図として表現する
クラス「XMIParser」の
関連クラス群の抽出
全てのクラス
ユースケース「引数で与えられた
XMIファイルを解析する」を実装し
ているクラス群
この部分はまだ実装されていない
Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
14
実験
実験方法
閾値を変化させて、その時導出される同時更新傾向
の強いクラス群は関連クラス群かどうかを調べる
閾値が低すぎると実際は関連していないクラスを導出させて
しまう
閾値が高すぎると関連しているクラスを導出できない
実験対象のソフトウェアの開発者と協力して行う
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
実験対象
コードクローン分析ツール Aries の解析部
クラス数 107 個
行数 36717行
開発期間 2004年4月から
更新回数 262 回
処理概要
コードクローン検出ツールCCFinderにより発見されたコードク
ローンの情報を分析し、メトリクスを計算してXMLファイルに出
力する
Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
17
実験結果 ( 1 / 3 )
プログラムに与えられた引数を処理
する
構文解析結果からデータを変換して
一時的に保持するためのクラス群
support ≧ 1 , confidence ≧ 0 の更新傾向グラフ
一度でも同時に更新されたクラス間にはエッジが引かれる
関連していないクラスを含むクラス群があるので
閾値を上げる
Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
18
実験結果 ( 2 / 3 )
中心にあったクラス群がいくつかのまとまりにわかれる
メトリクスを計算して、XMLファイル
に出力するために使われるクラス群
コードクローンを構文解析する際に使
用されるクラス群
入力ファイルを処理するために使わ
れるクラス群
support ≧ 3 , confidence ≧ 0.5 の更新傾向グラフ
さらにまとまりをはっきりさせるために、閾値を上げる
Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
19
実験結果 ( 3 / 3 )
既に関連があると判断されたクラス
群の一部
いくつかのクラスは関連していないと
判断されてしまう
support ≧ 3 , confidence ≧ 0.8 の更新傾向グラフ
6割のクラスは同時更新傾向が強いクラスがないと判断される
Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
20
実験結果の考察
更新の傾向
変更によって、特定のクラス群を更新することが多い
必ず特定のクラス群だけで更新を行うというわけではない
いくつかの変更を同時に行ってからコミットをする場合がある
同時更新傾向の強いクラス群のクラス間にはほぼ関
連がある
着目するクラスによってsupport , confidence の閾値を
変更する必要がある
Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
21
まとめ
履歴情報を用いた同一ユースケース実装クラス群の
抽出法の提案
同時更新傾向の強いクラス群を同一ユースケースを実
装しているクラス群とする
ソフトウェアの可視化に利用
同時更新傾向の強いクラス群と関連クラス群との関
係を調べるための実験
同時更新傾向の強いクラス群は関連がある
適切な閾値を設定する必要がある
Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
22
今後の研究方針
さらなる実験
同時更新傾向は見られなかったが関連があるクラスはど
の程度存在するか
同時更新傾向の強いクラス群の構造的な関係
継承、依存などはあるか
同時更新傾向の強いクラス群抽出の自動化
現在は描画されたグラフを閲覧して人が判断している
グラフのクラスタリングアルゴリズムの適用
適切な閾値を見つける方法
Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
23
終わり
Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
24
参考
Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
25
実験結果
1. support ≧ 1 , confidence ≧ 0
Import文処理部
main メソッドを含むクラス
プログラムに与えられた引数を処理
する
構文解析結果からデータを取ってくる
ための一時的に使用されるクラス群
Class, Interface , Declaration
コードクローン間の構文的な距離
を計算するためのもの
Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
26
実験結果
2. support ≧ 3 , confidence ≧ 0.5
メトリクスを計算して、XMLファイル
に出力するために使われるクラス群
コードクローンを構文解析する際に使
われるクラス群
入力ファイルを処理するために使わ
れるクラス群
Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
27
実験結果
3. support ≧ 3 , confidence ≧ 0.8
既にまとまりになっていたクラス群の
一部
2 / 3 のノードが孤立している
Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
28