ck メトリクスに基づくリファクタリングの 効果予測手法の提案と実装

21
1 Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University CK メメメメメメメメメメメメメメメメメメ メメメメメメメメメメメメ メメメメ メメメメメメメメメメ ○ メメメメ メメメメ メメメメ メメメメ

Upload: cicely

Post on 24-Jan-2016

99 views

Category:

Documents


0 download

DESCRIPTION

CK メトリクスに基づくリファクタリングの 効果予測手法の提案と実装. 大阪大学 大学院情報科学研究科 ○松本義弘 肥後芳樹 楠本真二 井上克郎. 研究の背景. 将来的なソフトウェアの保守コストの削減を目的に,リファクタリング [1] と呼ばれる技術が研究されている. リファクタリングとは? ソフトウェアの外部的振る舞いを保ったまま,内部の構造を改善する技術 リファクタリングの効果は? ソフトウェアの保守性が向上する リファクタリングを実施するプロセスで,その効果を予測したいという要求がある. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: CK メトリクスに基づくリファクタリングの 効果予測手法の提案と実装

1Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University

CK メトリクスに基づくリファクタリングの

効果予測手法の提案と実装

大阪大学 大学院情報科学研究科○ 松本義弘 肥後芳樹 楠本真二 井上克

Page 2: CK メトリクスに基づくリファクタリングの 効果予測手法の提案と実装

2Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University

研究の背景 将来的なソフトウェアの保守コストの削減を目的に,リフ

ァクタリング [1] と呼ばれる技術が研究されている. リファクタリングとは?

ソフトウェアの外部的振る舞いを保ったまま,内部の構造を改善する技術

リファクタリングの効果は?ソフトウェアの保守性が向上する

リファクタリングを実施するプロセスで,その効果を予測したいという要求がある

[1] M. Fowler, Refactoring: improving the design of existing code, Addison Wesley, 1999.

Page 3: CK メトリクスに基づくリファクタリングの 効果予測手法の提案と実装

3Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University

研究対象と目的 一般的に使われるリファクタリングプロセス [2]

Step 1: どこにリファクタリングを適用すべきか決定するStep 2: どのようなリファクタリングを適用すべきかを決定

するStep 3: リファクタリングの効果を予測するStep 4: プログラムを修正するStep 5: プログラムが正しく動作するかテストする

[2] T Mens and T. Tourwé. A survey of software refactoring. IEEE Trans. Softw. Eng., 30(2):126–139, 2004.

Page 4: CK メトリクスに基づくリファクタリングの 効果予測手法の提案と実装

4Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University

関連研究 リファクタリング位置特定/選択手法

構造的な欠陥(低凝集・高結合のクラスなど)を発見し,それに対して効果的なリファクタリングを提供 [3]

リファクタリングの効果計測手法高結合を解消するリファクタリングを,独自に定義し

た結合度メトリクスに基づいて定量的に評価する [4]

[3] 秦野 , 乃村 , 谷口 , 牛島 . ソフトウェアメトリクスを利用したリファクタリングの自動化支援機構 . 情報処理学会論文誌 ,44(6):1548–1557, Jun 2003.[4]Y. Kataoka. T. Imai, H.Andou and T. Fukaya, A quantitative evaluation of maintainability enhancement by refactoring., In ICSM ’02, p. 576-585, 2002.

Page 5: CK メトリクスに基づくリファクタリングの 効果予測手法の提案と実装

5Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University

研究の概要 関連研究の問題

リファクタリングは,高結合・低凝集なクラスだけが対象ではない「計算処理を行うクラスに画面描画の機能の一部が実装されているの

で適切なクラスに移動したい」このようなケースにおいても,リファクタリングを評価する必要があ

る リファクタリング適用支援ツールを使っても,ソースコードの修正

はコストがかかるソースコードを修正する前に,ソフトウェア保守に与える効果を知る

べき

研究目的 ソースコードを修正する前に,リファクタリングが保守性に与える

効果を予測する手法を提案・実装し,有用性を評価する

Page 6: CK メトリクスに基づくリファクタリングの 効果予測手法の提案と実装

6Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University

ソフトウェアの保守性 「機能仕様の変更や追加に対する修正のしやすさ」を表す

ソフトウェアの保守性を評価するためにソフトウェア複雑度メトリクスが用いられている [4] . メトリクスが高く複雑であればあるほど修正のコストがかかり,

保守が困難であると評価されている 代表的なソフトウェア複雑度メトリクスとして, CK メトリ

クスがあげられる

[4] 神谷年洋 , オブジェクト指向メトリクスを用いた開発支援法に関する研究 , PhD thesis, 大阪大学大学院基礎工学研究科 , 2001 .

Page 7: CK メトリクスに基づくリファクタリングの 効果予測手法の提案と実装

7Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University

CK メトリクス CK メトリクスは以下の 3 つの観点からクラスの複

雑さを評価する

継承DIT (Depth of inheritance tree)

NOC (Number of children)

結合RFC ( Response for a class)

CBO(Coupling between object-class)

クラスの内部複雑度

WMC(Weighted methods per class)

LCOM(Lack of cohesion in method)

本研究では, CK メトリクスを用いてリファクタリングがソフトウェア保守に与える効果を予測する手法を提案する

※ これらのメトリクスは,値が高いほどクラスが複雑であることを表す

Page 8: CK メトリクスに基づくリファクタリングの 効果予測手法の提案と実装

8Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University

提案手法の概要System

プログラム解析

Program

解析情報 α

CK Metricsα

STEP1

リファクタリングの箇所/リファクタリングパターン

STEP2 リファクタリング箇所とパターンを取得

解析情報 β

STEP3

CK Metricsβ

リファクタリング前後のメトリクスの変化率の計算

STEP4

Page 9: CK メトリクスに基づくリファクタリングの 効果予測手法の提案と実装

9Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University

STEP1: 対象プログラムの解析 対象プログラムの解析を行い, CK メトリクスを計測する.

ソフトウェアを構成する全クラス

D

E

A

B

F

C G

解析情報 ・クラス間の参照関係 ・メソッド間の参照関係 ・メソッドとフィールドの参照関係 ・メソッド内の分岐・繰り返しの数 など

CK メトリクス計測

Page 10: CK メトリクスに基づくリファクタリングの 効果予測手法の提案と実装

10Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University

STEP2 :リファクタリング箇所とリファクタリングパターンの入力

リファクタリングしたい箇所(フィールド,メソッド,クラス)を指定し,適用したいリファクタリングパターンを与える 実装しているリファクタリングパターン

フィールドの移動フィールドの引き上げフィールドの引き下げメソッドの移動メソッドの引き上げメソッドの引き下げクラスの抽出スーパークラスの抽出サブクラスの抽出

Page 11: CK メトリクスに基づくリファクタリングの 効果予測手法の提案と実装

11Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University

STEP3 :解析情報の修正 (1) STEP2 を元に解析情報を修正する

例:クラス A のメソッド a1() をクラス Bへ移動(1) リファクタリングの影響を受けるクラスを検出する(2)ユーザ非依存部分の修正(3)ユーザ依存部分の修正

A

B

Ca1( )a2( )

D

call a1( )

call a1( )

call a1( )

クラス メソッド Fan-in

クラス メソッドA a1() B b1()

C c1()

D d1()

a2() ・・・ ・・・

d1( ) b1( )

c1( )

Page 12: CK メトリクスに基づくリファクタリングの 効果予測手法の提案と実装

12Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University

STEP3 :解析情報の修正 (2) STEP2 を元に解析情報を修正する

例:クラス A のメソッド a1 をクラス Bへ移動(1) リファクタリングの影響を受けるクラスを検出する(2)ユーザ非依存部分の修正(3)ユーザ依存部分の修正

A

B

Ca1( )a2( )

D

call a1( )

call a1( )

call a1( )

d1( ) b1( )

c1( )

クラス

メソッド

B b1()

クラス

メソッド

A

a2()

メソッド b1()

Offset 命令

10 (ClassA)instA.a1()

A

B

Ca2( )

D

call a1( )

call a1( )

d1( ) a1()b1()

c1( )

a1()

a1()

(ClassB)a1()

Page 13: CK メトリクスに基づくリファクタリングの 効果予測手法の提案と実装

13Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University

STEP3 :解析情報の修正 (3) STEP2 を元に解析情報を修正する

例:クラス A のメソッド A1 をクラス Bへ移動(1) リファクタリングの影響を受けるクラスを検出する(2)ユーザ非依存部分の修正(3)ユーザ依存部分の修正

A

B

Ca2( )

D

call a1( )

call a1( )

d1( ) a1()b1()

c1( )

メソッド d1()

Offset 命令

20 (ClassA)instA.a1()(ClassB)???.a1()

どのインスタンスに対して呼び出すのか?

Page 14: CK メトリクスに基づくリファクタリングの 効果予測手法の提案と実装

14Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University

STEP4 : CK メトリクスの計算

ソフトウェアを構成するクラス群

D

E

A

B

F

C G

D’

A

B

FA’

B’

F’

修正後の解析情報を元に CK メトリクスを計測 CK メトリクスの変化があったクラスに対し,メトリクスの変化率を計算

変化があったクラスの CK メトリクスWMC

A’CBO ・・・

xx xx ・・・DITxx

B’ xx xx ・・・ xx

D’ xx xx ・・・ xx

F’ xx xx ・・・ xx

