リファクタリングを目的としたコードクローン分析ツール Aries
肥 後 芳 樹†楠 本 真 二†神 谷 年 洋††井 上 克 郎†Aries: Refactoring Supporting Tool based on Code Clone Analysis
Yoshiki Higo,† Toshihiro Kamiya,†† Shinji Kusumoto†and Katsuro Inoue†

1. は じ め に

コード中に存在するコードクローンを検出し，その位置を出力する. CCFinder はコードクローンをトーク

近年，コードクローンがソフトウェア保守を困難にンの列として検出する．そのため，検出したコードクしている 1 つの要因といわれている．コードクローン

ローンは必ずしも集約に適した単位とはなっていない．とはソースコード中に存在する同一，または類似したコード片のことである．コードクローンが生成される

3. コードクローン分析ツール: Aries

原因としてはさまざまな理由が考えれれるが，その最Aries3) は GUI ベースのコードクローン分析ツー

も大きな原因の 1 つとしてコピーアンドペーストによルであり，リファクタリング支援を目的として開発さる修正，拡張作業が挙げられる．あるコード片にバグれている．Aries は内部で CCFinder を用いている．

が含まれていた場合，そのコード片のコードクローン3.1 集約に適したコードクローンの検出全てに対して修正の是非を考慮する必要がある．このAries は CCFinder の検出したコードクローンかような作業は，特に大規模ソフトウェアでは非常に手ら， 構造的なまとまりを持った部分を集約に適した間のかかる作業である．
組込み開発のソフトウェアのソースコードは近年大コードクローンとして抽出する．図 1 はその例を示している．図 1 では，A と B の 2 つのコード片が示さ規模になっており，また，実行時のパフォーマンスをれている．A と B それぞれの灰色の部分は，その部稼ぐためにループを意図的に展開したコードクローン分が A と B の間の最大長のコードクローンであるが作り込まれる場合があるなど，コードクローンの発ことを示している．コード片 A ではいくつかのデー生は避けられない問題となっている．本稿では，我々タがリスト構造の先頭から順に連続して格納されていが開発してきたコードクローン検出ツール CCFinder

る．一方コード片 B では，リスト構造の後方から順にとリファクタリングを目的としたコードクローン分析連続してデータが格納されている．これら 2 つのコーツール Aries を紹介する．

2. コードクローン検出ツール: CCFinder
CCFinder2) は与えられたソフトウェアのソース

ド片には，リスト構造を扱う共通のロジック（for 文）が含まれているが，コード片の最初と最後には，偶然クローンとなった部分（代入文）も含まれてしまっている．集約を目的とした場合，灰色の部分全体よりもfor 文のみをコードクローンとして抽出する方が望まし† 大阪大学大学院情報科学研究科
Graduate Scholl of Information and Science Technology, Osaka University†† 産業技術総合研究所情報技術研究部門
Infomation Technology Research Institute, Advanced
Industrial Science and Technology

い．Aries ではこのような場合，灰色で示されたコー
ドクローンから構造的なまとまりを持った部分，つまり for 文の部分のみを抽出する．

3.2 メトリクスを用いた特徴づけ
Aries は集約に適したコードクローンがどのように  9* ! 1 #&%' 1 (L%*' 1 ++6.
/01 2 3 46578/ #9 : / !;) /=<1 : /> -? 02 2 *) : 1 @7 *, <61 : / --,'/01 2 #9 <1 : /> - /,01 2 3 4657A8/ '/01 2 3 461 # 1 '/01 2 3 46578/ #DFE <*< 'GM& 3.3 絞り込み例: Extract Method
これまでに述べたことから，リファクタリングパターン “Extract Method” を行なう際の条件として，は例えば以下のものが上げられる．

(条件 1) 対象となる単位は文単位，(条件 2) DCH(S) の値が 0，(条件 3) N SV (S) の値が 1 以下，NPORQ SUT“Extract Method” とはメソッド内のコード片に対Y Z[ \ ]_^a`Ab]_c_]Ab]ddefVg hi jgg guAi gv hj jix
ui gg hi j k l munpo i g^qv \ g r hi [ j st g r e w Z t\ r n ZY \ r e e bg hi j ^q\ r e k l mnyo bg hi j k l ]_^a]Ag buAuk l mnpo ^{z | b}~R 

して適用されるので，(条件 1) が必要である．また，全てのコードクローンが同一のクラス内に存在する場合は容易に集約が可能であるので，(条件 2) を設定している．コードクローンの内部において，外部定義変数に対して代入を行なっている場合は，その変数を引数として与え，返り値として返し，メソッドの呼び出          ! "$#&%'"$(&)*'",++*.
/01 2 3 46578/ #9 : / !;) /=<1 : /> -? 02 2 *) : 1 @7 *, <61 : / --,'/01 2 #9 <1 : /> - /,01 2 3 4657A8/ '/01 2 3 4 "$#B"C'/01 2 3 46578/ #DFE <*< 'G  IHFJFKK
NVORQ SXWし元に反映させなければならない．このような変数が複数あった場合は新たなデータクラスを定義し，そのオブジェクトを介して値を受け渡す必要がある．しかし，もしこのような変数が１つの場合は単に return
文を用いて返すだけで良く，容易に集約を行なうことができるので，(条件 3) を考慮している．
この条件を用いることによって，ユーザは “ExtractMethod” が容易に適用可能であるクローンセットを得

図 1 コードクローン集約の例
Fig. 1 Example of merging two code fragments

ることができる．しかし Aries はその集約の有効性までは考慮していない．Aries が提示したクローンセッ
トを集約するか否かはユーザが判断する必要がある．

除去できるのかを予測するために，メトリクスを用いてそれらを特徴づける．そして，それらが既存のどの4. ま と めリファクタリングパターン1) に適用可能であるかを予

本稿では，コードクローン検出ツール CCFinder お測する．この節では Aries が用いているメトリクスのよびコードクローン分析ツール Aries について述べうちのいくつかを簡単に紹介する．

た．これらを用いてソースコード中に含まれるコード

NRV(S):クローンセット S に含まれるコード片

クローンを検出し，対話的に分析をすることで，効率が，どの程度その外部で定義された変数に対し的にコードクローンを集約することが可能である．

☆て参照を行っているかを表す．このメトリクスは謝辞 本研究は，文部科学省 科学研究費補助金 特

コード片とその周囲との結合度を表しており，値別研究員奨励費 (課題番号：16・8351) の助成を得た．

が低いほど集約が容易である．

NSV(S):N RV (S) と同様，コード片とその周囲との結合度を表す．N RV (S) との違いは，参照ではなく代入をカウントしている点である．

DCH(S):クローンセット S に含まれるコード片がどの程度クラス階層中に広がっているかを表す．
例えば，全てのコード片がある一つのクラス内に含まれる場合は 0，あるクラスとその直接の子ク
ラス内に含まれる場合は 1 と，コード片が広い範囲に存在するほど，この値も大きくなる．
☆

”クローンセット”とは，互いに類似したコード片の集合を現す．

参考文献

1) M. Fowler, Refactoring: improving the designof existing code, Addison Wesley, 1999.
2) T. Kamiya, S. Kusumoto, and K. Inoue,
CCFinder: A multi-linguistic token-based code
clone detection system for large scale sourcecode IEEE Transactions on Software Engineering, vol.28, no.7, pp.654-670, Jul. 2002.
3) 肥後芳樹, 神谷年洋, 楠本真二, 井上克郎 “コードクローンを対象としたリファクタリング支援環境”, 電子情報通信学会論文誌, Vol.88-D-I, No.2,pp.1868-195, Feb. 2005.