318

メソッド抽出リファクタリングが行われる
メソッドの特徴調査
後藤 祥 吉田 則裕

藤原 賢二

崔 恩瀞

井上 克郎

メソッド抽出とは，既存のメソッドの一部を新たにメソッドとして抽出する作業のことである．メソッド抽出は，長すぎるメソッドや，凝集性の低いメソッドを分割するために有効であるとされているが，実際に開発者がどのようなメソッドを対象にしているかは調査されていない．しかし，メソッド抽出作業の支援を行うためには，開発者がどのようなメソッドを抽出の対象としているかを定量的に調査する必要がある．本研究では，オープンソースソフトウェ
アから，抽出が行われたメソッドと行われなかったメソッドの間で，サイズと凝集度に違いがあるか調査した．調査の結果，多くの場合に有意差があることが確認できた．

“Extract Method” is a refactoring pattern that extracts a part of an existing method as a new method.
Although extract method refactoring is an eﬀective way to decompose long and non-cohesive methods ingeneral, how developers choose methods for “Extract Method” refactoring is still unexamined. For supporting this refactoring, the investigation of it is necessary. In this study, we investigated the diﬀerences ofthe size and cohesion of methods between refactored methods and not-refactored methods in open source
software. The result shows significant deliverances in the most cases.

クタリング作業者を支援するための手法やツールが

1 はじめに多く提案されている [5] [9]．

リファクタリングとは，ソフトウェアの外的な振る

近年，開発者が行うリファクタリングの実態を調査

舞いを保ったまま内部構造を整理する作業のことであし，その結果に基づいて支援手法を考案する研究がり，プログラムの保守性や可読性の向上を目的として行われている [6] [10]．既存研究では，各リファクタ行われる [1]．Fowler は，様々なリファクタリングパリングパターンが適用される頻度や Eclipse のリファターンをまとめており，それぞれのパターンについてクタリング機能の利用状況などが調査されているが，その用途や手順を記述している [1]. リファクタリン

リファクタリング対象となったソースコードが持つ特グはソフトウェアの保守性を向上させるが，大規模な徴の定量的な調査は確認されていない．一般的に，凝ソースコードの中からリファクタリングの対象を特集度が低い，もしくはサイズの大きいといった特徴を定する作業は大きな労力を要する．そのため，リファもつソースコードがリファクタリングの対象になるとされているが，実際の開発プロジェクトにおけるリAn Investigation into the Characteristics of Methods
for Extract Method Refactoring.
Akira Goto, Eunjong Choi, Katsuro Inoue, 大阪大学大学院情報科学研究科, Graduate School of Information
Science and Technology, Osaka University.
Norihiro Yoshida, Kenji Fujiwara, 奈良先端科学技術大
学 院 大 学 情 報 科 学 研 究 科, Graduate School of Information Science, Nara Institute of Science andTechnology.
コンピュータソフトウェア, Vol.31, No.3 (2014),pp.318–324.
[研究論文 (レター)] 2013 年 12 月 19 日受付.

ファクタリングが，それら尺度に基づいて行われているかどうか明らかではない．そのため，それら尺度に基づいてリファクタリング対象を推薦すべきであるかどうか判断することが難しい．
本研究では，頻繁に行われるリファクタリングの 1つであるメソッド抽出 [6] に着目し，抽出対象となったメソッドの特徴を調査した．具体的には，抽出が行われたメソッドのサイズおよび凝集度を計測し，抽Vol. 31 No. 3 Aug. 2014319

出が行われなかったメソッドとの比較を行った．比較の結果，抽出が行われたメソッドと行われなかったメvoid printOwing(){printBanner();

ソッドでは，メソッドのサイズおよび凝集度に有意差//print details
System.out.println("name: " + _name);
System.out.println("amount: " + getOutstanding());

が存在することがわかった．
}

2 背景
2. 1 メソッド抽出
メソッド抽出は，既存のメソッドの一部を抽出し，新たにメソッドとして定義するリファクタリングである．図 1 にメソッド抽出の例を示す．図 1 の例において，2 つの文が抽出され，新たに printDetails メソッ

void printOwing(){printBanner();
printDetails(getOutstanding());}
void printDetails(double outstanding){
System.out.println("name: " + _name);
System.out.println("amount: " + outstanding);}ドとして定義されている．抽出元の printOwing メ
ソッドでは，抽出部分のソースコードが printDetails

図1

メソッド抽出リファクタリング [1]

