Vol.2022-SE-210 No.8
2022/3/11

情報処理学会研究報告
IPSJ SIG Technical Report

深層学習を用いたコードクローン検出器のベンチマーク間精度調査
福家 範浩1

藤原 裕士1

吉田 則裕2崔 恩瀞3

井上 克郎1

概要：ソフトウェア保守において問題となる要因の 1 つとしてコードクローンがある．近年，多様なコー
ドクローンを検出するために教師あり深層学習を取り入れた検出器が提案されている．既存の深層学習を用いたコードクローン検出器では，検出器の学習と評価のために 1 つのデータセットを分割して使用している．しかし，開発者が実開発現場でコードクローン検出器を用いる場合，検出器を適用する対象と学習データが類似しているとは限らない．そこで，本研究では学習と評価に複数のベンチマークを用いて，深層学習を用いたコードクローン検出器である CCLearner，ASTNN，CodeBERT に対して精度の調査を行った．その結果，全ての検出器で学習と異なるベンチマークに対し精度が下がり，CCLearner と ASTNN ではクローンのタイプごとで精度が異なったことを確認した．また，ASTNN と CodeBERT では，学習デー
タに類似するベンチマークで評価を行った時，精度が高かったことを確認した．

Investigating the Performance of Deep Learning-based Code Clone
Detectors Using Multiple Benchmarks
Norihiro FUKE1

Yuji FUJIWARA1

Norihiro YOSHIDA2

1. まえがきEunjong CHOI3

Katsuro INOUE1の中からコードクローンを自動的に検出するため，多くの
コードクローン検出器が提案されている．

コードクローンとは，ソースコード中に存在する同一，代表的な従来のコードクローン検出器には，CCFinder [1]または類似した部分を持つコード片を示し，主に開発者がや CCFinder の後継機である CCFinderX*1 などが挙げら

効率よく開発を行うために既存のコード片をコピーアンドれる. これらの検出器は検出の前処理としてトークン解析

ペーストすることで生成される．一般的にコードクローンを行うことで，トークン単位でのコードクローンを検出すは，ソフトウェアの保守を困難にする要因の 1 つとして挙る．しかし，従来の検出器でソースコード中で文の挿入やげられている．例えば，あるコード片にバグが存在する時，削除など大きな構造の違いがあるコードクローンや，異そのコード片に一致または類似するコード片にも同様のバなる実装で処理が同じであるコードクローンを検出する

グが含まれている可能性が高い．そのため，開発者は，バことは困難である．そこで最近では，深層学習を用いてグを見つけたコード片に対してだけではなくそのコード片

コードクローンを検出する CCLearner [2]，ASTNN [3]，の一致または類似するコード片を探し，それらに対しても

CodeBERT [4] 等が提案されている．これら深層学習を用

バグの修正を検討する必要がある．そこで，ソースコード

いた検出器では，事前にコードクローンのデータセットで深層学習モデルの学習を行い，学習結果に基づいてコード

1

2

3

大阪大学
Osaka University
名古屋大学
Nagoya University
京都工芸繊維大学
Kyoto Institute of Technologyⓒ 2022 Information Processing Society of Japan

クローンを検出する．実開発環境で開発者がコードクロー
ン検出器を利用する時，学習済みのモデルを用いるが，検*1

http://www.ccﬁnder.net/

1Vol.2022-SE-210 No.8
2022/3/11

情報処理学会研究報告
IPSJ SIG Technical Report出器を適用する対象と学習データが類似しているとは限らに検出するために CCFinder 等，多くのコードクローン検ない．我々の先行研究 [5] では，CCLearner と ASTNN に出器が提案されてきた．従来の検出器では，T1，T2 のコー

対して，BigCloneBench [6] で学習を行い，Google Code

ドクローンが高い精度で検出できるが，T3 や T4 のコード

Jam データセット [7] で評価を行ったところ，検出精度がクローンに対しては検出精度が低いことが知られている．

下がったことが分かった．しかし，ベンチマークの特徴に

近年では，T3 や T4 のコードクローンに対してもコード

よってコードクローン検出器の精度がどのような影響を受クローンの検出精度を高めるために深層学習を用いたコー

けるか知るために，先行研究での実験結果は少ない．

ドクローン検出器が多く提案されており，代表的なコード

そこで本稿では，深層学習を用いたコードクローン検

クローン検出器として以下の CCLearner [2]，ASTNN [3]，出器 CCLearner，ASTNN に CodeBERT を加え，ベンチ

CodeBERT [4] 等が挙げられる．

マークを 1 つ追加して 3 つ用意し，学習と評価に異なるベ

2.1.1 CCLearner

ンチマークを用いた精度の調査を行った．

まず，コード片をトークン分割し，分割されたトークン

以降，2 章では，本調査に関わるコードクローン検出器を予め決められたカテゴリに分類する．カテゴリは，予約の関連研究や精度調査のためのコードクローンベンチマー

語，演算子，マーカー，リテラル，タイプ識別子，メソッ

クに関して説明する．3 章では，調査方法とベンチマーク

