メソッド抽出リファクタリング が 行われる メソッド の特徴 調査

26
e Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka Un メメメメメメメメメメメメメメメ メメメメメメメメメメメメメ ○ メメ メ 1 メメ メメ 2 メメ メメ 2 メ メメ 1 メメ メメ 1 1 メメメメ 2 メメメメメメメメメメメメメ

Upload: annis

Post on 05-Feb-2016

56 views

Category:

Documents


0 download

DESCRIPTION

メソッド抽出リファクタリング が 行われる メソッド の特徴 調査. ○ 後藤 祥 1 , 吉田 則裕 2 , 藤原 賢二 2 崔 恩 瀞 1 , 井上 克郎 1 1 大阪大学 2 奈良先端科学技術大学院大学. 研究概要. メソッド抽出が行われるメソッドの特徴を調査 オープンソースソフトウェア からメソッド抽出の履歴を収集 開発者がどのようなメソッドを対象としているか 一般的なメソッドの特徴と比較 メソッドのサイズ,凝集度に有意な差が存在した. リファクタリング. プログラムの外的振る舞いを変化させずに,内部構造を整理すること [1] - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: メソッド抽出リファクタリング が 行われる メソッド の特徴 調査

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

メソッド抽出リファクタリングが行われるメソッドの特徴調査

○ 後藤 祥 1 ,吉田 則裕 2 ,藤原 賢二 2  崔 恩瀞 1 ,井上 克郎 1

1 大阪大学2 奈良先端科学技術大学院大学

Page 2: メソッド抽出リファクタリング が 行われる メソッド の特徴 調査

Department of Computer Science, Graduate School of Information Science and Technology, Osaka University

2

研究概要

• メソッド抽出が行われるメソッドの特徴を調査– オープンソースソフトウェアからメソッド抽出

の履歴を収集– 開発者がどのようなメソッドを対象としている

• 一般的なメソッドの特徴と比較– メソッドのサイズ,凝集度に有意な差が存在し

Page 3: メソッド抽出リファクタリング が 行われる メソッド の特徴 調査

Department of Computer Science, Graduate School of Information Science and Technology, Osaka University

3

リファクタリング

• プログラムの外的振る舞いを変化させずに,内部構造を整理すること [1]– 様々な種類のリファクタリングが存在する

• 保守性や可読性の向上を目的として行う

[1] M. Fowler, “Refactoring : Improving the Design of Existing Code”, 1999.

Page 4: メソッド抽出リファクタリング が 行われる メソッド の特徴 調査

Department of Computer Science, Graduate School of Information Science and Technology, Osaka University

4

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

• メソッドの一部を新たなメソッドとして抽出するリファクタリング

• 主な用途– 長いメソッドを短いメソッドに分割する– 複数の機能を持つメソッドを機能単位に分割す

Page 5: メソッド抽出リファクタリング が 行われる メソッド の特徴 調査

Department of Computer Science, Graduate School of Information Science and Technology, Osaka University

5

メソッド抽出の例 (1/2)

int[] score = {9,4,8,2,3,10,7,1,6,5};

for(int i=0;i<score.length-1;i++){ for(int j=0;j<score.length-i-1;j++){ if(score[j] < score[j+1]){ int t = score[j]; score[j] = score[j+1]; score[j+1] = t; } }}

for(int i=0;i<score.length;i++){ System.out.println(score[i]);}

• 1-10 までの成績を並び替えて表示するプログラム

データの入力

ソート

データの出力

Page 6: メソッド抽出リファクタリング が 行われる メソッド の特徴 調査

Department of Computer Science, Graduate School of Information Science and Technology, Osaka University

6

メソッド抽出の例 (2/2)

int[] score = {9,4,8,2,3,10,7,1,6,5};

sort(score);

for(int i=0;i<score.length;i++){ System.out.println(score[i]);}

• 1-10 までの成績を並び替えて表示するプログラム

public void sort(int[] score){ for(int i=0;i<score.length-1;i++){ for(int j=0;j<score.length-i-1;j++){ if(score[j] < score[j+1]){ int t = score[j]; score[j] = score[j+1]; score[j+1] = t; } } }}

ソート部分をメソッド抽出

ソート部分が sort メソッドに置き換わり,プログラムの可読性が向

上した.機能単位に分割されたことで,バグ修正などの保守作業が容易に

なった.

Page 7: メソッド抽出リファクタリング が 行われる メソッド の特徴 調査

Department of Computer Science, Graduate School of Information Science and Technology, Osaka University

7

リファクタリング支援の研究

• 開発履歴の調査と支援手法の提案

開発者

研究者

開発履歴

開発履歴の調査

調査結果に基づく支援手法・ツールの提

1

2

Page 8: メソッド抽出リファクタリング が 行われる メソッド の特徴 調査

Department of Computer Science, Graduate School of Information Science and Technology, Osaka University

8

既存の調査研究

• 既存の調査の内容 [2]– どの種類のリファクタリングが行われている

か ?– 開発者がどのようにツールを使っているか ?

• コードの特徴の定量的調査は行われていない– コードの特徴 ・・・ 行数,複雑度など– リファクタリングされるコードの特徴を調べる

