ソフトウェアエンジニアリングシンポジウム 2014
IPSJ/SIGSE Software Engineering Symposium (SES2014)

機械学習を用いたメソッド抽出リファクタリングの推薦手法
後藤 祥1

吉田 則裕2

藤原 賢二3崔 恩瀞1

井上 克郎1

概要：リファクタリングとは “外部から見たときの振る舞いを保ちつつ，理解や修正が簡単になるように，
ソフトウェアの内部構造を整理すること” であり，ソフトウェア開発における重要な活動の 1 つである．
これまで，複数のリファクタリング対象の推薦手法が提案されているが，推薦の基準に使用されている
ソースコードの Bad Smell に定量的な定義が存在しないことなどから，リファクタリング対象の推薦基準を決定することは難しい．本研究では，メソッド抽出というリファクタリングパターンについて，実際にリファクタリングが行われたメソッドを収集し，それらの特徴量を用いた機械学習によって，メソッド抽
出リファクタリングの対象を推薦する手法を提案する．実験として，5 つのオープンソースソフトウェアに提案手法を適用した結果，メソッド抽出の対象となるメソッドのうち，6 割から 9 割程度を特定することができていることがわかった．また，実験の結果から，メソッド抽出が行われるか否かに，メソッドの文の数と凝集度が大きく関与していることがわかった．

1. はじめにように変更すればどのように結果が変化するかを開発者が予測することは困難である．

リファクタリングとは “外部から見たときの振る舞いを

このような問題に対して，実際にリファクタリングが行保ちつつ，理解や修正が簡単になるように，ソフトウェア

われた事例を収集し，リファクタリング対象となったソーの内部構造を整理すること” である [3]．リファクタリング

スコードの特徴を用いた機械学習を行うことで，プロジェ

は，主にソフトウェアの保守性や可読性を向上させること

クトごとのリファクタリングを行う基準を推薦に反映させを目的としており，ソフトウェア開発における重要な活動

ることができると考えられる．バグ予測などの分野では機の 1 つである．

械学習を用いた手法が多く提案されており [8], [11], [12]，大規模なソフトウェアから，開発者が手作業でリファク

ソフトウェア開発履歴から抽出した情報を用いたバグ予測

タリング対象を特定することは困難であるため，リファクに機械学習が有効な手法であることが示されている．しかタリング対象を自動で特定し開発者へ推薦する手法が提案

し，リファクタリング対象の推薦に機械学習を用いた手法

されており，それらの手法に基づく支援ツールが開発されは，筆者らの知る限り存在しない．

ている [2], [6], [13]．Fowler は，どのようなソースコード

本研究では，メソッド抽出というリファクタリングパ

に対してリファクタリングを検討すべきかを，ソースコー

ターンについて，実際にリファクタリングが行われたメドの Bad Smell として定義しており [3]，リファクタリング

ソッドを収集し，それらの特徴量を用いた機械学習によっ対象の推薦はこの Bad Smell を基準にして行われている．

て，メソッド抽出リファクタリングの対象を推薦する手法

しかし，Bad Smell には定量的な定義が存在しないことや，を提案する．メソッド抽出リファクタリングは，実行されプロジェクトごとにリファクタリングを行う基準が異なる

る回数の多いことが既存研究 [10] によって明らかにされて場合があることから，リファクタリング対象の推薦基準をいる点や，メソッドはソフトウェア中に大量に存在し，そ決定することは難しい．そのため，既存の支援ツールではの中から開発者がリファクタリング対象を選択するのは困推薦結果のフィルタリングや，実行時のパラメータ設定の難である点から，リファクタリング対象の推薦手法による変更が可能になっている．しかし，パラメータ設定をどの支援の必要がある．リファクタリング対象の推薦に機械学習を用いる利点としては以下の点が挙げられる．

1

2

3

大阪大学
Osaka University
名古屋大学
Nagoya University
奈良先端科学技術大学院大学
Nara Institute of Science and Technology• 実際にリファクタリングが行われた対象の特徴を学習することで，パラメータ設定をせずに開発者の考えに合った対象を推薦することができる• プロジェクトごとに学習を行うことで，プロジェクト

c 2014 Information Processing Society of Japan⃝170

