研究概要 |
識別子名の類似性に基づくコードクローン検出ツールの実装を行った.1つ目に,"ソースコードに含まれる類義語の特定"について述べる.各ソースファイルに含まれる語(基本的には識別子名.ただし,複数の語からなる識別子名は各語に分割)を抽出し,類義語(類似した用いられ方をしている語)の特定を行った.このためには,自然言語の類義語辞書をそのまま用いるという方法が考えられるが,これには"自然言語における類義語は,プログラミング言語における類義語と異なる可能性がある"という問題点と"特定分野のソフトウェアの開発では,分野固有の類義語が存在すると考えられ,そのような類義語は既存の類義語辞書には掲載されていないと考えられる"という問題点が挙げられる.そこで,類義語辞書を用いず,自然文書中から類義語を自動的に抽出する手法を実装した.クラスタリング後,同一のクラスタに含まれた語が類義語として特定される.2つ目に,"コード片間の等価性判定"について述べる.コード片間の等価性を判定するため,構文木中の部分木に対して特徴ベクトルを付加する.特徴ベクトルは,部分木に含まれる語の分布を表し,類義語は同一の語として扱う.次に,特徴ベクトル間の距離に基づいて部分木のクラスタリングを行った.最後に,同一クラスタに属した部分木に対応するコード片を等価なコード片として提示する.本研究は,イギリスの公立大学であるUniversity College of LondonのMark Harman教授との情報交換を通して遂行した.
|