ド識別子，修飾名，変数識別子の 8 つである．また，これの分析について説明を行う．4 章では，本調査で行った実らのカテゴリごとで，どのトークンが何個ずつあるかの頻験の結果について説明する．5 章では本調査の考察，6 章

度リストを取得する．コード片 A のあるカテゴリのトーク

ではまとめを述べる．

ン頻度リストを LA とする．同様にコード片 B の頻度リス

2. コードクローン検出

トを LB とする．
次にこのトークン頻度を用いてカテゴリごとの類似度

ソースコード中の一致または類似するコード片対をコー

sim score を計算する．類似度の計算式を以下の式 (1) にドクローンと呼ぶ．コードクローンは違いによって次のよ示す．lA x をトークンリスト LA から取得したトークン x

うに大きく 4 つのタイプに分類されている [8]．

の個数とする．|lA x − lB x| は，あるトークン x について

Type-1 コードクローン（以降 T1） Type1 のコードク

コード片 A とコード片 B の個数差の絶対値で，lA x + lB x

ローンは，空白やタブ・改行・コメント以外は一致しは，個数の和である．これらをトークンごとに足し合わせているコード片対である．

て，差を和で割る．これにより，完全に一致する場合は分Type-2 コードクローン（以降 T2） Type2 のコードク

数が 0 となり sim score が 1 となる．仮にそのカテゴリのローンは，Type1 のコードクローンの違いに加えて，トークンが存在しない場合は，sim score を 0.5 にする．

変数名や関数名等のユーザー定義，変数の型の違いがあるコード片対である．

Type-3 コードクローン（以降 T3） Type3 のコードク
ローンは，Type2 のコードクローンの違いに加えて，∑|lA x − lB x|x

sim scorei = 1 − ∑(1)lA x + l B xx

文の挿入や削除変更等の違いを含むコード片対である．

Type-4 コードクローン（以降 T4） Type4 のコードク

最後に各々のトークンカテゴリごとの sim score を Deep

ローンは，Type3 のコードクローンの違いに加えて，Neural Network に入力し，コードクローンであれば 1 を同一の処理を行うが構文上の実装の違いを含むコード

非コードクローンであれば 0 を出力するように学習する．

片対である．

2.1.2 AST-based Neural Network（ASTNN）

T3 は構文的な類似度によって更に細かく分類されていまず，コード片から抽象構文木（以降 AST）を生成し，る．構文的な類似度が 90%以上のコードクローンは Very

より細かい木構造であるステートメントツリーを取得すStrong Type 3（以降 VST3），70%から 90%のコードクロー

る．次にステートメントツリーのノード n に対する語彙ベンは Strongly Type 3（以降 ST3）
，50%から 70%のコード

クトル vn を取得する．そしてノードの隠れ状態である h

クローンは Moderately Type 3（以降 MT3），50%未満のを木構造に従って以下の式 (2) のように計算する．
∑
h = σ(Wn⊤ vn +h i + bn )(2)

コードクローンは Weakly Type 3（以降 WT3）のようにさらに細分化できる．また，VST3 は ST3 とひとまとめでST3 として，WT3 は T4 とまとめて WT3/T4 として分類される．

2.1 コードクローン検出器
これまで，ソースコード中からコードクローンを自動的ⓒ 2022 Information Processing Society of Japani∈[1,C]Wn⊤ ∈ Rd×K は単語の埋め込み次元 d，符号化次元 k の重み行列，bn はバイアス項である．C はノード n の子のノー∑ドの数であり，
hi は子ノード i の隠れ状態を足して
i∈[1,C]いる．σ は，tanh 等の活性化関数である．これらの隠れ状

2Vol.2022-SE-210 No.8
2022/3/11

情報処理学会研究報告
IPSJ SIG Technical Report

態 h を用いて，以下の式 (3) から最終的なステートメント

汎化性能の問題点は，コードクローン検出器に対してもツリーの表現を得る．N はステートメントツリー t のノー生じる可能性がある．ソースコードにもコーディングの経ド数である．

験の長さや，コーディング規約，トークンの類似度や保守

et = [max(hi1 ), · · · , max(hik )], i = 1, · · · , N(3)

するソースコードかどうか等，ソースコードのデータセッ
トの様々な要因が検出精度に影響を与える可能性がある．

その後，AST に含まれる T 個のステートメントツリーのCCLearner や ASTNN，CodeNet など多くの深層学習を用

表現を bidirectional GRU [9] に入力し，コード片のベクト

いたコードクローン検出器では，同一のベンチマークを分ル表現を得る．最後に，2 つのコード片のベクトル r1 ，r2

割して学習データと評価のデータを作成している．しかし，間の距離 r = r1 − r2 を全結合層に入力し，活性化関数と既存の検出器では，同一のベンチマークを用いることで，して sigmoid 関数を利用してコードクローンであれば 1 を同じ競技プログラミングサイトから集めた Google Code

非コードクローンであれば 0 を出力するように学習する．

Jam データセット [7] やオープンソースソフトウェア（以2.1.3 CodeBERT

降 OSS）から似た機能を持ったソースコードを抽出して作

CodeBERT は BERT [10] や BERT を 改 良 し た

