コードクローンの分類に基づくリファクタリングパターン集の提案に向けて
徳永 将 之†1松 下吉 田 則 裕†2 吉 岡 一
誠†1 井 上 克 郎†1樹†1

リファクタリングはコードクローンを取り除く代表的な手法である．我々は，コードクローンのリファクタリング作業を支援することを目的とし，詳細なコードクローンの分類に基づいたコードクローンのリファクタリングパターン集の作成を計画している．本稿では，我々の目指すリファクタリ
ングパターン集の作成方法について述べる．

Towards Collection of Refactoring Patterns Based on Code Clone Classification
MASAYUKI TOKUNAGA,†1 NORIHIRO YOSHIDA,†2
KAZUKI YOSHIOKA,†1 MAKOTO MATSUSHITA†1and KATSURO INOUE †1
Refactoring is a well-known way to remove code clones. Currently, we are planning to writea collection of refactoring patterns for removing code clone based on code clone classification.
In this paper, we describe a method to develop our intended collection of refactoring patterns.の作成方法について述べる．

1. は じ め に
コードクローンとは，互いに一致または類似したコード片を指し，プログラムの保守作業を困難にする
1)

2. Fowler のリファクタリングパターン
コードクローンのリファクタリングをする際に参照一因として指摘されている . コードクローン関係にされる代表的なパターンとして，Fowler の提案するある二つのコード片（クローンペア）およびコード片ものが挙げられる2) . Fowler はコードクローンの特徴の集合（クローンセット）は，リファクタリングによりを，クローンの位置関係とコードの差異に関して大ま一つにまとめることで取り除くことが出来る．リファ

かに 5 つに分類している．

クタリングする際には，リファクタリングの適用方法• 同一クラス内にある場合をまとめたリファクタリングパターンを利用すること• 兄弟クラス内にあり，完全に一致する場合が多い．しかし，既存の書籍では，コードクローンの• 兄弟クラス内にあり，似通っている場合特徴が詳細に分類されておらず，パターンの適用条件• 兄弟クラス内にあり，異なるアルゴリズムの場合およびリファクタリング作業の記述が不十分であるた• 関係のないクラス内にある場合

め，コードクローンのリファクタリング作業は困難な

Fowler は上記の 5 分類に対して適用可能なリファクものとなっている．そこで我々は，コードクローンのタリングパターンを提案している．しかし，5 種類と詳細な分類の作成およびそれに基づいたリファクタリいう分類数では，リファクタリングパターンを選択すングパターン集の提案を計画している．本提案によっるための条件およびリファクタリング作業の手順が曖て，経験の少ない作業者には困難なリファクタリング昧なものとなり，作業者の判断に依存する部分が多く作業を支援し，ソフトウェア保守の効率向上を目指す．

なる．そのため，リファクタリング作業経験の少ない

本稿では，我々の目指すリファクタリングパターン集

者にとって，その作業は困難なものとなる．

†1 大阪大学
Osaka University†2 奈良先端科学技術大学院大学 Nara Institute of Science andTechnology

3. 提案するパターンの作成手法
本節では，提案するリファクタリングパターンの作成手法に関して述べる．まず，コードクローンの分類

同クラス

数⋆1 のクローンセットをランダムで抽出する．最後に，兄弟クラス抽出したクローンセットの特徴を基に各分類木を作成

親子クラスする．図 1 に分類木の例を示す.

同パッケージ
無関係クラス

位置関係

兄弟クラス
他パッケージ

親子クラス
無関係クラス

図 1 分類観点「クローンペアの位置関係」に関する分類木
Fig. 1 Classification tree for the classification viewpoint
on “position relations between a clone pair”

要約
分類 クローンペアの差異
クローンペアの位置関係
クローン部の長さ引数となるオブジェクトの種類
戻り値の数
制御構造要素の有無
instanceof の有無
手順
実例
図 2 リファクタリングパターン記述項目
Fig. 2 Description framework of the proposed refactoringpattern

3.3 リファクタリングパターンの作成
作成した各分類木毎の分類の組合せに対して，コードクローンの特徴とリファクタリング方法をまとめたリファクタリングパターンを作成する．リファクタリ
ングパターンの記述は，リファクタリング作業の要約，コードクローンの特徴，作業手順および実例を記述する (図 2)．また，頻出するコードクローンの特徴からリファクタリングパターンを提案していき，リファクタリングパターンが提案されていない分類をリファクタリング出来ない分類とする．

4. 今後の課題
今後の課題として，3 節で示した作成手法によるリファクタリングパターンの考案，および評価実験を行う必要がある．評価実験は，作成した分類木およびリファクタリングパターンに関する評価を考えている．
分類木の評価は，全てのコードクローンの特徴に対する分類木の網羅率を計測する．具体的には，オープン観点を定義する．次に，定義した分類観点毎に分類木

ソース以外のコードからランダムで選び出した一定数を作成する．最後に，各分類木の分類の組合せに対しのコードクローンに対して分類木の網羅率を計測する．てリファクタリングパターンを記述する．

一方，リファクタリングパターンの評価は，リファク

3.1 分類観点の定義

タリングパターンの妥当性を評価するために，リファコードクローンを分類する観点（以降，分類観点）

クタリングパターン適用前後で動作の一貫性が保たれを定義する．分類観点は，開発者がリファクタリングているか否かの調査を行う．また，リファクタリング

対象のコードクローンに適用するパターンの選択に用パターンの有効性を評価するために，リファクタリンいる．本稿では，以下の 7 つの分類観点がパターンのグパターン適用に要する時間を計測する．加えて，提選択に必要であると考える．

案するリファクタリングパターンと Fowler のパター

• クローンペアの差異

ンの適用，およびリファクタリングパターンの有無に• クローンペアの位置関係よるバグの修正に要する時間の変化を調査する．

• クローン部の長さ• メソッド抽出の際に必要な引数オブジェクトの種類• メソッド抽出の際に必要な戻り値の数• 制御構造要素の有無• instanceof の有無
3.2 分類木の作成
定義した分類観点毎の分類を表す分類木を作成する．
そして，各分類木の分類の組合せは，一つのコードクローンの状態を表す．分類木を思索して作成する場合，頻出するコードクローンの特徴を特定する事が難しい

参考文献1) T. Kamiya, S. Kusumoto, and K. Inoue: CCFinder: A Multilinguistic Token-Based
Code Clone Detection System for Large Scale
Source Code , IEEE Transactions on Software
Engineering , vol.28 , No.7 , pp. 654–670 , 2002.
2) M. Fowler, K. Beck, J. Brant, W. Opdyke andD. Roberts : Refactoring: Improving the Design of Existing Code , Addison-Wesley Professional, 1999.

ため，実際のコードを参考に作成する．作成方法は，
まず，CCFinder を利用して Java 言語で記述された11 種類のオープンソースからクローンセット群を検出する．次に，検出されたクローンセット群から一定⋆1 本稿では，100 個のクローンセットを利用する．