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