版管理システムを用いたコードクローン履歴分析

クローン履歴を利用した
クローン分析環境
川口真司 松下誠 井上克郎
大阪大学大学院情報科学研究科
Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
発表の概要
クローン履歴分析
クローンの過去を追跡
クローン履歴分析の応用
書き換える場所の発見
書き換える場所の理解促進
2005/08/04
Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
2
コードクローン
コードクローン(あるいは単に
クローン)
類似文字列が存在するコー
ド片
クローンの位置は (ファイル名、
開始行番号、終了行番号)
で指定
クローンペア
クローンA-1 とクローンA-2 が
類似文字列であるときに、こ
れらをクローンペアとよぶ
Clone A-1
Clone A-3
Clone A-2
Clone B-2
Clone B-1
クローンセット
クローンペア関係において推
移関係が成り立つクローンの
集合
2005/08/04
Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
3
クローン履歴
1. ひとつのクローンセットを
クローン発生時期から分類
Clone A-3 追加
Clone A-1
Clone A-1
Clone B-1
Clone B-1
Clone A-3
Clone A-1
Clone B-1
Clone A-3
Clone A-4
Clone A-4, A-5 追加
Clone A-2
Clone B-2
Clone B-3
Clone A-2
Clone B-5
Clone B-4
Clone B-2
Clone B’-3
Clone A-2
Clone B’-2
Clone B’-1
Clone B-3, B-4, B-5 が編集
されて別クローンセットに
3.コード中に含まれるコード
クローンの変化を分析
Clone B’-2
Clone B-2
Clone B’-3
Clone A-5
Clone B’-1
Clone B’-3 削除
2.過去に同じクローンセットだった
クローンセットの発見
2005/08/04
Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
4
クローン履歴関係抽出手法
指定された期間 [0, t]、間隔Δt について期間 [0, t] を Δt ごとに分割、
それぞれの時のファイルの状態をバージョン V0, V1, ..., Vt と表す
過去のプロダクトの取得には版管理システム (ex. cvs, subversion, ...) を用いる
となりあうバージョン間について分析
V0, V1 をリポジトリから取得
V0, V1 間のクローン履歴関係を分析
Vt をリポジトリから取得
Vt-1, Vt 間を分析
・・・
V0
V1
Vt-1
Vt
2005/08/04
Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
5
クローン履歴を用いたプログラムの書き換え
1. 書き換え箇所の発見
要改善箇所の提示
2. 書き換え箇所の理解
クローンが入ったときのコミットログ
他の部分にコピーされた部分の
3. 書き換え
2005/08/04
Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
6
書き換え候補の提示
クローン
履歴をつかって範囲を広げる
2005/08/04
Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
7
書き換え箇所の理解支援
どこからコピーされた?
2005/08/04
Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
8
作成中の支援環境
クローン履歴閲覧環境
Eclipse プラグイン
主なUI
ディレクトリ単位でのクローン行数の変遷グラフ
クローンマップ
過去の時点のソースコード参照
2005/08/04
Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
9
今後の課題
2005/08/04
Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
10
2005/08/04
Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
11
版管理システム
2005/08/04
Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
12
履歴を考慮したクローン分析
過去にクローン関係にあったコード片の抽出
過去の時点でのクローン解析情報
現在のクローンは、過去のどのクローンに対応するか?
Clone A-3 追加
Clone A-1
Clone A-1
Clone B-1
Clone B-1
Clone A-3
Clone A-1
Clone B-1
Clone A-3
Clone A-4
Clone A-4, A-5 追加
Clone A-2
Clone B-2
Clone B-3
Clone A-2
Clone B-5
Clone B-4
Clone B-2
Clone B’-3
Clone A-2
Clone B’-2
Clone B’-1
Clone B’-3
Clone B-3, B-4, B-5 が編集
されて別クローンセットに
2005/08/04
Clone B’-2
Clone B-2
Clone A-5
Clone B’-1
Clone B’-3 削除
クローンセット B, B’ を
「分離クローンセット」と呼ぶ
Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
13