合計 xx xx ・・・ xx

変化率 xx xx ・・・ xx

WMC の変化率 =SUMWMC(A’, B’, D’, F’)- SUMWMC(A, B, D,

F)SUMWMC(A, B, D, F)

Page 15: CK メトリクスに基づくリファクタリングの 効果予測手法の提案と実装

15Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University

提案手法の実装 提案手法の有用性を確認するために手法の実装,適用実験を

行う 実装

開発言語: Java実験対象: Java構成

プログラム解析部 (Class Construction Kit[6]) CK メトリクス計算部 (ckjm[7]) 結果出力部

適用実験の対象 Feature Location Visualizer[8]( 以下, FLV)

• クラス数: 37• 行数: 4815 行

[6]Class Construction Kit, http://bcel.sourceforge.net/cck.html[7]ckjm. http://www.spinellis.gr/sw/ckjm/[8] 檜皮祐希,松下誠,井上克郎,更新履歴情報と静的情報を用いて同一機能を実装しているクラス群を抽出する手法の提案,電子情報通信学会技術研究報告 , SS2006-67, Vol.106, No.427, pp.13-18, 2006.

Page 16: CK メトリクスに基づくリファクタリングの 効果予測手法の提案と実装

16Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University

適用実験の概要

改善案そのフィールドとメソッドを以下のいずれかのクラスに移

動するcase1: FeatureLocationGraphVisualizationViewer ( FLGVV )クラスcase2: BirdPanel ( BP )クラスcase3: ComponentPanel ( CP )クラスcase4: GraphViewPanel ( GVP )クラス

問題点 GUI の処理と無関係な ComponentList(CL) ク

ラスに GUI の処理の一部が実装されている

FLGVV

CP

BPGVP

CL

setExtractPanel()setStartClass()

ExtractPanel ep;

GUI

Page 17: CK メトリクスに基づくリファクタリングの 効果予測手法の提案と実装

17Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University

適用実験の結果 (1)

「フィールド,メソッドの移動」は,継承の変化を伴わないのでNOC,DIT は変化しない

LCOM は, getter/setter は省いて計測する仕様を採用したため,値に変化がなかった.

WMC,CBO,RFC は変化が見られた. WMC :変化なし CBO :減少 RFC :微量な変化

case1 WMC LCOM NOC DIT CBO RFCCL 10(-2) 62 0 1 8(-1) 36(-2)FLGVV 21(+2) 1 0 1 12 69(+3)EP 5 0 0 1 13(-1) 83合計 36(± 0) 63 0 3 33(-2) 190(+1)変化率 0.00% 0.00% 0.00% 0.00% -5.71% 0.53%

Page 18: CK メトリクスに基づくリファクタリングの 効果予測手法の提案と実装

18Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University

WMC CBO RFCcase1 0.00% -1.90% 0.18%case2 0.00% 1.25% 0.09%case3 0.00% 2.17% 0.18%case4 0.00% 2.38% 0.00%

- 2.50%

- 2.00%

- 1.50%

- 1.00%

- 0.50%

0.00%

0.50%

1.00%

1.50%

2.00%

2.50%

3.00%

case1 case2 case3 case4

WMCCBORFC

適用実験の結果 (2)

変化率をクラス数で正規化し, case1~ 4 を比較. WMC は変化なし RFC は微量な変化

case1 リファクタリング後の CBO

の値は減少し,一番良い結果が得られた.

case2,3,4 リファクタリング後の CBO

は増加してしまった.

Page 19: CK メトリクスに基づくリファクタリングの 効果予測手法の提案と実装

19Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University

考察

開発者の主観でリファクタリングを行うと, case2,3,4 のようにソフトウェアが構造的に悪化する危険があるため,本手法を用いて比較することは重要

本手法では,リファクタリング前後のメトリクスの値だけでリファクタリングを評価しているが,より正確に評価するためには,ソースコード修正にかかるコストやテストにかかるコストも考慮するべき

WMC CBO RFCcase1 0.00% -1.90% 0.18%case2 0.00% 1.25% 0.09%case3 0.00% 2.17% 0.18%case4 0.00% 2.38% 0.00%

Page 20: CK メトリクスに基づくリファクタリングの 効果予測手法の提案と実装

20Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University

まとめ まとめ

リファクタリングがソフトウェア保守に与える効果を予測する手法を提案した.

その手法の適用実験を行い,有用性を評価した.複数のリファクタリング候補を与え,それらの評価の比較を行

った.

今後の課題 「クラスのインライン化」など,構造的な変化を伴う未実装

なリファクタリングに関しても実装したい ソースコード修正にかかるコスト,テストにかかるコストを考慮し,手法を改良したい

Page 21: CK メトリクスに基づくリファクタリングの 効果予測手法の提案と実装

21Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University