社団法人 電子情報通信学会
THE INSTITUTE OF ELECTRONICS,INFORMATION AND COMMUNICATION ENGINEERS

信学技報
TECHNICAL REPORT OF IEICE.

機械学習を用いたコードクローンの危険予測手法
今里文香†

堀田 圭佑†

肥後 芳樹†

楠本真二†† 大阪大学大学院情報科学研究科
あらまし 一般的に，コードクローンは，ソフトウェアの保守性を低下させる原因になるとされている．一方で，すべてのコードクローンがソフトウェアの保守性に悪影響を与えるとは限らない．そこで本研究では，機械学習を用いてソースコード中に存在するコードクローンの危険予測を自動的に行う手法を提案する．提案手法では，過去に存在したコードクローンの特徴を，そのコードクローンが危険かどうかという情報とともに学習する．そして，そのデータをもとに，現在ソースコード中に存在するコードクローンの危険予測を行う．また，本研究では，提案手法よるコードクローンの危険予測の精度を評価するために，2 つのオープンソースプロジェクトを対象とした評価実験を行った．
その結果，1 つのプロジェクトについては，高い精度で危険なコードクローンを予測できていることを確認した．
キーワード

コードクローン，ソフトウェア保守，機械学習

Risk Prediction for Code Clones Based on Machine Learning
Ayaka IMAZATO† , Keisuke HOTTA† , Yoshiki HIGO† , and Shinji KUSUMOTO†† Graduate School of Information Science and Technology, Osaka University
Abstract Code clones often cause the deterioration of software maintainability. Meanwhile not all code clones
have a bad influence on software. Because there are massive code clones in source code, it is not practical to copewith all of them. Hence it is necessary to detect only risky code clones which reduce software maintainability. In
this study, we propose a method to predict risks of code clones in source code automatically using machine learningtechniques. In our method, we learn features and risks of code clones which existed in the past. Then, we predictrisks of code clones in target source code based on these training data. In this study, in order to evaluate accuracyof prediction for risky code clones by using our proposed method, we conducted a case study with 2 open source
projects. As a result, we confirmed that the proposed method can predict risky code clones with high accuracy for
1 project.
Key words Code Clone, Software Maintenance, Machine Learning

1. は じ め に

保守にとって無害といえる．実際に，48 ％のコードクローン
は，開発過程で 1 度も修正が加えられないことを示す既存研究

一般的に，コードクローンはソフトウェアの保守性に悪影響が存在する [4]．また，例えば，ある時点でコードクローンとを及ぼすと言われている．例えば，ソフトウェアの開発過程でなったコード片が，その後すぐに修正が加えられることによっは，あるコード片が修正された場合に，そのコード片と類似してコードクローンではなくなる場合もある．こういった存在期た他のコード片に対しても同様の修正が加えられることがしば

間が短いコードクローンは，開発過程で一貫した修正を繰り返しば起こる．既存研究では，36〜38 ％のコードクローンが，開し要するコードクローンに比べて，ソフトウェアに悪影響を及発過程で一貫した修正を要することが報告されている [1]．類似

ぼす危険性が低い．さらに，ソースコード中に含まれるコードした複数のコード片に一貫した修正を加える際，本来修正を加クローンの数は膨大であり，開発者がすべてのコードクローンえるべきであったコード片に対して修正漏れが生じることも少を管理することは現実的ではない．

なくない．修正漏れが生じると，その箇所には新たなバグが発

著者らは，効率的にコードクローンを管理するために，ソー生する可能性がある．そのため，コードクローンはソフトウェ

スコード中に含まれるコードクローンのうち，ソフトウェアにアの保守性を低下させる原因になりうる [2], [3]．一方で，すべ悪影響を及ぼすような危険なコードクローンのみを開発者に提てのコードクローンが危険とは限らない．生成されてから 1 度示する必要があるのではないかと考えた．そこで本研究では，も修正が加えられないコードクローンなどは，ソフトウェアの機械学習を用いて，ソースコード中に含まれるコードクローン—1—の中から，ソフトウェアに危険を及ぼすもののみを特定する手のグループを予測する手法を提案している [7]．類似したコード法を提案する．提案手法では，開発履歴情報を分析することで，片は，しばしば一貫した修正を必要とする．しかし，クローン過去に存在したコードクローンの特徴や，それらがバグを発生セット中のすべての要素が一貫した修正を要するとは限らない．

