情報処理学会論文誌

Vol.58 No.4 1–10 (Apr. 2017)

機械学習を利用した構文情報に基づく自動生成ファイルの特定
下仲 健斗1,a)

鷲見 創一1,b)

肥後 芳樹1,c)

楠本 真二1,d)

受付日 2016年8月5日, 採録日 2017年1月10日

概要：近年，ソースコード解析に関する研究がさかんに行われている．解析対象のソースファイルの中にはしばしば自動生成ファイルが含まれており，多くの場合自動生成ファイルは解析の対象にはならず除外される．自動生成ファイルを除外する方法として，自動生成ファイル内に存在する特有のコメント文を文字列検索することにより特定するという方法がある．しかしこの方法では，自動生成ファイル特有のコメント文が消された場合に，自動的に自動生成ファイルを特定することができない．また，ソースファイ
ルが自動生成ファイルであるかどうか，1 つずつ目視で特定するのは時間的コストが大きい．そこで本研
究では，機械学習を用いて任意の自動生成ファイルを自動的に特定する手法を提案する．提案手法では，
ソースファイルの構文情報を学習することで自動生成ファイルであるかどうかを判定する．また，提案手法を評価するために，4 つの自動生成プログラムから生成された自動生成ファイル群を対象に実験を行った．その結果，90%以上の高い精度で自動生成ファイルを特定できることを確認した．
キーワード：自動生成ファイル，機械学習，ソースコード解析，ソフトウェア保守

Identifying Auto-Generated Files by Using Machine Learning
Techniques Based on Syntactic Information
Kento Shimonaka1,a)Soichi Sumi1,b)

Yoshiki Higo1,c)Shinji Kusumoto1,d)Received: August 5, 2016, Accepted: January 10, 2017

Abstract: These days, source code analysis is keenly studied because it came into use in practice and research such as mining source code repositories. We often see auto-generated ﬁles in target repositories, andremove them prior to source code analysis because they can be noise for source code analysis. We can remove
auto-generated ﬁles by searching particular comments which exist in auto-generated ﬁles. However, we cannot identify auto-generated ﬁles automatically with such a way if comments have been deleted. Moreover,manually identifying auto-generated ﬁles makes us spend too much time. Therefore, in this study we propose
a method to identify auto-generated ﬁles automatically by using machine learning techniques. In our method,
we learn syntactic information of source code. Then, we can identify whether source ﬁles are auto-generated
ﬁles or not. In this study, in order to evaluate the proposed method, we conducted experiments with source
ﬁles generated by four kinds of code generators. As a result, we conﬁrmed that the proposed method wasable to identify auto-generated ﬁles with high accuracy.
Keywords: auto-generated ﬁle, machine learning techniques, source code analysis, software maintenance

1

a)
b)
c)
d)

大阪大学大学院情報科学研究科
Graduate School of Information Science and Technology,
Suita, Osaka 565–0871, Japans-kento@ist.osaka-u.ac.jp
s-sumi@ist.osaka-u.ac.jp
higo@ist.osaka-u.ac.jp
kusumoto@ist.osaka-u.ac.jp

c 2017 Information Processing Society of Japan

1. はじめに
近年，ソースコード解析に関する研究がさかんに行われている．たとえば，ソースコード中に存在する互いに一致
または類似したコード片であるコードクローンに関する研1

情報処理学会論文誌

Vol.58 No.4 1–10 (Apr. 2017)

究や，ソフトウェア開発履歴データなどを対象に分析を行

以降，2 章では準備として自動生成ファイルについて詳うリポジトリマイニングに関する研究などが行われてい細に述べる．3 章では提案手法について説明し，4 章では評る．解析対象のソースファイル群の中にはしばしば自動生

価実験について述べる．5 章では評価実験の結果について

成ファイルが含まれており，ソースコード解析を行う際に考察を行い，6 章では妥当性への脅威について述べる．最自動生成ファイルが弊害となることがある [1], [2]．たとえ後に 7 章で本研究のまとめと今後の課題について述べる．

ば，コードクローン検出において，自動生成ファイルから多くのコードクローンが検出されることにより他のコード

2. 準備

クローンの発見が難しくなってしまう [3], [4]．また，リポ

本章では，自動生成ファイルの定義，収集および特定方

ジトリマイニングにおいて，ソースファイルを分析する際法について述べる．自動生成ファイルとは，プログラムにに自動生成ファイルの存在によって解析時間が増加してしよって自動的に生成されたソースファイルのことである．

まうケースがある [5], [6]．したがって，ソースコード解析

ソースファイルを自動で生成するプログラムは多数存在し，において自動生成ファイルは除外すべき存在である．

たとえば GUI プログラムを生成する GUI ビルダー，ある

通常，自動生成ファイルにはそれ自身が自動生成ファイ

プログラミング言語を別の言語に変換するトランスレー

ルであると明示するためのコメント文が残されている．ゆタ，構文解析器を生成するパーサジェネレータなどがある．

えに，そのようなソースファイルに対しては grep コマン

本研究では比較的収集が容易であるパーサジェネレータにドなどを用いれば特定および除外することができる．しかよって生成されたファイル（パーサジェネレータ生成ファ

しソースファイルを変更および修正していく過程でそのコイルと呼ぶ）を対象とする．

メント文が消されてしまい，上記の方法が使用できない場

また，研究の準備段階において，著者らがパーサジェネ

合がある．コメント文が消された自動生成ファイルを 1 つ