ソフトウェアエンジニアリングシンポジウム 2014
IPSJ/SIGSE Software Engineering Symposium (SES2014)$%&'(!()($%&'!",-./0$%&'(*()(32456.78を作るためには，メソッド抽出が行われたメソッドの特徴と，メソッド抽出が行われなかったメソッドの特徴を調べ!"#$%&')*+!

る必要がある．本節では，それぞれのメソッドをどのよう)*+"にして収集したかを述べる．

!!!

!"#$
!"($%&'

)*+#

%&'()

$%&'("()()*+.12

まずメソッド抽出が行われたメソッドについて説明する．メソッド抽出事例の収集には，藤原らが提案している
リファクタリング検出ツール [15] を用いる．本研究では，藤原らのツールから出力される類似度の閾値を 0.3 とし，

図 1

提案手法の概要図

閾値以上の類似度のメソッド抽出事例を使用する．これは，藤原の既存研究において，類似度の閾値が 0.3 の時に最ごとにリファクタリングを行う基準が異なる場合でもも精度よくメソッド抽出事例の検出が行えることが示され対応可能である．

ているためである．閾値でフィルタリングを行った後，メ• 学習に使用するリファクタリング事例を収集すること

ソッド抽出の対象となったメソッドについて，抽出が行わで，他のリファクタリングパターンへ拡張可能である．

れる直前のリビジョンのものを取得する．これらのメソッ本研究では，機械学習に用いるメソッドの特徴として，メドをメソッド抽出が行われたメソッドとして，以降の特徴

ソッドの文の数や凝集度など，21 種類のメトリクスを使用

量の計測や機械学習に用いる．

した．これらの特徴をもとに機械学習を用いてメソッド抽

次に，メソッド抽出が行われなかったメソッドの収集方

出の対象となるかどうかを判別するモデルを作成した．

法について説明する．本研究では，メソッド抽出が行われ手法の評価を行うために，オープンソースのソフトウェなかったメソッドは，リポジトリからランダムに収集する．

アに対して適用実験を行った．まず，実験の準備として，

具体的な手順としては，まず，ランダムでリビジョンを選実験対象ソフトウェアの履歴にリファクタリング検出ツー

択し，そのリビジョンに存在する全てのメソッドの中から，ルを適用し，メソッド抽出が行われたメソッドと行われな

次のコミットでメソッド抽出が行われていないメソッドをかったメソッドを収集した．次に，それぞれのメソッドに

1 つをランダムで選択するという方法である．これらの手ついて特徴の計測を行い，実験用のデータセットを準備し順を，学習に必要なメソッドが集まるまで繰り返すことで，た．適用実験では，これらのデータセットを学習用セット

メソッド抽出が行われなかったメソッドを収集する．

と評価用セットの 2 つに分割して，学習用セットから機械学習で構築した予測モデルを用いることで，評価用セット

2.2 Step 2 : 特徴量の計測
Step 1 で収集したメソッドに対して，特徴量の計測を行のメソッドについて，メソッド抽出が行われたかどうかを判別できるかを評価した．実験の結果，提案手法を用いる

う．表 1 に本研究で使用する 21 種類の特徴量を示す．

ことで，メソッド抽出の対象となるメソッドのうち，6 割かリファクタリングは可読性や保守性の向上を目的として

ら 9 割程度を特定することができていることがわかった．

おり，それらが低いソースコードに対して行われているとまた，実験の結果から，メソッド抽出が行われるか否かに，考えられる．そのため，本研究では，可読性や保守性に関メソッドの文の数と凝集度が大きく関与していることがわ

連する特徴量を選択した．また，最終的なモデル構築の際かった．

には，変数選択アルゴリズムによって有用でない特徴量を

以降，2 章では，提案手法について説明し，3 章では，適除外するため，計測する特徴量はメソッド単位のものから

用実験について述べる．最後に，4 章でまとめと今後の課

クラス単位のものまで，なるべく多くのものを選択した．

題について述べる．

そのため，本研究で使用する特徴量は，メソッド抽出リ

2. 提案手法

ファクタリングを特定するために十分な量であると考えられる．

提案手法の概要を表した図を図 1 に示す．提案手法は，特徴量のうち，クローンの有無についてはコードクロー

ソフトウェアの開発履歴を入力として，メソッド抽出事例

ン検出ツールである CCFinder[7] を用いて検出する．そのの収集，メソッドの特徴量の計測，機械学習を用いたモデ

