クローン間の異なる箇所を自動で検出するツールMCIDiffの論文.

クローンとはソースコード中の似ているコード片を指す. クローンには大きく分けて3種類ある(textual,parameterized,gapped). クローン間の異なる箇所を把握することは同時修正やリファクタリングなどの保守作業のおいて必要である. そのため,著者らはクローン間の異なる箇所を自動で検出する手法を提案し,EclipseのプラグインMCIDiffとして実装した.

提案手法では,それぞれのクローンをトークン列に分解したのちに,Longest Common Subsequence(LCS)アルゴリズムを用いて一致する箇所,異なる箇所を提示する. 複数の文字列に対するLCS検出はNP完全なため,近似アルゴリズムを用いている. 提案手法ではそれぞれのトークンにカテゴリと属性を与えてより正確な検出を可能としている.

適用実験で95%以上の適合率と再現率,および被験者実験で実際に役に立つことを示した.

クローンの差分を検出したいというモチベーションはよく理解できた. 一方,差分検出にLCSを用いたのはどうなのかと感じた. GumTreeのようなAST単位の差分検出の方がより正確な気がする(実行時間は爆発しそう). 逆に,LCSを用いた手法でこれだけ正確なのは凄い.