17. }
18. System.out.println("sum = " + sum);
4-6
行目と13-15
行目,
8-10
行目 と17-19
行目Java 向けの変形ルール
RJ1
:パッケージ名除去( PackageName ‘.’ )+ ClassName → ClassName RJ2:Callee
挿入NDotOrNew NClassName ‘(‘
→ NDotOrNew CalleeIdentifier ‘.’ NClassName ‘(‘
RJ3:
テーブル初期化除去'=' '{' InitalizationList, '}' → '=' '{' UniqueIdentifier '}‘
']' '{' InitalizationList, '}' → ']' '{' UniqueIdentifier '}' RJ4:
モジュールの分離トップレベルの定義や宣言の終わりに
UniqueIdentifier
を挿 入する最適化
Suffix-tree
によるO(n log n)
のマッチングアルゴリ ズム(
入力ソースファイルの大きさをn
として)
簡便なアルゴリズム
(
最適アルゴリズムはO(n))
メモリ使用量を削減「文の最初のトークンだけがクローンの開始位置 となることができる」制約によりメモリ使用量を 削減
大規模なソースファイルには分割して処理を行う
JDK のライブラリへの適用
JDK
(Java Development Kit
)1.2.2
(サンプル とデモプログラムを除く)入力ファイルは
164
8個,約50
万行ツールの実行には,
Pentium III 650MHz
および1GB
のRAM
を持つPC
で約3
分を要したクローンの散布図
両軸はソースファイ ルを辞書順に並べた もの
20
行以上のクローン を図示多くのクローンが密 集している(
A)
最長のクローン
(
B
)A
B
クローンが密集している部分
( A )
src/javax/swing/plaf/multi/*.java
の29
のファイル コード生成ツールによって生成されたいくつかはクラス名を除いてまったく同じクラ スの定義を含んでいた
31| */
32| public class MultiButtonUI extends ButtonUI { 33|
160| public static ComponentUI createUI(JComponent a) { 161| ComponentUI mui = new MultiButtonUI();
162| return MultiLookAndFeel.createUIs(mui, 163| ((MultiButtonUI) mui).uis,
164| a);
165| }
最長のクローン( B )
最長のクローン(
349
行)src/java/util/Arrays.java
の18
の“sort”
メソッド シグネチャ(引数の型と数)が異なるアルゴリズムは同一
変形ルールの評価
変形/置換なしでは発見されるクローンは半減す る
0 200 400 600 800 1000
20 25 30 35 40 45 50 55 60 65 70 75 80 85 90 95 10 0. .
クローンの長さ
(LOC)
出現回数 変形ルールを適用
適用せず
その他の適用実験
オープンソース
Qt(C++
,2
4万行)
C++
向けの変形ルールの効果を確認したLinux
とFreeBSD
のカーネルとドライバ(C
,160
万行+130
万行)
ドライバ部分にクローン「ファイル」が多数存在する システム間で名前が異なるファイル
商用
NTT
データ(
出入国管理システム) COBOL
,120
万行NASDA(
ロケットの制御・管制)
C
,50
万行結論と課題
結論
ソースコードの変形を用いるコードクローン検出 手法を提案した
実験では,提案する手法が
JDK
のライブラリか ら効果的にコードクローンを検出することが確認 された課題
構文によるクローン選別 クローン除去
クローン検出の保守プロセスでの利用
「横並びリスト」を補完する手段
むすび
複雑度メトリクスによるフォールト予測 再利用を考慮した構造メトリクス計測法
CK
メトリクスを開発プロセスの初期に計測する手法 フレームワークを用いた開発においてクラス分類を行 い予測精度を高める手法→ フレームワークによってクラス分類を行う手法を提案 し,実験によってフォールト修正時間予測精度を評価 コードクローン検出
オブジェクト指向プログラミング言語向けのコードク ローン検出手法
→ 検出手法を提案し,
JDK
のソースファイルに適用した
ドキュメント内
オブジェクト指向メトリクスを用いた開発支援法に関する研究
(ページ 32-44)