させたか否かなどの情報を取得する．そして，それらの情報をMondel らは，クローンセットの進化履歴から，似たような進もとに，機械学習の技術を用いて，現在のソースコード中に含化を遂げる類似コードのグループを取得し，その情報をもとにまれるコードクローンの中から危険なコードクローンを特定す予測を行った．その結果，Mondal らは，クローンセット中のる．また，提案手法よるコードクローンの危険予測の精度を評

ある要素について，同一クローンセットの中から，その要素と価するために，2 つのオープンソースプロジェクトを対象とし連動して進化を遂げる別の要素を予測することに成功した．

た評価実験を行った．その結果，1 つのプロジェクトについては，高い精度で危険なコードクローンを予測できていることを確認した．

3. 提 案 手 法
本研究では，機械学習を利用し，コードクローンの危険予測を行う手法を提案する．機械学習とは，既存のデータを学習す

2. 先 行 研 究ることにより，未知のデータの性質を予測・特定する技術のこ

先行研究には，機械学習を用いてコードクローンの性質を予とである．機械学習では，学習用のデータのことを訓練データ，測する研究がいくつか存在する．この章では，それらの一部をデータの学習によって得られる，未知のデータの性質を予測す紹介する．

るためのモデルを学習モデルと呼ぶ．本研究では，互いにコー

楊らは，有用なコードクローンは開発者ごとに異なるとし，ドクローンとなっているコード片の集合であるクローンセット

それぞれの開発者にとって有用なコードクローンを，機械学習を訓練データとして，クローンセットの危険予測を行うためのによって自動的に特定する手法を提案している [5]．楊らの提案学習モデルを構築する．また，本研究では，将来的にバグの原手法では，まず，コードクローン検出ツールによって検出され因となるクローンセットを予測することを目的とする．そのたたコードクローンの一部を，利用者が有用か有用でないかのどめ，将来的にバグの原因となるクローンセットを危険，そうでちらかに分類する．そして，機械学習を用いてそれらの情報をはないクローンセットを危険ではないと定義する．学習モデル

学習することによって，残りのコードクローンの中からその利を構築するための手法について，この章で説明する．

用者にとって有用なコードクローンを自動的に特定する．楊ら

本研究における提案手法の入力はソフトウェアの開発履歴情は，8 人の被験者に対して被験者実験を行い，提案手法を評価報であり，出力はクローンセットの危険予測を行う学習モデルした．その結果，楊らは，開発者ごとに有用なコードクローンである．提案手法の流れを図 1 に示す．提案手法は 4 つの段階が異なることを明らかにするとともに，提案手法によって，おに分かれている．

よそ 70 ％以上の精度で，開発者にとって有用なコードクロー（ 1 ） まず，ソフトウェアの開発履歴情報から，開発の中でンを予測できることを確認した．

生成されたすべてのクローンセットを特定する．そして，特定Wang らは，コード片の複製が行われる際に，その操作にした各クローンセットについて，そのクローンセットが生成さよって生成されるコードクローンが危険かどうかを判定する手れてからの進化過程を追跡したデータを取得する．クローン法を提案している [6]．Wang らは，コード片の複製によって生セットの進化データは，一般的にクローンセットの系譜（以下，成されたコードクローンについて，その後一貫した修正が少な系譜）と呼ばれる．

くとも 1 度以上加えられるものを危険，1 度も一貫した修正が（ 2 ） 次に，取得した各クローンセットの系譜について，危加えられないものを危険でないと定義している．また，コード険判定を行う．本研究では，バグ修正が行われた系譜を危険，クローンの危険予測を行うシナリオとして，Wang らは 2 つそれ以外の系譜を危険でないとする．のシナリオを用いている．1 つは，生成されるコードクローン（ 3 ） 系譜の危険判定が完了したら，各系譜から 1 つずつ，が危険なものではない場合にのみ複製を許容する 安全にコー訓練データとするクローンセットを取り出す．その後，取り出ド片の複製を行うシナリオ である．もう 1 つは，生成されるした各クローンセットについて，危険判定を行う．危険判定は，コードクローンが危険なものである場合に複製を禁止する 危

