情報処理学会論文誌

Vol.54 No.2 883–893 (Feb. 2013)

コードクローン変更管理システムの開発と実プロジェクトへの適用
山中 裕樹1,a)崔 恩瀞1

吉田 則裕2

井上 克郎1

佐野 建樹3

受付日 2012年5月12日, 採録日 2012年11月2日

概要：ソフトウェア保守における大きな問題の 1 つとしてコードクローンが指摘されている．コードク
ローンとは，ソースコード中に，互いに一致または類似した部分を持つコード片のことである．コードク
ローンに対する主な保守作業として，クローンセット（互いにコードクローンとなっているコード片の集合）に含まれるすべてのコード片を一貫して編集する同時修正と，クローンセットを 1 つのサブルーチンにまとめる集約があげられる．本研究では，コードクローンに対する保守作業を支援することを目的としたコードクローン変更管理システムの開発を行った．そして，企業で行われているソフトウェア開発に適用することによって，本システムの有用性を確かめることができた．
キーワード：コードクローン，ソフトウェア保守，変更管理A Development of Clone Change Management System
and Its Application to Actual Project
Yuki Yamanaka1,a)Eunjong Choi1

Norihiro Yoshida2

Katsuro Inoue1

Tateki Sano3

Received: May 12, 2012, Accepted: November 2, 2012

Abstract: Code clone is one of the major problems for software maintenance. A code clone is a code fragment that has identical or similar portion in source code. In order to manage code clones, software developers
should consider consistent modification of clone sets (i.e., a set of code clones identical or similar to eachother) and merging clone set into a single function. In this study, we developed a code clone change management system for clone maintenance. Moreover, we confirmed the usefulness of the developed system byapplying to industrial software development.
Keywords: code clone, software maintenance, change management

1. まえがきドペーストなどによって発生する [1]．コードクローンに対する主な保守作業として，同時修正と集約があげられ

ソフトウェアの保守工程における大きな問題の 1 つとる．同時修正とは，クローンセット（互いにコードクロー

してコードクローンが指摘されている．コードクローンとンとなっているコード片の集合）に含まれるすべてのコーは，ソースコード中に互いに一致または類似した部分を持

ド片を一貫して編集することである．たとえば，クローン

つコード片のことであり，主にソースコードのコピーアン

セット中の 1 つのコード片に欠陥が含まれている場合，そ

1
2

3
a)

のコード片とコードクローンになっている他のコード片も
大阪大学
Osaka University, Suita, Osaka 565–0871, Japan
奈良先端科学技術大学院大学
Nara Institute of Science and Technology, Ikoma, Nara 630–
0192, Japan
日本電気株式会社
NEC Corporation, Minato, Tokyo 108–8001, Japany-yuuki@ist.osaka-u.ac.jp

c 2013 Information Processing Society of Japan

一貫した修正を行う必要が考えられる．また，集約とはク
ローンセットを 1 つのサブルーチンにまとめることである．集約を行うことによって，ソースコード中のコードク
ローンを削減することが可能である．
上述したコードクローンに対する保守作業を効率良く行

883

情報処理学会論文誌

Vol.54 No.2 883–893 (Feb. 2013)

うために，コードクローンの変更管理が必要である．たと対をクローンペア（Clone pair）と呼ぶ．また，クローン

えば，欠陥を含むクローンセット中の一部のコード片が編

ペアにおいて推移関係が成り立つコードクローンの集合を集された場合，同時修正が行われておらず，修正漏れの可クローンセット（Clone set）と呼ぶ．

能性がある．また，ソフトウェア開発企業では，システム
テストに大きなコストを要した場合，コードクローンを集

2.2 コードクローン検出ツール CCFinder

約し再度システムテストを行うということは，コスト面のソフトウェアの規模が大きい場合，ツールを用いた自動問題から避けられることが多い．したがって，システムテ的なコードクローン検出が行われる．本研究では，字句解スト前に発生したコードクローンを発見し，集約すること

析ベースの検出ツールである CCFinder [2] を用いてコーで，大きなコストをかけずにコードクローンを削減するこ

ドクローンの検出を行っている．CCFinder は，字句解析とが可能となる．しかし，検出されたコードクローンの量

でソースコードをトークン列に変換し，変換処理で変数名が膨大となる場合，同時修正が行われていないクローンや関数名などを同一のトークンに変換する．そして，閾値

セットや，新たに発生したコードクローンなどの変更履歴

以上の長さの共通トークン列を探索し，すべてのコードクを人手で確認することは困難である．

ローンの対のリストを出力する．

そこで本研究では，コード片の追加，編集，削除といっ

CCFinder を用いることによって，空白やタブの有無なた変更履歴に基づいたコードクローンの分類手法を提案す

どのコーディングスタイルを除いて完全に一致するコード

る．そして，分類に基づいて，保守作業の対象となるコークローンだけではなく，ユーザ定義名や一部の予約語のみ