成した BigCloneBench [6] 等，似た特徴のデータ間で検証

RoBERTa [11] を基にしており，モデル構造は RoBERTa-

を行っており，学習データと異なる特徴を持ったデータにbase と 全 く 同 じ で あ る ．CodeBERT の 事 前 学 習 に は ，対する検出精度が明らかになっていない．しかし，開発者

Masked Language Modeling（Maseked LM) と，BERT でが深層学習を用いたコードクローン検出器を学習データと取り入れられていた連続する文かを判定する Next Sentence

異なるデータに適用した時に検出精度が低いとソフトウェ

Prediction（NSP）の代わりに Replaced Token Detection

ア保守を行うことが困難であるため，コードクローン検出（RTD）の 2 つのタスクが用いられている．CodeBERT の器に汎化性能を調査する必要がある．

Masked LM では，自然言語とプログラミング言語のペアにマスク処理を行い，マスクされた元のトークンを予測する

3. ベンチマーク間の精度調査学習を行う．RTD は自然言語とプログラミング言語のペ本研究では，2.2 節で説明した問題を解決するために，本

アだけでなく，プログラミング言語だけのデータも用いて研究では，2.1 節で説明した CCLearner や ASTNN，Code-

学習を行う．まず，ランダムにマスクされたトークンに対BERT に対し，異なるベンチマークを用いて以下の 3 つのし，自然言語には自然言語の生成器を，プログラミング言

Research Question（RQ）を立て，図 1 に示すように汎化語にはプログラミング言語の生成器を用いて，もっともら性能について調べた．

しく置き換えられるトークンを生成する．置き換えたデー

RQ1 学習と評価に異なるベンチマークを用いた場合，検タを識別機であるモデルに入力し，どのトークンが取り替えられたトークンかを判定する．この 2 つの事前学習により CodeBERT は，言語モデルを学習する．

出精度は維持できるか？

RQ2 学習と評価に異なるベンチマークを用いた場合，コー
ドクローンのタイプと検出精度は関係しているか？

事前学習した後，行いたいタスクのデータで ﬁne tuning

RQ3 競技プログラミングを基にしたベンチマーク同士でを行う．例えば 2 文の関係性を予測するには，BERT の事

学習と評価を行うことで，検出精度は維持できるか？

前学習の NSP のように 2 文をつなげて入力して判定するとRQ1 の調査により，学習と評価で異なるベンチマークをいう方法がある．本実験では，事前学習済みの CodeBERT

用いた場合でも，同一ベンチマーク内での評価と同等の精のモデルに，この方法と同様に 2 つのコード片をつなげて度が出るのかを確かめ，コードクローン検出器に汎化性能

入力し，コードクローンであれば 1，非コードクローンでの問題があるかを確かめることが出来る．同じベンチマー

あれば 0 が出力されるように ﬁne tuning した．

ク内で評価した時の精度を維持できない検出器がある場合，深層学習を用いたコードクローン検出器にも汎化性能の問

2.2 既存の深層学習を用いたコードクローン検出器の問題点題があると言える．これは，実開発環境で開発者が学習済
みの検出器を用いたとしても検出精度が悪いため，ソフト

近年，一般的な深層学習を用いたシステムにおいて，汎ウェア保守作業の手助けにならない可能性を示す．RQ2 の化性能の問題が指摘されている．汎化性能の問題は，学習調査により，学習と異なるベンチマークに対する検出精度

データとシステムの適用対象が異なることから生じ，デーとクローンのタイプの関係を調査し，検出器ごとに異なる

タを取るセンサが異なることで精度が下がる問題 [12] 等が関係となるか確かめることが出来る．コードクローンのタ報告されている．何が深層学習を用いたシステムの精度をイプとコードクローンの検出精度の関係が検出器によって低下させるかは明確に分かっておらず，従って，深層学習

異なる場合，検出精度の低いタイプのコードクローンの学を用いたシステムは学習データと異なるデータに対しても

習データを増やす等，検出器ごとに学習法改善案を考える

精度が維持できるか確かめておく必要がある．

ための動機になる．また，クローンのタイプごとの検出精ⓒ 2022 Information Processing Society of Japan3

Vol.2022-SE-210 No.8
2022/3/11

情報処理学会研究報告
IPSJ SIG Technical Report

度を調べることで，ソフトウェア開発者が検出器の特性をそのため，GCJ の解答データのソースコードの中の main

理解し，それぞれにあった検出器を選択出来ると考えられメソッドを抽出し，main メソッド外で定義されている処

る．RQ3 の調査により，学習データセットの選び方がコー

理を main メソッド内にインライン展開して学習データとドクローン検出器の精度に影響するのか確かめることが出した．また，問題を解くための入出力処理でコードクロー

来る．競技プログラミングを基にしたベンチマーク同士でンの判定をさせないため，入出力処理を削除した．非コー

学習と評価を行うことで検出精度が上がる場合，適用したドクローンは，コードクローンより非常に多いため，非いソースコード群に類似した性質を持つソースコード群