レータ生成ファイルに対して目視による調査を行ったとこ

ずつ目視で特定するのは時間的コストが大きい．したがっろ，ソースコードにおいて以下のような特徴があることがて，そのようなコメント文が消されたものも含めて自動生

分かった．

成ファイルを自動的に特定することが必要となる．
コメント文が消された自動生成ファイルを自動的に特定するためには，自動生成ファイルにおける何らかの特徴を• switch-case 文が多い
• 16 進数の数値リテラルなど，人が書かないようなプログラム要素が多く存在する発見する必要がある．たとえば，自動生成プログラムが生自動生成ファイルのソースコードの一部を図 1 の下部に示成するファイル名にはいくつかの規則が定められている．

す．このように，人が書いたソースコードとプログラムにしたがって，その規則に基づき，正規表現などを用いて検よって自動的に生成されたソースコードには視覚的な差異

索を行えば自動生成ファイルを特定できると考えられる．

が存在するため，目視によって自動生成ファイルを特定す

しかしコメント文の場合と同様に，ファイル名が変更されることは可能である．しかし，目視によって自動生成ファ

れば特定できなくなる．また，コメント文が残っていた場

イルを特定すると時間的コストが大きくなってしまう．

合でも grep コマンドの引数として適切な文字列を与えな

通常，自動生成ファイルにはそれ自身が自動生成ファイ

ければ特定することはできない．そこで本研究では，機械

ルであると明示するためのコメント文が記述されている．

学習を用いて，与えられたソースファイルが自動生成ファ
イルか否かを自動的に判定する手法を提案する．
機械学習とは，既知のデータを学習することにより未知のデータの性質を予測・特定する技術のことである．提案
手法では，まず自動生成ファイルだと判明しているソース
ファイルを収集する．収集したソースファイル群から，それらの構文情報を取得する．本研究では，ソースファイルにおける各プログラム要素の出現回数を構文情報とする．
構文情報を取得することで，コメント文の有無にかかわらず自動生成ファイルの特徴を学習することができる．取得
した構文情報から，与えられたソースファイルが自動生成
ファイルか否かを判定する学習モデルを構築する．
提案手法の評価を行うため，4 つの自動生成プログラム
によって生成された自動生成ファイル群を対象とする評価実験を行った．実験の結果，90%以上の高い精度で自動生成ファイルを特定できることを確認した．

c 2017 Information Processing Society of Japan

図 1 自動生成ファイルのコメント文の例

Fig. 1 Example of code comments in auto-generated files.

2

情報処理学会論文誌

Vol.58 No.4 1–10 (Apr. 2017)

表 1 自動生成プログラムの種類とファイル数

表 2

Table 1 Auto-generated source files.

データセット作成時におけるノイズデータ含有率

Table 2 Ratio of noise data in making data set.

自動生成プログラム

ANTLR

JavaCC

JFlex

SableCC

ファイル群

ファイル数

9,218

15,033

3,737

16,603ANTLR 生成ファイル群

0%

JavaCC 生成ファイル群

0.6%

自動生成ファイルのコメント文の例を図 1 の上部に示す．
このようなコメント文を文字列検索することにより，自動

ノイズデータ含有率

JFlex 生成ファイル群

1%

SableCC 生成ファイル群

0.4%

自動生成でないファイル群

3%

生成ファイルを自動的に特定することができる．しかし，機能追加やバグ修正などの過程においてこのコメント文が消されてしまう場合がある．そのため，コメント文検索だ

イルが含まれている可能性があるため，それらをコメント

けでは特定できない自動生成ファイルが存在する．また，文検索により特定し，除外した．

コメント文が残っていた場合でも grep コマンドの引数とし上記の方法で収集した自動生成ファイル群および自動生て適切な文字列を与えなければ特定することはできない．

成でないファイル群の中には，誤って自動生成ファイルとみなしているもの，もしくは誤って自動生成でないファ

2.1 ソースファイルの収集

イルとみなしているもの（これらをノイズデータと呼ぶ）

自動生成ファイルを特定するためのデータセットとしが存在している可能性がある．そこで，ノイズデータを除て，自動生成ファイル群と自動生成でないファイル群を用去するために目視確認を行った．しかし，すべてのソース

いる．本研究では，それらをオープンソースソフトウェア

ファイルを目視確認するのは時間的コストが膨大であるたから収集した．その収集方法について述べる．

め，4 種類の自動生成ファイル群，および自動生成でない

まず自動生成ファイルの収集方法について説明する．上ファイル群に対し，以下の処理を行った．

述したとおり，自動生成ファイルにはそれ自身が自動生成

1. 各 1,000 ファイルずつランダムに抽出するファイルであると明示するためのコメント文が記述されて

2. 目視確認によりノイズデータを除去するいるため，そのコメント文の一部を検索キーワードとして用

3. 除去したソースファイルの数だけ，再度ランダムに抽いて自動生成ファイルを収集した．本研究では，GitHub [7]からコメント文検索により収集した．しかし GitHub 上の検索では 1,001 件以上の検索結果を取得することができな

出する

4. 3. で抽出したソースファイルに対して目視確認によりノイズデータを除去する

い．この問題に対して高澤らは，検索結果数が 1,000 件を

上記の 3. および 4. を繰り返し行い，ANTLR 生成ファイ

超えないようなファイルサイズを指定し，ファイルサイズ

ル，JavaCC 生成ファイル，JFlex 生成ファイル，SableCCごとに分割して収集することで対応している [8]．本研究