ドクローンの情報を定期的に開発者に通知するコードクが異なるコードクローンを検出することが可能である [3]．

ローン変更管理システムの開発を行った．本システムの利
用者は，コードクローンに対して保守作業が必要であるか否かの判断を行うソフトウェア開発者である．また，評価

2.3 コードクローンの変更管理の必要性
コードクローンに対する主な保守作業として，以下の項

実験として，開発したシステムを企業で行われているソフ

目があげられる．

トウェア開発に約 40 日間適用した．実験の結果，本シス

同時修正：クローンセット中のコード片を一貫して編集す

テムを用いることによって，開発者は保守作業の対象となる 11 個のクローンセットを発見することができた．
本稿の構成は次のとおりである．2 章では，本研究の背景を述べる．3 章では，コードクローンの分類手法についること．
集約：クローンセット中のコード片に共通するロジックを実装するサブルーチンを作り，各コード片をそのサブルーチンの呼び出し文に置き換えること．

て説明する．4 章では，本研究で開発したコードクロー

位置情報の記録：ソースコード中にコメントとして，コーン変更管理システムの概要について説明する．5 章では，

ドクローンとなっている他のコード片の位置を書く

コードクローン変更管理システムの実プロジェクトに対すこと．

る適用実験について述べる．6 章では，本研究の関連研究

上述したコードクローンに対する保守作業を効率良く行について述べる．7 章では，本研究のまとめと今後の課題

うために，コードクローンの変更管理が必要である．たとについて述べる．

えば，欠陥を含むクローンセット中の一部のコード片が修

2. 背景

正された場合，そのクローンセットに含まれる他のコード片についても同様の修正を検討する必要がある．また，ソ

本章では，本研究の背景として，コードクローンとそのフトウェアのテスト終了後におけるクローンセットの集約検出ツール CCFinder，および，コードクローンの変更管

は，不具合を生む可能性がありコストが大きい．新たに発理の必要性について述べる．

生したコードクローンを集約の対象とすることで，不具合を生むコストを削減することが可能である．また，集約す

2.1 コードクローン
コードクローン（Code clone）とは，ソースコード中にることが困難である場合，新たに発生したコードクローン
は位置情報の記録の対象になる可能性がある [4]．

存在する，互いに一致または類似した部分を持つコード片本研究で開発を行ったコードクローン変更管理システのことである [1]．一般的に，コードクローンの存在はソフ

ムでは，同時修正が行われていないクローンセットや，新トウェアの保守を困難にするといわれている．たとえば，

たに発生したコードクローンなどの変更履歴に基づいて，

コードクローンとなっているコード片中に欠陥が存在する

コードクローンの分類を行っている．開発者はこれらの分場合，そのコード片と一致または類似した他のコード片に類結果を見ることによって，保守作業が必要であるコード

ついても同様の欠陥が含まれている可能性があり，確認がクローンを把握することが可能となる．たとえば，同時修必要である．

正が行われていないクローンセットに含まれるコード片

一般的に，互いに一致または類似したコードクローンのc 2013 Information Processing Society of Japanは，修正漏れの可能性があり，一貫した修正を行うか否か

884情報処理学会論文誌

Vol.54 No.2 883–893 (Feb. 2013)

判断する必要がある．また，新たに発生したコードクローンに対して，集約，および，位置情報の記録を行うか否か判断する必要がある．
もし検出されたコードクローンの量が膨大となる場合，その中から，同時修正が行われていないクローンセットや新たに発生したコードクローンなどの変更履歴を人手で確(a) ケース 1

認することは困難である．また，ほとんどのコードクロー

図 1(b) ケース 2

コードクローンの親子関係

Fig. 1 Parent-child relationship of code clones.

ンは短期間の開発では変更されない [5]．そのため，バージョン間のコードクローン検出結果を人手で比較すること
で，変更されたコードクローンのみを発見することは非効率的な作業であるといえる．本システムを用いてコードク
ローンの変更管理を行うことによって，保守作業の対象となるコードクローンの確認コストを削減することが可能になると考えられる．

と定義する．
図 1 はコードクローンの親子関係の例を示している．
図 1 (a) では，コードクローン A ∈ Ct−1 の前で 4 行の挿入と 2 行の削除が行われているため，A に対応するコード
片 B の開始行番号と終了行番号は，それぞれ A の開始行
番号と終了行番号に 2 行追加した値となる．B が Ct に含3. コードクローンの分類手法
本研究では，保守作業の対象となるコードクローンの情報を開発者に提供するため，コード片の追加，編集，削除

まれる場合，コードクローン A の子クローンはコードク
ローン B となる．また，図 1 (b) では，コードクローン Aの前で編集操作は行われていないため，対応するコード片

といった変更履歴に基づいたコードクローンの分類手法を

B の開始行番号は A の開始行番号と同じになる．一方，A提案する．以下に，本手法の手順を示す．入力は，分析のに 2 行の挿入が行われているために，B の終了行番号は A