他の特徴量については，ソースコード解析ツール MASU[5]ル構築の 3 つの処理を行い，あるメソッドがメソッド抽出や Eclipse jdt*1 を用いて計測する．
本研究では，凝集度を表す特徴量として，メソッドレベ

対象であるかを予測するためのモデルを出力する．以降，それぞれの手順について詳細に説明する．

ルの凝集度メトリクスであるスライスベースの凝集度メト
リクスを用いる [14]. スライスベースのメトリクスの計算

2.1 Step 1 : メソッド抽出事例の収集
機械学習を用いて，メソッド抽出対象を判別するモデル*1

http://www.eclipse.org/jdt/

c 2014 Information Processing Society of Japan⃝171

ソフトウェアエンジニアリングシンポジウム 2014
IPSJ/SIGSE Software Engineering Symposium (SES2014)に必要となるメソッドの出力変数は，Tsantalis らの定義

実験対象として 5 個のオープンソースソフトウェアを選択に従い，メソッドの返り値と，メソッドの本体とスコープした．実験対象の一覧を表 2 に示す．これらのソフトウェが一致する変数とした [13]．スライスベースのメトリクス

アは全て Java 言語を用いて記述されている．また，表 2

は，メソッドの出力変数に基づいて凝集度を計算するもの

中のファイル数とメソッド数は，最新リビジョンにおけるであり，プログラムスライシングの基準となる変数が存在

Java のファイル数とメソッド数である．本節では，実験のしないメソッドに対しては，凝集度を計算することができ

手順と評価尺度について述べる．

ない．

3.1 実験手順
2.3 Step 3 : 予測モデルの構築

まず，表 2 に示したソフトウェアに対して，藤原らのリ計測した特徴量を基に，機械学習アルゴリズムを用いて，ファクタリング検出ツールを適用して，メソッド抽出が行

メソッド抽出の対象を判別するモデルを構築する．機械学

われた事例の収集を行う．そして，メソッド抽出が行われ習には，フリーのデータマイニングツールである Weka*2

なかったメソッドをメソッド抽出が行われたメソッドと同を用いる．Weka は，機械学習アルゴリズムだけでなく，変じ数だけランダムで選択し，これらを合わせて実験用デー

数選択アルゴリズムや予測モデルの評価機能など，機械学

タセットとする．

習に関連した多くの機能を実装したツールである．

次に，実験用データセットのメソッドの特徴量の計測，予測モデルの構築する前に，データセット中の欠損値のモデルの構築と評価を行う．モデルの構築と評価には，10

補完と，変数選択を行う．データセット中の欠損値の補完

分割交差検定を用いる．10 分割交差検定は，データセット

は，出力変数が存在しないメソッドに対して，値を計算す

を 10 個のブロックに分割し，そのうち 1 個を評価セット，

ることができないスライベースのメトリクス Tightness，

残り 9 個を学習セットとしてモデルの構築と評価を行うとCoverage，Overlap に対する処理である．欠損値が存在すいう処理を，評価セットに用いるブロックを変化させながると正しく予測することができないため，欠損値が存在す

ら 10 回繰り返す手法である．本実験では，モデルの構築にる要素を除外するか，定数値やその特徴の平均値などで欠用いる学習セットはメソッド抽出が行われたメソッドと行

損値を補完する必要がある．本手法では欠損値の補完法のわれなかったメソッドの割合は 50%ずつのものを用いて，

1 つである，その特徴量の平均値を用いた補完を行う．欠損評価セットには，メソッド抽出が行われたメソッドの割合

値の補完のあと，有用な特徴量のみをモデルの構築に用いを 50%から 10%まで 10%で刻みで変化させて評価を行う．

るために，変数選択を行う．変数選択アルゴリズムは複数

これは，評価セット中のメソッド抽出が行われたメソッド

提案されており，対象データセットや使用する予測モデルの割合を変化させた時に，どのように結果が変化するかをによってどのアルゴリズムが優れているかは異なる．Hall

確認するためである．

らが行った変数選択アルゴリズムの比較 [4] では，ラッパー法を用いて変数選択を行うと，多くの場合予測性能が最も良いという結果が示されているため，本研究ではラッパー法を用いて変数選択を行う．
提案手法では，収集したメソッド抽出事例とその特徴量