メソッドの呼び出し文に置換されている．
メソッド抽出は，長すぎるメソッドや，凝集性の低の評価を行っている．評価によって，藤原らのツール

いメソッドの分割を目的として行われるとされていは Presicion が 0.96，Recall が 0.86 と高い精度でメる．しかし，実際に長いメソッドが抽出の対象となっソッド抽出リファクタリングの検出が可能であることているのかどうかや，数値的な尺度などを定量的に調を示している．また，藤原らのツールは大規模な履歴査した研究は著者らの知る限り存在しない．

に対しても，容易に適用可能であるという利点がある．本研究では，比較調査のために多くのリファクタ

2. 2 藤原らのリファクタリング検出ツールリング事例が必要であるため，藤原らのツールを用いリファクタリング検出ツールとは，ソフトウェアのてメソッド抽出事例の収集を行った．

開発履歴から，どのリファクタリングパターンが，どの部分に適用されたかを検出するためのツールであ3 調査方法る．リファクタリング検出ツールを用いて，リファク

3. 1 調査する特徴タリングの事例を収集することで，リファクタリング

メソッド抽出は長すぎるメソッドや，凝集性の低いの頻度やリファクタリング対象とされるソースコードメソッドを分割するために有効であるとされている．の特徴など様々な調査を行うことが可能となる．

本研究では，メソッドのサイズと凝集性を，それぞれ藤原らは，構文情報を付加したリポジトリを利用しメソッドの文数と凝集度という尺度で計測を行い，抽て，メソッド抽出リファクタリングの検出を行うツー

出対象となったメソッドが持つ特徴を調査する．文数

ルを提案している [2]．藤原らのツールでは，コミッと凝集度について，具体的にどのようにして計測する

ト間での変更情報を元にメソッド抽出が行われたとか説明する．

推定される箇所を特定し，抽出元のメソッド，メソッ

1. NOS(Number Of Statements)

ド抽出によって新たに作成されたメソッド，抽出元のメソッドのサイズの計測方法については，単純にコード片と新たに作成されたメソッドの類似度を出力行数を測るものや，空白行やコメントを除いてする．この類似度は 0 から 1 の値であり，類似度が測る方法などが存在する．メソッド抽出はメソッ高いほどメソッド抽出が行われた可能性が高いことをド中の文に対して行われるリファクタリングで意味している．

あり，メソッド中のコメントや空白行の数とは大藤原らは，リファクタリング検出ツールであるきな関連がないと思われる．そのため，本研究でUMLDiﬀ [12] と結果を比較することでツールの精度は，メソッドのサイズをコメントと空白行を除去コンピュータソフトウェア

320
表1

調査対象ソフトウェア (括弧内は凝集度が計測可能なメソッドの内数)

ソフトウェア

調査対象期間メソッド抽出事例数

比較対象メソッド数 (抽出無)jEdit

1998/9/27 - 2012/1/30

490(286)490(286)

Ant

2000/1/13 - 2012/5/23

659(302)659(302)

ArgoUML1998/1/27 - 2011/12/15

704(322)704(322)

したメソッドの本体中の文数とした．

できない．

2. 凝集度
凝集度とは，モジュールが機能的にまとまった3. 2 調査対象

ものかどうかを表す度合である [8]．凝集度を計

本研究の調査対象として jEdit， Ant，ArgoUML

測するためのメトリクスは複数提案されているの 3 つのオープンソースソフトウェアを選択した．調が，本研究では計測対象がメソッドであるため，査対象の詳細を表 1 に示す．

メソッド単位の凝集度メトリクスであるスライスベースの凝集度メトリクス [11] を用いる．ス

メソッド抽出事例の検出は，調査対象のソフトウェアに藤原らのツールを適用することで行った†1 ．表 1

ライスベースの凝集度メトリクスは，Weiser ににおいて，メソッド抽出事例数は，藤原らのツールをよって 5 つ提案されており，そのうち Tightness，使用して検出された調査対象期間内で行われたメソッ

Coverage，Overlap の 3 つがメソッドの凝集度

ド抽出のうち，テストメソッドを除いたメソッドの数を計測するのに有用であることを Ott らが実験を表している．

によって示している [7]．本研究ではこれら 3 つ

表 1 のとおり，比較対象メソッドはメソッド抽出事のメトリクスを用いてメソッドの凝集度を計測例と同じ数用意した．括弧内の数値は，メソッド抽出する．それぞれのメトリクスの定義を以下に示
す．式において，M をメソッド，length(M ) を事例のうち凝集度を計算可能なメソッドの数を示している†2 ．比較対象のメソッドは，まずランダムでリビ