対象となる 2 バージョンのソースコード Vt−1 ，Vt である．

Vt は最新バージョンのソースコード，また，Vt−1 は 1 つ
前のバージョンのソースコードを表す．また，Vi のソース
コードに含まれるすべてのコードクローンの集合を Ci と表す．
手順 1：Vt−1 ，Vt 全体に CCFinder を適用し，コードクロー
ン集合 Ct−1 ，Ct の検出を行う．
手順 2：コードクローンの変更履歴を分析するために，Ct−1に含まれるコードクローンと Ct に含まれるコードクの終了行番号に 2 行追加した値となる．B が Ct に含まれる場合，コードクローン A の子クローンはコードクローン

B となる．このように，あるコードクローン A ∈ Ct−1 に対応するコード片をその開始行番号と終了行番号の対応に基づいて求め，そのコード片 B がコードクローンとなっている場合，コードクローン A とコードクローン B の間に親子関係を定義する*1 ．

3.2 コードクローンの分類
まず最初に，任意のコードクローン X について以下の 4

ローンの対応関係を求める必要がある．そこで，3.1 節
で説明する定義に基づいて，コードクローンの親子関係を求める．
手順 3：3.2 節で説明する定義に基づいて，2 バージョンのソースコードに含まれるすべてのコードクローンを分類する．

つの命題を定める．

• P (X)：X の親クローンが存在する．
• C(X)：X の子クローンが存在する．
• M (X)：前バージョンから X が編集されている．
• CP (X)：X の親クローンと X がクローンペアである．
本手法では，これらの命題を用いて 2 バージョン間の手順 4：3.3 節で説明する定義に基づいて，2 バージョンのソースコードに含まれるすべてのクローンセットを分類する．

ソースコード Vt−1 ，Vt に含まれるすべてのコードクロー
ンを以下の 5 項目に分類している．

Stable Clone：P (X) ∧ ¬M (X) を充足するコードクロー
ン X ∈ Ct とその親クローンを指す．すなわち，Stable

3.1 コードクローンの親子関係

Clone は，2 バージョン間で変更がないコードクロー

コードクローンの変更履歴を分析するためには，Ct−1 に含まれるコードクローンと Ct に含まれるコードクローンの対応関係を求める必要がある．本手法では，文献 [6] のンを意味する．

Modified Clone：P (X) ∧ M (X) ∧ CP (X) を充足する
コードクローン X ∈ Ct とその親クローンを指す．すコードクローンの履歴分析と同様の手法を用いてコードク

なわち，Modified Clone は，変数名の変更などの編集

ローンの親子関係を求める．ここでは，あるコードクロー
ン A ∈ Ct−1 に対応するコードクローンが B ∈ Ct である
場合，コードクローン B をコードクローン A の子クローン，コードクローン A をコードクローン B の親クローン

c 2013 Information Processing Society of Japanがなされたが，編集後も同じクローンセットに属する*1

コードクローンの親子関係は 2 バージョン間での位置の対応関係を表しており，それらがクローンペアの関係にあるとは限らな
い．

885

情報処理学会論文誌

Vol.54 No.2 883–893 (Feb. 2013)

Changed Clone Set：Vt−1 ，Vt の 2 バージョンにわたって存在するクローンセットで，属するコードクローンに 1 つでも Stable Clone 以外のコードクローンが含まれるクローンセットを指す．たとえば，図 2 のク
ローンセット B は一部のコードクローンに対して変数名が変更されたため，Modified Clone に分類されている．この場合，一方の Stable Clone に対しても同様の編集が必要となる可能性がある．また，クローンセッ
ト E では，一部のコードクローンに対して文の挿入がなされたため，Vt では異なるクローンセット F を形成している．この場合，Vt 中のクローンセット E に対しても，クローンセット F と同様に文の挿入が必要となる可能性がある．このように，同時修正がなされておらず，修正漏れの可能性があるクローンセットはChanged Clone Set に分類される．
New Clone Set：Vt のみに存在するクローンセットを指す．たとえば，図 2 のクローンセット C のようにコー
ド片のコピーアンドペーストなどによって新たに発生したクローンセットを意味する．2.3 節で述べたよう
図 2 コードクローン・クローンセットの分類例に，新たに発生したクローンセットは集約，あるいは，

Fig. 2 Example of categorization of code clones and clone sets.

位置情報の記録の対象となる可能性がある．したがって，開発者は New Clone Set に分類されたクローン
セットを確認することによって，保守作業の対象とな

コードクローンを意味する．

Moved Clone：P (X)∧M (X)∧¬CP (X) を充足するコー
ドクローン X ∈ Ct とその親クローンを指す．すなわ

るコードクローンを発見することが可能となる．

Deleted Clone Set：Vt−1 のみに存在するクローンセッ
トを指す．たとえば，図 2 のクローンセット D のよち，Moved Clone は，文の挿入など大幅な編集がなさ