コードクローンをランダムに抽出して同じ数にした．ベンで学習を行うことで検出精度が上がると考えられる．これチマーク GCJ の設問数は 12 問，解答ソースコード数はは，ソフトウェア開発者が，適用したいソースコード群に1,669 個，コードクローン数は約 275,000 個，非コードク

類似した学習データセットを作成するための動機となる．

ローン数は約 275,000 個である．

3.1.3 CodeNet
3.1 ベンチマークの準備と分析

CodeNet（以降 CN）は，競技プログラミングサイト AIZU

本実験では，代表的なコードクローンベンチマークでOnline Jadge*3 と AtCoder*4 から収集されたベンチマーク

ある BigCloneBench や Google Code Jam，CodeNet を用である [17]．CN も競技プログラミングを基にしたベンチ

いた．

マークのため，3.1.2 節で説明した GCJ と同様の処理を

3.1.1 BigCloneBench

行った．また，設問数とコードクローン数を GCJ と同程

BigCloneBench（BCB）は Svajlenko らによって作成され度にするために，CN に付与されていた問題番号の若い順

た Java ソースコードの大規模データセットである [6]．プに，処理が 1 行で書かれていることが多い問題，再帰関数

ロジェクト間リポジトリの大規模データである IJaDatasetなどインライン展開のために大きな変更が必要なコード

2.0 [13] の中から特定の機能のソースコードをマイニング

等をデータセットから外して 12 問取得した．CN の元のし，それらに手動でクローンタイプ等のラベル付けがさ

データセットには AIZU OnlineJudge と AtCoder の問題れたベンチマークである．BCB には複数のバージョンがの両方の問題があるが，本実験のデータセットには AIZU

あり，検出器ごとでもデータセットとしての抽出方法がOnline Judge の問題を 12 問，それぞれの解答ソースコー

異なっている．本調査では，それぞれの検出器で報告されド数 215 個，合わせてコードクローン数約 276,000，非コー

た BCB に対する精度と比較を行うために，CCLearner とドクローン数も約 276,000 のデータセットとした．

ASTNN では，深層学習モデルの学習にそれぞれの提案論

3.1.4 ベンチマークの分析

文で提供されている BCB のデータセットを用いることに各ベンチマークのコードクローンの Jaccard 係数と LOCした．CodeBERT については，提案論文ではコードクローの平均について調べて，文献 [18] の図 6，図 7 にまとめ

ン検出が行われていなかったため，CodeXGLUE [14] で使た．ASTNN の BCB のタイプごとの Jaccard 係数の中央値われていた BCB を用いた．ベンチマーク間での評価には，は，T1 が 1.00，T2 が 0.929，ST3 が 0.705，MT3 が 0.418，

ASTNN で用いられていた BCB のデータセットを用いた．

WT3/T4 が 0.213，非コードクローンが 0.195 であった．

ASTNN の論文と同様にコードクローンのタイプごとに精LOC の平均の中央値は，コードクローンが 20 で非コード度を求めて，ベンチマーク全体におけるタイプごとの割合

クローンが 13.5 であった．GCJ は，コードクローンの中央で重みをつけた精度を BCB 全体の精度結果とする方法を

値は Jaccard 係数が 0.463，LOC の平均が 26.5，非コード取った．

クローンの中央値は Jaccard 係数が 0.388，LOC の平均が3.1.2 Google Code Jam

30 であった．CN は，コードクローンの中央値は Jaccard

競技プログラミングサイト Google Code Jam *2 に提出

係数が 0.583，LOC の平均が 21，非コードクローンの中されたソースコードを利用して，同じ設問に提出された解央値は Jaccard 係数が 0.463，LOC の平均が 21 であった．

答は T4 のコードクローンとして，コードクローン検出器

ここから，BCB ではコード片が短く T4 や非コードクローを評価する研究が行われている [7, 15, 16]．Zhao と Huang

ンの Jaccard 係数が低く，GCJ と CN ではコード片が長くは，DeepSim の評価用に Google Code Jam に提出されたJaccard 係数が高い傾向にあることが分かった．

データセットを公開しており [7]，このデータセットを以さらにベンチマークの頻出 1,000 語同士での Jaccard 係

降，GCJ と呼ぶ．GCJ の解答ソースコードは 12 問に対し数を計測した．BCB と GCJ，BCB と CN は Jaccard 係数1669 個で，コードクローン対は約 275,000 個あり，非コー

が 0.19，0.15 と，GCJ と CN の Jaccard 係数 0.25 よりも

ドクローン対は約 1,116,000 個ある．

低く，GCJ と CN は BCB とよりも類似していて，競技プ

本研究ではメソッド単位のコードクローン検出を行う．

ログラミングを基にしたベンチマーク同士が相対的に類似*3*2

https://codingcompetitions.withgoogle.com/codejamⓒ 2022 Information Processing Society of Japan*4

https://judge.u-aizu.ac.jp/onlinejudge/
https://atcoder.jp

4Vol.2022-SE-210 No.8
2022/3/11

情報処理学会研究報告
IPSJ SIG Technical Report!"#$%&'(%)*#(+*,#$-./0

'( )*

!

'(&)+

!

'( ),

!

%"%&!!*##$###!"!%"$&!!""#$###!"%!"#!!""#$###!"%
&')