M の文の数，Vo を M における出力変数の集合，ジョンを選択し，そのリビジョンに存在する全メソッ

SLx を変数 x を起点にした後ろ向きスライス，ドの中から，次のコミットでメソッド抽出が行われな

SLint を Vo 中の全変数に対する後ろ向きスライかったメソッドをランダムで 1 つ選択するという処理スの積集合とする．

を繰り返し行うことで収集した．

T ightness(M )=|SLint |length(M )Coverage(M )=|SLx |
1 ∑|Vo |length(M )=1 ∑ |SLint ||Vo ||SLx |

x∈Vo

Overlap(M )x∈Vo

メトリクスの計算に必要となるメソッドの出力変4 調査結果と考察
各対象ソフトウェアについて，計測した NOS と凝集度の分布を表した箱ひげ図を図 2, 3 に示す．以降の結果において，「抽出有」はメソッド抽出が行われたメソッドに対する結果を意味しており，「抽出無」はメソッド抽出が行われなかったメソッドに対する結果

数 Vo は，Tsantalis らの定義に従い，メソッドの返り値と，メソッドの本体とスコープが一致する変数とした [9]．これらのメトリクスは，メソッドの出力変数に基づいて凝集度を計算するものであり，スライスの起点となる変数が存在しないメソッドに対しては，凝集度を計算することが†1 藤原らの研究 [2] において，類似度の閾値が 0.3 の時，検出精度が最も高いと述べられているため，本研
究でも同一の閾値を利用し，出力結果から閾値以上の類似度をもつものを調査対象として利用した．
†2 各ソフトウェアのメソッド抽出事例と比較対象メソッド間において，凝集度を計算可能なメソッド (計算不可能なメソッド) の数を同数に揃えた．

3212012510NOS100500

Vol. 31 No. 3 Aug. 2014

jEdit(抽出無)jEdit(抽出有)Ant(抽出無)図2Ant(抽出有)ArgoUML(抽出無)ArgoUML(抽出有)NOS 分布を意味している．また図 3 において，T, C, O はそれ

Coverage については，対象ソフトウェア間で結果にぞれ Tightness, Coverage, Overlap の 3 つのメトリ差が見られたため，今回対象とした以外のソフトウェクスを意味している．

アに対しても調査を行い，結果を確認する必要がある

抽出が行われたメソッドと行われなかったメソッドと思われる．Overlap についても，ArgoUML のみ有について，計測した特徴に有意差が存在するかどうか意差がなかったため，Coverage と同様に，他のソフ確認するため，マンホイットニーの U 検定を用いてトウェアでどのような結果になるか調査を行う必要検定を行った．表 2，3，4 に，NOS と凝集度の中央があると考えられる．さらに Overlap メトリクスは，値と，検定の結果得られた p 値を示す．

Tightness と Coverage とは値の分布が大きく異なっ

表 2，3，4 より，jEdit における Coverage と，Ar-ているという特徴が見られた．これは，Overlap メト

goUML における Overlap 以外の全てにおいて，有意リクスは起点になる変数が 1 つしか存在しない場合水準 0.05 で有意差があるという結果になった．これは必ず値が 1 になることが理由と考えられ，実際にらの結果から，今回対象としたソフトウェアにおいて抽出が行われなかったメソッドに対する結果では，半は，メソッドの NOS が多く，凝集度が低いメソッド数以上のメソッドが Overlap の値が 1 になっている．

が抽出の対象となっていると言える．図 2 を見ると，調査の結果から，抽出が行われたメソッドと行われNOS については，抽出対象となっているメソッドのなかったメソッドの NOS と凝集度は，多くの場合有多くは，約 5 文から 20 文程度であることがわかった．

意差があり，抽出が行われたメソッドの方が NOS が次に，図 3 から，各凝集度メトリクスの結果につ多く，凝集度が低いことがわかった．

いて考察する．Tightness は全てのソフトウェアにお最後に，本研究で得られた結果の妥当性についていて有意差がみられた．また抽出が行われたメソッ述べる．まず，使用したメトリクスについてである．

ドについては，中央値が全て 0.1 以下であり，jEdit

本研究では，凝集度を測るメトリクスとして，メと Ant では 0.2 以下の値を持つメソッドがほとんどソッド単位のメトリクスであることや既存研究 [7]であった．Coverage は Ant と ArgoUML では有意における実験で有用性が示されているという理由で，差があったが，jEdit では有意差が見られなかった．