うに集約などによって除去されたクローンセットを意れたため，異なるクローンセットに属するようになっ味する．したがって，開発者は Deleted Clone Set にたコードクローンを意味する．

分類されたクローンセットを確認することによって，Added Clone：¬P (X) を充足するコードクローン X ∈集約が行われたクローンセットを確認することが可能

Ct を指す．すなわち，Added Clone は，コード片のとなる．

コピーアンドペーストなどによって Vt で新たに発生したコードクローンを意味する．

4. コードクローン変更管理システム

Deleted Clone：¬C(X) を 充 足 す る コ ー ド ク ロ ー ン
X ∈ Ct−1 を指す．すなわち，Deleted Clone は，クローンセットの集約やコード片の削除などによって除去されたコードクローンを意味する．

3.3 クローンセットの分類
本手法では，変更履歴に基づいて，2 バージョン間のソースコード Vt−1 ，Vt に含まれるすべてのクローンセットを
以下の 4 項目に分類している（図 2*2 ）．

Stable Clone Set：図 2 のクローンセット A のように，
Vt−1 ，Vt の 2 バージョンにわたって存在するクロー
ンセットで，属するコードクローンがすべて Stable

本研究では，3 章で説明したコードクローンの分類に基づいて，保守作業の対象となるコードクローンの情報を開発者に提供するコードクローン変更管理システムの開発を行った．分析結果の提供方法として，テキストベースの電子メールによる通知とウェブベースのユーザインタフェー
スの提供を実現している．
コードクローン変更管理システムの処理手順を以下に示す（図 3）．なお，本システムでは，ソフトウェア開発に

CVS *3 ，Subversion *4 などの版管理システムを用いることを想定している．
手順 1：最新バージョンのソースコード Vt を版管理シス
テムから取得する．Vt−1 は過去のバージョンのソース

Clone に分類されるクローンセットを指す．
*2

図 2 の Vt−1 に含まれるコードクローンの分類に関しては，その子クローンが Vt に存在する場合，子クローンと同じ分類となる（3.2 節参照）．

c 2013 Information Processing Society of Japan

コードであるため，前回の分析時に最新バージョンと*3*4

http://cvs.nongnu.org/
http://subversion.apache.org/

886

情報処理学会論文誌

Vol.54 No.2 883–893 (Feb. 2013)(a) プロジェクト情報(a) クローンセット一覧
図 4

テキストファイルの出力例

Fig. 4 Example of text-based visualization.

• プロジェクト情報（図 4 (a)）– ファイル情報：総ファイル数，追加ファイル数，削除ファイル数，コードクローンを含むファイル数を示す．

– クローンセット分類情報：クローンセットの各々の分類数を示す．

– コードクローン分類情報：コードクローンの各々の分類数を示す．

• クローンセット一覧（図 4 (b)）
図 3Changed Clone Set，New Clone Set，Deleted Clone

コードクローン変更管理システムの処理の流れ

Fig. 3 Process of code clone change management system.

Set に分類されたクローンセットの一覧が出力されして分析したソースコードを Vt−1 として用いる．

ローンセットの一例を示している．各々のクローン

る*6 ．図 4 (b) は Changed Clone Set に分類されたク

手順 2：3 章で説明した手法で，変更履歴に基づいて Vt−1

セットに関して，以下の情報を出力している．

と Vt のソースコードに含まれるコードクローン，お– クローンセット ID

よび，クローンセットの分類を行う．

– クローンセットに属するコードクローンの一覧

手順 3：手順 2 の分類結果に基づいて，HTML ファイルと– コードクローンとなっているコード片

電子メールによる通知のためのテキストファイルの生成を行う．

4.2 ウェブユーザインタフェースの提供

本システムでは，手順 3 で生成したテキストファイルを

ウェブユーザインタフェースの例として，Apache Ant

添付した電子メールを送信することによって，変更された

プロジェクトのある 2 バージョン間に適用した結果を図 5

コードクローンの存在を開発者に認識させる．そして，開に示す．本稿では，クローンセット一覧ページとソース

発者はウェブユーザインタフェースを用いて，実際に変更

ファイルページについて説明する．

されたコードクローンに対する保守作業の必要性の判断を• クローンセット一覧ページ（図 5 (a)）

行う．

2 バージョン間に含まれるクローンセットの一覧が，Changed Clone Set，New Clone Set，Deleted Clone

4.1 電子メールを用いた通知

Set，Stable Clone Set の順で表示される．また，各々

電子メールに添付されるテキストファイルの例として，のクローンセットに関して，属するコードクローン

Apache Ant プロジェクト*5 のある 2 バージョン間に適用の一覧が表示される．各々のコードクローンは，ID，した結果を図 4 に示す．テキストファイルには以下の情報

分類，コードクローンが含まれるソースファイル名，が出力される．
*6*5

http://ant.apache.org/

c 2013 Information Processing Society of Japan

Stable Clone Set は変更がないクローンセットであるため，ユー
ザに提供する価値は低くテキストベースの通知では省略している．