そのクローンセットが属する系譜が危険かどうかで行う．すな険な複製を回避するシナリオである．Wang らは，2 つのソわち，危険な系譜に属するクローンセットは危険とし，危険でフトウェアを対象として，それぞれのシナリオについて提案手ない系譜に属するクローンセットは危険でないとする．また同法の評価を行った．その結果，安全に複製を行うシナリオにつ時に，訓練データとするクローンセットについて，そのクローいては，提案手法によって危険ではないと判定された複製のう

ンセットの状態を調査する．クローンセットの状態とは，例えち，95 ％以上が実際に危険ではないということが確認された．

ば，クローンセットを構成する要素の数や，各要素同士の類似また，危険な複製を回避するシナリオについては，提案手法度などである．以下，本論文では，このようなクローンセットを用いることにより，複製によって生成された危険なコードクの状態を示す数値や指数のことを，特徴量と呼ぶ．

ローンのうち，34 ％を検出することに成功した．

（ 4 ） 最後に，訓練データとして取り出した各クローンセッ

Mondal らは，互いに類似するコード片の集合（クローンセッ

トについて，その特徴量と，危険か危険でないかという情報をト）について，その構成要素のうち一貫した修正を要する要素合わせて学習し，学習モデルを構築する．この学習モデルに，—2—リビジョンr
開発履歴情報

r+1

r+2

追加

P
（1）開発履歴情報から，クローンセットの系譜を取得

生成Q

クローンセット

クローンセットを構成する要素（コード片）

リビジョン間におけるクローンセットの変化

図 2 クローンセットの系譜（2）系譜の危険判定つの系譜である．また，丸いオブジェクトはある時点における危険クローンセットを表し，クローンセット中の四角いオブジェク
トはそのクローンセットを構成する要素を表している．矢印は，危険でないリビジョン間におけるそのクローンセットの変化を表している．
例えば，系譜 P は，リビジョン r においてクローンセットの（3）系譜から，訓練データを抽出

要素数が 2 であり，その後修正により新たに要素が追加され，リビジョン r + 1 で要素数が 3 になっている．このように，取危険得した系譜からは，そのクローンセットの要素数の変化や，修正によるコード内容の変化といった，開発過程における変遷を危険でない知ることができる．

3. 2 各系譜の危険判定
訓練データ

各系譜について，危険か危険でないかを判定する方法を説明（4）訓練データを学習し，学習モデルを構築する．提案手法では，開発過程においてバグ修正が行われた系譜を危険とみなす．まず，系譜を構成するクローンセットに対して修正が行われたリビジョンをすべて抽出する．その後，抽出したそれぞれのリビジョンにおけるコミットメッセージを参学習モデル照し，バグ修正に関する記述が含まれていれば，そのリビジョ
図1

手法の流れンにおいてクローンセットにもバグ修正が行われたものとし，その系譜を危険と判定する．なお，バグ修正に関する記述の判

危険予測を行いたいクローンセットの特徴量を与えることで，定については，既存研究 [10] で紹介されているパターンを利用そのクローンセットが危険かどうか予測する．

した．

以上が，本研究における提案手法の概要である．以下では，提案手法のそれぞれの段階について，詳細を説明する．

3. 3 訓練データの抽出
本研究では，系譜の開始リビジョンにおけるクローンセット

3. 1 クローンセットの系譜の取得を訓練データとして取り出す．次に，取り出した訓練データにクローンセットの系譜の取得方法について説明する．本研

ついて，その特徴量を取得する．本研究では，全部で 30 種類

究では，既存のコードクローン追跡手法である CRD（CloneRegion Descriptors）[8] に基づいて，クローンセットの系譜を取得する．CRD とは，コード片の位置情報を用いて，コードクローンの追跡を行う手法である．CRD はコード片の位置情の特徴量を用いた．その一部を以下に記述する．

•

クローンセットの要素数•

クローンセットを構成する各要素のトークン数の平均•

