ソースコードを中間表現に変換することで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ファイルにコンパイルしてデコンパイルとかありそう. 結果が大幅に改善できているのはすごいと思った.