887

情報処理学会論文誌

Vol.54 No.2 883–893 (Feb. 2013)が送付される．

( 2 ) プロジェクトメンバは，電子メールに添付されたテキ
ストファイルによって，同時修正が行われていないク
ローンセットや，新たに発生したコードクローンなどの変更を確認する．確認の例を以下に示す．

• Changed Clone Set に分類されたクローンセットで
Stable Clone が含まれるものは，同時修正が行われておらず，不具合を含む可能性がある．たとえば，
図 4 (b) では，クローンセット中の 1 個のコード片のみが編集されている．このようなクローンセットは一貫した修正が必要となる可能性がある．
(a) クローンセット一覧ページ• New Clone Set に分類されたクローンセットは，2.3 節
で述べたように，集約，および，位置情報の記録が必要となる可能性がある．

• Deleted Clone Set に分類されたクローンセットを確認することで，計画どおりにクローンセットの集約が行われているか把握することが可能となる．

( 3 ) 電子メールによる通知で，同時修正が行われていない
クローンセットや新たに発生したコードクローンが見つかった場合，図 5 に示すようなウェブユーザインタ
フェースを用いて，周囲のソースコードを見ながら実際に保守作業が必要であるか否か判断する．

( 4 ) 保守作業が必要であると判断したコードクローンに対して，実際に保守作業を行う．
(b) ソースファイルページ

5. 適用実験

図 5 ウェブユーザインタフェースの例

実験として，企業で行われているソフトウェア開発に対Fig. 5 Example of web-based user interface.

してコードクローン変更管理システムの適用を行った．適用実験の目的は以下のとおりである．

ソースファイル中のコードクローンの位置が表示さ• 開発者がコードクローン変更管理システムを用いて保れる．Modified Clone，Moved Clone，Added Clone，

守作業が必要となるコードクローンを発見することがDeleted Clone の 2 バージョン間で変更されたコードク

できたか，本システムの有用性を評価する．

ローンはハイライトされ，見やすくなっている．コー• 保守作業の対象となる可能性が高いコードクローンをドクローン ID をクリックすることによって，そのコー開発者に提示できるようにシステムを改善するため，

ドクローンが含まれるソースファイルページへ移動

評価実験において保守作業の対象となったコードク

する．

ローンの特徴を調査する．

• ソースファイルページ（図 5 (b)）
コードクローンが含まれるソースファイルが表示され5.1 実プロジェクトに対する評価実験

る．コードクローンとなっているコード片は黄色の背5.1.1 実験内容

景色が付いている．“+” は追加行を，“-” は削除行を示し，削除行は灰色の背景色がついている．

本研究では，日本電気株式会社のウェブアプリケーショ
ンソフトウェア開発を対象に評価実験を行った．対象としたソフトウェアの実装言語は Java であり，ファイル数は4.3 本システムの利用例
コードクローンの変更管理を行う際の本システムの利用

約 350，行数は約 12 万である．コードクローン変更管理
システムを 2011/12/18 から 2012/01/31 の約 40 日間適用例を以下に示す．

し，1 日ごとに電子メールによる通知とウェブユーザイン( 1 ) 電子メールによる通知により，開発プロジェクトメン

タフェースの更新を行った．なお，本実験では CCFinder

バに対して，一定時間ごとに，図 4 に示すようなコーのトークンの閾値をデフォルトである 30 に設定した．そドクローンの分類結果が出力されたテキストファイル

して，コードクローン変更管理システムの有用性を評価す

c 2013 Information Processing Society of Japan

888

情報処理学会論文誌

Vol.54 No.2 883–893 (Feb. 2013)

表 1 保守作業の対象となったクローンセット

Table 1 Clone sets that required additional maintenance.
検出日

保守実施日

分類

Q1

Q2

RAD(S)LEN(S)RNR(S)

NIF(S)

POP(S)DFL(S)

1’11/12/28’12/01/05

New

NO

集約

0

141

78

1

2

141

2

’11/12/28’12/01/05

New

NO

集約

1

36

83

2

2

36

3

’12/01/13

-

New

NO

集約

1

48

95

7

7

288

4

’12/01/13

-

New

NO

位置情報の記録

3

54

90

2

2

54

5

’12/01/13

-

New

NO

集約

0

52

61

1

2

52

6

’12/01/13’12/01/17

New

NO

集約

0

57

94

1

2

57

7

’12/01/13

-

New

NO

集約

0

32

93

1

2

32

8

’12/01/16

-

New

NO

集約

0

37

83

1

2

37

9

’12/01/16

-

New

NO

集約

2

32

84

2

3

64

10

’12/01/18

-

New

NO

集約

0

53

90

1

2

53

11

’12/01/24

-

New

NO

集約

0

72

86

1

3

144

るために，アンケートを実施した．アンケートの対象者は，

