第 3 章 版管理システムを用いたクローン履歴抽出手法 47
3.3 諸定義
本節では分析対象となるクローンについて定義を与える.その上で異なる時点 におけるコード片の対応関係を表す写像の概要と,クローン履歴関係の定義につ いて述べる.
3.3.1 クローン
クローン履歴分析のために定義したクローン履歴モデルを図3.3に示す.本モデ ルでは時間と共に変更されるソースコードを∆tごとに区切った状態で考える.分
50
Ft-1 Ft
H:
cp:
F:
(
)
F0
∆ t
図3.3: クローンとクローン履歴関係
析の対象を版管理システムの管理下にあるソースコードファイルの集合とし,あ る時刻tにおける集合をプロダクト(Product)Ftと呼ぶ.
いま,各ファイルを文字列と考え,その連続する部分列をコード片(Code snippet) と呼ぶ.CCFinderに,Ftの各ファイルを入力として与えると,コード片の対(a, b) の列を出力する.これをFtに関するクローンペア(Clone pair),aやbをそれぞ れFtに関する クローン(Clone)と呼ぶ.このときaと bはクローン関係(Clone
relationship)にあるという.また,クローン関係を同値関係と考え,その同値類を
クローンセット(Clone Set)と呼ぶ.
3.3.2 コード片の写像
次に時刻tより∆tだけ過去の時点におけるプロダクトFt−1 に含まれるコード 片に対して,Ftに含まれるコード片への写像を定義する.例えばFt−1にあるコー ド片がもし編集されていなければ,Ft にも同じ内容のコード片が必ず存在する.
また,時刻tにおいて編集されたテキストを含むコード片についても,図3.5のよ うに編集操作を考慮して近似的に対応関係にあるコード片候補を求められる.こ のような両者の関係を写像として定義する.本写像によってFt−1のコード片rが 空文字列でないFtのコード片sに写像される時,rをsの親,sをrの子とする.
なお写像の詳細な定義は3.4.3節で述べる.
3.3.3 クローン履歴関係
Ft−1のコード片aとFtのコード片bが以下のいずれかを満たす場合,a, b間に はクローン履歴関係(Clone history relationship)があるといい,クローン履歴関 係が成りたつコード片の組(a, b)の集合をHtと表す(図3.4).Htは以下に述べる HCt, HTt, HAtの和集合として定義される.
1. HCt:(a, a0)がFt−1 に関するクローンペア,(b, b0)がFtに関するクローンペ アで,bがaの,b0 がa0の子となるa0, b0が存在する.
2. HAt: aはFt−1 に関するクローン,bはFtに関するクローンで,かつ(a, b) は{Ft−1∪Change∆t}に関するクローンペアである.ただし,Change∆tは Ft−1からFtの変更時に編集されたコード片の集合とする.
3. HTt: aはFt−1 に関するクローン,もしくはFt−1 のコード片で∃x,(x, a) ∈ HTt−1.bはaの子でaとbは類似している(類似の詳細は後述).
全てのクローンは以下の3つのパターンに分類できる.すなわち,Ft−1, Ftの両 方に存在する“継続しているクローン”,Ft−1 のみに存在する“削除されたクロー ン”,そしてFtにのみ存在する“追加されたクローン”である.そして,上記3つ の定義はそれぞれのクローンに対応する形で定義している.
HCt は Ft−1, Ft の両方に存在する同一のクローンを表す.本定義は Ft−1 でク ローンペアを構成するクローンa, a0 が,写像先のb, b0においてもクローンペアを 構成している,ということを表す.
HAtはFtにおいて追加されたクローンの履歴を表す.このようなコード片は,
既にあるクローンセットのどれとも等しくクローン履歴関係があると考える.こ
52
Ft-1 Ft
a
a’
HAt
HCt HTt
b
Ft-1 Ft
b a
Ft-1 Ft
a
a’
b
b’
図3.4: 3種類の履歴関係
れは,既存クローンのうちどれか一つを原本と決めることは難しく,またそうす ることの意義も薄いからである.
このように本手法ではHAtをHCtと分けて定義している.HCtでは親子関係 が明示的に一意に定まるのに対して,HAtでは親が属するクローンセット内のク ローンすべてとクローン履歴関係が存在することになる.そのため,HAtとHCt を分けることでクローン履歴関係がより正確なものとなる.
HTtはFt−1においてクローンだったコード片のうち,Ftにおいてクローンペア をなすクローンが削除されたコード片(図3.4 中のクローンat)について,その対 応関係を抽出するための定義である.このようなコード片はCCFinderによって検 出されるクローンではないが,これもFtにおけるクローンとして扱う.このよう なクローンについては,親子間においてテキスト類似度(後述)が閾値以上ある場
合,これらの親子間にHTtが成り立つものとする.
ただし,クローンペアに一度でもなった部分全てを追いつづけるのは非効率で ある.また,何らかの変更が加わった場合には,その時点で過去のコードとの関 連は希薄になる.そこでテキストがほとんど変更されていない場合にのみクロー ン履歴対応関係があるものとする.