研究概要 |
本研究では,ソフトウェア中に含まれるコードクローン(類似したコード片の集合)を効率よく検出,除去する手法について堤案し,堤案手法に基づく支援ツールを開発した.提案手法は,Javaプログラムを対象とした.先ず,既に我々が開発してきている,高速なコードクローン検出ツールCCFinderを用いることによりトークン単位のコードクローンを検出する.しかし,トークン単位のコードクローンを一つの関数やモジュール等に集約することは無理があるため,そのコードクローンをプログラミング言語の構文規則に基づいて,集約が可能な単位に調整する.Javaプログラムの場合では,構造的なまとまりをもったブロック(宣言・メソッド,文等)がその単位となる.そして,調整したコードクローンに対して幾つかの特徴を計測するためのメトリクスを適用し,どのような集約が可能であるかを開発者に提示する.集約の手法は,メソッドの抽出(ソースコードのある一部分を新たなメソッドとして再定義すること)とメソッドの引き上げ(ある親子クラス関係が存在した場合に,子クラスに存在するメソッドを親クラスに引き上げること)の2種類を対象とした.更に,提案手法に基づいてJavaプログラム中のコードクローンの集約を支援するツールを開発した.最後に,開発した支援ツールを幾つかのオープンソースソフトウェア,研究室で開発している各種ツールに適用した.オープンソースソフトウェアとして有名なAnt(サイズは約18万行)に対して適用した結果では,15種類のコードクローンが抽出され,その中の12種類に対して効率よく集約を行うことができた.実際のソフトウェア会社で開発しているソフトウェアに対して開発したツールを適用し,提案手法の有用性の評価を行うことが今後の課題である.
|