アイテムセットマイニングを利用した コードクローン分析作業の効率向上

Post on 18-Jan-2016

34 Views

Category:

Documents

2 Downloads

Preview:

Click to see full reader

DESCRIPTION

アイテムセットマイニングを利用した コードクローン分析作業の効率向上. 大阪大学大学院情報科学研究科 M2  宮崎 宏海. 概要. コードクローン分析技術をより効率的に行える手法を提案 コードクローンの散布図では,個々のコードクローンに対して調査をする際はどこから見ていけば良いか分からない. コードクローンとは. コードクローンの弊害 コードクローン部分に修正を加える場合,全てのコード片に対して修正を検討する必要がある. ソースコード中に出現する同一または類似するコード片 主な出現要因 コピー&ペースト 定型的な処理(ファイルオープン,データベース処理など). - PowerPoint PPT Presentation

TRANSCRIPT

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

アイテムセットマイニングを利用した

コードクローン分析作業の効率向上

大阪大学大学院情報科学研究科M2  宮崎 宏海

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

概要コードクローン分析技術をより効率的に行

える手法を提案►コードクローンの散布図では,個々のコードク

ローンに対して調査をする際はどこから見ていけば良いか分からない

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

コードクローンとは

コードクローンの弊害►コードクローン部分に修

正を加える場合,全てのコード片に対して修正を検討する必要がある

コードクローン

コピーアンドペースト

ソースコード中に出現する同一または類似するコード片►主な出現要因

コピー&ペースト 定型的な処理(ファイルオープン,データベース処理な

ど)

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

コードクローンに関するこれまでの研究

コードクローンに対する支援ツール►CCFinder[1]

コードクローン検出ツールトークン単位でコードクローンを検出多種のプログラミング言語 (C, C++. Java, etc..) に対

応解析結果はテキスト形式で出力

[1] T. Kamiya, S. Kusumoto, K. Inoue : “CCFinder : A multi-linguistic token-based code clone detection system for large scale source code” , IEEE Transactions on Software Engineering, 28(7), pp.654-670, July 2002.

[2] Y. Ueda, T. Kamiya, S. Kusumoto and K. Inoue, “Gemini: Maintenance Support Environment Based on Code Clone Analysis”, Proc. Of the 8th IEEE International Symposium on Software Metrics, 67-76, 2002.

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

クローンペアとクローンセットクローンペア:互いにクローンとなっているコード片の対クローンセット:互いにクローンとなっているコード片の

集合

C1

C3

C2

C4

C5

クローンペア

クローンセット

( C1,C3 ) { C1,C3,C4 }

( C1,C4 ) { C2,C5 }( C3,C4 )( C2,C5 )類似したコード片

類似したコード片

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

散布図定義

►対象とするソースコードの集合に含まれるコードクローンの散布状況を表す

►左上を始点として水平方向・垂直方向にソースコードのトークンを出現順に配置

►水平方向・垂直方向のトークンが一定数以上連続して一致する箇所に点をつける

a, b, c, ... : トークン : トークンが一致した箇所

a

a

a

a

a

a

c

b

b

c

c

c

c c c cb b b

b

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

散布図の利点と問題点利点

►システムのどこにコードクローンが含まれているかを瞬時に把握できる

問題点►個々のコードクローンを

調査する場合に,どのコードクローンから調査すればいいか分かり辛い

►コードクローンが固まっている部分に分析すべきものがあるとは限らない

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

研究の目的とアプローチ目的

►個々のコードクローンを分析する際に,散布図上にどのコードクローンから調査するべきかを表示する

アプローチ►コードクローンの出現パターンを抽出する

同じクローンセットに属するコードクローンは類似した機能を持つ

複数のコードクローンを共有するファイルは類似度が高いと考えられる

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

出現パターンの抽出個々のコードクローンではなく,その出現パターン

を見ることでより巨視的な視点による分析が可能

ファイル1

ファイル 2

aa

a

ab

b

b b bcc

cc

c

a

ca

b

aa

a

b b

b

c

cc

c c c

c

d a

a

b

cc

cc

a

d

eee

f

f

f f

ファイル3

ファイル5