生成ファイル，自動生成でないファイルがそれぞれ 1,000においても同様の方法を用いた．また，jsoup [9] を用いた

ファイルずつ存在するデータセットを作成した．処理前にウェブスクレイピングを行い，自動で収集を行った．なお，

おける，各自動生成ファイル群および自動生成でないファ本研究では自動生成ファイルに人の手が加わったものも自イル群に含まれていたノイズデータの割合を表 2 に示す．

動生成ファイルとみなす．収集した自動生成ファイルは，コメント文検索により誤って自動生成ファイルとみなされ4 つの自動生成プログラムから生成された自動生成ファイていた要因としては，キーワードとして用いたコメント文

ルである．4 つの自動生成プログラム名と，収集した自動が文字列リテラルとしてソースコード中に存在していたこ

生成ファイルのうち各自動生成プログラムによって生成さとがあげられる．

れた自動生成ファイルの数を表 1 に示す．
これらの自動生成プログラムはパーサジェネレータで2.2 ファイル名検索による自動生成ファイルの特定あり，Java で記述されたソースファイルを生成する．以

コメント文検索以外の自動生成ファイル特定手法とし

降，ANTLR によって生成されたファイル，JavaCC によって，ファイル名による検索がある．通常，自動生成ファイて生成されたファイル，JFlex によって生成されたファ

ルのファイル名には，自動生成プログラムごとに定められ

イル，SableCC によって生成されたファイルをそれぞれている生成規則がある．たとえば SableCC では，以下の

ANTLR 生成ファイル，JavaCC 生成ファイル，JFlex

ようなものが定められている [11]．

生成ファイル，SableCC 生成ファイルと呼ぶ．
次に，自動生成でないファイルの収集方法について説明• AXxx.java• TXxx.java

する．本研究では，大規模なソースファイルの集合である

ただし，X は大文字の任意のアルファベット，x は小文字

Apache リポジトリ [10] からソースファイルをランダムにの任意のアルファベットを表す．2.1 節で作成したデータ収集した．また，Apache リポジトリの中に自動生成ファ

セットを用いて，ファイル名による自動生成ファイルの特c 2017 Information Processing Society of Japan

3

情報処理学会論文誌

Vol.58 No.4 1–10 (Apr. 2017)

定を行った．4 つの自動生成プログラムごとのファイル名
生成規則を表 3 に示す．表中の ClassName は Java ファ
イルのクラス名を表す．正規表現を用いて，これらの生成者らは考えた．

3. 提案手法

規則にマッチするものを自動生成ファイルとして特定す本研究では，機械学習を利用し，自動生成ファイルの構る．また，これらの生成規則にマッチしないものを自動生

文情報を学習することで自動生成ファイルを自動的に特定成でないファイルとみなす．表 4 にファイル名検索によする手法を提案する．提案手法の概要を図 2 に示す．本研

る自動生成ファイル特定の結果を示す．ANTLR 生成ファ究における提案手法の入力は，学習データ（自動生成ファ

イル群，JavaCC 生成ファイル群，SableCC 生成ファイル

イル群と自動生成でないファイル群）とテストデータ（未群においては 1,000 ファイル中約 800 ファイルの自動生成

知のソースファイル）である．学習データを用いて構築しファイルをそれぞれ特定できているのに対し，JFlex 生成

た学習モデルに，テストデータの構文情報を与えることで，ファイル群は 79 ファイルと極端に少なくなっていること

テストデータが自動生成ファイルか自動生成でないファイが分かる．これは，JFlex のファイル名生成規則の数が少ルかを判定し，結果を出力する．学習データの特徴のこと

ないことが要因と考えられる．このことから，ファイル名

を説明変数と呼び，予測したいテストデータの性質のこと

生成規則だけでは自動生成ファイルを特定するのに十分でを目的変数と呼ぶ．
提案手法は次の 2 ステップから構成される．Step 1 ではないことが分かる．

は，学習データから構文情報を取得し，学習モデルを構築

2.3 自動生成ファイルの特定手法
自動生成ファイルを自動的に特定する手法として，著者らが知る限りでは，コメント文検索とファイル名検索があげられる．コメント文検索では，コメント文が削除されている場合うまく機能せず，ファイル名検索では，十分な量のファイルを特定できないといった問題が存在する．一方で，人が書いたソースコードとプログラムによって自動的に生成されたソースコードには視覚的な差異が存在するため，目視では容易に特定することが可能である．ソース
コードの視覚的な差異は，そこに存在している構文の違いによるものであるため，構文情報を利用することにより，

図 2高い精度で自動生成されたソースコードを特定できると著提案手法の概要

Fig. 2 Overview of the proposed technique.

表 3 自動生成プログラムのファイル名生成規則

Table 3 Rules of generating file names on each parser generator.
自動生成プログラム

ANTLR

生成規則

[ClassName]Lexer.java，[ClassName]Parser.java，[ClassName]Listener.java，[ClassName]BaseListener.java

JavaCCJJT[ClassName]State.java，[ClassName]Constants.java，Node.java，
ParseException.java，SimpleCharStream.java，SimpleNode.java，Token.java，TokenMgrError.java，ASTPerl.java，ASTPython.java，[ClassName]TreeConstants.java，[ClassName]Visitor.java

JFlex

Yylex.java，[ClassName].java

SableCC

Lexer.java，LexerException.java，Parser.java，ParserException.java，DepthFirstAdapter.java，Analysis.java，Switch.java，Switchable.java，TXxx.java，
Token.java，AXxx.java，Start.java，Node.java，State.java
表 4