3.2 評価尺度
モデルの評価には，Precision と Recall，F 値という 3 つの評価尺度を用いる．以下それぞれの尺度の定義について説明する．

を学習データとして，決定木とロジステッィク回帰，ベイPrecision は，モデルによってメソッド抽出の対象である

ジアンネットの 3 種類の予測モデルを構築する．構築したとされたメソッドのうち，実際にメソッド抽出が行われた

予測モデルでは，あるメソッドとその特徴量が与えられたメソッドの割合である．Recall は，データセット中に存在時に，そのメソッドに対してメソッド抽出を行うべきであする，全てのメソッド抽出が行われたメソッドのうち，モデ

るか判断することができる．そのため，メソッド抽出対象

ルによってメソッド抽出の対象であるとされたメソッドのの推薦にあたっては，まず対象のメソッドの特徴量の計測割合である．そして，トレードオフの関係にある Precisionを行い，次にそれらの特徴量を予測モデルに与えてメソッと Recall を総合的に評価するため，これらの値の調和平均

ド抽出の対象であるか判別し，開発者に通知するという手である F 値を使用する．

順になる．

3. 適用実験表 2

実験対象ソフトウェア

ソフトウェア名

リビジョン数

ファイル数

メソッド数

Ant

12783

1222

12369

提案手法の有効性を評価するために，オープンソースの

ArgoUML

17748

1904

14284

ソフトウェアに対して提案手法を適用した．本研究では，

jEdit

5787

576

6632

jFreeChart

916

1060

10495

Mylyn

8414

1028

8936

*2

http://www.cs.waikato.ac.nz/ml/weka/c 2014 Information Processing Society of Japan⃝172

ソフトウェアエンジニアリングシンポジウム 2014
IPSJ/SIGSE Software Engineering Symposium (SES2014)
表 1

機械学習に使用する特徴量カテゴリ

特徴量 (略称)

メソッドのサイズ

メソッド中の文の数 (NOS)

メソッドのシグネチャ

メソッドの引数の数 (ARG)，返り値の有無 (RET)，アクセスレベル (ACCESS)

複雑度 [9]サイクロマチック数 (CYCLO)

凝集度 [14]

Tightness，Coverage，Overlap

メソッドの構文

ループ数 (LOOP)，if 文数 (IF)，case 文数 (CASE)，ブロック数 (BLOCK)，ネストの深さ (NEST)

メソッド内の変数

ローカル変数の数 (VAR)

CK メトリクス [1]WMC，DIT，CBO，NOC，RFC，LCOM

コードクローン

コードクローンの有無 (CLONE)

以下に，Precision と Recall，F 値の定義式を示す．式にられた際に，メソッド抽出の対象であるかどうかをランダ

おいて，E をメソッド抽出が行われたメソッドの集合，CEム (50%ずつの確率) で返すモデルに対する結果である．こをモデルによってメソッド抽出対象であるとされたメソッのようなランダムなモデルを用いた結果よりも良い結果でドの集合とする．

あれば，使用した特徴量がメソッド抽出が行われるかどうかに関係したものであり，学習の効果があったことを意味する．

|E ∩ CE |
|CE |

(1)

|E ∩ CE |Recall =|E|(2)

P recision =F = 2∗

グラフをみると，全ての場合においてベースラインを上回る結果となっていることがわかる．それぞれの評価値ごとにみると，Precision は評価セットの割合によって値が大きく変化しているが，Recall は，ほぼ横ばいで値に変化

P recision ∗ Recall
P recision + Recall(3)がみられなかった．Recall については，ほとんどの場合においてが 0.6 から 0.9 程度の値となっており，メソッド抽
出の対象であるメソッドのうち，6 割から 9 割程度が提案手法によって特定できていることがわかった．モデルごと

3.3 実験結果の結果をみると，使用するモデルによって大きな差がない

表 3 に，藤原らのリファクタリング検出ツールによって，検出されたメソッド抽出事例の数を示す．jFreeChart
のみ，他のソフトウェアに比べリビジョン数が少なかった
ため，検出されたメソッド抽出の事例数も少なくなっている．jFreeChart 以外のソフトウェアでは，490 個から 766
個のメソッド抽出事例数が検出された．次に各ソフトウェ
アごとに，メソッド抽出が行われたメソッドを，メソッド抽出が行われたメソッド同じ数だけランダムで選択した．
表 3 に，作成したデータセット中のメソッド数を示す．
次に，データセットを用いて予測モデルの構築と評価を行った結果を示す．Precision と Recall，F 値について，結果を表したグラフを図 2 に示す．グラフの縦軸は各評価値，横軸は評価セット中のメソッド抽出が行われたメソッドの割合である．これらの図には，各ソフトウェアに対する結果と比較のためのベースラインの結果 (図中の Base) を示している．ベースラインの結果とは，あるメソッドが与えが，それぞれのモデルごとに結果の平均値を調べた結果，

