著者
幸 佑亮 肥後 芳樹 楠本 真二
雑誌
情報処理学会論文誌 (ISSN:18827764)
巻号頁・発行日
vol.59, no.4, pp.1192-1202, 2018-04-15

コードクローンはソフトウェアの保守性を低下させる原因の1つとされており,コードクローンがソフトウェア中にどの程度存在しているか,およびどこに存在しているかを理解することはソフトウェア保守の観点から重要である.そのため,これまでに多くのコードクローン検出手法が提案され,自動的にコードクローンを検出するツールが開発されている.既存のコードクローン検出手法は,ファイル単位やコード片単位など単一の粒度でコードクローンを検出する.一般的に,検出の粒度が粗いほど検出時間は短くなるが,検出可能なコードクローンは少なくなる.一方,検出対象の粒度が細かいほど検出可能なコードクローンは多くなるが,検出時間は長くなる.そこで本論文では,より多くのコードクローンをより短時間で検出することを目的として,粗粒度から細粒度へ段階的にコードクローンを検出する手法を提案する.段階的にコードクローンを検出する過程において,ある粒度でコードクローンとして検出されたコードをそれよりも細粒度なコードクローンの検出対象から除外することで,細粒度な検出手法と比較してより高速に検出できる.また,粗粒度な検出手法と比較してより多くのコードクローンを検出できる.提案手法をコードクローン検出ツールDecrescendoとして実装し,複数のオープンソースソフトウェアに適用した.そして,提案手法を粗粒度な検出手法および細粒度な検出手法と比較して評価を行った.実験の結果より,細粒度な(コード片単位の)検出手法と比較して,多粒度な検出手法が約10~20倍高速にコードクローンを検出できることを示した.また,粗粒度な(メソッド単位の)検出手法と比較して,多粒度な検出手法が約10~30倍のコードクローンを検出した.この検出数は細粒度な(コード片単位の)検出手法とほぼ同数であった.