リファクタリングのソフトウェア保守に対する効果測定
松本義弘†

肥後芳樹†

Livieri Simone†

片岡欣夫†

楠本真二†

井上克郎†

大阪大学大学院情報科学研究科†
3.1.1 WMC（クラスの重み付きメソッド数）
１．はじめに近年，ソフトウェア保守作業の効率化を目的あるクラス C i が，メソッド M 1 , L , M n を持つに，リファクタリング[1]と呼ばれる技術が注目とする．これらのメソッドの複雑度をそれぞれされている．リファクタリングとは，ソフトウ
c1 , L , c n とする．このとき， WMC = c i であェアの外部的振る舞いを保ったまま内部の構造る．メソッドの複雑度には，Halsted のメトリクを改善する技術である．本稿では，リファクタ
ス，McCabe のサイクロマチック数[3]などが用いリングがソフトウェア保守に与える効果を計測られる．
する手法を提案する．
3.1.2 CBO（クラス間の結合）
２．現状の問題
計測対象クラスが結合しているクラスの数でリファクタリング技術に関する研究は数多くある．あるクラスが他のクラスのメソッドやイ行われているが，その多くはリファクタリングンスタンス変数を参照しているとき，結合して箇所の特定やソースコードの自動修正に関するいるという．
ものであり，リファクタリング効果の測定に関3.1.3 LCOM*（クラスの凝集の欠如）[4]する研究はあまり行われていない．開発者や保あるクラスの凝集の欠如を表す．定義は次の守管理者がこれまでの経験などに基づいて主観式の通りである．
的に評価を行っているのが現状である．

∑

また，リファクタリングを適用することにより，ソフトウェアのさまざまな特性が変化するため，それらを総合的に評価することが必要である．例えば，メソッドの一部を新たなメソッドとして抽出した場合（「メソッドの抽出」パターンの適用），メソッドが小さくなるために複雑度は小さくなるが（改善する）が，メソッドの数が多くなるため，凝集度が小さくなる（悪化する）ことが考えられる．ソフトウェアの特性を定量的に表す指標としてこれまでに多くのメトリクスが提案されているが，各特性を表すメトリクスは単位が異なるために単純に比較を行うことが難しい．本稿では，メトリクスの偏差値を用いてリファクタリング効果を総合的に測定する手法を提案する．
３．提案手法
本節では，提案手法について述べる．3.1 節では，提案手法で用いる CK メトリクス[2]の説明を行い，3.2 節では測定方法について述べる．
3.1 CK メトリクス
CK メトリクスは，6 種のメトリクスから構成される．本節では，メトリクスを取得するツールの実装上，取得できたメトリクス WMC, CBO,LCOM*を説明する．これらのメトリクスは，いずれも測定値が大きいほど，ソフトウェア品質が劣っていることを表す．
Measuring the Effectiveness of Refactoring for Software
Maintenance†Yoshihiro MATSUMOTO, †Yoshiki HIGO, †Livieri Simone,†Yoshio KATAOKA, †Shinji KUSUMOTO, †Katsuro INOUE†Graduate School of Information Science and Technology,Osaka University⎛1 a⎞⎜ ∑ µ(Aj )⎟ − m⎟⎜a⎝ j =1⎠
LCOM * =1− ma と m はそれぞれ対象のクラスに定義されているフィールドの数とメソッドの数である． A j はj 番目のフィールド， µ ( A j ) はフィールド A j を用いているメソッドの数を表す．
3.2 アプローチ
CK メトリクス(WMC,CBO,LCOM*)を用いて，ソフトウェア保守に与える効果を測定する手法を述べる．本手法は以下の 5 つの STEP からなる．
STEP1 ： 対 象 プ ロ グ ラ ム の 全 ク ラ ス の WMC,CBO,LCOM*を計算し，メトリクスごとに平均，標準偏差を計算する．
STEP2：リファクタリング対象のクラスに対し，各メトリクスの偏差値を求める．
STEP3：リファクタリングを適用し，再び対象クラスの各メトリクスの偏差値を計算する．
STEP4：STEP2,3 の結果から，リファクタリン
グ対象の全クラスの Eval を計算する．
STEP5：STEP4 の結果から， TEval を求め，総合的にリファクタリングの効果を評価する．
次に， Eval と TEval を定義する．

