Efficient Code Clone Management based on Historical Analysis and Refactoring Support

(邦訳:履歴分析とリファクタリング支援に基づく効率的なコードクローン管理)
 
堀田 圭佑
大阪大学 特別研究員

[背景]コードクローンに対して効率的に対処することが必要
[問題]どの程度のコードクローンが悪影響を与えているのか明らかでない
[貢献]一部のコードクローンが悪影響を与えていることを定量的に確認


 ソフトウェアの開発・保守を妨げる要因の1つとして,コードクローンの存在が指摘されている.コードクローンとは,ソフトウェアのソースコード中に存在する類似した部分(コード片)のことを指し,コピーアンドペーストによる既存コードの再利用がその主たる生成要因である.コードクローンが存在すると,ソースコード中のある個所を修正する必要が生じた際に,修正が必要な個所とコードクローン関係にある他の個所についても同様の修正を検討する必要がある.これにより,ソースコードの修正に要する作業量が増大し,かつ修正し忘れによる不具合残存のリスクが発生する. このような理由から,ソースコード中に存在するコードクローンを検出する手法や,コードクローンの除去作業を支援する手法に関する研究が盛んに行われている.

 しかし,大規模なソフトウェアのソースコード中には膨大な量のコードクローンが存在しており,それらすべてを監視する,あるいは除去することは現実的には難しい.したがって,すべてのコードクローンに対して均等に対処するのではなく,有害なものに注力することが必要であると考えられる.

 このような背景から,効率的なコードクローン管理の実現に向けて,有害なコードクローンがどの程度存在するのかを把握することが必要であるといえる.そこで本研究では,ソフトウェアの開発履歴情報を分析し,ソースコードがどのように変化してきたのかを調査することで,有害なコードクローンがどの程度存在するのかを調査した.コードクローンによる弊害はコードクローンに対して何らかの修正が必要となったときに顕著に現れることから,本研究では頻繁に修正されるコードクローンを有害なものと判断した.調査の結果,コードクローンはそれ以外の個所と比較して修正されにくいことが明らかになった.また,複数回修正が加えられたコードクローンは,全体の約3%程度であることが明らかになった.この結果は,効率的にコードクローンに対処するためには,一部のコードクローンに注力することが必要である,ということを定量的に裏付ける結果であるといえる.

 さらに本研究では,差分を含むコードクローンの除去支援手法を提案した.差分を含むコードクローンとは,互いに類似するコード片の間に一部一致しない個所(差分)が存在するコードクローンのことをいう.差分を含むコードクローンは,たとえばあるコード片をコピーアンドペーストした後,コピー先のみに対して少し変更を加えた場合などに生成される.このようなコードクローンは検出が難しいため,開発者が見落としてしまう可能性が高い.また,差分を含むコードクローンはそうでないものと比べて除去作業が複雑なものとなり,誤った方法で除去作業を行った場合,不具合を混入させてしまう原因となる.そこで本研究では,このような差分を含むコードクローンを自動的に検出し,その除去作業を支援する手法を提案した.オープンソースソフトウェアに対する実験,ならびに被験者実験を通じて,提案手法が差分を含むコードクローンの除去作業支援手法として有効であることを確認した.
 


 (2014年5月28日受付)
取得年月日:2013年9月
学位種別:博士(情報科学)
大学:大阪大学



推薦文
:(ソフトウェア工学研究会)


本研究では,開発,保守を阻害するコードクローンがどの程度存在するのかを定量的に明らかにするとともに,「コードクローンとなっている個所の方がそうでない個所と比較して修正されにくい」「大多数のコードクローンがたかだか一回しか修正されない」などの興味深い現象を発見している.本研究は,従来にない切り口で実証評価しており,研究会推薦博士論文にふさわしい.              


著者からの一言


研究会推薦博士論文に推薦していただき,身に余る光栄です.本研究は,これまで温かくご指導くださった先生方をはじめ,多くの方にご指導,ご支援をいただいたおかげで実施できました.お世話になりました方々に,この場をお借りして改めて御礼申し上げます.今後も,ソフトウェア工学の発展とその開発現場での活用に寄与できるよう,研究活動に尽力したいと思います.