ン 2）の 2 つのコードクローンから構成されている．これJava 言語の経験が 10 年以上のプロジェクトマネージャでらのコードクローンは，呼び出すメソッド名のみが異なっあり，本プロジェクトにおいてコードクローンに対する保ている．また，クローンセット 2 は，最近参照されたコ

守作業の必要性の判断を行っている．主なアンケート内容

ンテンツをリストに追加する機能（コードクローン 1）とを以下に示す．

ユーザから指定されたコンテンツをリストに追加する機能

Q1 保守作業の対象となったコードクローンの存在をす（コードクローン 2）の 2 つのコードクローンから構成され

でに知っていたか

Q2 どのような保守作業を行ったかている．これらのコードクローンは，変数名のみが異なっている．このような呼び出すメソッド名や変数名のみが異• 集約なっているクローンセットは，今後同時修正が必要となる• 同時修正可能性があり，集約の対象となると考えられる．また，集• 位置情報の記録

約するコストが大きい場合は位置情報の記録が必要である• その他と考えられる [4]．

本実験では，アンケートの対象者であるマネージャが

図 6 は実際に集約が行われた 2 つのクローンセットの例

コードクローン変更管理システムを用いて，各々のコードであるが，他のクローンセットについても，フィードバッ

クローンの分類に対して保守作業が必要となるか否かの判クから，呼び出すメソッド名や変数名のみが異なっている断を行う．そして，実際に開発者に対して保守作業の指示ため，今後同時修正が必要となる可能性があると判断されを出す．

ている．したがって，マネージャによって今後保守作業に

5.1.2 結果と考察

おいて悪影響を及ぼすと判断されたため，集約，および，実験の結果，アンケート対象者であるマネージャは，コー

位置情報の記録の対象となった．

ドクローン変更管理システムを用いて保守作業の対象とな

上述したように，開発者は本システムを用いて 11 個のる 11 個のクローンセットを発見することができたことが保守作業の対象となったクローンセットを発見することが分かった．表 1 左部は，保守作業の対象となった各々のクできた．単一バージョンのソースコードに対してコードク

ローンセットに対するアンケートの回答を示している*7 ．

ローン検出を行う場合，集約が困難であったり，悪影響をQ1 に対する回答はすべて “NO” であり，これらのクロー及ぼさないなどの理由から集約が行われなかったクローン

ンセットは本システムを用いて新たに発見することができセットも検出される [7]．したがって，以前にも検出され，たものである．

すでに保守作業が必要か否か判断されたコードクローン

図 6 に，本アンケートで集約の対象となったクローンが多く含まれる可能性がある．図 7 は，本実験におけるセットの例を示す*8 ．クローンセット 1 は，コンテンツの

1 日ごとのクローンセット数の遷移と，それぞれのクロー

移動機能（コードクローン 1）とコピー機能（コードクロー

ンセットの分類数を示している．この図からも，実際に変*7*8

今回の適用実験では，納期が近く集約するためのコストが大きいと判断されたため，保守作業が実施されなかったクローンセッ
トが存在する．保守実施日が記述されていないクローンセット
は，’12/01/31 時点で保守作業が実施されていないものを意味している．
本例では，機密情報保護のため実物のソースコードに対して変数名の変更などの整形を施している．

c 2013 Information Processing Society of Japan更があったクローンセットは最大でも全体の 8.9%であり，大半が Stable Clone Set に分類されていることが分かる．

Stable Clone Set に分類されたクローンセットに対して再び保守作業が必要が否かを人手で判断することは冗長になり，非効率的であると考えられる．アンケート結果から889

情報処理学会論文誌

Vol.54 No.2 883–893 (Feb. 2013)

図 6 集約の対象となったクローンセットの例

Fig. 6 Example of a clone set that needs merging.

図 7

クローンセットの分類

Fig. 7 Categorization of clone sets.

も，実際に New Clone Set に分類されたクローンセットがなったのはその中の 11 個である．そこで，より保守作業

集約の対象として判断されていることが分かる．本システの対象となる可能性が高いクローンセットを開発者に提示

ムを用いて，Stable Clone Set 以外に分類された各クローできるようにシステムを改善するため，保守作業の対象とンセットに対してのみ，保守作業が必要か否か判断するこなったコードクローンと，保守作業の対象とはならなかっとによって，全体のコードクローンの確認コストを削減でたコードクローンの特徴の違いについて調査を行った．

きたと考えられる．

5.2.1 調査方法
本調査では，Gemini [8], [9] を用いてクローンセットメ

5.2 保守作業の対象となったコードクローンの調査
本実験では，適用期間中に 119 個のクローンセットが

New Clone Set に分類されたが，実際に保守作業の対象とc 2013 Information Processing Society of Japan

トリクスの抽出を行った．あるクローンセット S が与えられたとき，Gemini で分析することができるクローンセッ
トメトリクスを以下に示す．

890

情報処理学会論文誌

Vol.54 No.2 883–893 (Feb. 2013)

表 2

マンホイットニー U 検定の結果