Precision についてはロジスティック回帰が優れており，Recall については決定木が優れていることがわかった．対象ソフトウェアごとに違いをみると，jFreeChart に対する結果が良く，jEdit に対する結果が悪くなっている．その他の 3 つのソフトウェアについては，評価値に大きな違いはみられなかった．
次に，変数選択の結果から，どの特徴量が予測に有用であったかを調べた結果を示す．表 4 は，変数選択によって各特徴量が選択された回数を示している．表 4 では，各ソ
フトウェアごとの特徴量が選択された回数と，合計回数を示しており，合計回数で降順に並べている．本手法で変数選択に用いているラッパー法は，各モデルごとに変数選択を行う手法である．そのため，各ソフトウェアについて 3
回変数選択を行っており，各ソフトウェアにおける選択回数の最大値は 3，合計の選択回数の最大値は 15 となる．
表 4 の結果から，本実験においてはメソッドの文の数

表 3 メソッド抽出リファクタリングの検出結果である NOS と，スライスベースの凝集度メトリクスであメソッド抽出数

データセットのメソッド数

Ant

766

1532

ArgoUML

740

1480

jEdit

502

1004

トウェアによって有用な特徴量が異なることがわかる．例

jFreeChart

90

180

えば，ブロック数を表す BLOCK は，Ant と ArgoUML，

Mylyn

490

980

jFreeChart では全てのモデルにおいて選択されているが，る Coverage が最も選択された特徴量であることがわかった．各ソフトウェアにおける結果を比較すると，対象ソフc 2014 Information Processing Society of Japan⃝173

ソフトウェアエンジニアリングシンポジウム 2014
IPSJ/SIGSE Software Engineering Symposium (SES2014)!"#$%&'()

!"&

!"&

!"&

!"%

!"%

!"%
!"$

!"$

!"#

!"#

!

!
$!)

*!)

#!)

!!

'

(!)

!"$
!"#
!

'!)

(!)

!"#$%&'()*+!"#$,-.

$!)

*!)

#!)

'!)

(!)

!"#$%&'()*+!"#$,-.

*+,

*+,

!"&

!"&

!"&

!"%

!"%

'
!"#

!!

'

!"$

*!)

#!)

'!)

*+,

'

!"%

$!)

!"#$%&'()*+!"#$,-.

'*$%+,,"#$%&'&()!"#$%&'()'*$%+,,"#$%&'&()!"#$%&'()
'

!"$
!"#

!"$
!"#

!"&
!

!
(!)

$!)

*!)

#!)
!"%

!

'!)

(!)

-."/01%2

*!)

#!)

'!)

(!)

!"#$%&'()*+!"#$,-.

!!

!"#$%&'()*+!"#$,-.

$!)-."/01%2

!"$

'

$!)

*!)

#!)

'!)

!"#$%&'()*+!"#$,-.

-."/01%2

'

'

!"&

!"&

!"%

!"%

!"%

*$%+,,"#$%&'&()

!"&
!

!"$

!"$

!"#

!"#

!

!
(!)

$!)

*!)

#!)

!!

!"#

!"#
!

'!)

(!)

!"#$%&'()*+!"#$,-.

$!)

*!)

#!)

'!)

!"#$%&'()*+!"#$,-.

!"#!$%&'()

図 2

!"$

*+,-#

*.$//012$#

(!)

$!)

*!)

#!)

'!)

!"#$%&'()*+!"#$,-.