クローンセットを構成する要素を含むファイルの数報に基づきコードクローンの追跡を行うため，コードクローン

また，特徴量はすべて，訓練データとして取り出した時点におに対して大きな修正が加えられた場合でも，追跡が可能である．

けるクローンセットの情報から取得できるものを採用している．

しかし一方で，CRD には，あるメソッドの一部分を別のメソッすなわち，いずれの特徴量も，クローンセットの過去の履歴情ドとして抽出するなどの，コード片の位置が変わるような修正報を必要としない．

が加えられた場合に，コードクローンの追跡ができなくなると例として，図 3 の系譜から訓練データとするクローンセットいった問題点がある．そこで本研究では，堀田らが提案する，を取り出す場合を考える．まず，系譜の開始リビジョン x にお

従来の CRD の問題点を解決した手法 [9] を用いて，クローンけるクローンセットを，訓練データとして取り出す．次に，特セットを追跡し，系譜を取得した．取得した系譜の例を図 2 に徴量を取得する．訓練データとして取り出したクローンセット示す．図中の，矢印で繋がれ横方向に連なっているものが，1は，2 つの要素から構成されるため，要素数は 2 となる．また，要素 α，β のトークン数はともに 20 であるため，各要素—3—

的には，まず訓練データを用いて学習モデルを構築する．そのリビジョン

xx+1x+2

後構築した学習モデルを用いてテストデータの予測を行い，精度を計測する．この操作を，各ブロックをテストデータとした場合についてそれぞれ行い，それらの精度の平均を取る．本実
験では，N = 10 として学習モデルの評価を行った．

要素α

また，本実験では評価尺度として P recision と Recall の 2

要素βif(i<max){list.add(Obj.get(i));}

if(j<max){list.add(Obj.get(j));}

A.javaB.javaつの指標を用いた．これらの説明を表 3 にまとめる．
また，本実験では，学習モデル構築アルゴリズムとして J48，RandomForest，ベイジアンネットワーク，SVM，ロジスティッ
ク回帰の 5 つのアルゴリズムを用い，それぞれについて交差検図 3 クローンセットの系譜

証法を用いて評価を行った．各アルゴリズムの説明を表 4 にまとめる．のトークン数の平均は 20 となる．さらに，要素 α は A.java，4. 2 実 験 結 果

β は B.java 中のコード片であるため，このクローンセットの要評価実験の結果を，表 5 にまとめる．表より，jEdit につ

素は 2 つのファイルに含まれる．このようにして，系譜から取いては，P recision は 83〜95 ％，Recall は 83〜90 ％と，高り出した訓練データについて，30 種類すべての特徴量を得る．

い精度で危険なクローンセットの予測を行うことができてい3. 4 学習モデルの構築

る．アルゴリズム別に見ると，決定木ベースである J48 およ

この時点で，各訓練データについて，特徴量の取得と危険判

び RandomForest は，P recision，Recall ともにほぼ 9 割と定が完了している．これらの情報を，機械学習によって学習し，高い．SVM は，P recision が 95 ％と 5 つのアルゴリズムの中学習モデルを構築する．この学習モデルに，危険判定を行いたで最も高いが，Recall は 5 つのアルゴリズムの中で最も低い．

いクローンセットの特徴量を与えることで，そのクローンセッ
トが将来的にバグの原因となる危険なクローンセットかどうか
表 2 実験データの内訳を予測することが可能になる．なお，学習モデルの構築には，データマイニングツール weka [11] を使用した．

4. 評 価 実 験

プロジェクト名

危険jEdit

1,695

2,563Ant2,835

22,818表3

本研究では，2 つのオープンソースプロジェクトを対象とし，提案手法の評価を行った．対象としたプロジェクトを表 1 に示す．本研究で実装したツールは，Java 言語で開発されたプロジェクトのみを解析対象としている．そのため，実験対象プロジェクトはいずれも Java 言語で開発されているものを選択し

評価尺度

危険でない

評価尺度

説明

P recision 構築した学習モデルによって危険と予測されたクローンセットのうち，実際に危険であったものの割合

Recall