'(&-*

!

'( -+

!

'( -,

!

&'(

.*/.+/&'*

2.,34/!

!

3456789:,;<<;=>?@-+-A*+,)BC(D-+-A+0 )BC(E*+,A+0 )BC1E

0.,/1.,
56789:7;!"#$%&'()*+,#-+-./+0#-+-./-+-#*+,./-+-#+0&'1)*+,#-+-./+0#-+&'2)*+,#+0./+0#*+,! ""#$%&'$&()*+!,-.///!"0"12$3456()*+!7//.///!"

図 1

RQ に対する分析手順

していることが確認できた．

tp は true positive, tn は true negative, fp は false positive,
fn は false negative である．MCC 値が 1 の場合正確に予3.2 コードクローン検出器の学習と評価
CCLearner と ASTNN では，出力が閾値を超えていればコードクローンと判定しており，BCB で学習した時の閾値はそれぞれ 0.98 と 0.5 と設定した．しかし，同じ閾値を用いて BCB 以外のベンチマークで学習した時には精度が非常に悪かった．そこで，それぞれのベンチマーク
で正答率が高くなる値を探索して閾値を設定した．その結果，CCLearner では GCJ 学習時 0.17，CN 学習時 0.01，−4

ASTNN では GCJ 学習時 1.1×10−4，CN 学習時 2.8×10とした．

測できており，−1 の場合全く逆の予測をしている．0 の場合が最悪で，正確な予測でも全て反対の予測でも無い予測である．

4. 調査結果
4.1 RQ1 の結果
表 1 は，検出器ごとの f1 値と MCC 値の結果である．以降，それぞれの検出器毎に検出精度を説明する．
まず，CCLearner の結果について述べる．BCB で学習し BCB での評価には，CCLearner の提案論文 [2] でのRQ1 では，それぞれの検出器に対し，BCB で学習を行

f1 値を使用した．BCB で学習した時，f1 値は，学習と評

い GCJ または CN で評価を，また逆に GCJ または CN で価に同じベンチマークを使用して評価すると 0.93 だったの学習を行い BCB で評価を行った．

に対し，GCJ で評価すると 0.109，CN で評価すると 0.357

RQ2 では，それぞれの検出器に対し，コードクローンといずれも検出精度が下がった．GCJ または CN で学習のタイプ分類が行われている BCB で評価を行ったデータ

した時，学習と同じベンチマークで評価すると，f1 値が約を用いて，タイプのごとの精度を調べた．また，タイプご0.55，MCC 値が約 0.3 から 0.35 だったが，BCB で評価すとの Jaccard 係数の中央値と，MCC 値（3.3 節参照）とのると f1 値が約 0.1，MCC 値が約 0.05 から 0.1 と大幅に低相関を調べた．

下した．

RQ3 では，それぞれのコードクローン検出器に対し，

ASTNN の結果について述べる．BCB で学習した時，GCJ で学習を行い CN で評価を，また逆の CN で学習を学習と同じベンチマークで評価すると f1 値が 0.939，MCC

行い GCJ で評価を行った．

値が 0.891 だったのに対し，GCJ または CN で評価すると f1 値が約 0.66，MCC 値が約 0.01 から 0.03 と大幅に下3.3 評価指標

がった．GCJ または CN で学習した時，学習と同じベン

本調査では，コードクローン検出器の精度評価に f1，

チマークで評価すると f1 値が約 0.5，MCC 値が約 0.45 でMatthews Correlation Coefficient（MCC）を用いた．f1

あったが，BCB で評価すると GCJ で学習した検出器の f1

は，precision と recall の調和平均である．MCC は，クラ値が 0.372，MCC 値が 0.001，CN で学習した検出器の f1

スごとに不均衡なデータに対する性能評価としても用いら

値が 0.09，MCC 値が −0.15 と大幅に低下した．

れており [19]，コードクローンと非コードクローンが不均最後に，CodeBERT の結果について述べる．BCB で衡なデータセットに対しても評価するために用いた．以下

学習した時，学習と同じベンチマークで評価すると f1 値がの式 (4) が MCC の計算式である．

0.896，MCC 値が 0.881 だったのに対し，GCJ または CN(tp × tn) − (f p × f n)
M CC = (4)(tp + tn)(tp + f n)(f p + tn)(f p + f n)で評価すると f1 値が約 0.65，MCC 値が約 0.1 と大幅に下ⓒ 2022 Information Processing Society of Japan

がった．GCJ または CN で学習した時，学習と同じベンチ

5Vol.2022-SE-210 No.8
2022/3/11

情報処理学会研究報告
IPSJ SIG Technical Report
表 1

RQ1 の結果：学習と同じ，または異なるベンチマークでの評価
CCLearner

学習 \ 評価

f1

MCC

同じ

ASTNN

異なる

同じ

GCJ: 0.109

異なる

0.939

GCJ: 0.667

CodeBERT
同じ

BCB

0.93

GCJ

0.566

BCB: 0.116

0.522

BCB: 0.372

0.998

CN

0.572

BCB: 8.74 × 10−2

0.481

BCB: 9.00 × 10−2