ファイル名検索による自動生成ファイル特定の結果

Table 4 Results of identifying auto-generated files by searching file names.
自動生成プログラム

特定した自動生成ファイル数特定した自動生成でないファイル数

ANTLR

894

986

JavaCC

767

989

JFlex

79

1,000

SableCC867

965

c 2017 Information Processing Society of Japan

4

情報処理学会論文誌

Vol.58 No.4 1–10 (Apr. 2017)

築するアルゴリズムとして，Decision Tree [12]，Random

Forest [13]，Naive Bayes [14]，SVM [15] を用いる．これらは機械学習を行う上で代表的なものである．また学習モデ
ルを構築する際，説明変数が多いと過学習という状態に陥り，精度が低下することが知られている [16]．そこで，すべての説明変数を用いるのではなく，有用な説明変数のみを選択するため，変数選択という処理を行う．変数選択を行うアルゴリズムとしてフィルタ法とラッパ法が知られており，多くの場合ラッパ法を用いた方が予測精度が向上
することが示されているため，本研究ではラッパ法を用いる [17]．

3.2 Step 2：学習モデルの適用
Step 2 では，テストデータに対して学習モデルを適用する．そのために，自動生成ファイルか否かを判定したい
ソースファイルをテストデータとして用意する．用意したテストデータの構文情報を Step 1 と同様に取得する．テ
ストデータにおける説明変数は，Step 1 で，学習データにおいて選択されたものと同じである．以上の処理を行った
後，テストデータに対して学習モデルを適用することで，自動生成ファイルか否かを判定する．

4. 評価実験
本章では，提案手法を評価するために行った 3 つの実験と，その実験結果について述べる．
図 3 構文情報の取得

Fig. 3 Obtaining syntax information.

4.1 実験概要
提案手法の評価を行うために，3 つの実験を行った．そする．Step 2 では，自動生成ファイルかどうかを判定したの概要を以下に示す．

いテストデータに対して学習モデルを適用する．以降，各

実験 1

ステップについて詳細に説明する．

実験 2

3.1 Step 1：学習モデルの構築
Step 1 では，学習データから構文情報を取得し，学習モデルを構築する．構文情報として，ソースコードの AST（Abstract Syntax Tree：抽象構文木）ノードを用いる．説

提案手法の Step 1 において構築する学習モデルの評価をするため，交差検証を行う．
提案手法の Step 2 において，どの程度テストデー

タの中から自動生成ファイルを特定できるか確認するため，大規模なソースファイルの集合を学習モデルに
適用する．
実験 3

ファイル名検索による自動生成ファイル特定手法

明変数がとる値は，各 AST ノードの出現回数であり，整が提案手法における誤検出を防ぐことができるか確認数値である．また，目的変数は自動生成コードであるかそするため，2 つの手法を組み合わせた上で交差検証をうでないか，である．各説明変数と目的変数をベクトルと行う．

して表したものを構文情報とする．構文情報の取得には，

Murakami らの既存研究と同様の方法を用いる [19]．具体

4.2 実験対象

的には，Eclipse JDT 3.10 [20] を用いて AST 解析を行う．

学習データとして，2.1 節で述べたデータセットを用い

Eclipse JDT 3.10 では 84 種類の AST ノードが定義されてた．加えて，4 種類の自動生成ファイル計 4,000 ファイル

いるが，そのうち 3 つはコメント文に関するノードであるの中から 1,000 ファイルをランダムで抽出した．このソーので，本研究ではコメント文に関するノードを除いたもの

スファイル群を MIX ファイル群と定義する．また，実験を説明変数とする．つまり本研究では 81 個の説明変数が2 におけるテストデータには，大規模なソースファイルの存在することになる．構文情報の例を図 3 に示す．構文情集合である UCI Source Code Data Sets [18]（以降，UCI

報を取得した後，学習モデルを構築する．学習モデルを構

datasets と呼ぶ）を用いた．

c 2017 Information Processing Society of Japan

5

情報処理学会論文誌

Vol.58 No.4 1–10 (Apr. 2017)

表 5

交差検証の精度

Table 5 Results of cross validation.
アルゴリズムANTLRPJavaCC
R

P

JFlex
R

P

SableCC
R

P

MIX
R

P

R

Decision Tree

99.9%

99.9%

97.0%

97.0%

99.4%

99.4%

96.3%

96.2%

95.3%

95.3%
80.6%

Naı̈ve Bayes

98.8%

98.8%

88.0%

85.7%

99.5%

99.5%

82.7%

78.4%

85.3%

Random Forest

99.9%

99.9%

97.3%

97.3%

99.7%

99.7%

96.1%

96.1%

96.8%

96.8%

SVM

99.8%

99.8%

95.7%

95.7%

99.6%

99.6%

86.8%

84.5%

85.2%

79.1%

また，変数選択，学習モデルの構築およびテストデータの予測には，Java で開発された機械学習ライブラリである

表 6

Weka [21] を使用した．
4.3 評価尺度
実験の評価尺度として，Precision と Recall を用いる．

UCI datasets に学習モデルを適用した結果

Table 6 Results of applying learning models to UCI datasets.

特定された自動生成ファイルの数
目視確認により自動生成ファイルと判断された数

以下，それぞれの尺度の定義について説明する．

Precision

146,346

全ファイル数

Precision

学習モデルによって自動生成ファイルと判定

MIX

837