危険なクローンセットのうち，実際に構築した学習モデルによって危険と予測されたクローンセットの割合た．また，本研究では 3. 1〜3. 3 節の操作によって各プロジェクトからクローンセットを取得し，それらをデータセットとし

表 4 学習モデル構築アルゴリズムて実験を行った．各プロジェクトについて，実験で用いたデーアルゴリズム

説明

タセットの内訳をまとめたものを表 2 に示す．

J48

決定木による学習アルゴリズム．C4.5 [12]に基づいた決定木を生成する．

以下では，評価手法および実験結果について述べる．

決定木による学習アルゴリズム．訓練デー

RandomForest

4. 1 評 価 手 法

タを複数の組に分け，それぞれの組ごと

本実験では，構築した学習モデルの評価手法として交差検証法を用いた．交差検証法とは，データセットをいくつかのブに決定木を生成する．
ベイジアンネットワーク

ロックに分割し，評価を行う手法である．この際，各ブロックのデータ数が同程度になるように割り当てを行う．ここで，デー

件付確率を用いて因果グラフを生成する．
最も優秀な学習アルゴリズムの 1 つ．2

SVM

クラスのパターン識別器を生成．

タセットを N 個に分割したと仮定する．交差検証法では，分割したブロックのうち N − 1 個のブロックを訓練データとし，ロジスティック回帰数学モデルによる学習アルゴリズム．確
率的な分類モデルを生成．

残りの 1 個のブロックをテストデータとして評価を行う．具体

表1
プロジェクト名

jEdit
Ant

リビジョン番号
開始

最終

3,791

21,981

267,548 1,233,420

因果グラフによる学習アルゴリズム．条

実験対象プロジェクト
対象リビジョン数

行数
開始

最終計測時間 (分)5,292 57,837 183,006

3,691

12,621

26,7307,864 255,061—4—ベイジアンネットワークについては，P recision は 83 ％と低に特有のパターンが存在したが，Ant のデータセットからはいが，Recall は 5 つのアルゴリズムの中で最も高い．この結そういったパターンを得ることができなかったために，2 つの果から，以下のことがわかる．

プロジェクト間で予測精度に大きな差が出たのではないかと考•いずれのアルゴリズムについても，高精度で危険なクローンセットを予測できている．

•えた．そこで，それぞれのプロジェクトについて，データセットの特徴量から危険なクローンセットの傾向を得ることができ

ベイジアンネットワークは，他のアルゴリズムと比べて多くの危険なクローンセットを検出することができている．

るかどうか調査を行った．その結果，いずれのプロジェクトについても，危険なクローンセットほど，要素を含むファイルの一方で，Ant については，P recision は 0〜67 ％，Recall はディレクトリ上における広がりが大きい傾向があることがわ

0〜54 ％と，いずれの評価尺度も低く，さらにアルゴリズムにかった．すなわち，クローンセットを構成する要素を含むソーよって大きくばらつきがある．アルゴリズム別に見ると，決定スファイルが，ディレクトリ構造の上で離れた位置にあるもの

木ベースである J48 および RandomForest は，P recision がほど危険となりやすかった．これは，クローンセットの要素が60〜67 ％，Recall が 41〜45 ％となっている．他のアルゴリ

広範囲に散らばっている場合，ある要素に修正を加えた際に，ズムと比べると P recision は高いが，これは危険と予測した他の要素への修正を見落としやすくなるためであると考えられクローンセットのうち実際に危険であったものが 60〜67 ％でる．また，jEdit については，危険なクローンセットほど，そあったということであり，33〜 40 ％については予測がはずれのクローンセットの要素を構成するトークンの種類が多い傾向ている．そのため，予測精度が良いとは言えない．SVM およがあることがわかった．しかし，Ant にはそういった傾向は見び ロジスティック回帰は，P recision，Recall ともに非常に低られなかった．

い．ベイジアンネットワーク については，Recall が 54 ％と以上より，危険なクローンセットの傾向は，複数のプロジェ

5 つのアルゴリズムの中で最も高いが，これは危険なクローンクト間で共通している部分もあるが，必ずしも一致しているとセットのうち 54 ％しか検出できていないということであり，46は限らないことがわかる．そのため，予測対象とするプロジェ％のクローンセットの検出には失敗している．そのため，こちクトごとに，適切な特徴量を選択することが必要であろう．まらも予測精度が良いとは言えない．この結果から，以下のこと