スライスベースの凝集度メトリクスを選択した．しかし，

コンピュータソフトウェア

322
1.0

表2

比較結果 (jEdit)

0.6
0.4
0.00.2

Cohesion!"#0.8

中央値&"!"$#NOS(抽出無)5.5NOS(抽出有)11.5

Tightness(抽出無)0.148

Tightness(抽出有)0.083

Coverage(抽出無)0.250

Coverage(抽出有)0.250Overlap(抽出無)1.00

Overlap(抽出有)

0.592

p値
p<0.05p<0.050.05<pp<0.05&"!"## %"!"$# %"!"##$ !"!"$#$ !"!"##(a) jEdit

比較結果 (Ant)

1.0

表3

0.5
0.0Cohesion
凝集度中央値T(抽出無)T(抽出有) C(抽出無) C(抽出有)NOS(抽出無)3.0

NOS(抽出有)14.0

Tightness(抽出無)0.167

Tightness(抽出有)0.056

Coverage(抽出無)0.227

Coverage(抽出有)0.150

Overlap(抽出無)1.000Overlap(抽出有)

0.583

p値
p<0.05p<0.05p<0.05p<0.05O(抽出無) O(抽出有)表4

比較結果 (ArgoUML)

1.0(b) Ant

0.5
0.0

Cohesion!"#中央値&"!"$#NOS(抽出無)4.0

NOS(抽出有)7.0

Tightness(抽出無)0.168

Tightness(抽出有)0.100

Coverage(抽出無)0.286

Coverage(抽出有)0.211

Overlap(抽出無)1.000Overlap(抽出有)

1.000

p値
p<0.05p<0.05p<0.050.05<p&"!"## %"!"$# %"!"##$ !"!"$#$ !"!"##

図3(c) ArgoUML

スライスベースの凝集度メトリクスは，処理の一部がメソッドの凝集度分布スライスに含まれない場合など，正しく凝集度を算出できない場合がある．そのため，今後の他の凝集度メトリクスを用いてメソッドの特徴を調査する必要があると考えられる．他のメソッド単位の凝集度メトリク

Vol. 31 No. 3 Aug. 2014

323

スとしては，Lakhotia が提案している変数の依存関が生じた可能性がある．今後，ランダムで選択した係とそれらのルールに基づくメトリクス [3] や，三宅文を含むメソッドを対象としたときの NOS と比較しらが提案しているコードブロック間での変数の共有にても，実際にメソッド抽出の対象となったメソッドの基づくメトリクスなどが挙げられる [4]．

NOS が十分に大きいか確認する必要がある．これら

次に，リファクタリング検出ツールについてであ調査を行ったあと，メトリクスを利用した機械学習をる．本研究の結果がリファクタリング検出ツールに依用いることで，メソッド抽出の対象となるメソッドを存したものではないことを確認するため，本研究で使推薦する手法を実現したいと考えている．

用した藤原らの検出ツールと UMLDiﬀ [12] の検出結果の間に特徴の偏りがないかを調べた．藤原らのツールによって検出されたメソッドと，藤原らのツールで謝辞 本研究は JSPS 科研費 25220003，26730036の助成を受けた．

検出されなかったが UMLDiﬀ で検出されたメソッドに対して，それぞれ特徴を計測し，特徴の値に差が

