ソースコードを中間表現に変換することでType-3/4クローン検出の精度を高める手法LLNiCadの論文.
高水準言語は多様な書き方ができる一方で,その多様性が意味的に類似したコードの構文的な類似度を低くしている(e.g. for
vs while
).
そのため,構文の類似度からType-3/4クローンを検出するのが難しい.
一方,PDGやメモリ消費からType-3/4クローンを検出する手法は,時間,空間的計算量から実用性に乏しい.
ここで,ソースコードの多様性を排除する(i.e. 高水準から低水準に落とす)ことで,
意味的に類似したコードが構文的に類似するようになる可能性がある.
つまり,上記の処理により,構文的類似度からクローンを検出するツールの精度を高められる可能性がある.
この論文では,この考えに基づいて,
C言語をLLVM対応の中間言語に変換し,そこからNiCadを用いてクローンを検出する手法LLNiCadを提案している.
実際には,C言語をLLVM対応の中間言語に変換した後に,その中間言語をC言語の構文として正しいように再変換している.
実験として,KrutzらのベンチマークとGCJ(同じ問題に対する回答は少なくともType-4クローンになる)を利用し, オリジナルのNiCadと既存のType-4クローン検出ツールで比較した. 結果として,それらのツールと比較して大幅にF値が改善できた.
手法自体はよくありそうだなと思った. Javaをclassファイルにコンパイルしてデコンパイルとかありそう. 結果が大幅に改善できているのはすごいと思った.