0.999

CN: 0.357

GCJ: 0.159

GCJ: 2.75 × 10−2

0.896

BCB: 0.651
GCJ: 9.88 × 10−2

–

GCJ

0.340

BCB: 8.47 × 10−2

0.463

BCB: 1.01 × 10−3

0.997

BCB: 4.29 × 10−3

0.318

−2

0.434

BCB: −0.150

0.998

BCB: 4.32 × 10−3

CN: 0.296
BCB: 5.00 × 10

CN: 1.29 × 10−2

0.881

CN: 0.651
BCB: 0.608

BCB

CN

0.891

CN: 0.663

異なる

GCJ: 0.630

CN: 6.12 × 10−2

マークで評価すると f1 値と MCC 値がともに約 1 だったの

RQ2 の答え

に対し，BCB で評価すると f1 値が GCJ 値で学習した検

CCLearner や ASTNN ではコードクローンのタイプ

出器で 0.6，CN で学習した検出器で 0.65，MCC 値がいずと検出精度では関係が強く，CodeBERT ではコード

れも約 0.004 と大幅に下がった．

クローンのタイプと検出精度では関係が弱い．

RQ1 の答え
いずれのコードクローン検出器も，学習と評価に異なるベンチマークを用いると検出精度が同じベンチマー
クで評価した時に比べて下がる．

4.3 RQ3 の結果
表 3 は，検出器ごとの MCC 値の結果である．以降，それぞれの検出器毎の MCC 値を説明する．
まず，CCLearner は，GCJ または CN で学習を行い，

4.2 RQ2 の結果
表 2 は，クローンタイプごとの MCC の結果である．以降，それぞれの検出器毎の MCC 値を説明する．

学習と同じベンチマークで評価した場合に比べて，競技プ
ログラミングを基にした異なるベンチマークでの評価ではMCC 値が下がっていた．OSS を基にした BCB で学習しまず，CCLearner では，MCC 値が GCJ と CN のいずた場合と比べると，BCB，CN のいずれのデータセットでれのデータセットで学習した時も，異なるベンチマークで学習した場合も GCJ で評価すると MCC 値が約 0.16 で，ある BCB で評価するとコードクローンのタイプが T1 から

BCB，GCJ のいずれのデータセットで学習した場合も CN

T4 へ類似度が低くなるに従って下がった．コードクロー

で評価すると MCC 値が約 0.29 と同等であった．

ンのタイプのそれぞれの Jaccard 係数の中央値と MCC 値

ASTNN は，GCJ または CN で学習を行い，学習と同の相関係数は，GCJ で学習した場合が 0.982，CN で学習

じベンチマークで評価した場合に比べて，競技プログラ

した場合が 0.997 となった．

ミングを基にした異なるベンチマークでの評価では MCC

ASTNN では，MCC 値が GCJ，CN のいずれのデータ値が下がっていた．しかし，OSS を基にした BCB で学習

セットで学習した時も，異なるベンチマークである BCB

した場合と比べると，CN で学習し GCJ での評価で MCCで評価するとコードクローンのタイプが T1 から T4 へ類

値が約 0.12 と BCB で学習時の約 0.03 から上がっており，似度が低くなっていくに従って下がる傾向にあった．コー

GCJ で学習し CN での評価で MCC 値が約 0.25 と BCB でドクローンのタイプのそれぞれの Jaccard 係数の中央値と学習時の約 0.01 から上がっている．

MCC 値の相関係数は，GCJ で学習した場合が 0.970，CNで学習した場合が 0.995 となった．

最後に，CodeBERT は，GCJ または CN で学習を行い，学習と同じベンチマークで評価した場合に比べて，競最後に，CodeBERT では，MCC 値が GCJ，CN のい

技プログラミングを基にした異なるベンチマークでの評価

ずれのデータセットで学習した時も，異なるベンチマーク

では MCC 値が下がっていた．しかし，OSS を基にしたである BCB で評価するとコードクローンのタイプごとにBCB で学習した場合と比べると，CN で学習し GCJ での精度はほとんど差がなく約 0 と精度が低かった．コードク

評価で MCC 値が約 0.25 と BCB で学習時の約 0.10 から

ローンのタイプそれぞれの Jaccard 係数の中央値と MCC

上がっており，GCJ で学習し CN での評価で MCC 値が約値の相関係数は，GCJ で学習した場合が −0.308，CN で0.42 と BCB で学習時の約 0.06 から上がっている．

学習した場合が 0.217 となった．

ⓒ 2022 Information Processing Society of Japan

6

Vol.2022-SE-210 No.8
2022/3/11

情報処理学会研究報告
IPSJ SIG Technical Report
表 2

RQ2 の結果：学習と異なるベンチマークで評価した MCC 値（クローンタイプごと）
CCLearner

ASTNN

CodeBERT

タイプ \ 学習データ

GCJ

CN

GCJ

CN

GCJ

CN

T1

0.961

0.967

0.713

0.851

−2.66 × 10−4

−1.14 × 10−3

T2

0.853

0.911

0.517

0.687

1.56 × 10−3

1.66 × 10−2

ST3

