(邦訳:大規模ソフトウェアの保守効率化のためのコードクローン検出・進化分析)
崔 恩瀞 大阪大学大学院国際公共政策研究科 助教 |
[背景]派生開発の普及により類似プロダクトが増加
[問題]類似プロダクト群に含まれるコードクローンの管理が困難
[貢献]類似プロダクト群に適したコードクローン管理手法の解明
[問題]類似プロダクト群に含まれるコードクローンの管理が困難
[貢献]類似プロダクト群に適したコードクローン管理手法の解明
近年,ソフトウェアを開発するときに,既存のソフトウェアを流用し,新たなソフトウェアを開発する派生開発が主流になっている.その結果,類似プロダクトが増加している.これらの類似プロダクトを保守するためには多くの作業や時間が必要である.この問題を解決するために,本論文では,ソフトウェア保守における代表的な問題の1つであるコードクローン(ソースコード中に存在する同一または類似した部分を持つコード片)に着目している.
一般的に,コードクローンの存在はソフトウェアの保守を困難にするといわれている.たとえば,あるクローンセット(互いに類似したコードクローンの集合)内に一貫して変更されてないコードクローンが存在する場合,開発者はそれらのコードクローンを識別し,一貫した変更を行う必要がある.類似プロダクトからコードクローンの検出や管理を支援するために,本論文では,コードクローンが大規模システムで直面している2つの大きな問題を設定し解決した.1番目の問題は「どのような(プログラムの要素を変換する)正規化手法を用いると大規模システムでのコードクローン検出を高速に行えるか」であり,2番目は「(1つのクローンセット内のコードクローンを1つの単位にまとめる)クローンリファクタリングを支援するツールには,どのような機能が必要か」である.
1番目の問題を解決するために,本論文では入力ソースコードに異なる正規化(空白の除外,識別子の正規化等)を適用し,コードクローンを検出する6種類の手法を提案・評価している.まず入力ソースコードに各正規化を適用した後に,それらのファイルを同値類に分ける.その後,各同値クラスから1つのファイルを選択し,選択されたファイルの集合に対してコードクローン検出ツールCCFinderを適用してコードクローンを検出する.評価実験では,3つのオープンソースソフトウェアに対して,提案手法とCCFinderのみを使ってコードクローンを検出する方法を適用した.その結果,CCFinderのみを使ってコードクローンを検出する方法より提案手法の方が約2倍早く検出できることがわかった.また,提案手法の中では,入力ファイルに何の正規化を適用せずに,完全一致ファイルに基づいてコードクローンを検出する手法が,より早くコードクローンを検出できることが分かった.
2番目の問題を解決するため,本論文は,オープンソースソフトウェアの開発中に実施されたコードクローンのリファクタリングを識別し,それが実施されたコードクローンの特徴を調査した.その結果,「メソッドオブジェクトによるメソッドの置き換え」パターンが最も多く使われたことが明らかになった.また,トークン列の長さが異なるコードクローンがリファクタリングの対象になることも分かった.この調査結果に基づいて,リファクタリング支援ツールの提案も行っている.
一般的に,コードクローンの存在はソフトウェアの保守を困難にするといわれている.たとえば,あるクローンセット(互いに類似したコードクローンの集合)内に一貫して変更されてないコードクローンが存在する場合,開発者はそれらのコードクローンを識別し,一貫した変更を行う必要がある.類似プロダクトからコードクローンの検出や管理を支援するために,本論文では,コードクローンが大規模システムで直面している2つの大きな問題を設定し解決した.1番目の問題は「どのような(プログラムの要素を変換する)正規化手法を用いると大規模システムでのコードクローン検出を高速に行えるか」であり,2番目は「(1つのクローンセット内のコードクローンを1つの単位にまとめる)クローンリファクタリングを支援するツールには,どのような機能が必要か」である.
1番目の問題を解決するために,本論文では入力ソースコードに異なる正規化(空白の除外,識別子の正規化等)を適用し,コードクローンを検出する6種類の手法を提案・評価している.まず入力ソースコードに各正規化を適用した後に,それらのファイルを同値類に分ける.その後,各同値クラスから1つのファイルを選択し,選択されたファイルの集合に対してコードクローン検出ツールCCFinderを適用してコードクローンを検出する.評価実験では,3つのオープンソースソフトウェアに対して,提案手法とCCFinderのみを使ってコードクローンを検出する方法を適用した.その結果,CCFinderのみを使ってコードクローンを検出する方法より提案手法の方が約2倍早く検出できることがわかった.また,提案手法の中では,入力ファイルに何の正規化を適用せずに,完全一致ファイルに基づいてコードクローンを検出する手法が,より早くコードクローンを検出できることが分かった.
2番目の問題を解決するため,本論文は,オープンソースソフトウェアの開発中に実施されたコードクローンのリファクタリングを識別し,それが実施されたコードクローンの特徴を調査した.その結果,「メソッドオブジェクトによるメソッドの置き換え」パターンが最も多く使われたことが明らかになった.また,トークン列の長さが異なるコードクローンがリファクタリングの対象になることも分かった.この調査結果に基づいて,リファクタリング支援ツールの提案も行っている.

(2015年6月15日受付)