ANTLR

157

MIX

552

ANTLR

106

MIX

65.9%

ANTLR 67.5%

されたソースファイルのうち，実際に自動生成ファイ
ルであるものの割合

Recall

実際に自動生成ファイルであるもののうち，学習モデルによって自動生成ファイルと判定されたものの割合
実験 1 および実験 3 の評価尺度は Precision と Recall の両方を算出した．実験 2 では，テストデータとして用いる

UCI datasets のうち，実際に自動生成であるファイルの数が未知であるため，Precision のみ算出した．以下，各実験結果について述べる．

ゴリズムごとに比較すると，Random Forest の精度が最も高く，Naı̈ve Bayes の精度が最も低いことが分かる．

4.5 実験 2
実験 1 では，構築した学習モデルの予測精度を評価していた．実験 2 では，自動生成ファイルかどうか判明していない未知のソースファイル群に対して学習モデルを適用した．この実験では，学習モデルによって自動生成ファイルと判定されたソースファイルが，実際に自動生成ファイル

4.4 実験 1
収集した各自動生成ファイル群を用いて 4 種類の学習モデルを構築した．さらに，MIX ファイル群を用いた学習モデルも構築した．構築した計 5 種類の学習モデルの予測精度を評価するために交差検証を行った．交差検証では，まずデータセットを N 個のブロックにランダムに分割する．
分割したブロックのうち，N − 1 個のブロックを学習デー
タとし，残りの 1 個のブロックをテストデータとして評価を行う．この処理を，ブロックを変化させながら N 回行
い，それらの精度の平均をとる．本実験では N = 10 として学習モデルの評価を行った．
交差検証の結果を表 5 に示す．ただし，表中の P と R
はそれぞれ Precision と Recall を表す．多くの場合で Pre-cision ，Recall ともに 90%を超えている．特に，ANTLR
生成ファイルと JFlex 生成ファイルではほとんどの場合で99%と，非常に高い．Precision と Recall を比較すると，全体的に Precision の方が高いことが分かる．自動生成プロ
グラムごとに比較すると，ANTLR 生成ファイルと JFlex
生成ファイルに比べて，JavaCC 生成ファイルと SableCC
生成ファイルの精度が低くなっていることが分かる．アル

かどうかは目視によって判断する必要がある．したがって大規模なソースファイルの集合である UCI datasets すべてに学習モデルを適用すると時間的コストが大きくなるた
め，UCI datasets の一部を用いた．ただし，学習データとテストデータは異なるファイル群である．このテストデー
タを，MIX ファイル群を用いて構築した学習モデルと実験

1 において最も精度が高かった ANTLR 生成ファイル群を用いて構築した学習モデルにそれぞれ適用した．これは，複数種類の自動生成ファイルを特定する際，学習データとして MIX ファイル群を用いるべきか単一種類の自動生成
ファイル群を用いるべきか確認するためである．

UCI datasets に対して学習モデルを適用した結果を表 6に示す．学習モデルを構築するアルゴリズムとして，実験

1 で最も精度が高かった Random Forest を用いている．表中の Precision から，MIX ファイル群を用いて構築した学
習モデルよりも ANTLR 生成ファイル群を用いて構築した学習モデルの方が精度が高いことが分かる．つまり，複数種類の自動生成ファイルを特定する場合，自動生成ファイ
ルの種類ごとの学習モデルを構築した方がよいと考えられる．また予測結果の中には，実際にコメント文が消された
自動生成ファイルが含まれていた．

c 2017 Information Processing Society of Japan

6

情報処理学会論文誌

Vol.58 No.4 1–10 (Apr. 2017)

表 7

パターン 1 の結果

Table 7 Results of pattern 1.
アルゴリズムANTLRPJavaCC
R

P

JFlex
R

SableCC

P

R

P

R

Decision Tree

98.7%

99.9%

99.2%

99.7%

99.6%

99.6%

95.9%

99.4%

Naive Bayes

97.7%

100%

92.8%

99.8%

99.7%

99.7%

90.4%

99.8%

Random Forest

98.9%

99.9%

99.4%

99.9%

99.8%

99.7%

97.3%

99.7%

SVM

98.9%

100%

98.4%

99.8%

99.5%

99.8%

94.1%

98.9%

表 8

パターン 2 の結果

Table 8 Results of pattern 2.
アルゴリズムANTLRPJavaCC
R

P

JFlex
R

P

SableCC
R

P

R

Decision Tree

100%

89.1%

100%

38.7%

100%

7.9%

100%

81.5%

Naive Bayes

100%

89.4%

99.8%

38.6%

100%

8.0%

99.6%

82.1%

Random Forest

100%

89.2%

100%

38.7%

100%

8.0%

100%

82.1%

SVM

100%

88.8%

99.9%

34.0%

100%

8.0%

99.9%

79.9%

4.6 実験 3

また，表 8 から，ほとんどの場合で Precision が 100%近実験 3 では，ファイル名検索による手法が提案手法におい値になっていることが分かる．また，実験 1 の結果と比ける誤検出を防いで予測精度が向上するかどうか確認する

較すると，Recall が大幅に低下していることが分かる．

ため，提案手法と 2.2 節で述べたファイル名検索による手以上のことから，Recall を 100%に近づけたい場合はパ法を組み合わせた．組合せの方法として 2 つのパターンで

ターン 1 を用いればよい．また，Precision を 100%に近づ

交差検証を行い，Precision と Recall を算出した．なお，