0.626

0.699

0.518

0.456

3.90 × 10−3

7.78 × 10−5−3

6.12 × 10−4−3

4.38 × 10−3

0.462

MT3

7.45 × 10

WT3/T4
表 3

0.281
−2

4.08 × 10

1.29 × 10

0.174
−2

−5.96 × 10

−3−2

−1.44 × 10

−0.1594.38 × 10

RQ3 の結果：競技プログラミングを基にしたベンチマーク間で学習，評価した MCC
CCLearner

ASTNN

CodeBERT

学習 \ 評価

GCJ

CN

GCJ

CN

GCJ

CN

BCB

0.159

0.296

2.75 × 10−2

1.29 × 10−2

9.88 × 10−2

6.12 × 10−2

異なる競プロ

0.166

0.293

0.121

0.247

0.252

0.415

RQ3 の答えは正確に検出できる反面，類似度が低い T3 及び T4 コード

いずれのコードクローン検出器も同じベンチマーク内クローンに対しては正確に検出されたか確認する必要があで学習と評価をした時の精度を維持できてはいなかっるが．しかし，学習データと類似するデータセットに対した．しかし，ASTNN や CodeBERT では類似するベて検出精度が比較的に高いため，適用対象と類似するデー

ンチマークに対してはコードクローン検出の精度が上タで学習することで正確にコードクローンが検出することがる傾向にある．CCLearner に関しては，類似するベが期待できる．最後に，CodeBERT は学習データと類似す

ンチマークに対してはコードクローンの検出精度がほるデータセットに適用する場合，検出精度が比較的に高い

とんど変わらない．

ため，適用対象と類似するデータで学習することで正確にコードクローンが検出することが期待できる．また，コー

5. 考察

ドクローンのタイプに影響受けにくい．

5.1 分析結果の考察

5.2 妥当性への脅威

本実験の 3 つの RQ から以下のことが分かった．

• RQ1 から本実験で調査したコードクローン検出器は汎化性能が悪いこと本実験では，提案論文で使用された学習データが最適であると考え提案時の BCB を使用し，その他の学習データには一般的に用いられている GCJ と新たなベンチマーク• RQ2 からコードクローンのタイプによって検出精度がとして公開された CN を使用した．また，BCB 以外のデー

CCLearner と ASTNN は変わり，CodeBERT は変わタセットで学習し BCB で評価する時には，どの検出器もらないこと

同じデータで評価出来るように ASTNN で用いられていた• RQ3 から学習データと評価データの性質が類似してい

BCB を用いた．これらのデータが精度に影響しているこることで，ASTNN と CodeBERT は検出精度が上がとは考えられるが，本実験で主張するコードクローンの汎り，CCLearner は検出精度が変わらないこと

化性能の低さに大きな影響を及ぼすことはないと考えられこれらの結果から CCLearner，ASTNN，CodeBERT を開る．また，今回選択した深層学習を用いたコードクローン

発者が実開発現場で使用する場合の有効な知見が次のよう検出器は，互いに異なる特徴を持った検出器を選んでおり，に得られた．CCLearner，ASTNN，CodeBERT は汎化性

パラメータも固定して実験を行ったが，これも本実験で主能が低いため，学習データと適応対象が異なる場合，検出張するコードクローンの汎化性能の低さに大きな影響を及されたコードクローンが正く検出されたか確認する必要がぼすことはないと考えられる．実験に使用した評価指標もある．CCLearner を学習データと類似しているデータに適同様に，f1 値はコードクローンの研究において一般的に用用する場合，コードクローンの検出精度が低いため，検出いられており，MCC 値については機械学習の分野などでされたコードクローンが正く検出されたか確認する必要が一般的に用いられている評価指標であり，本実験の結果にある．また，T3 及び T4 など類似度が低いコードクロー

影響を及ぼすことはないと考えられる．

ンを含むデータセットで学習する場合でも T1 及び T2 は正確に検出できる反面，T3 及び T4 の検出精度が低いた

6. まとめめ，コードクローンが正確に検出されたかを確認する必要

本調査では，深層学習を用いたコードクローン検出器にがある．ASTNN を T3 及び T4 など類似度が低いコード

対して学習と異なるベンチマークを用いて評価を行った，クローンを含むデータセットで学習する場合，T1 及び T2ⓒ 2022 Information Processing Society of Japan7

Vol.2022-SE-210 No.8
2022/3/11

情報処理学会研究報告
IPSJ SIG Technical Report

その結果，深層学習を用いたコードクローン検出器に対しても汎化性能の問題があることが分かった．また，コード[13]

クローンのタイプと異なるベンチマークに対する検出精[14]度の関係は CCLearner と ASTNN では強く，CodeBERT
では弱いことが分かった．また，検出器の学習に適用したいソースコード群と類似した性質のデータを用いること
で，ASTNN と CodeBERT は検出精度が上がることが分
かった．
謝辞

[15]

本研究は JSPS 科研費 18H04094, JP19K20240,

JP20K11745，21H03416，な ら び に JST さ き が け JPMJPR21PA の助成を受けた．
参考文献
[1]

[2]

[3]

[4]

[5]

