ソフトウェア進化において,メソッド更新のうち非本質的な変更を検出するツールDiffCatの論文
ソフトウェア進化の分野で,コード変更を基にした手法は多く提案されている. 例えば,過去の変化から次の変化を予測したり,バグ混入を特定したりする研究がある. 一方,コードの変更の中にはとるに足らない非本質的な変更もあり,それらをコード変更に含めてしまうと悪影響が出る. そのため,非本質的な変更を特定し,そのような変更を考慮しないことが重要となる.
この研究では,非本質的な変更を定義し,それらを検出する手法を提案している. また,提案手法をツールとして実装し,実際のメソッド更新にどの程度非本質的な変更が含まれているかを確認,それらが与えうる影響を計算している.
この論文では,非本質的な変更を以下のように定義している.
this
の付与,削除等)検出手法としては,バインディングを考慮したうえでプロジェクトの一部の抽象構文木を構築し,それらをリビジョンの前後で比較するという方法をとっている. 特に変数名の変更は対応関係をとることが難しいらしく,重点的に説明していた(一度変数名を置き換えたりするらしい).
結果として,2.6% ~ 15.5% の変更が非本質的であると判定され,それらを取り除くことでコード変更に基づいた推薦の精度を10.5%向上させることができた.