けたい場合はパターン 2 を用いればよい．その場合，実験

ファイル名検索による手法は自動生成プログラムごとの生

1 および実験 2 における誤検出を減少させることができる

成規則を用いるので，MIX ファイル群に対しては適用してと考えられる．

いない．以下，2 つのパターンについて説明する．
パターン 1

1. ファイル名検索により自動生成ファイルかどうか
判定する．

5. 考察
本章では，4 章で述べた評価実験，および提案手法における有用性についての考察を行う．

2. 1. で自動生成ファイルと判定されなかったものを学習モデルによって判定する．
パターン 2

5.1 実験 1 の考察
まず，実験 1 の結果について考察する．交差検証の結1. ファイル名検索により自動生成ファイルかどうか

果において，誤検出されたファイルを調べた．その結果，判定する．

誤って自動生成ファイルと判定されたものの特徴として，

2. 1. で自動生成ファイルと判定されたもののうち，以下のことがあげられる．

学習モデルによっても自動生成ファイルと判定されたものを自動生成ファイルとみなす．
パターン 1 では，ファイル名検索による特定と機械学習に• ファイルサイズが小さい．具体的には，説明変数の値
が 10 以下のものが多い• switch-case 文やリテラルが多い

よる特定の，少なくとも一方で自動生成ファイルと判定さファイルサイズが小さいものには，インタフェースや抽象れたものを自動生成ファイルとみなす．パターン 2 では，クラスが多く見られた．このことから，構文情報が少ない

ファイル名検索による特定と機械学習による特定の両方にものは誤検出されやすいと考えられる．しかし，ファイル自動生成ファイルと判定されたものを自動生成ファイルとサイズが小さいファイル群は解析時間の増加などの原因みなす．パターン 1 による検出結果とパターン 2 による検とはなりにくい．したがって，それらの誤検出がコードク

出結果をそれぞれ表 7 と表 8 示す．

ローン検出やリポジトリマイニングに与える影響は小さい

表 7 から，ほとんどの場合で Recall が 100%近い値にと考えられる．また，switch-case 文やリテラルは，2 章でなっていることが分かる．実験 1 の結果と比較すると，多述べたように自動生成ファイルの特徴であるので，それらくの場合で Precision が低下していることが分かる．これが誤検出の要因であると考えられる．

は，ファイル名特定による誤検出が増えたことが要因と考えられる．

c 2017 Information Processing Society of Japan

次に，学習データの変数選択において，どの説明変数が重要であるかを調べた．選択された説明変数のうち，重要7情報処理学会論文誌

Vol.58 No.4 1–10 (Apr. 2017)

表 9 変数選択における説明変数のランキング

Table 9 Ranking of explanatory variables in variable selection.
Top 1

Top 2

ANTLR

switch-case 文

修飾子

配列型

JavaCC

数リテラル

代入

switch-case 文

JFlex

ラベル付きステートメント

配列型

while 文import 宣言

配列型

プリミティブ型

自動生成プログラム

SableCC

Top 3

度の高い上位 3 位を表 9 に示す．表から switch-case 文お

表 10 ファイル名検索による自動生成ファイル特定の結果

よび配列型が複数の自動生成プログラムにまたがって登場

Table 10 Precision and recall of identifying auto-generated
files by searching file names.

していることが分かる．また，自動生成プログラムによって説明変数の重要度は異なっているということが分かる．

自動生成プログラム

5.2 実験 2 の考察
実験 2 の結果について考察する．誤って自動生成ファイ

Precision

Recall

ANTLR

98.4%

89.4%

JavaCC

98.5%

76.7%

JFlex

100%

7.9%

SableCC

96.1%

86.7%

ルであると判定されたファイルの中身を確認した．そのようなファイルの中身は，switch-case 文やリテラルが多く存在するが，それら以外の要素も多く存在するものであった．
すなわち，switch-case 文やリテラルの出現回数は多いが，プログラム要素全体に対する割合が低いことが誤検出の要因と考えられる．自動生成でないファイルが自動生成ファイルであると検出されないために，構文情報以外の説明変数を追加するなど，提案手法の改善が必要となる．
実験 2 の結果は，実験 1 における交差検証の結果と比べると Precision が低下している．これは，学習データにおける自動生成ファイルの割合と，テストデータにおける自動生成ファイルの割合が異なることが要因と考えられる．
実験 2 の結果から，テストデータにおける自動生成ファイ

イル名による自動生成ファイル特定の結果から，Precision
および Recall を算出すると表 10 のようになる．表から，Precision は提案手法による結果と同程度の精度であるが，Recall は提案手法の方が大幅に優れていることが分かる．
このことから，ファイル名検索によって特定できない自動生成ファイルも，提案手法では特定することが可能であるといえる．
また，実験 3 の結果はパターンごとに見れば実験 1 の結果よりも優れているため，提案手法とファイル名検索による手法を組み合わせるのが最も有用であると考えられる．
ただし，ファイル名検索による手法はファイル名規則を調査するコストが必要となる．

ルと自動生成でないファイルでは，自動生成でないファイ
ルの方が数多く存在することが分かる．一方，学習データにおいては自動生成ファイルと自動生成でないファイルが等しい数だけ用いられている．したがって，本実験で用いた学習データには偏りが生じている．これは，不均衡デー
タ問題として知られており，学習モデルの予測精度の低下を招く [22]．改善方法としては以下のようなものが考えられる．