[6]

[7]

[8]

[9]

[10]

[11]

[12]

Kamiya, T., Kusumoto, S. and Inoue, K.: CCFinder: amultilinguistic token-based code clone detection system
for large scale source code, IEEE Trans. Softw. Eng.,
Vol. 28, No. 7, pp. 654–670 (2002).
Li, L., Feng, H., Zhuang, W., Meng, N. and Ryder,
B.: CCLearner: A Deep Learning-Based Clone Detection Approach, Proc. of ICSME, pp. 249–260 (2017).
Zhang, J., Wang, X., Zhang, H., Sun, H., Wang, K. andLiu, X.: A Novel Neural Source Code Representation
Based on Abstract Syntax Tree, Proc. of ICSE, pp. 783–
794 (2019).
Feng, Z., Guo, D., Tang, D., Duan, N., Feng, X., Gong,
M., Shou, L., Qin, B., Liu, T., Jiang, D. and Zhou, M.:
CodeBERT: A Pre-Trained Model for Programming andNatural Languages, Proc. of EMNLP (2020).
福家範浩，藤原裕士，吉田則裕，崔 恩瀞，井上克郎： 深層学習を用いたコードクローン検出器の汎化性能に関する調査，情報処理学会研究報告，Vol. 2021-SE-207, No. 12,
pp. 1–7 (2021).
Svajlenko, J., Islam, J. F., Keivanloo, I., Roy, C. K. andMia, M. M.: Towards a Big Data Curated Benchmark ofInter-project Code Clones, Proc. of ICSME, pp. 476–480(2014).
Zhao, G. and Huang, J.: DeepSim: Deep Learning CodeFunctional Similarity, Proc. of ESEC/FSE, pp. 141–151(2018).
Roy, C. K., Cordy, J. R. and Koschke, R.: Comparison and evaluation of code clone detection techniques
and tools: A qualitative approach, Science of Computer
Programming, Vol. 74, No. 7, pp. 470–495 (2009).
Tang, D., Qin, B. and Liu, T.: Document modeling withgated recurrent neural network for sentiment classiﬁcation, Proc. of EMNLP, pp. 1422–1432 (2015).
Devlin, J., Chang, M.-W., Lee, K. and Toutanova, K.:
BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding, Proc. of NAACL-HLT
2019, Minneapolis, Minnesota, Association for Computational Linguistics (2019).
Liu, Y., Ott, M., Goyal, N., Du, J., Joshi, M., Chen,
D., Levy, O., Lewis, M., Zettlemoyer, L. and Stoyanov,V.: RoBERTa: A robustly optimized bert pretraining
approach, arXiv preprint arXiv:1907.11692 (2019).
Farrahi, V., Niemelä, M., Tjurin, P., Kangas, M., Korpelainen, R. and Jämsä, T.: Evaluating and Enhancing the Generalization Performance of Machine Learning
Models for Physical Activity Intensity Prediction From
Raw Acceleration Data, IEEE J Biomed Health Inform,ⓒ 2022 Information Processing Society of Japan

[16]

[17]

[18]

[19]

Vol. 24, No. 1, pp. 27–38 (2020).
Ambient Software Evoluton Group: BigCloneBench,https://github.com/clonebench/BigCloneBench.
Lu, S., Guo, D., Ren, S., Huang, J., Svyatkovskiy, A.,
Blanco, A., Clement, C. B., Drain, D., Jiang, D., Tang,
D., Li, G., Zhou, L., Shou, L., Zhou, L., Tufano, M.,
Gong, M., Zhou, M., Duan, N., Sundaresan, N., Deng,
S. K., Fu, S. and Liu, S.: CodeXGLUE: A Machine
Learning Benchmark Dataset for Code Understanding
and Generation, CoRR, Vol. abs/2102.04664 (2021).
Su, F.-H., Bell, J., Kaiser, G. and Sethumadhavan, S.:
Identifying functionally similar code in complex codebases, Proc. of ICPC, pp. 1–10 (2016).
Wu, Y., Zou, D., Dou, S., Yang, S., Yang, W., Cheng,F., Liang, H. and Jin, H.: SCDetector: Software Functional Clone Detection Based on Semantic Tokens Analysis, Proc. of ASE, pp. 821–833 (2020).
Puri, R., Kung, D. S., Janssen, G., Zhang, W., Domeniconi, G., Zolotov, V., Dolby, J., Chen, J., Choudhury,M., Decker, L. et al.: CodeNet: A Large-Scale AI for
Code Dataset for Learning a Diversity of Coding Tasks,
arXiv preprint arXiv:2105.12655 (2021).
福 家 範 浩： 深 層 学 習 を 用 い た コ ー ド ク ロ ー ン 検 出 器の 汎 化 性 能 分 析 ，大 阪 大 学 大 学 院 情 報 科 学 研 究 科 修
士学位論文 https://sel.ist.osaka-u.ac.jp/lab-db/
Mthesis/archive/157/157.pdf (2022).
Jurman, G., Riccadonna, S. and Furlanello, C.: A comparison of MCC and CEN error measures in multi-classprediction, PLoS ONE (2012).

8