リファクタリングがソフトウェア品質に及ぼす影響の実証的評価

 
藤原 賢二
(独)国立高等専門学校機構 豊田工業高等専門学校 情報工学科 助教

[背景]リファクタリングが普及しているが適切な実施が困難
[問題]コミット単位でのリファクタリング検出に多大な時間が必要
[貢献]リファクタリングの履歴がリポジトリマイニング可能に


 近年,ソフトウェアの設計を改善するための技術として,リファクタリングが注目されている.リファクタリングとはソフトウェアの外部的な振る舞いを変更することなく内部の構造を改善することをいう.Martin Fowlerにより典型的なリファクタリングパターンがまとめられており,代表的なものに「メソッドの抽出」や「メソッドの引き上げ」がある.一般に,ソフトウェアは開発が進むと,設計品質の低い個所がソースコード中に増加していく.このような個所は「コードの不吉な匂い」と呼ばれており,リファクタリングはこの不吉な匂いを除去することを目的として実施される.リファクタリング実施することで,設計品質の低いコードを除去することができ,結果として開発時における欠陥の混入を予防できるといわれている.しかしながら,欠陥の混入を予防するために,どの程度のリファクタリングをどのような頻度で行えばよいのかは明らかになっていない.そこで,本研究ではリファクタリングの実施がソフトウェアの品質に及ぼす影響を定量的に評価する手法を提案している.リファクタリングの影響を定量的に評価することで,リファクタリングの実施者は適切な実施頻度や適用すべきリファクタリングの種類を検討できると考えられる.

 リファクタリングがソフトウェア品質に及ぼす影響を調査するにあたり最も重要となるのはリファクタリングの実施履歴を収集することである.近年のソフトウェア工学分野においては,OSSのソースコード変更履歴や欠陥に関する情報を分析し,活用するリポジトリマイニングと呼ばれる技術に関する研究が数多く行われている.本研究の主要な貢献は,リファクタリングの実施に関するリポジトリマイニングを行うための基盤技術を提案していることである.本研究では,ソースコードの改変履歴からリファクタリングの実施履歴を復元する手法を提案している.このような手法はリファクタリング検出と呼ばれ,これまでにもいくつかの研究が報告されており,代表的なものにMiryung Kimらにより開発されたRef-Finderがある.しかしながら,従来手法は任意の2バージョン間から実施されたリファクタリングを検出することを目的としていた.そのため,リポジトリ中の隣接するすべてのバージョン間からリファクタリングを検出するための工夫がなされておらず,数千や数万を超えるコミットから構成されるリポジトリからリファクタリング検出を行うには多大な時間を要するという問題があった.

 本研究ではソースコードの構文情報に関する変更を追跡可能なHistorageを用いることでリポジトリ全体からリファクタリングの実施履歴を高速に検出可能な手法を提案し,その実装と評価を行った. 具体的には,「メソッドの抽出」と「メソッドの引き上げ」について手法の実装を行い,従来手法であるRef-Finder,UMLDiffとの比較実験を行った.結果として,「メソッド抽出」についてはPrecision(精度)が0.98,Recall(再現度)が0.44と他の手法より高い値が得られた.
 


 (2016年6月10日受付)
取得年月日:2015年9月
学位種別:博士(工学)
大学:奈良先端科学技術大学院大学



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


本論文はリファクタリングと欠陥混入の関係を定量的に調査するための分析手法と,分析を行うために必要な高速なリファクタリング検出手法の提案を行っている.後者はツールとしてGitHub上に公開されており,今後,リファクタリングの適用履歴を用いた研究に活用されることが期待される.


著者からの一言


友人のコードがお世辞にも綺麗だとは思えないが,綺麗でないことの問題点を彼に上手く伝えることができないというもどかしさからリファクタリングに関する研究を始め,このたび博士論文としてまとめることができました.今後もリファクタリングに関する研究を続けるとともに,ソフトウェア開発者を支援する研究を行っていきたいと思います.