ファイル 4 ファイル 6

ファイル 1 ~ 4 同士の類似度は,ファイル 1 ~ 4 とファイル 5 , 6 の類似度より高いと考えられる

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

提案手法 CCFinder から得たコードクローン情報か

ら各ファイルに含まれるコードクローンの出現パターンを求める

手法の手順1. コードクローンを検出する2. コードクローン情報をもとに, FP-tree[3] を作

成する3. コードクローンの頻出パターン * を求める

* :対象とするプロジェクトに一定回数以上出現するパターン

[3] J. Han, J. Pei and Y. Yin ”Mining Frequent Patterns without Candidate Generation”In Proc. of the ACM SIGMOD Conference on Management of Data,pp.1-12, 2000.

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

クローンパターンコードクローンの出現パターンを以降では「ク

ローンパターン」と呼称

C1

C3

C2

C4

C5

: CS1 (クローンセット 1 )に属する コードクローン

ファイル 1

ファイル 2

: CS2 (クローンセット 2 )に属する コードクローン

パターンに含まれるクローンの個数が 2 個以上の場合

C6

C8

C7

F3F2F1

ファイル 3

定義►構成要素はクローンセット

ID►構成するクローンセットに

属するコードクローンが,全て同じファイルに存在

クローンパターンの特徴►コードクローンの出現する

順番は考慮しない►パターンは複数のファイル

に含まれる

[CS1,CS2]

[CS1,CS1] [CS1,CS2] [CS1,CS1,CS2]

[CS1,CS1] [CS1,CS2] [CS1,CS1,CS2]

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

1 .コードクローンの検出既存のコードクローン検出ツールを使用クローンセット情報の構築

►クローンパターンを構成する要素がクローンセット ID であるため

►コードクローンが属するクローンセット ID と,コードクローンを含むファイルとの対応付け

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

2 . FP-tree の作成( 1/2 )頻出クローンセット ID を取得

►パターンを含むファイルの数の閾値を設定►閾値以上の個数のファイルに含まれるクローンセットを

ファイルの個数と共に保持►各ファイルについて,含む頻出クローンセット ID を総

出現回数の降順でソート

例:パターンを含むファイルの個数の最小値を 3 個とした場合

( a : 4 個)( b : 4 個)( c : 4 個)( e : 3 個)

ファイル ID12345

クローンセット IDa, b, c, da, b, e, f

c, da, b, c, e

a, b, c, e, f

頻出クローンセット IDa, b, ca, b, e

ca, b, c, ea, b, c, e

( d : 2 個)( f : 2 個)

閾値以上 閾値未満

総出現回数

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

2 . FP-tree の作成( 2/2 )FP-tree を構築

►FP-tree の特徴木構造各ノードではクローン

セット ID とカウントを保持

各ノードから root までの経路上にあるノードが保持するクローンセットの組み合わせが,カウントの数だけ同一ファイル内に出現

root

e:2

c:3

b:4

a:4

e:1

c:1

前頁の表の FP-tree

{ a , b , c } が同時に 3 つのファイルに含まれていることが分かる

{ c } が 1 つのファイルに含まれていることが分かる

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

3 .頻出パターンの取得( 1/2 ) FP ー tree から頻出パターンを取得

► クローンセット ID= c を含む頻出パターンの取得手順

1. c を保持するノードのカウントと, root までの経路上のノードが保持するクローンセット ID を調べる

2. c を含む全てのファイルについて 1. の情報を調べ,統合する

3. 2. の情報とパターンを含むファイル数の閾値から頻出パターンを求める

c:3

b:4

a:4

c:1

前頁の FP-tree から c を含むパターンを見つける場合

a, b, c が同時に3 つのファイルに

現れる

c が 1 つのファイルに現れる

a, b, c が同時に 3 つのファイルに,c が 4 つのファイルに同時に現れ

頻出パターン

{ a, b, c }{ c }

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

3 .頻出パターンの取得( 2/2 )不要なパターンを除去

►不要なパターンの条件 2 つのパターンが同じファイルに含まれる パターンを構成するクローンセット ID が包含関係になっている