ことで,リファクタリング対象の推薦ができる[2] E. Murphy-Hill et al., “How We Refactor, and How We Know It”, 2012

Page 9: メソッド抽出リファクタリング が 行われる メソッド の特徴 調査

Department of Computer Science, Graduate School of Information Science and Technology, Osaka University

9

研究概要

• メソッド抽出リファクタリングの定量的調査– メソッド抽出されたメソッドと一般的なメ

ソッドの特徴を比較する

• 調査する特徴:長さ,凝集度– 凝集度 ・・・ 機能的なまとまりを表す度合– 抽出の対象となるのは長いメソッドや機能単

位でまとまっていないメソッドと言われている [1][1] M. Fowler, “Refactoring : Improving the Design of Existing Code”, 1999.

Page 10: メソッド抽出リファクタリング が 行われる メソッド の特徴 調査

Department of Computer Science, Graduate School of Information Science and Technology, Osaka University

10

調査手順

• メソッド抽出されたメソッドとリリースバージョンの全メソッドを比較

開発履歴

メソッド抽出事例

最新のリリースバー

ジョン

リファクタリング

検出ツール

抽出対象となったメソッドの特

Extracted

全メソッドの特徴

All

Page 11: メソッド抽出リファクタリング が 行われる メソッド の特徴 調査

Department of Computer Science, Graduate School of Information Science and Technology, Osaka University

11

メソッド抽出事例の検出

• 本研究では藤原らのツールを使用

[3] 藤原ら , “ 構文情報を付加したリポジトリによるメソッド抽出リファクタリングの検出” , 2013.[4] K. prete et al., “Template-based Reconstruction of Complex Refactorings”, 2010.[5] Z. Xing et al., “Refactoring Detection based on UMLDiff Change-Facts Queries”, 2006.

Ref-Finder[4]UMLDiff[5]

藤原らのツール [3]

メリット デメリット

・複数の種類のリファ クタリングを検出可能

・対象はメソッド抽出 リファクタリングのみ

・複数リビジョンから 一度に検出が可能・高速・高精度

・一度に検出ができる のは 2 リビジョン間のみ

Page 12: メソッド抽出リファクタリング が 行われる メソッド の特徴 調査

Department of Computer Science, Graduate School of Information Science and Technology, Osaka University

12

藤原らのツールの検出手順

void printOwing(){ printBanner();

System.out.println("name: " + _name); System.out.println("amount: " + getOutstanding());}

void printOwing(){ printBanner();

printDetails(getOutstanding());}

void printDetails(double outstanding){ System.out.println("name: " + _name); System.out.println("amount: " + outstanding);}

リビジョン N

リビジョン N + 1

条件 2 : 新たに追加された メソッドが存在する

System.out.println("name: " + _name);System.out.println("amount: " + getOutstanding());

削除された行

条件 1 : 行の追加および削除が行われた メソッドが存在する

条件 3 : 新たに追加されたメソッドを 呼び出している

類似度が閾値 (0.3) 以上であればメソッド抽出が行われたとする.

Page 13: メソッド抽出リファクタリング が 行われる メソッド の特徴 調査

Department of Computer Science, Graduate School of Information Science and Technology, Osaka University

13

調査するメトリクス

• メソッドの長さと凝集度を表すメトリクス– 長さを測るメトリクス 1 つ– 凝集度を測るメトリクス 3 つ

メソッドの長さ

メソッドの凝集度

スライスベースの凝集度メトリクスTightness, Coverage, Overlap

メソッド中の文数(Number Of Statements : NOS)

Page 14: メソッド抽出リファクタリング が 行われる メソッド の特徴 調査

Department of Computer Science, Graduate School of Information Science and Technology, Osaka University

14

凝集度メトリクス• スライスベースの凝集度メトリクス [6]

– プログラムスライスを用いて凝集度を計測する– メソッドの出力変数に着目したメトリクス– 0 から 1 の範囲の実数値で値が高いほど凝集度が高い

• Tsantalis らの定義に従って計算する [7]– 出力変数 ・・・ メソッド本体とスコープが一致する変

数– 出力変数が存在しないメソッドの凝集度は計算できな

い[6] M. Weiser, “Program slicing”, 1981.[7] N. Tsantalis et al., “Identification of extract method refactoring opportunities for the decomposition of methods”, 2011.

Page 15: メソッド抽出リファクタリング が 行われる メソッド の特徴 調査

Department of Computer Science, Graduate School of Information Science and Technology, Osaka University

15

プログラム依存グラフ (PDG)

123456789

int factorial(int a){ int result = 1; int i; for(i = a;1 < i;i--){ result *= i; }

return result;}

32

5

8

4

PDG

データ依存辺制御依存辺

• プログラム中の依存関係を表したグラフ– 頂点は文,辺は依存関係を表す

制御文

Page 16: メソッド抽出リファクタリング が 行われる メソッド の特徴 調査

Department of Computer Science, Graduate School of Information Science and Technology, Osaka University

16

プログラムスライス

32

5

8

4スライシング基準 :       <5, result>後ろ向きスライス :         {3,4,5}