Eval ( A) = ∑ (div i ʼ(C i ʼ( A)) − div i (C i ( A)))i∈M

where,
M = {WMC , CBO, LCOM *}前後におけるメトリクスの実測値および偏差値を求め，表１に示す．
表１よりクラス A,B,C に対して， Eval を算出差値する．その結果を表２にまとめる．
（ C i ( A) , div i (J ) はリファクタリング前の値，
表２．リファクタリング前後の偏差値の変化
Ci ʼ( A) , div i ʼ(J ) はリファクタリング後の値）
CBO
LCOM* WMCEvalA+3.08
0.00
+1.05
+4.13
リファクタリングの対象となるクラス群がB-2.05
0.00
-1.04
-3.09
c1 , L , c n のとき， TEval を次のように定義する．
C-2.05
0.00
-1.04
-3.09
TEval = Eval (c i )
-2.05
TEval
最後に， TEval が表すリファクタリングの効「メソッドの引き上げ」の適用によって，メ果を次のように定義する．
ソッドが引き上げられたクラス B,C の Eval は共TEval < 0 : goodに -3.09 ， メ ソ ッ ド が 追 加 さ れ た ク ラ ス A のTEval = 0 : no change
Eval は+4.13 である．この結果から TEval を求めると，-2.05 という結果が得られた．つまり本TEval > 0 : bad
手法では，このリファクタリングを適用するこ
４．適用実験とで，ソフトウェア保守の難しさを改善したとjakarta-tomcat-5.5.4（クラス数:1310）においえる．
いて，検出された Bad-Smell（1 つの重複コー５．まとめと今後の課題
ド）に対し，リファクタリングパターンの 1 つ
本稿では，リファクタリングがソフトウェア
で あ る 「 メ ソ ッ ド の 引 き 上 げ (Pull Up
保守に与える効果を測定する手法を提案した．
Method)」を適用する．「メソッドの引き上げ」
今後の課題は，CK メトリクスで今回使用できなとは，同じ結果をもたらすメソッドが複数のサかったメトリクスを用い，他のリファクタリンブクラスに存在した場合，それらを親クラスにグに対しても本手法を適用することである．ま引き上げるリファクタリングである．最も単純た，本手法の妥当性を検証する必要があると考なケースは，複数のメソッド本体が全く同じでえている．
ある場合である(図 1 参照)．重複したコードが兄
参考文献
弟クラスに存在した場合には，メソッドの抽出[1] M. Fowler, Refactoring: improving theを行ってから，メソッドの引き上げを行えばよ
design of existing code, Addison Wesley,
い．また，メトリクスは Eclipse のプラグイン
1999.
である”Eclipse Metrics Plugin”[5]を利用して[2] Chidamber, S. and Kemerer, C.: A Metrics
取得する．
Employee
Suite for Object Oriented Design, IEEE
EmployeeTransaction on Software Engineering,getName()vol.20, No.6 (1994)[3] 山田茂，高橋宗雄：ソフトウェアマネジメ
ントモデル入門−ソフトウェアの品質の可視化と評価法，共立出版株式会社(1993)
SalesmanEngineer
SalesmanEngineer[4] Henderson-Sellers, B., Object-oriented
getName()getName()metrics : measures of complexity, Prent図 1.「メソッドの引き上げ」の例
ice-Hall, pp.142-147, 1996.
本実験では，リファクタリング対象のクラスを[5] Eclipse Metrics Plugin. http://www.teaA,B,C とし，クラス B,C に重複するメソッドをク
minabox.co.uk/.
ラス A に引き上げる．リファクタリングの適用

C i ( A) ： クラス A のメトリクス i の実測値
div i (J ) : 全クラスの i に対する実測値Ｊの偏∑表１．リファクタリング前後における各メトリクスの実測値および偏差値

AB
C

実測値
偏差値
実測値
偏差値
実測値
偏差値

前
36
75.86
30
69.71
3978.94

CBO
後
39
78.94
2867.66
3776.89

差分+3+3.08-2-2.05-2-2.05

LCOM*(%)
前後
差分
9595062.91
62.91
0.00
91
91
0
61.96
61.96
0.00
91
91
0
61.96
61.96
0.00

前108
67.24
137
73.30
108
67.24

WMC
後113
68.29
132
72.26
103
66.20

差分
+5+1.05-5-1.04-5-1.04