►包含されているパターンを除去する包含しているパターンに比べて,新たに得られる情報がないた

ファイル IDf1, f2, f3, f4f1, f2, f3, f4

頻出パターン ID12

クローンセット IDa, b, c, d

a, b, c

パターン間でクローンセット ID が包含関係になる例

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

実験の概要実験の目的

►コードクローンの頻出パターンがコードクローン分析に有用かを調べる

実験の条件►コードクローン検出ツール: CCFinder►パターンを構成するクローンセット数の最小値: 2►パターンを含むファイル数の最小値: 2

JHotDraw (バージョン 5.4 )に適用►ファイル数: 484 個( 71736 行)►検出したコードクローン: 1604 個►検出したクローンセット: 323 個►取得したパターン: 40 個

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

コードクローン分析に有用であるかの判断基準

パターンを構成するコードクローンがファイルの特徴を表しているか

パターンを含むファイルが,コードクローンを含むファイルに比べて絞り込めているか

パターンを含むファイルの集合 F

全てのファイル

CS2 を含むファイルの集合 F2

CS3 を含むファイルの集合 F3

CS1 を含むファイルの集合 F1

絞り込めている 絞り込めていないパターン{ CS1, CS2, CS3 }の場合

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

取得した頻出パターンの例( 1/2)

31 public void execute() {32      super.execute();33      setUndoActivity(createUndoActivity());34      getUndoActivity().setAffectedFigures(35   view().selectionZOrdered());36      FigureEnumeration fe = 37         getUndoActivity().getAffectedFigures();38      while (fe.hasNextFigure()) {39   view(). drawing(

64 public boolean undo() {65      if (!super.undo()) {66   return false;67      }68    FigureEnumeration fe = 69         getAffectedFigures();70     while (fe.hasNextFigure()) {71      Figure currentFigure = 72          fe.nextFigure();

43 public void execute() {44      super.execute();45      setUndoActivity(createUndoActivity());46      getUndoActivity().setAffectedFigures(47 view().selection());48      FigureEnumeration fe = 49 getUndoActivity().getAffectedFigures();50      while (fe.hasNextFigure()) {51 fe. nextFigure(

79 public boolean undo() {80     if (!super.undo()) {81 return false;82     }83    FigureEnumeration fe = 84           getAffectedFigures();85     while (fe.hasNextFigure()) {86 Figure f = fe.nextFigure();

SendToBackCommand.java ChangeAttributeCommand.java

:クローンペアになっているコード片

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

取得した頻出パターンの例( 2/2)

パターンを構成するコードクローン►メソッド execute() :複数の図形を対象としたコマンド

の実行を記述►メソッド undo() :そのファイルが記述するコマンドの

取り消し処理を記述パターンを含むファイル

►ChangeAttributeCommand.java►SendToBackCommand.java

頻出パターンが持つ情報►複数の図形を対象としたコマンドを実行►そのコマンドを取り消す

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

ファイルの絞り込みを行ったパターン

JHotDraw から取得したパターン 40 個中 6 個具体例

►前述の頻出パターン►execute() の一部を含むファイル

BringToFrontCommand.java ChangeAttributeCommand.java SendToBackCommand.java

►undo() の一部を含むファイル AlignCommand.java ChangeAttributeCommand.java ConnectedTextTool.java SendToBackCommand.java

execute()メソッドを持つが,複数の図形を対象としたものでは

ない

execute()メソッドを持たない

UndoActivity クラスを持つが

undo()メソッドの記述はない

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

考察単一のコードクローンからは得られない情

報を取得►ファイルが持つ機能を表すパターン►ファイルの絞り込みが出来たパターン

特定の機能を持つファイルに分類できた

取得した頻出パターンを含むファイルと類似した機能を持つファイルが存在►パターンを含むべきファイルの検出漏れ

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

まとめと今後の課題まとめ

►散布図上で効率的なクローン調査が可能となる手法を提案

►JHotDraw に対して実験を行い,取得したパターンがコードクローン分析に有用であるか判断した

今後の課題►散布図への情報の付加►パターンを構成する要素の検討

CCFinder で検出するコードクローンの最小トークン数を変更

►評価基準の検討

top related