(クローン履歴 + 現在のクローン) * 機械学習でリファクタリングすべきクローンを推薦するツール作りました論文.

クローンは悪影響を与える存在だと言われているが,全てのクローンをリファクタリングする必要でないことも同時に指摘されている. これまでには,現在のクローンの特徴からリファクタリングすべきものを推薦する,あるいは過去のリファクタリング情報からリファクタリングすべきものを推薦する手法が提案されている. これらを別々ではなく統一したい. 既存研究ではこれらの統一を機械学習を用いて実現しているが,既存手法は人間がラベル付けをしているためいけてない.

まず SourcererCC を用いて全リビジョンのコードクローンを検出し,その系譜を計算する. 得られたクローンから特徴を抽出する. ここで抽出された特徴は以下のように大別できる.

  1. クローン単体での特徴(行数やサイクロマチック数)
  2. クローンの系譜での特徴
  3. クローンセットが存在する場所
  4. クローン間での構文的な違い
  5. クローンの同時修正性

なお,リファクタリングすべきかどうかのラベル付けは筆者らが独自に定義している.(よく分からんかった)

実験結果から,既存手法よりも高精度でリファクタリングすべきクローンを推薦できることを確認している.

所感としては,クローンの特徴を細かく分けて学習させているのが印象的だった. 一方,これだけ細かく分けていれば,機械学習を使わなくてもツール組めそうな気がしなくもない.