• 学習データに重み付けを行う• 学習データのファイル数の調整を行う
また，MIX ファイル群を用いて構築した学習モデルとJFlex 生成ファイル群を用いて構築した学習モデルを比較すると，後者の方が精度が高かった．このことから，未知のソースファイル群から自動生成ファイルを特定したい場
合，学習データとして複数種類の自動生成ファイル群を用いるのではなく，1 種類の自動生成ファイル群を用いて学習モデルを構築した方が良いと考えられる．

5.3 実験 3 の考察
実験 3 の結果について考察する．2.2 節で述べた，ファc 2017 Information Processing Society of Japan

5.4 ファイル数と予測精度との関係
評価実験で用いた学習データにおける自動生成ファイル
は 1,000 ファイルであるが，このファイル数が学習モデルを構築する上で十分な量であるかは定かではない．そこ
で，学習データの数を変化させながら実験 2 と同様の評価を行った．自動生成ファイルには実験 2 と同様に ANTLR
生成ファイル群および MIX ファイル群を用いており，200
ファイル刻みで変化させている．また，ANTLR 生成ファ
イル群，MIX ファイル群および自動生成でないファイル群の平均 LOC は，それぞれ 2,500，1,260，360 であり，ファイス数が 200，400，600，800 のいずれの場合でも均一となるようにしている．その結果を表 11 に示す．表中の値は Precision を表す．表 11 からは，ファイル数と予測精度の間に相関関係が見られないことから，予測精度の向上には学習データの量を増やすだけでなく，5.2 節で述べたよ
うな方法が必要であると考えられる．また，ANTLR 生成
ファイル群と MIX ファイル群を全体的に比較すると，前者は後者よりも少ない学習データ量で精度を保つことが可能であると考えられる．

8

情報処理学会論文誌

Vol.58 No.4 1–10 (Apr. 2017)

表 11 ファイル数と予測精度との関係

Table 11 Relation between the number of files and precisionof prediction.

る結果が得られる可能性がある．
実験 2 において，学習モデルによって自動生成ファイルと判定されたものが，実際に自動生成ファイルであるかど

ファイル数

ANTLR

MIX

うかは目視確認によるものである．そのため，実際には自

200

58%

48%

動生成ファイルではない可能性がある．

400

60%

28%

600

61%

35%

800

55%

50%

7. おわりに本研究では，機械学習を用いて自動生成ファイルを自動的に特定する手法を提案した．提案手法では，自動生成

5.5 提案手法が有用な場面

ファイル特有のコメント文の有無にかかわらず，自動生成

ソースコード解析を行う者自身が解析対象のソフトウェ

ファイルか否かを判定するために，与えられたソースファアに精通している場合，どのような自動生成ツールが用い

イル群の構文情報を取得し，それらから学習モデルを構築られているのか，どのファイルが自動生成されたものなのした．

かについての知識がある．そのような場合，提案手法を用実験として，4 種類の自動生成ファイルを収集し，それいて自動的に自動生成ファイルを特定する必要性は少ならを対象に評価実験を行った．実験の結果，ほとんどの場

い．しかし，ソースコード解析を行う者が上記のような知合で Precision ，Recall ともに 90%以上と，高い精度で自識を持っていない場合，自動生成ファイルを自動的に特定

動生成ファイルを特定できていることを確認した．

するのは困難である．したがって，そのような場合，提案手法は有用であると考えられる．

さらに，自動生成ファイルかどうか判明していないソー
スファイルに対して学習モデルを適用する実験を行った．

また，実験 2 において，特定された自動生成ファイルのその結果，約 70%の精度で自動生成ファイルを特定できうち，約半数がコメントが消された自動生成ファイルでることを確認した．しかしこの実験では，一部の自動生成あった．これらはコメント文検索では特定できないものでファイルで構築した学習モデルしか適用していないため，ある．提案手法を用いることによって，より多くの自動生

他の自動生成ファイルで構築した学習モデルを適用した結成ファイルを自動的に特定することが可能となる．

果も得る必要がある．
謝辞

5.6 実行時間について
次に，実行時間に関する考察を行う．実験 2 を行ううえ

本研究は，日本学術振興会科学研究費補助金基盤研究（S）（課題番号：JP25220003）の助成を得て行われた．

で要した実行時間を以下に示す．

• 学習データの構文情報取得：114 秒

参考文献• 学習モデルの構築：1.26 秒[1]• テストデータの構文情報取得：35 分• テストデータの分類：1.5 秒
最も時間を要するフェーズは構文情報の取得であること[2]が分かる．実際のソースコード解析における実行時間と比較すると，佐々木らは，約 10 GByte のソースコードからコードクローンを検出する際に約 40 日間を要してい[3]

る [23]．本実験でテストデータとして用いた UCI datasets
は約 1 GByte である．このことから，機械学習による自動生成ファイルの分類は，現実的な時間で実行可能であると考えられる．

6. 妥当性への脅威

[4]

[5]

本章では，評価実験に含まれる妥当性への脅威について
述べる．

[6]

本実験で対象とした自動生成ファイルは，Java で記述された 4 種類の自動生成ファイルである．そのため，他の種類の自動生成ファイルを用いた場合や，他の言語で記述された自動生成ファイルを用いた場合では，本実験とは異な

c 2017 Information Processing Society of Japan[7]