123456789

int factorial(int a){ int result = 1; int i; for(i = a;1 < i;i--){ result *= i; }

return result;}

• スライス基準 ( 文と変数の組 ) と関連する文の集合– 基準から後ろ向きに辺をたどって得られる集合を

後ろ向きスライスという

Page 17: メソッド抽出リファクタリング が 行われる メソッド の特徴 調査

Department of Computer Science, Graduate School of Information Science and Technology, Osaka University

17

凝集度の計算例

123456789

|||

SLi

||||

|

SLresult

|||

SLintint factorial(int a){ int result = 1; int i; for(i = a;1 < i;i--){ result *= i; }

return result;}

6.0int

M

SLTightness スライスの積集合8.0)(

2

1 intint

resulti SL

SL

SL

SLOverlap 8.0)(

2

1

M

SL

M

SLCoverage

resulti

出力変数の後ろ向きスライスを計算全ての出力変数に関わ

る文がどの程度存在するか

出力変数のスライスがどの程度メソッド全体

に広がっているか

出力変数のスライスがどの程度重複している

Page 18: メソッド抽出リファクタリング が 行われる メソッド の特徴 調査

Department of Computer Science, Graduate School of Information Science and Technology, Osaka University

18

調査対象のメソッド

• NOS の比較には全メソッドを使用• 凝集度の比較には凝集度が計算できたメ

ソッドのみを使用 ( 表中の括弧内数 )

メソッド抽出事例数 比較用バージョン

メソッド数

jEdit 490(286) 4.5.0 6275(2114)

ArgoUML 659(302) 1.8.4 9123(2167)

Apache Ant 704(322) 0.34 13840(4457)

Page 19: メソッド抽出リファクタリング が 行われる メソッド の特徴 調査

Department of Computer Science, Graduate School of Information Science and Technology, Osaka University

19

NOS 分布N

OS

12

510

20

100

500

jEdit Ant ArgoUMLリリース 抽出

NO

S

リリース 抽出 リリース 抽出

• 抽出対象のメソッドは NOS が多い‒ 有意水準 0.05 で有意差あり

Page 20: メソッド抽出リファクタリング が 行われる メソッド の特徴 調査

Department of Computer Science, Graduate School of Information Science and Technology, Osaka University

20

凝集度の比較結果

• 3 つの対象ソフトウェアで近い結果– 抽出対象のメソッドは凝集度が低い

• メトリクスごとの結果について説明– Ant に対する結果のみ

Page 21: メソッド抽出リファクタリング が 行われる メソッド の特徴 調査

Department of Computer Science, Graduate School of Information Science and Technology, Osaka University

21

Coh

esio

n

0.0

0.5

1.0

Tightness 分布

リリース 抽出

• 全てのソフトウェアで有意差ありの検定結果

• 抽出されるのは 0.2 以下の値のメソッドが多い

凝集

Page 22: メソッド抽出リファクタリング が 行われる メソッド の特徴 調査

Department of Computer Science, Graduate School of Information Science and Technology, Osaka University

22

Coh

esio

n

0.0

0.5

1.0

Coverage 分布

リリース 抽出

• jEdit のみ有意差なしの検定結果• Tightness に値の分布が近い

凝集

Page 23: メソッド抽出リファクタリング が 行われる メソッド の特徴 調査

Department of Computer Science, Graduate School of Information Science and Technology, Osaka University

23

Coh

esio

n

0.0

0.5

1.0

Overlap 分布

凝集

リリース 抽出

• 全てのソフトウェアで有意差ありの検定結果

• 値の分布が広い• 値が 1 となるメソッドが非常に多い

Page 24: メソッド抽出リファクタリング が 行われる メソッド の特徴 調査

Department of Computer Science, Graduate School of Information Science and Technology, Osaka University

24

調査結果のまとめ

有意差 比較調査の結果

NOS あり抽出対象となるメソッドは NOS が多い

Tightness あり抽出対象となるメソッドは値が 0.2以下のメソッドが多い

Coverage jEdit のみなし 差が小さく有意差がない場合もある

Overlap あり 有意差はあるが値の分布が特徴的

• 抽出対象のメソッドは NOS が多く凝集度が低い– 長く,機能的まとまりのないメソッドが対象に

なる

Page 25: メソッド抽出リファクタリング が 行われる メソッド の特徴 調査

Department of Computer Science, Graduate School of Information Science and Technology, Osaka University

25

まとめ

• 抽出対象となるメソッドの特徴を調査‒ 3 つのソフトウェアを対象に調査‒ リリース版に存在するメソッドと特徴を比較

• 抽出対象となるメソッドは文数が多く,凝集度が低い‒ 検定によって有意な差がみられた

Page 26: メソッド抽出リファクタリング が 行われる メソッド の特徴 調査

Department of Computer Science, Graduate School of Information Science and Technology, Osaka University

26

今後の課題

• より大規模な調査の実施– 対象ソフトウェア,メトリクス ( 複雑度な

ど ) を追加した調査

• メソッド抽出候補の推薦手法の提案– 調査した特徴の差異を利用する