Table 2 Result of Mann-Whitney U test.
RAD(S)LEN(S)RNR(S)

NIF(S)

POP(S)DFL(S)

p値

0.51060.24190.03680.59550.27930.2283

帰無仮説

採択

採択

棄却

採択

採択

採択

RAD(S)：クローンセット S 中のコード片が含まれるファイル集合が，ファイルシステムの中でディレクトリ構
造的にどれだけ分散しているかを表す．

LEN(S)：クローンセット S 中のコード片のトークン数の平均値を表す．

RNR(S)：クローンセット S 中のコード片がどの程度非繰返しであるかを表す．f をクローンセット S 中のコード片，T OC(f ) をコード片 f を構成している字句の数，T OCrepeated(f ) をコード片 f を構成している字句のうち，繰返し要素の字句の数とする．このとき
図 8

RNR (S) メトリックの比較

RNR(S) は以下の式で表される．
f ∈S T OCrepeated(f )
× 100
RN R(S) = 1 −f ∈S T OC(f )ら，RNR(S) のメトリック値が比較的大きいクローンセッ

RNR(S) が低い場合，“ソフトウェア開発・保守を行う

トが集約の対象として選ばれていることが分かる．開発者

視点でコードクローン情報を扱う場合に特に対象とすからも，変数宣言の羅列などのコードクローンが多く検出る必要がないもの” である可能性が高いことが分かっされているとフィードバックがあった．これらの結果かている [10]．

ら，RNR(S) メトリック値によるフィルタリングを行うこNIF(S)：クローンセット S 中のコードクローンを所有するファイルの数を表す．

POP(S)：クローンセット S 中のコード片単位の要素数を表す．

DFL(S)：クローンセット S 中の全コード片を集約した場
合，減少が予測されるトークン数を表す．

Fig. 8 Comparison of RNR (S) metric.

とによって，集約の対象となる可能性が高いクローンセットを開発者に提示することが可能となると考えられる．

6. 関連研究
本研究と同様にコードクローンの履歴を調査する研究として，文献 [11] がある．この研究では，クローンセットの履歴に対してモデルを定義し，長期間にわたって分析する

そして，保守作業の対象のクローンセットと保守作業のことによってコードクローンの存在する期間とその特徴の対象以外のクローンセットの各々のメトリクス値の分布に関係について調査を行っている．文献 [11] では，分析の対して違いがあるか否か，マンホイットニー U 検定を用い対象となっているのはクローンセットのみであるが，本研て調査した．なお，同時修正が必要であったクローンセッ

究ではコードクローンも詳細に分類を行っている．また，

トは確認できなかったため，集約の対象となったクローン

本研究はソフトウェア開発者への保守作業の対象となるセットについてのみ分析を行う．ここでは，“集約対象の

コードクローンの情報の提供を目的としている．そのため，クローンセットと集約対象以外のクローンセットの間でメ

コードクローン変更管理システムの開発を行い，企業で行

トリクス値による違いがない” という帰無仮説が棄却されわれているソフトウェア開発に適用することによって，そるか否か，有意水準 0.05 で片側検定を行った．

の有用性を評価している．

5.2.2 調査結果

また，本研究と同様に，企業のソフトウェア開発に適用

表 1 の右部に保守作業の対象となったクローンセットのした研究として文献 [10], [12] があげられる．文献 [10] で各々のメトリクス値を示す．また，表 2 に各々のメトリク

は，産業界への適用と意見交換に基づいて，本研究でも利ス値におけるマンホイットニー U 検定の結果を示す．

用した Gemini の改良を行っている．本研究では，ユーザ

この結果，RNR(S) のみが帰無仮説が棄却され，集約対である日本電気株式会社の開発者からのフィードバックに象のクローンセットと集約対象以外のクローンセットの間基づいて，コードクローン変更管理システムの有用性の評で違いが大きいことが分かった．図 8 では，集約対象と価，および，保守作業の対象となったコードクローンの特なったクローンセットの RNR(S) メトリック値とそれ以外徴の調査を行っている．

の RNR(S) メトリック値の分布を比較している．この図か

c 2013 Information Processing Society of Japan

891

情報処理学会論文誌

Vol.54 No.2 883–893 (Feb. 2013)

7. まとめと今後の課題[10]

本研究では 2 バージョン間のコード片の変更履歴に基づいたコードクローンの分類手法を提案した．そして分類結[11]果に基づき，保守作業が必要である可能性があるコードク
ローンの情報を開発者に提供することを目的とした，コー
ドクローン変更管理システムの開発を行った．さらに，実際に企業で行われているソフトウェア開発に適用し，その[12]

pp.95–98 (2007).
肥後芳樹，吉田則裕，楠本真二，井上克郎：産学連携に基づいたコードクローン可視化手法の改良と実装，情報処
理学会論文誌，Vol.48, No.2, pp.811–822 (2007).
Kim, M., Sazawal, V., Notkin, D. and Murphy, G.C.:
An empirical study of code clone genealogies, Proc. SIGSOFT/FSE ’05, pp.187–196 (2005).
吉村健太郎，ガネサンダルマリンガム，ムーティックディ
ルク：プロダクトライン導入に向けたレガシーソフトウェ
アの共通性・可変性分析法，情報処理学会論文誌，Vol.48,
No.8, pp.2482–2491 (2007).

