• 検索結果がありません。

第 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)と呼ぶ.このときabはクローン関係(Clone

relationship)にあるという.また,クローン関係を同値関係と考え,その同値類を

クローンセット(Clone Set)と呼ぶ.

3.3.2 コード片の写像

次に時刻tより∆tだけ過去の時点におけるプロダクトFt1 に含まれるコード 片に対して,Ftに含まれるコード片への写像を定義する.例えばFt1にあるコー ド片がもし編集されていなければ,Ft にも同じ内容のコード片が必ず存在する.

また,時刻tにおいて編集されたテキストを含むコード片についても,図3.5のよ うに編集操作を考慮して近似的に対応関係にあるコード片候補を求められる.こ のような両者の関係を写像として定義する.本写像によってFt1のコード片rが 空文字列でないFtのコード片sに写像される時,rをsの親,sをrの子とする.

なお写像の詳細な定義は3.4.3節で述べる.

3.3.3 クローン履歴関係

Ft−1のコード片aFtのコード片bが以下のいずれかを満たす場合,a, b間に はクローン履歴関係(Clone history relationship)があるといい,クローン履歴関 係が成りたつコード片の組(a, b)の集合をHtと表す(図3.4).Htは以下に述べる HCt, HTt, HAtの和集合として定義される.

1. HCt:(a, a0)がFt1 に関するクローンペア,(b, b0)がFtに関するクローンペ アで,bがaの,b0a0の子となるa0, b0が存在する.

2. HAt: aFt1 に関するクローン,bはFtに関するクローンで,かつ(a, b) は{Ft1∪Change∆t}に関するクローンペアである.ただし,Change∆tFt1からFtの変更時に編集されたコード片の集合とする.

3. HTt: aFt1 に関するクローン,もしくはFt1 のコード片で∃x,(x, a) HTt1.bはaの子でabは類似している(類似の詳細は後述).

全てのクローンは以下の3つのパターンに分類できる.すなわち,Ft1, Ftの両 方に存在する“継続しているクローン”,Ft1 のみに存在する“削除されたクロー ン”,そしてFtにのみ存在する“追加されたクローン”である.そして,上記3つ の定義はそれぞれのクローンに対応する形で定義している.

HCtFt1, Ft の両方に存在する同一のクローンを表す.本定義は Ft1 でク ローンペアを構成するクローンa, a0 が,写像先のb, b0においてもクローンペアを 構成している,ということを表す.

HAtFtにおいて追加されたクローンの履歴を表す.このようなコード片は,

既にあるクローンセットのどれとも等しくクローン履歴関係があると考える.こ

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種類の履歴関係

れは,既存クローンのうちどれか一つを原本と決めることは難しく,またそうす ることの意義も薄いからである.

このように本手法ではHAtHCtと分けて定義している.HCtでは親子関係 が明示的に一意に定まるのに対して,HAtでは親が属するクローンセット内のク ローンすべてとクローン履歴関係が存在することになる.そのため,HAtHCt を分けることでクローン履歴関係がより正確なものとなる.

HTtFt1においてクローンだったコード片のうち,Ftにおいてクローンペア をなすクローンが削除されたコード片(図3.4 中のクローンat)について,その対 応関係を抽出するための定義である.このようなコード片はCCFinderによって検 出されるクローンではないが,これもFtにおけるクローンとして扱う.このよう なクローンについては,親子間においてテキスト類似度(後述)が閾値以上ある場

合,これらの親子間にHTtが成り立つものとする.

ただし,クローンペアに一度でもなった部分全てを追いつづけるのは非効率で ある.また,何らかの変更が加わった場合には,その時点で過去のコードとの関 連は希薄になる.そこでテキストがほとんど変更されていない場合にのみクロー ン履歴対応関係があるものとする.

関連したドキュメント