参 考 文 献存在するかマンホイットニーの U 検定を用いて検定[ 1 ] Fowler, M.: Refactoring: Improving the Designof Existing Code, Addison Wesley, 1999.
[ 2 ] 藤原賢二, 吉田則裕, 飯田元: ソフトウェアリポジ
トリを対象とした細粒度リファクタリング検出, ソフトウェア工学の基礎ワークショップ, 2013, pp. 101–106.
[ 3 ] Lakhotia, A.: Rule-based approach to computing module cohesion, in Proc. of ICSE, 1993, pp. 35–44.
[ 4 ] 三宅達也, 肥後芳樹, 井上克郎: メソッド抽出の必要性を評価するソフトウェアメトリックスの提案, 信学論,
Vol. J92-D, No. 7(2009), pp. 1071–1073.
[ 5 ] Murphy-hill, E. and Black, A. P.: Breaking thebarriers to successful refactoring: observations andtools for extract method, in Proc. of ICSE, 2008,
pp. 421–430.
[ 6 ] Murphy-Hill, E., Parnin, C. and Black, A. P.:
How we refactor, and how we know it, in Proc. ofICSE, 2009, pp. 287–297.
[ 7 ] Ott, L. M. and Thuss, J. J.: Slice Based Metrics for Estimating Cohesion, in Proc. of METRICS,
1993, pp. 71–81.
[ 8 ] Stevens, W. P., Myers, G. J. and Constatine,
L. L.: Structured design, IBM Syst.J., Vol. 13,
No. 2(1974), pp. 115–139.
[ 9 ] Tsantalis, N. and Chatzigeorgiou, A.: Identification of extract method refactoring opportunities forthe decomposition of methods, Journal of Systemsand Software, Vol. 84, No. 10(2011), pp. 1757–1782.
[10] Vakilian, M., Chen, N., Negara, S., Rajkumar,B. A., Bailey, B. P. and Johnson, R. E.: Use, disuse, and misuse of automated refactorings, in Proc.
of ICSE, 2012, pp. 233–243.
[11] Weiser, M.: Program slicing, in Proc. of ICSE,
1981, pp. 439–449.
[12] Xing, Z. and Stroulia, E.: Refactoring Detection
based on UMLDiﬀ Change-Facts Queries, in Proc.
of WCRE, 2006, pp. 263–274.

を行った．検定の結果，全ての特徴について有意水準0.05 で有意差なしという結果が得られた．そのため，これらの結果はリファクタリング検出ツールに依存したものではないと考えられる．
最後に，比較対象メソッドの抽出についてである．

3. 2 節において，次のコミットにおいてメソッド抽出が行われなかったメソッドを選択したが，次のコミッ
ト以降でメソッド抽出が行われた場合を考慮できていない．今後，このような場合について調査を行う必要がある．

5 まとめ
本研究では，メソッド抽出が行われたメソッドが持つ特徴の定量的調査を行った．調査においては，オープンソースソフトウェアから収集した，抽出が行われたメソッドと行われなかったメソッドに対して，NOSと凝集度の計測を行い，それらの比較を行った．比較の結果，抽出が行われたメソッドは NOS が多く，凝集度が低いことがわかった．
今後の課題としては，対象ソフトウェアと計測する特徴を追加した大規模な調査を行うことが挙げられる．その調査を行う際に，リファクタリングに関する規約の有無が調査結果に与える影響をあわせて確認したいと考えている．また，開発者が NOS が大きいメ
ソッドをメソッド抽出の対象としているのではなく，均一の確率で文を選択し，その文が含まれるメソッドをメソッド抽出の対象と考えた結果，NOS に有意差コンピュータソフトウェア324
後藤祥2012 年大阪大学基礎工学部情報科学科卒業．2014 年同大学大学院情報科

学情報科学研究科博士後期課程に在籍．修士 (工学)．
リファクタリングの適用履歴分析，プログラミング教
育支援に興味を持つ．

学研究科博士前期課程修了．現在，新崔

日鉄住金ソリューションズ株式会社

2012 年大阪大学大学院情報科学研究に勤務．在学中，リファクタリング支援の研究に従事．

科博士前期課程修了．現在同大学大学
院情報科学研究科博士後期課程に在吉田則裕

2004 年九州工業大学情報工学部知能情報工学科卒業．2009 年大阪大学大学院情報科学研究科博士後期課程修了．同年日本学術振興会特別研究員(PD)．2010 年奈良先端科学技術大学院大学情報科学研究科助教．2014 年より名古屋大学大学院情報科学研究科附属組込みシステム研究センター准教授．博士(情報科学)．コードクローン分析手法やリファクタリング支援手法に関する研究に従事．
藤原賢二

2010 年大阪府立工業高等専門学校総合工学システム専攻修了．2012 年奈
良先端科学技術大学院大学情報科学研究科博士前期課程修了．現在同大

恩瀞

籍．修士 (情報科学)．コードクローン管理手法やリファクタリング支援手法に関する研究に従事．
井上克郎

1984 年大阪大学大学院基礎工学研究科博士後期課程修了 (工学博士)．同年，大阪大学基礎工学部情報工学科助手．1984〜1986 年，ハワイ大学マノア校コンピュータサイエンス学科助教授．1991 大
阪大学基礎工学部助教授．1995 年同学部教授．2002
年大阪大学大学院情報科学研究科教授．2011 年 8 月
より大阪大学大学院情報科学研究科研究科長．ソフト
ウェア工学，特にコードクローンやコード検索などのプログラム分析や再利用技術の研究に従事．