有用性を確かめることができた．
今後の課題として，以下が考えられる．

• 長期にわたる適用と，様々なプロジェクトに対して本システムの有用性を評価する必要がある．また，コー

山中 裕樹

ドクローン，クローンセットの分類の妥当性も評価す

平成 24 年大阪大学基礎工学部情報科

る必要がある．

学科卒業．現在，大阪大学大学院情報• 今回のアンケート対象者はプロジェクトマネージャ 1

科学研究科博士前期課程 1 年．コード人であったが，他の開発者からのフィードバックも調クローン管理に関する研究に従事．

査する必要がある．

• 保守作業の対象となる可能性が高いコードクローンの情報を開発者に提示できるように，システムを改善する必要がある．具体的には，RNR(S) メトリック値に基づいたフィルタリングが考えられる．

崔 恩瀞
平成 24 年大阪大学大学院情報科学研

本研究において様々なご協力をいただいた日本電究科博士前期課程修了．現在，大阪大気株式会社三橋二彩子氏，岩崎新一氏に深く感謝する．ま

学大学院情報科学研究科博士後期課

た，本研究は日本学術振興会科学研究費補助金基盤研究

程 1 年．コードクローン管理やリファ（ A）（課題番号：21240002）の助成を得た．

クタリング支援手法に関する研究に

謝辞

従事．
参考文献
[1]

[2]

[3]

[4]
[5]
[6]

[7]

[8]

[9]

肥後芳樹，楠本真二，井上克郎：コードクローン検出とその関連技術，電子情報通信学会論文誌，Vol.J91-D, No.6,
pp.1465–1481 (2008).
Kamiya, T., Kusumoto, S. and Inoue, K.: CCFinder: A
multilinguistic token-based code clone detection system
for large scale source code, IEEE Trans. Softw. Eng.,
Vol.28, No.1, pp.654–670 (2002).
Bellon, S., Koschke, R., Antoniol, G., Krinke, J. andMerlo, E.: Comparison and evaluation of clone detection
tools, IEEE Trans. Softw. Eng., Vol.31, No.10, pp.804–
818 (2007).
井上克郎，楠本真二，神谷年洋：コードクローン検出法，コンピュータソフトウェア，Vol.18, No.5, pp.47–54 (2001).
Krinke, J.: Is Cloned Code More Stable than Non-cloned
Code?, Proc. SCAM ’08, pp.57–66 (2008).
川口真司，松下 誠，井上克郎：版管理システムを用いたクローン履歴分析手法の提案，電子情報通信学会論文
誌，Vol.J89-D, No.10, pp.2279–2287 (2006).
Kapser, C. and Godfrey, M.W.: Cloning Considered
Harmful Considered Harmful, Proc. WCRE ’06, pp.19–
28 (2006).
Ueda, Y., Kamiya, T., Kusumoto, S. and Inoue, K.:
Gemini: Maintenance support environment based oncode clone analysis, Proc. METRICS ’02, pp.67–76(2002).
Higo, Y., Kamiya, T., Kusumoto, S. and Inoue, K.:
Method and Implementation for Investigating Code, Information and Software Technology, Vol.49, No.9-10,

c 2013 Information Processing Society of Japan

吉田 則裕 （正会員）
平成 16 年九州工業大学情報工学部知能情報工学科卒業．平成 21 年大阪大学大学院情報科学研究科博士後期課
程修了．同年日本学術振興会特別研究員（PD）．平成 22 年奈良先端科学技
術大学院大学情報科学研究科助教．博士（情報科学）．コードクローン分析手法やリファクタリ
ング支援手法に関する研究に従事．

892

情報処理学会論文誌

Vol.54 No.2 883–893 (Feb. 2013)

井上 克郎 （フェロー）
昭和 59 年大阪大学大学院基礎工学研
究科博士後期課程修了（工学博士）．
同年大阪大学基礎工学部情報工学科助
手．昭和 59〜61 年ハワイ大学マノア校コンピュータサイエンス学科助教授．平成 3 年大阪大学基礎工学部助教
授．平成 7 年同学部教授．平成 14 年大阪大学大学院情報科学研究科教授．平成 23 年 8 月より大阪大学大学院情報科
学研究科研究科長．ソフトウェア工学，特にコードクロー
ンやコード検索などのプログラム分析や再利用技術の研究に従事．

佐野 建樹 （正会員）
平成元年日本電気株式会社入社．平成21 年より同社ソフトウェア生産革新
部シニアエキスパート．ソフトウェア
開発方法論や開発支援ツールに関する業務に従事．

c 2013 Information Processing Society of Japan

893