た，危険なクローンセットを予測するための特徴量としては，がわかる．

要素を含むファイルのディレクトリ上における広がり•

いずれのアルゴリズムも予測精度が低い．

•

アルゴリズムごとに，評価尺度に大きなばらつきがある．

が有効である可能性がある．

5. 2 既存研究との比較評価実験より，jEdit に対しては，P recision は 83〜95 ％，多くの既存研究では，特徴量として，ソフトウェアの開発履

Recall は 83〜90 ％と，高い精度で危険なクローンセットを予歴から得られる情報を用いている．しかし，本研究で使用する測することができた．一方で，Ant に対しては，危険と予測し特徴量は，利用者が予測を行いたい時点におけるクローンセッたクローンセットのうち少なくとも 3 割程度が実際には危険でトの情報からすべて得ることができるため，開発履歴情報をはなかった．さらに，危険なクローンセットのうち多くとも 5用いる必要がない．そのため，開発履歴情報を用いるのは学習割程度しか検出することができなかった．また，どちらの評価モデルを構築する時のみであり，1 度学習モデルを構築した後結果からも，ベイジアンネットワーク によって構築した学習モは，開発履歴情報を用いることなく危険予測が可能である．しデルは他のアルゴリズムと比較してより多くの危険なクローンたがって，本研究では，既存研究とは異なり，モデル構築後はセットの検出に成功していることがわかった．

開発履歴情報そのものを用意する必要がなくなり，また，予測5. 考を行うたびに開発履歴情報を遡るといった操作を行わなくてよ察

い．以上の理由より，本研究で提案した手法では，既存研究と比較して容易かつ高速に予測を行うことができるといえる．

5. 1 危険なクローンセットの傾向
jEdit を対象とする実験では高い精度でクローンセットの危険予測を行うことに成功した．しかし，Ant を対象とする実験

6. 結果の妥当性

では P recision，Recall のいずれの評価尺度も低い結果となっ計測対象た．これについて著者らは，jEdit では危険なクローンセット

本実験で対象としたソフトウェアは 2 つであり，Java で開発されたオープンソースソフトウェアに限定して調査を行った．

表5アルゴリズム

このため，より多くのソフトウェアを対象として実験を行った

評価結果

jEdit

場合や，異なる言語で記述されたソフトウェアや商用ソフト

AntPrecision Recall Precision Recall

J48

0.93

0.89

0.67

0.45

RandomForest

0.92

0.89

0.60

0.41

ベイジアンネットワーク

0.83

0.90

0.45

0.54

SVM

0.95

0.83

00

ロジスティック回帰

0.92

0.86

0.28

0.03

ウェアを対象とした場合は，本研究で得られた結果と異なる結果が得られる可能性がある．
バグ修正の判定
本研究では，コミットコメントの内容のみに基づき，系譜に対するバグ修正の有無の判定を行っている．そのため，実際にその系譜に対してバグ修正があったかどうかソースコードを見—5—て分析を行うに至っていない．したがって，本実験では，危険判定に誤りのあるクローンセットがデータセットに混入している可能性があり，評価実験結果の妥当性を脅かしている恐れがある．
特 徴量

機械学習では，使用するすべての特徴量が予測に良い影響を与えるとは限らない．すなわち，予測精度を下げるノイズとなるものや，結果に何も影響を与えない不必要なものも存在する．
本研究では，クローンセットの特徴を表す指標として 30 種類の特徴量を用いた．しかし，それらが適切なものかどうかの検証は行っていない．したがって，本研究では結果に悪影響を与える特徴量を使用している可能性があるため，予測精度の低下を招いている恐れがある．