(343"

526/

評価結果 (Precision, Recall, F 値)

jEdit では 1 度しか選択されていない．

3.4 考察まず，各ソフトウェアごとの結果について考察する．各

表 4

ソフトウェアごとの結果の差をみると，jFreeChart に対す

各特徴量が選択された回数

jEdit

hart
jFreeC

Mylyn

合計

NOS

2

3

2

3

3

13

くが同一の開発者によって行われていたことがわかった．

Coverage

3

2

3

2

3

13

このことから，jFreeChart ではメソッド抽出が行われるメ

ARG

3

2

3

3

1

12

ソッドの特徴が一貫しており，予測に有効に作用したので

BLOCK

3

3

1

3

2

12

CBO

3

3

1

3

2

12

RET

3

3

2

2

1

11

IF

3

1

2

3

2

11

と行われなかったメソッドで，特徴量の値に大きな差がな

WMC

1

2

2

3

3

11

いことがわかった．そのため，jEdit についてはモデルに

DIT

2

2

2

3

2

11

よる予測性能が低かったと考えられる．このように，予測

ACCESS

3

2

3

1

1

10

性能には使用するデータセットが大きく影響することがわ

LOOP

2

3

2

1

2

10

NEST

1

1

2

3

3

10

RFC

2

3

1

3

1

10

Tightness

1

3

2

1

2

9

の割合を変化させた場合の，結果の変化について考察する．

Ant

ML

ArgoU

る結果が良く，jEdit に対する結果が他のソフトウェアに比べて悪かった．jFreeChart についてより詳細に開発履歴の調査を行った結果，検出されたメソッド抽出事例のうち多はないかと考えられる．jEdit については，データセットの特徴量を調べた結果，メソッド抽出が行われたメソッド

かった．
次に，評価セット中のメソッド抽出が行われたメソッド

VAR

3

2

1

1

1

8

図 2 に示したグラフから，メソッド抽出が行われたメソッ

NOC

2

2

1

2

1

8

ドの割合を減少させても，本実験においてベースラインと

LCOM

2

1

3

1

1

8

したランダムで予測を行うモデルより良い結果であるこ

CYCLO

1

1

1

2

2

7

CLONE

0

2

1

1

3

7

Overlap

1

1

1

2

1

6

CASE

1

0

2

1

2

6

とがわかる．これは，今回選択した特徴量がメソッド抽出が行われるかどうかに関連しており，学習によって予測性能が向上したことを示している．評価値ごとの変化をみる

c 2014 Information Processing Society of Japan⃝174

ソフトウェアエンジニアリングシンポジウム 2014
IPSJ/SIGSE Software Engineering Symposium (SES2014)と，Recall に大きな変化はないが，Precision はメソッドの実験として，5 つのオープンソースソフトウェアに対し割合の減少にともなって低下していることがわかる．そのて手法を適用し評価を行った．評価の結果，メソッド抽出

ため，メソッド抽出が行われたメソッドの割合を減少させ対象となるメソッドのうち 6 割から 9 割程度を提案手法にても高い予測性能を維持できるように，手法を改善する必よって特定できていることがわかった．また，変数選択ア

要があると考えられる．手法の改善案としては，特徴量のルゴリズムの適用結果から，メソッド中の文の数と，スラ追加，出力結果のフィルタリングやデータセットを開発者

イスベースの凝集度メトリクスである Coverage が有用なごとに分割するなどの方法が挙げられる．データセットを特徴量であることがわかった．

開発者ごとに分割する方法は，jFreeChart に対する予測性

今後の課題としては，予測性能の向上と，学習セットと能が良かったことから，有効な手段であると考えられる．

評価セットに別々のソフトウェアから作成したデータセッ

次に，各特徴量の有用性について述べる．表 4 より，メトを用いた実験を行うことが挙げられる．予測性能についソッドの文の数である NOS と，スライスベースの凝集度メては，特徴量の追加やデータセットを開発者ごとに分割すトリクスである Coverage が最も選択された特徴量であっるなどの方法によって改善することができると考えられる．

た．NOS は，メソッドのサイズを表す特徴量であり，この特徴量が多く選択されていたことから，メソッド抽出を行

参考文献

うかどうかの判断において，メソッドのサイズが重要な要[1]因であることがわかる．Coverage は，メソッドの内の出力変数に関連した文の数とメソッドの文数の比の平均を表し[2]ている．Coverage が低いことは，出力変数に関連のない文
がメソッドに多く存在することを意味している．このことから，メソッドの出力変数に関連した文とそうでない文をメソッド抽出を用いて別々のメソッドに分割しているので

[3]
[4]

はないかと考えられる．
変数選択によって選択された回数が最も少ない特徴量
は，スライスベースの凝集度メトリクスである Overlap と，[5]

メソッド中の case 文の数を表す CASE であった．これらの 2 つの特徴量について調査したところ，ともに値の分布が偏っていることがわかった．Overlap は，メソッド内に[6]

出力変数が 1 つしかない場合は 1 になり，処理が全く重複しない出力変数が存在する場合は 0 になるため，多くのメソッドの Overlap の値は 0 か 1 となる．また CASE につ[7]

いても，今回の対象のメソッドの多くは case 文が使われていなかった．
変数選択の結果，多く選択される特徴量とあまり選択さ[8]

れない特徴がわかったが，最も選択されなかった特徴量でも 15 回のうち 6 回選択されている．また，各ソフトウェ
アにおける変数選択の結果も異なるものであり，どの特徴

[9]
[10]

量が有用であるかは変数選択アルゴリズムを適用するまでわからない．そのため，本提案手法のように，特徴量を計測する段階では多くの特徴量を計測して，モデルの構築を[11]行う際に変数選択によって有用なものを選別する方法が有効であると考えられる．

[12]

4. まとめと今後の課題[13]

本研究では，機械学習を用いてメソッド抽出リファクタ
リングの対象を推薦する手法を提案した．提案手法では，
メソッド抽出の対象となったメソッドについて，サイズや複雑度など 21 種類の特徴量を計測し，それらを用いて推薦のための予測モデルを構築した．

[14]
[15]

Chidamber, S. R. and Kemerer, C.: A metrics suitefor object oriented design, IEEE Trans. Softw. Eng.,
Vol. 20, No. 6, pp. 476–493 (1994).
Emden, E. V. and Moonen, L.: Java quality assurance
by detecting code smells, Proc. of WCRE, pp. 97–106(2002).
Fowler, M.: Refactoring: Improving the Design of Existing Code, Addison Wesley (1999).
Hall, M. A. and Holmes, G.: Benchmarking Attribute Selection Techniques for Discrete Class Data Mining, IEEE
Trans. Knowl. Data Eng., Vol. 15, No. 6, pp. 1437–1447(2003).
Higo, Y., Saitoh, A., Yamada, G., Miyake, T.,
Kusumoto, S. and Inoue, K.: A Pluggable Tool for
Measuring Software Metrics from Source Code, Proc. of
IWSM-MENSURA, pp. 3–12 (2011).
Hotta, K., Higo, Y. and Kusumoto, S.: Identifying, Tailoring, and Suggesting Form Template Method Refactoring Opportunities with Program Dependence Graph,Proc. of CSMR, pp. 53–62 (2012).
Kamiya, T., Kusumoto, S. and Inoue, K.: CCFinder: amultilinguistic token-based code clone detection system
for large scale source code, IEEE Trans. Softw. Eng.,
Vol. 28, No. 7, pp. 654–670 (2002).
Lee, T., Nam, J., Han, D., Kim, S. and Hoh, I. P.: Micro interaction metrics for defect prediction, Proc. of
ESEC/FSE, pp. 311–321 (2011).
McCabe, T. J.: A Complexity Measure, IEEE Trans.
Softw. Eng., Vol. 2, No. 4, pp. 308–320 (1976).
Murphy-Hill, E., Parnin, C. and Black, A. P.: How We
Refactor, and How We Know It, IEEE Trans. Softw.
Eng., Vol. 38, No. 1, pp. 5–18 (2011).
Nagappan, N., Zeller, A., Zimmermann, T., Herzig, K.
and Murphy, B.: Change Bursts as Defect Predictors,
Proc. of ISSRE, pp. 309–318 (2010).
Nam, J., Pan, S. J. and Kim, S.: Transfer defect learning, Proc. of ICSE, pp. 382–391 (2013).
Tsantalis, N. and Chatzigeorgiou, A.: Identification of
extract method refactoring opportunities for the decomposition of methods, Journal of Systems and Software,Vol. 84, No. 10, pp. 1757–1782 (2011).
Weiser, M.: Program slicing, Proc. of ICSE, pp. 439–449(1981).
藤原賢二，吉田則裕，飯田 元：ソフトウェアリポジトリを対象とした細粒度リファクタリング検出，ソフトウェ
ア工学の基礎ワークショップ，pp. 101–106 (2013).

c 2014 Information Processing Society of Japan⃝

175