日本ソフトウェア科学会第 30 回大会 (2013 年度) 講演論文集

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

藤原 賢二

崔 恩瀞

井上 克郎

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

“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 neccessary. In this study, we investigated the diﬀerences ofthe size and cohesion of methods between methods for this refactoring and general methods in open source
software. The result shows signiﬁcant deliverances in the most cases.

されている [2] [6]．

1 はじめに

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

リファクタリングとは，ソフトウェアの外的な振るし，その結果に基いて支援手法を考案する研究が行わ舞いを保ったまま内部構造を整理する作業のことであれている [3] [7]．既存研究では，各リファクタリング

り，プログラムの保守性や可読性の向上を目的としてパターンが適用される頻度や Eclipse のリファクタリ行われる [1]．Fowler は，様々なリファクタリングパング機能の利用状況などが調査されているが，リファターンをまとめており，それぞれのパターンについてクタリング対象となったソースコードが持つ特徴のその用途や手順を記述している [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.

を推薦すべきであるかどうか判断することが難しい．
本研究では，頻繁に行われるリファクタリングの１つであるメソッド抽出 [3] に着目し，抽出対象となったメソッドの特徴を調査した．具体的には，メソッドのサイズや凝集度がリファクタリング対象を発見する基準として有用かどうかを調査するために，抽出対象となったメソッドのサイズおよび凝集度を計測し，

void printOwing(){printBanner();//print detailsSystem.out.println("name: " + _name);
System.out.println("amount: " + getOutstanding());}の頻度やリファクタリング対象とされるソースコードの特徴など様々な調査を行うことが可能となる．
藤原らは，構文情報を付加したリポジトリを利用して，メソッド抽出リファクタリングの検出を行うツールを提案している [9]．藤原らのツールでは，コミット間での変更情報を元にメソッド抽出が行われvoid printOwing(){printBanner();
printDetails(getOutstanding());}
void printDetails(double outstanding){
System.out.println("name: " + _name);
System.out.println("amount: " + outstanding);}

たと推定される箇所を特定し，抽出元のメソッド，メソッド抽出によって新たに作成されたメソッド，抽出元のコード片と新たに作成されたメソッドの類似度を出力する．この類似度は 0 から 1 の値であり，類似度が高いほどメソッド抽出が行われた可能性が高い．
この手法では，メソッド抽出リファクタリングのみを

図1

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

対象としているが，検出精度が優れており，大規模な履歴に容易に適用可能であるという利点がある．本研

一般的なメソッドのサイズおよび凝集度との比較を

究では，比較調査のために多くのリファクタリング事行った．比較の結果，抽出対象となったメソッドと，例が必要であるため，藤原らのツールを用いてメソッ

一般的なメソッドのサイズおよび凝集度には有意差がド抽出事例の収集を行った．

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

3 調査方法2 背景

3. 1 調査する特徴

2. 1 メソッド抽出

メソッド抽出は長すぎるメソッドや，凝集性の低いメソッド抽出は，既存のメソッドの一部を抽出し，メソッドを分割するために有効であるとされている．

新たにメソッドとして定義するリファクタリングであ本研究では，メソッドのサイズと凝集性を，それぞれる．図 1 にメソッド抽出の例を示す．図 1 の例においメソッドの文数と凝集度という尺度で計測を行い，抽て，2 つの文が抽出され，新たに printDetails メソッ

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

ドとして定義されている．抽出元の printOwing メと凝集度について，具体的にどのようにして計測する

ソッドでは，抽出部分のソースコードが printDetailsか説明する．

メソッドの呼び出し文に置換されている．

1. NOS(Number Of Statements)

メソッド抽出は，長すぎるメソッドや，凝集性の低メソッドのサイズの計測方法については，単純にいメソッドの分割を目的として行われるとされてい行数を測るものや，空白行やコメントを除いてる．しかし，実際に長いメソッドが抽出の対象となっ測る方法などが存在する．メソッド抽出はメソッているのかどうかや，数値的な尺度などを定量的に調ド中の文に対して行われるリファクタリングで査した研究は著者らの知る限り存在しない．

あり，メソッド中のコメントや空白行の数とは大きな関連がないと思われる．そのため，本研究で2. 2 藤原らのリファクタリング検出ツール

は，メソッドのサイズをコメントと空白行を除去

リファクタリング検出ツールとは，ソフトウェアのしたメソッドの本体中の文数とした．

開発履歴から，どのリファクタリングパターンが，ど2. 凝集度の部分に適用されたかを検出するためのツールであ凝集度とは，モジュールが機能的にまとまったもる．リファクタリング検出ツールを用いて，リファクのかどうかを表す度合である [5]．本研究では，メタリングの事例を収集することで，リファクタリング

ソッドの凝集度を測るメトリクスとして，Weiser

表1

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

ソフトウェア

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

比較用バージョン

メソッド数

jEdit

1998/9/27 - 2012/1/30

490(286)4.5.0

6275(2114)

Apache Ant

2000/1/13 - 2012/5/23

659(302)

1.8.49123(2167)

ArgoUML

1998/1/27 - 2011/12/15

704(322)0.3413840(4457)が提案したスライスベースのメトリクス [8] のう比較用バージョンは，抽出対象となったメソッドとのち，Ott らの実験 [4] によって有用性が確認され特徴の比較を行うための，調査期間における最新のリている Tightness，Coverage，Overlap の 3 つをリースバージョンを意味しており，メソッド数は，比使用する．これら 3 つのメトリクスの定義を以下

較用バージョンに存在する全メソッドから，テストメに示す．式において，M をメソッド，length(M )ソッドとメソッドの本体が空のメソッドを除いた数でを M の文の数，Vo を M における出力変数の集ある．表 1 中のメソッド抽出事例数とメソッドの数の合，SLx を変数 x を起点にした後ろ向きスライ

括弧内数は，これらのメソッドのうち凝集度の計測がス，SLint を Vo 中の全変数に対する後ろ向きスできたメソッド数を示している．本研究で用いるスラライスの積集合とする．

イスベースの凝集度メトリクスは，メソッド内にスラT ightness(M )Coverage(M )=|SLint |length(M )=|SLx |
1 ∑|Vo |length(M )=1 ∑ |SLint ||Vo ||SLx |x∈VoOverlap(M )x∈Vo

メトリクスの計算に必要となるメソッドの出力変数 Vo は，Tsantalis らの定義に従い，メソッドの返り値と，メソッドの本体とスコープが一致する変数とした [6]．

イスの起点となる変数が存在しない場合，凝集度の計算ができない．そのため，凝集度の比較においては，凝集度が計算できなかったメソッドは除外した．

4 調査結果と考察
各対象ソフトウェアについて，計測した NOS と凝集度の分布を表した箱ひげ図を図 2,3 に示す．以降の結果において，「リリース版」は比較用のリリースバージョンに対する結果を意味しており，「抽出」はメソッド抽出の対象になったメソッドに対する結果を意味している．また図 3 において，T, C, O はそれぞ

3. 2 調査対象
本研究の調査対象として jEdit，Apache Ant，Ar-goUML の 3 つのオープンソースソフトウェアを選択した．まず，調査対象のソフトウェアに藤原らのツールを適用し，メソッド抽出事例の検出を行った†1 ．調
査対象の詳細を表 1 に示す．表 1 において，メソッド抽出事例数は，藤原らのツールを使用して検出された調査対象期間内で行われたメソッド抽出のうち，テストメソッドを除いたメソッドの数である．また，れ Tightness, Coverage, Overlap の 3 つのメトリクスを意味している．
さらに，抽出対象となったメソッドと比較用バージョンに存在するメソッドについて，計測した特徴に有意差が存在するかどうか，マンホイットニーの U検定を用いて検定を行った．表 2，3，4 に，NOS と凝集度の中央値と検定の結果得られた p 値を示す．
表 2，3，4 より，jEdit における Coverage 以外の全てにおいて，有意水準 0.05 以下で有意差があるという結果になった．これらの結果から，今回対象とし†1 藤原らの研究 [9] において，類似度の閾値が 0.3 の時，検出精度が最も高いと述べられているため，本研究でも同一の閾値を利用し，出力結果から閾値以上の類似度をもつものを調査対象として利用した．

たソフトウェアにおいては，メソッドの NOS が多く，凝集度が低いメソッドが抽出の対象となっていると言える．図 2 を見ると，NOS については，抽出対象と

500
200100502012510NOS

jEdit(リリリリ版)

jEdit(抽抽)

Ant(リリリリ版)

図2

Ant(抽抽)ArgoUML(リリリリ版)

ArgoUML(抽抽)NOS 分布なっているメソッドの多くは，約 5 文から 20 文程度

Tightness が 0.1 以下のメソッドを抽出の対象としてであることがわかった．分布に有意差があり，抽出対推薦することが有用であると考えられる．Coverage

象となる数値的な基準がわかったことから，NOS はは Ant と ArgoUML では有意差があったが，jEdit

メソッド抽出候補の推薦において有用な尺度であるとでは有意差が見られなかった．Coverage については，考えられる．

対象ソフトウェア間で結果に差が見られたため，今回次に，図 3 から，各凝集度メトリクスの結果につ対象とした以外のソフトウェアに対しても調査を行いて考察する．Tightness は全てのソフトウェアにおい，結果を確認する必要があると思われる．Overlap

いて，抽出対象と比較用バージョンの間で有意差がは全てののソフトウェアで分布に有意差がみられた．

みられた．また Tightness の中央値は全て 0.1 以下

しかし，Overlap メトリクスは起点になる変数が 1 つであり，メソッド抽出対象となったメソッドの多くがしか存在しない場合は必ず値が 1 になり，実際に比較

Tightness の値が約 0.1 以下であった．このことから，用バージョンに対する結果では，半数以上が Overlap

表2

比較結果 (jEdit)

中央値

NOS(リリース版)

3

NOS(抽出)11.5

Tightness(リリース版)

0.143

Tightness(抽出)0.083

Coverage(リリース版)

0.250

Coverage(抽出)0.250

Overlap(リリース版)

1.000

Overlap(抽出)

0.592

表3

比較結果 (Ant)p値
p<0.05p<0.050.05<pp<0.05中央値

NOS(リリース版)

1NOS(抽出)

14Tightness(リリース版)

0.200

Tightness(抽出)0.056

Coverage(リリース版)

0.318

Coverage(抽出)0.150

Overlap(リリース版)

1.000

Overlap(抽出)

0.583

p値
p<0.05p<0.05p<0.05p<0.05

1.0

表4

比較結果 (ArgoUML)

0.0

0.2

0.4

凝凝凝

0.6

0.8

中央値

T(リリリリ版)

T(抽抽)

C(リリリリ版) C(抽抽) O(リリリリ版) O(抽抽)

2NOS(抽出)

7

Tightness(リリース版)

0.200

Tightness(抽出)0.100

Coverage(リリース版)

0.334

Coverage(抽出)0.211

Overlap(リリース版)

1.000

Overlap(抽出)1.000

p<0.05p<0.05p<0.05p<0.050.8

1.0(a) jEdit

NOS(リリース版)

p値

凝凝凝

0.6

5 まとめ0.4

本研究では，メソッド抽出対象となるメソッドが持つ特徴の定量的調査を行った．調査においては，オー

0.2

プンソースソフトウェアから収集した，抽出の対象と0.0なったメソッドとリリースバージョンにおける全てのメソッドに対して，NOS と凝集度の計測を行い，そT(リリリリ版)

T(抽抽)

C(リリリリ版)

C(抽抽)

O(リリリリ版)

O(抽抽)

1.0

(b) Ant

れらの比較を行った．比較の結果，抽出対象となった
メソッドは NOS が多く，凝集度が低いことがわかった．また，それぞれの分布を調べることで，NOS と0.8

Tightness がメソッド抽出候補の推薦に有用な尺度で0.6あることがわかった．
凝凝凝

今後の課題としては，まず，対象ソフトウェアと計0.4測する特徴を追加した大規模な調査を行うことが挙

0.2

げられる．そして，それらの結果を用いて，抽出対象となるメソッドを推薦する手法を提案することが今後0.0の課題である．
T(リリリリ版)

T(抽抽)

C(リリリリ版) C(抽抽) O(リリリリ版) O(抽抽)(c) ArgoUML
図3

題番号 25220003）の助成を得た．

メソッドの凝集度分布の値が 1 になっている．このように，Overlap の値が1 になるメソッドが多数存在する場合，Overlap を用いてメソッド抽出候補を特定するのは有用ではないと考えられる．

謝辞 本研究は，日本学術振興会科研費基盤 (S)（課参 考 文 献[1] Fowler, M.: Refactoring: Improving the Designof Existing Code, Addison Wesley, 1999.
[2] Murphy-hill, E. and Black, A. P.: Breaking thebarriers to successful refactoring: observations andtools for extract method, Proc. of ICSE, 2008,
pp. 421–430.
[3] Murphy-Hill, E., Parnin, C., and Black, A. P.:
How we refactor, and how we know it, Proc. ofICSE, 2009, pp. 287–297.

[4] Ott, L. M. and Thuss, J. J.: Slice Based Metrics
for Estimating Cohesion, Proc. of METRICS, 1993,
pp. 71–81.
[5] Stevens, W. P., Myers, G. J., and Constatine,
L. L.: Structured design, IBM Syst.J, Vol. 13,No. 2(1974), pp. 115–139.
[6] Tsantalis, N. and Chatzigeorgiou, A.: Identiﬁcation of extract method refactoring opportunities forthe decomposition of methods, Journal of Systemsand Software, Vol. 84, No. 10(2011), pp. 1757–1782.

[7] Vakilian, M., Chen, N., Negara, S., Rajkumar,
B. A., Bailey, B. P., and Johnson, R. E.: Use, disuse, and misuse of automated refactorings, Proc. ofICSE, 2012, pp. 233–243.
[8] Weiser, M.: Program slicing, Proc. of ICSE, 1981,
pp. 439–449.
[9] 藤原賢二, 吉田則裕, 飯田元: 構文情報を付加したリポジトリによるメソッド抽出リファクタリングの検出,
信学技報, Vol. 113, No. 24(2013), pp. 19–24.