7. あ と が き
コードクローンは，修正漏れなどを引き起こす可能性がある
ことから，ソフトウェアの保守性に悪影響を与える危険なものとされている．しかし一方で，すべてのコードクローンが危険とは限らない．さらに，ソースコード中には非常に多くのコードクローンが含まれるため，すべてのコードクローンを管理することは現実的ではない．そこで本研究では，機械学習を用いて，ソースコードに含まれるコードクローンの中からソフトウェアに危険を及ぼすもののみを検出する手法を提案した．提案手法では，過去にソースコード中に存在したコードクローンについて，特徴量とそのコードクローンが危険かどうかという情報を学習し，学習モデルを構築した．そして，構築した学習モデルを用いることによって，危険なコードクローンの予測をEngineering Notes, vol.30, no.5, pp.187–196, Sept. 2005.
[2] L. Zhenmin, L. Shan, M. Suvda, and Z. Yuanyuan, “CPMiner: finding copy-paste and related bugs in large-scale
software code,” IEEE Transactions on Software Engineering, vol.32, no.3, pp.176–192, March 2006.
[3] 肥後芳樹，楠本真二，“コード修正履歴情報を用いた修正漏れの自動検出，” 情報処理学会論文誌，vol.54，no.5，pp.1686–1696，May 2013．
[4] G. Nils and K. Rainer, “Frequency and Risks of Changes toClones,” Proceedings of the 33rd International Conference
on Software Engineering, pp.311–320, May 2011.
[5] 楊嘉晨，堀田圭佑，肥後芳樹，井垣宏，楠本真二，“機械学習を用いた類似度に基づく有用なコードクローンの自動特定手法，”
情報処理学会論文誌，vol.54，no.2，pp.807–819，Feb. 2013．
[6] W. Xiaoyin, D. Yingnong, Z. Lu, Z. Dongmei, L. Erica, andM. Hong, “Can I Clone This Piece of Code Here?,” Proceedings of the 27th IEEE/ACM International Conference onAutomated Software Engineering, pp.170–179, Sept. 2012.
[7] M. Manishankar, R.C. K., and S.K. A., “Prediction andRanking of Co-change Candidates for Clones,” Proceedingsof the 11th Working Conference on Mining Software Repositories, pp.32–41, May 2014.
[8] D.-E. Ekwa and R.M. P., “Clone Region Descriptors: Representing and Tracking Duplication in Source Code,” ACM
Transactions on Software Engineering and Methodology,
vol.20, no.1, pp.3:1–3:31, July 2010.
[9] 堀田圭佑，肥後芳樹，楠本真二，“CRD の類似度に基づくコー
ドクローン追跡手法，” 電子情報通信学会技術研究報告，第 113
巻，pp.127–132，July 2013．
[10] J. Śliwerski, T. Zimmermann, and A. Zeller, “When dochanges induce fixes?,” Proceedings of the 2005 International Workshop on Mining Software Repositories, pp.1–5,
July 2005.
[11] “Weka 3: Data Mining Software in Java”. http://www.cs.
waikato.ac.nz/ml/weka/.
[12] Q.J. Ross, C4.5: Programs for Machine Learning, Morgan
Kaufmann Publishers Inc., Jan. 1993.

行った．また，提案手法によって構築した学習モデルの予測精度を評価するために，2 つのプロジェクトを対象とした評価実験を行った．評価実験の結果，一方のプロジェクトについては，

P recision が 83〜95 ％，Recall が 83〜90 ％と，高い精度で危険なコードクローンを予測できていることを確認した．しかし，もう一方のプロジェクトについては，P recision が 0〜67％，Recall が 0〜54 ％と，いずれの評価尺度も低い結果となった．そのため，今後は，どのようなプロジェクトについても高精度で危険なコードクローンの予測を行うことを可能にするために，手法を改善していく必要がある．
今後の課題は以下のとおりである．

•

より多くのソフトウェアに対して実験を行う．

•

系譜に対するバグ修正の有無の判定が正しいかどうか，実際にソースコードを見て確認する．

•

特徴量の選別を行う．また，必要に応じて新たに特徴量を追加する．
謝辞

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

研究 (S)(課題番号：25220003)，挑戦的萌芽研究 (課題番号：24650011)，若手研究 (A)(課題番号：24680002)，並びに特別研究員奨励費 (課題番号：25・1382) の助成を得た．
文

献[1] K. Miryung, S. Vibha, N. David, and M. Gail, “An Empirical Study of Code Clone Genealogies,” SIGSOFT Software—6—