McDonald, P., Strickland, D. and Wildman, C.: Estimating the eﬀective size of autogenerated code in alarge software project, Proc. 17th International Forumon COCOMO and Software Cost Modeling (2002).
Uchida, S., Monden, A., Ohsugi, N., Kamiya, T.,
Matsumoto, K. and Kudo, H.: Software analysis by code
clones in open source software, Journal of Computer Information Systems, Vol.45, No.3, pp.1–11 (2005).
大田崇史，井垣 宏，堀田圭祐，肥後芳樹，楠本真二：
ソフトウェア開発におけるコピーアンドペーストによって生じたコード片に対する調査，情報処理学会研究報告，
ソフトウェア工学研究会報告，Vol.2014, No.22, pp.1–6(2014).
Göde, N. and Koschke, R.: Frequency and risks ofchanges to clones, Proc. 33rd International Conference
on Software Engineering, pp.311–320, ACM (2011).
Harder, J. and Göde, N.: Cloned code: Stable code,
Journal of Software: Evolution and Process, Vol.25,
No.10, pp.1063–1088 (2013).
MacLean, A.C., Pratt, L.J., Krein, J.L. and Knutson,
C.D.: Trends that aﬀect temporal analysis using sourceforge data, Proc. 5th International Workshop on Public Data about Software Development (WoPDaSD’10 ),p.6, Citeseer (2010).
GitHub, available from http://github.com/.

9情報処理学会論文誌

[8]

[9]
[10]
[11]

[12]
[13]
[14]

[15]

[16]
[17]

[18]
[19]

[20]
[21]
[22]

[23]

Vol.58 No.4 1–10 (Apr. 2017)

高 澤 亮 平 ，坂 本 一 憲 ，鷲 崎 弘 宜 ，深 澤 良 彰：Repositoryprobe：リポジトリマイニングのためのデータセッ
ト作成支援ツール，コンピュータソフトウェア，Vol.32,
No.4, pp.4 103–4 114 (2015).
jsoup: Java HTML Parser, available fromhttp://jsoup.org/.
Apache Source code repository, available fromhttp://svn.apache.org/repos/asf/.
Gagnon, E.M. and Hendren, L.J.: Sablecc, an objectoriented compiler framework, Proc. Technology of
Object-Oriented Languages (TOOLS 26 ), pp.140–154,
IEEE (1998).
Breiman, L., Friedman, J., Stone, C.J. and Olshen, R.A.:
Classification and regression trees, CRC press (1984).
Breiman, L.: Random forests, Machine learning, Vol.45,
No.1, pp.5–32 (2001).
Domingos, P. and Pazzani, M.: On the optimality of thesimple bayesian classiﬁer under zero-one loss, Machinelearning, Vol.29, No.2-3, pp.103–130 (1997).
Vapnik, V.: Pattern recognition using generalized portrait method, Automation and Remote Control, Vol.24,
pp.774–780 (1963).
小川英光，山崎一孝：過学習の理論，電子情報通信学会
論文誌 D，Vol.76, No.6, pp.1280–1288 (1993).
Hall, M.A. and Holmes, G.: Benchmarking attribute selection techniques for discrete class data mining, IEEE
Trans. Knowledge and Data Engineering, Vol.15, No.6,
pp.1437–1447 (2003).
Uci Source Code Data Sets, available fromhttp://www.ics.uci.edu/˜lopse/datasets/.
Murakami, H., Hotta, K., Higo, Y. and Kusumoto,S.: Predicting next changes at the ﬁne-grained level,
Software Engineering Conference (APSEC ), 2014 21st
Asia-Pacific, Vol.1, pp.119–126, IEEE (2014).
Eclipse Java development tools (JDT), available fromhttp://www.eclipse.org/jdt/.
Weka 3: Data Mining Software in Java, available fromhttp://www.cs.waikato.ac.nz/ml/weka/.
Japkowicz, N. et al.: Learning from imbalanced data
sets: A comparison of various strategies, AAAI Workshop on Learning from Imbalanced Data Sets, Vol.68,
pp.10–15, Menlo Park, CA (2000).
佐々木裕介，山本哲男，早瀬康裕，井上克郎：大規模ソフ
トウェアシステムを対象としたファイルクローンの検出，
電子情報通信学会論文誌 D，Vol.94, No.8, pp.1423–1433(2011).

鷲見 創一2015 年岐阜工業高等専門学校専攻科
電子システム工学専攻修了．現在，大阪大学大学院情報科学研究科博士前期課程在学中．リポジトリマイニングに関する研究に従事．

肥後 芳樹 （正会員）
2002 年大阪大学基礎工学部情報科学科中退．2006 年同大学大学院博士後期課程修了．2007 年同大学院情報科
学研究科コンピュータサイエンス専攻
助教．2015 年同准教授．博士（情報科学）．ソースコード分析，特にコー
ドクローン分析やリファクタリング支援に関する研究に従事．電子情報通信学会，日本ソフトウェア科学会，IEEE各会員．

楠本 真二 （正会員）
1988 年 大 阪 大 学 基 礎 工 学 部 卒 業 ．
1991 年同大学大学院博士課程中退．
同年同大学基礎工学部助手．1996 年
同講師．1999 年同助教授．2002 年同大学大学院情報科学研究科助教授．

2005 年同教授．博士（工学）．ソフト
ウェアの生産性や品質の定量的評価に関する研究に従事．
電子情報通信学会，IEEE，IFPUG 各会員．

下仲 健斗
2016 年大阪大学基礎工学部情報科学科卒業．現在，同大学大学院情報科学研究科博士前期課程在学中．ソース
コード分析に関する研究に従事．

c 2017 Information Processing Society of Japan

10