ソフトウェアエンジニアリングシンポジウム 2016
IPSJ/SIGSE Software Engineering Symposium (SES2016)

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

鷲見

創一1,b)

肥後 芳樹1,c)

楠本

真二1,d)

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

1. はじめにルであると明示するためのコメント文が残されている．ゆえに，そのようなソースファイルに対しては grep コマン

近年，ソースコード解析に関する研究が盛んに行われてドなどを用いれば特定および除外することができる．しかいる．例えば，ソースコード中に存在する互いに一致またしソースファイルを変更および修正していく過程でそのコは類似したコード片であるコードクローンに関する研究や，メント文が消されてしまい，上記の方法が使用できない場

ソフトウェア開発履歴データなどを対象に分析を行うリポ合がある．コメント文が消された自動生成ファイルを 1 つジトリマイニングに関する研究などが行われている．解析

ずつ目視で特定するのは時間的コストが大きい．したがっ対象のソースファイル群の中にはしばしば自動生成ファイて，そのようなコメント文が消されたものも含めて自動生ルが含まれており，ソースコード解析を行う際に自動生成

成ファイルを自動的に特定することが必要となる．

ファイルが弊害となることがある [1][2]．例えば，コード

コメント文が消された自動生成ファイルを自動的に特定

クローン検出において，自動生成ファイルから多くのコーするためには，自動生成ファイルにおける何らかの特徴をドクローンが検出されることにより他のコードクローンの発見する必要がある．例えば，自動生成プログラムが生成発見が難しくなってしまう [3][4]．また，リポジトリマイ

するファイル名にはいくつかの規則が定められている．しニングにおいて，ソースファイルを分析する際に自動生成たがって，その規則に基づき，正規表現などを用いて検索ファイルの存在によって解析時間が増加してしまうケースを行えば自動生成ファイルを特定できると考えられる．しがある [5][6]．したがって，ソースコード解析において自かしコメント文の場合と同様に，ファイル名が変更されれ

動生成ファイルは除外すべき存在である．

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

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

でも grep コマンドの引数として適切な文字列を与えなければ特定することはできない．そこで本研究では，機械学

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©2016 Information Processing Society of Japan習を用いて，与えられたソースファイルが自動生成ファイ
ルか否かを自動的に判定する手法を提案する．
機械学習とは，既知のデータを学習することにより未知のデータの性質を予測・特定する技術のことである．提案86

ソフトウェアエンジニアリングシンポジウム 2016
IPSJ/SIGSE Software Engineering Symposium (SES2016)

手法では，まず自動生成ファイルだと判明しているソース
ファイルを収集する．収集したソースファイル群から，そ/* CardGrammarTokenManager.java *//* Generated By:JavaCC: Do not edit this line.*/・・・

れらの構文情報を取得する．本研究では，ソースファイルにおける各プログラム要素の出現回数を構文情報とする．

自動生成ファイルであると明示するコメント文

構文情報を取得することで，コメント文の有無にかかわらず自動生成ファイルの特徴を学習することができる． 取得
した構文情報から，与えられたソースファイルが自動生成
ファイルか否かを判定する学習モデルを構築する．
提案手法の評価を行うため，4 つの自動生成プログラム
によって生成された自動生成ファイル群を対象とする評価実験を行った．実験の結果，90%以上の高い精度で自動生成ファイルを特定できることを確認した．

switch (pos){case 0:if ((active0 & 0x24000L) != 0L){
jjmatchedKind = 24;
return 21;}
if ((active0 & 0x400L) != 0L){
jjmatchedKind = 24;
return 6;

以降，2 章では準備として自動生成ファイルについて詳細に述べる．3 章では提案手法について説明し，4 章では評
価実験について述べる．5 章では評価実験の結果について考察を行い，6 章では妥当性への脅威について述べる．最後に 7 章で本研究のまとめと今後の課題について述べる．

2. 準備
本節では，自動生成ファイルの定義，収集および特定方法について述べる．自動生成ファイルとは，プログラムによって自動的に生成されたソースファイルのことである．
ソースファイルを自動で生成するプログラムは多数存在
し，例えば GUI プログラムを生成する GUI ビルダー，あるプログラミング言語を別の言語に変換するトランスレー
タ，構文解析器を生成するパーサジェネレータなどがある．
本研究では比較的収集が容易であるパーサジェネレータによって生成されたファイル (パーサジェネレータ生成ファ
イルと呼ぶ) を対象とする．パーサジェネレータ生成ファ
イルにおけるソースコードの特徴として，以下のようなものが挙げられる．

• switch-case 文が多い
• 16 進数の数値リテラルなど，人が書かないようなプログラム要素が多く存在する
このように，人が書いたソースコードとプログラムによって自動的に生成されたソースコードには視覚的な差異が存在するため，目視によって自動生成ファイルを特定することは可能である．しかし，目視によって自動生成ファイルを特定すると時間的コストが大きくなってしまう．
通常，自動生成ファイルにはそれ自身が自動生成ファイ
ルであると明示するためのコメント文が記述されている．
自動生成ファイルのコメント文の例を図 1 に示す．このようなコメント文を文字列検索することにより，自動生成
ファイルを自動的に特定することができる．しかし，機能追加やバグ修正等の過程においてこのコメント文が消されてしまう場合がある．そのため，コメント文検索だけでは特定できない自動生成ファイルが存在する．また，コメン
ト文が残っていた場合でも grep コマンドの引数として適©2016 Information Processing Society of Japan

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

切な文字列を与えなければ特定することはできない．

2.1 ソースファイルの収集
自動生成ファイルを特定するためのデータセットとして，自動生成ファイル群と自動生成でないファイル群を用いる. 本研究では，それらをオープンソースソフトウェア
から収集した．その収集方法について述べる．
まず自動生成ファイルの収集方法について説明する．上述したとおり，自動生成ファイルにはそれ自身が自動生成
ファイルであると明示するためのコメント文が記述されているため，そのコメント文の一部を検索キーワードとして用いて自動生成ファイルを収集した．本研究では，GitHub[7]からコメント文検索により収集した．しかし GitHub 上の検索では 1,001 件以上の検索結果を取得することができな
い．この問題に対して高澤らは，検索結果数が 1,000 件を超えないようなファイルサイズを指定し，ファイルサイズ
ごとに分割して収集することで対応している [8]．本研究においても同様の方法を用いた．また，JSoup[9] を用いた
ウェブスクレイピングを行い，自動で収集を行った．なお，
本研究では自動生成ファイルに人の手が加わったものも自動生成ファイルとみなす．収集した自動生成ファイルは，4つの自動生成プログラムから生成された自動生成ファイル
である．4 つの自動生成プログラム名と，収集した自動生成ファイルのうち各自動生成プログラムによって生成された自動生成ファイルの数を表 1 に示す． これらの自動生成プログラムはパーサジェネレータであり，Java で記述されたソースファイルを生成する．以降，ANTLR によって生成されたファイル，JavaCC によって生成されたファイ
ル，JFlex によって生成されたファイル，SableCC によっ
表 1 自動生成プログラムの種類とファイル数
自動生成プログラム
ANTLR JavaCC JFlex SableCC
ファイル数

9,218

15,033

3,737

16,60387

ソフトウェアエンジニアリングシンポジウム 2016
IPSJ/SIGSE Software Engineering Symposium (SES2016)て生成されたファイルをそれぞれ ANTLR 生成ファイル，

誤って自動生成ファイルとみなされていた要因としては，JavaCC 生成ファイル，JFlex 生成ファイル，SableCC

キーワードとして用いたコメント文が文字列リテラルとし生成ファイルと呼ぶ．

てソースコード中に存在していたことが挙げられる．

次に，自動生成でないファイルの収集方法について説明する．本研究では，大規模なソースファイルの集合である

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

Apache リポジトリ [10] からソースファイルをランダムにコメント文検索以外の自動生成ファイル特定手法とし収集した．また，Apache リポジトリの中に自動生成ファて，ファイル名による検索がある．通常，自動生成ファイ

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

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

文検索により特定し，除外した．

ている生成規則がある．例えば SableCC では，以下のよ

上記の方法で収集した自動生成ファイル群および自動生

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

• AXxx.java

成でないファイル群の中には，誤って自動生成ファイルと• TXxx.java

みなしているもの，もしくは誤って自動生成でないファイルとみなしているもの (これらをノイズデータと呼ぶ) が存

ただし，X は大文字の任意のアルファベット，x は小文字在している可能性がある．そこで，ノイズデータを除去すの任意のアルファベットを表す．2.2 節で作成したデータ

るために目視確認を行った．しかし，全てのソースファイ

セットを用いて，ファイル名による自動生成ファイルの特ルを目視確認するのは時間的コストが膨大であるため，4定を行った．4 つの自動生成プログラムごとのファイル名

種類の自動生成ファイル群，および自動生成でないファイ生成規則を表 3 に示す．表中の ClassName は Java ファイル群に対し，以下の処理を行った．

ルのクラス名を表す．正規表現を用いて，これらの生成規1. 各 1,000 ファイルずつランダムに抽出する則にマッチするものを自動生成ファイルとして特定する．

2. 目視確認によりノイズデータを除去する

また，これらの生成規則にマッチしないものを自動生成で3. 除去したソースファイルの数だけ，再度ランダムに抽ないファイルとみなす．表 4 にファイル名検索による自動生成ファイル特定の結果を示す．ANTLR 生成ファイル

出する

4. 3. で抽出したソースファイルに対して目視確認により

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

ノイズデータを除去する
表 2

上記の 3. および 4. を繰り返し行い，ANTLR 生成ファイ
ル，JavaCC 生成ファイル，JFlex 生成ファイル，SableCC
生成ファイル，自動生成でないファイルがそれぞれ 1,000
ファイルずつ存在するデータセットを作成した．各自動生

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

ANTLR 生成ファイル群

0%

JavaCC 生成ファイル群

0.6%

JFlex 生成ファイル群

1%

成ファイル群および自動生成でないファイル群におけるノSableCC 生成ファイル群

0.4%

イズデータ含有率を表 2 に示す．コメント文検索により自動生成でないファイル群

3%

自動生成プログラム

表 3

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

ANTLR

[ClassName]Lexer.java，[ClassName]Parser.java，[Class-

JavaCCJJT[ClassName]State.java，[ClassName]Constants.java，Node.java，

Name]Listener.java，[ClassName]BaseListener.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
自動生成プログラム

ファイル名検索による自動生成ファイル特定の結果特定した自動生成ファイル数特定した自動生成でないファイル数

ANTLR

894

JavaCC

767

989

JFlex

79

1,000

SableCC

867

965©2016 Information Processing Society of Japan

986

88

ソフトウェアエンジニアリングシンポジウム 2016
IPSJ/SIGSE Software Engineering Symposium (SES2016)

なものである．また学習モデルを構築する際，説明変数がStep 1: 学習モデルの構築

多いと過学習という状態に陥り，精度が低下することが知

自動生成
ファイル群

られている [17]．そこで，全ての説明変数を用いるのでは

構文情報
入力

なく，有用な説明変数のみを選択するため，変数選択とい

出
力

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

う処理を行う．変数選択を行うアルゴリズムとしてフィル
ター法とラッパー法が知られており，多くの場合ラッパー

学習モデル

法を用いた方が予測精度が向上することが示されているた
出力

入力• 自動生成ファイルである• 自動生成ファイルでない

未知のソースファイル

Step 2: 学習モデルの適用

図 2

提案手法の概要

め，本研究ではラッパー法を用いる [18]．

3.2 Step 2：学習モデルの適用
Step 2 では，テストデータに対して学習モデルを適用

おいては 1,000 ファイル中約 800 ファイルの自動生成ファする．そのために，自動生成ファイルか否かを判定したい

イルをそれぞれ特定できているのに対し，JFlex 生成ファ

ソースファイルをテストデータとして用意する．用意したイル群は 79 ファイルと極端に少なくなっていることが分

テストデータの構文情報を Step 1 と同様に取得する．テかる．これは，JFlex のファイル名生成規則の数が少ない

ストデータにおける説明変数は，Step 1 で，学習データにことが要因と考えられる．このことから，ファイル名生成

おいて選択されたものと同じである．以上の処理を行った

規則だけでは自動生成ファイルを特定するのに十分ではな

後，テストデータに対して学習モデルを適用することで，いことが分かる．

自動生成ファイルか否かを判定する．

3. 提案手法

4. 評価実験

本研究では，機械学習を利用し，自動生成ファイルの構
文情報を学習することで自動生成ファイルを自動的に特定

本章では，提案手法を評価するために行った 3 つの実験と，その実験結果について述べる．

する手法を提案する．提案手法の概要を図 2 に示す．本研究における提案手法の入力は，学習データ (自動生成ファ
イル群と自動生成でないファイル群) とテストデータ (未知4.1 実験概要
提案手法の評価を行うために，3 つの実験を行った．そのソースファイル) である．学習データを用いて構築したの概要を以下に示す．

学習モデルに，テストデータの構文情報を与えることで，

実験 1

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

提案手法の Step 1 において構築する学習モデルの評価をするため，交差検証を行う．
実験 2

提案手法の Step 2 において，どの程度テストデー

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

タの中から自動生成ファイルを特定できるか確認するを目的変数と呼ぶ．

ため，大規模なソースファイルの集合を学習モデルに提案手法は次の 2 ステップから構成される．Step 1 では，学習データから構文情報を取得し，学習モデルを構築

適用する．
実験 3

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

する．Step 2 では，自動生成ファイルかどうかを判定したが提案手法における誤検出を防ぐことが出来るか確認

いテストデータに対して学習モデルを適用する．以降，各するため，2 つの手法を組み合わせた上で交差検証をステップについて詳細に説明する．

行う．

3.1 Step 1：学習モデルの構築

4.2 実験対象

Step 1 では，学習データから構文情報を取得し，学習モ

学習データとして，2.2 節で述べたデータセットを用いデルを構築する．構文情報として，ソースコードの ASTた．加えて，4 種類の自動生成ファイル計 4,000 ファイル

(Abstract Syntax Tree: 抽象構文木) ノードを用いる．説の中から 1,000 ファイルをランダムで抽出した．このソー

明変数がとる値は，各 AST ノードの出現回数であり，整スファイル群を MIX ファイル群と定義する．また，実数値である．また，目的変数は自動生成コードであるかそ験 2 におけるテストデータには，大規模なソースファイルうでないか，である．構文情報を取得した後，学習モデルの集合である UCI Source Code Data Sets[19](以降，UCIを構築する．学習モデルを構築するアルゴリズムとして，

datasets と呼ぶ) を用いた．

Decision Tree[13]，Random Forest[14]，Naive Bayes[15]，構文情報の取得には，Murakami らの既存研究と同様のSVM[16] を用いる．これらは機械学習を行う上で代表的方法を用いた [20]．具体的には，Eclipse JDT 3.10[21] を用いて AST 解析を行った．AST 解析の例を図 3 に示す．

©2016 Information Processing Society of Japan89

ソフトウェアエンジニアリングシンポジウム 2016
IPSJ/SIGSE Software Engineering Symposium (SES2016)

結果について述べる．
JDTのAST解析による81種類の構文情報

public class Hoge{
public int hogehoge(){int a=0;
int b=0;
for(int i=0; i<10; i++)a++;for(int i=0; i<10; i++)b++;
return a+b;}}

4.4 実験 1
収集した各自動生成ファイル群を用いて 4 種類の学習モ{1,・・・,2,・・・,0,・・・1,・・・,1,・・・}

デルを構築した．さらに，MIX ファイル群を用いた学習モ

return文

for文

デルも構築した．構築した計 5 種類の学習モデルの予測精メソッド宣言度を評価するために交差検証を行った．交差検証では，ま

if文

クラス宣言

ずデータセットを N 個のブロックにランダムに分割する．
分割したブロックのうち，N − 1 個のブロックを学習デー

Hoge.java

タとし，残りの 1 個のブロックをテストデータとして評価
図 3を行う．この処理を，ブロックを変化させながら N 回行

AST 解析の例

い，それらの精度の平均をとる．本実験では N = 10 としEclipse JDT 3.10 では 84 種類の AST ノードが定義されてて学習モデルの評価を行った．

いるが，そのうち 3 つはコメント文に関するノードである

交差検証の結果を表 5 に示す．ただし，表中の P と R

ので，本研究ではコメント文に関するノードを除いたもの

はそれぞれ Precision と Recall を表す．多くの場合で Pre-を説明変数とする．つまり本研究では 81 個の説明変数がcision ，Recall ともに 90%を超えている．特に，ANTLR

存在することになる．

生成ファイルと JFlex 生成ファイルではほとんどの場合でまた，変数選択，学習モデルの構築およびテストデータ

99%と，非常に高い．Precision と Recall を比較すると，全の予測には，Java で開発された機械学習ライブラリである

体的に Precision の方が高いことが分かる．自動生成プロ

Weka[22] を使用した．

グラムごとに比較すると，ANTLR 生成ファイルと JFlex
生成ファイルに比べて，JavaCC 生成ファイルと SableCC

4.3 評価尺度

生成ファイルの精度が低くなっていることが分かる．アル

実験の評価尺度として，Precision と Recall を用いる．

ゴリズムごとに比較すると，Random Forest の精度が最も以下，それぞれの尺度の定義について説明する．

Precision

高く，Naı̈ve Bayes の精度が最も低いことが分かる．

学習モデルによって自動生成ファイルと判定されたソースファイルのうち，実際に自動生成ファイ

4.5 実験 2

ルであるものの割合

実験 1 では，構築した学習モデルの予測精度を評価して実際に自動生成ファイルであるもののうち，学習

Recallいた．実験 2 では，自動生成ファイルかどうか判明していモデルによって自動生成ファイルと判定されたもののない未知のソースファイル群に対して学習モデルを適用し割合た．この実験では，学習モデルによって自動生成ファイル

実験 1 および実験 3 の評価尺度は Precision と Recall のと判定されたソースファイルが，実際に自動生成ファイル

両方を算出した．実験 2 では，テストデータとして用いるかどうかは目視によって判断する必要がある．したがって

UCI datasets のうち，実際に自動生成であるファイルの数

大規模なソースファイルの集合である UCI datasets 全て

が未知であるため，Precision のみ算出した．以下，各実験に学習モデルを適用すると時間的コストが大きくなるた
め，UCI datasets の一部を用いた．このテストデータを，

表 6 UCI datasets に学習モデルを適用した結果
全ファイル数

146,346

MIX ファイル群を用いて構築した学習モデルと実験 1 に

MIX

837

おいて最も精度が高かった ANTLR 生成ファイル群を用い

ANTLR

157

MIX

552

ANTLR

106

種類の自動生成ファイルを特定する際，学習データとして

MIX

65.9%

MIX ファイル群を用いるべきか単一種類の自動生成ファ

ANTLR

67.5%

イル群を用いるべきか確認するためである．

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

Precision

アルゴリズム

表 5 交差検証の精度
JavaCC
JFlex

ANTLR
P

て構築した学習モデルにそれぞれ適用した．これは，複数

R

P

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%

Naı̈ve Bayes

98.8%

98.8%

88.0%

85.7%

99.5%

99.5%

82.7%

78.4%

85.3%

80.6%

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%

©2016 Information Processing Society of Japan90

ソフトウェアエンジニアリングシンポジウム 2016
IPSJ/SIGSE Software Engineering Symposium (SES2016)

UCI datasets に対して学習モデルを適用した結果を表 6

ファイル名検索による特定と機械学習による特定の両方にに示す．学習モデルを構築するアルゴリズムとして，実験

自動生成ファイルと判定されたものを自動生成ファイルと1 で最も精度が高かった Random Forest を用いている．表

みなす．パターン 1 による検出結果とパターン 2 による検中の Precision から，MIX ファイル群を用いて構築した学

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

習モデルよりも ANTLR 生成ファイル群を用いて構築した

表 7 から，ほとんどの場合で Recall が 100%近い値に学習モデルの方が精度が高いことが分かる．つまり，複数なっていることが分かる．実験 1 の結果と比較すると，多種類の自動生成ファイルを特定する場合，自動生成ファイ

くの場合で Precision が低下していることが分かる．これ

ルの種類ごとの学習モデルを構築した方がよいと考えられは，ファイル名特定による誤検出が増えたことが要因と考る．また予測結果の中には，実際にコメント文が消された

えられる．

自動生成ファイルが含まれていた．

また，表 8 から，ほとんどの場合で Precision が 100%近い値になっていることが分かる．また，実験 1 の結果と比4.6 実験 3

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

実験 3 では，ファイル名検索による手法が提案手法にお以上のことから，Recall を 100%に近づけたい場合はパける誤検出を防いで予測精度が向上するかどうか確認する

ターン 1 を用いればよい．また，Precision を 100%に近づため，提案手法と 2.3 節で述べたファイル名検索による手

けたい場合はパターン 2 を用いれば良い．その場合，実験法を組み合わせた．組み合わせの方法として 2 つのパター

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

ンで交差検証を行い，Precision と Recall を算出した．なと考えられる．

お，ファイル名検索による手法は自動生成プログラムごとの生成規則を用いるので，MIX ファイル群に対しては適用

5. 考察
本章では，4 章で述べた評価実験，および提案手法におしていない．以下，2 つのパターンについて説明する．

ける有用性についての考察を行う．

パターン 1

1. ファイル名検索により自動生成ファイルかどうか
5.1 実験 1 の考察

判定する．

2. 1. で自動生成ファイルと判定されなかったものをまず，実験 1 の結果について考察する．交差検証の結果において，誤検出されたファイルを調べた．その結果，学習モデルによって判定する．

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

パターン 2

1. ファイル名検索により自動生成ファイルかどうか

以下のことが挙げられる．

• ファイルサイズが小さい．具体的には，説明変数の値判定する．

が 10 以下のものが多い

2. 1. で自動生成ファイルと判定されたもののうち，学習モデルによっても自動生成ファイルと判定され• switch-case 文やリテラルが多い
ファイルサイズが小さいものには，インターフェースや抽たものを自動生成ファイルとみなす．
パターン 1 では，ファイル名検索による特定と機械学習に

象クラスが多く見られた．このことから，構文情報が少な

よる特定の，少なくとも一方で自動生成ファイルと判定さいものは誤検出されやすいと考えられる．しかし，ファイれたものを自動生成ファイルとみなす．パターン 2 では，
表 7
アルゴリズムパターン 1 の結果
JavaCC

ANTLR
PR

Decision Tree

98.7%

P

R

JFlex

P

SableCC
R

P

R

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 の結果
JavaCC

ANTLR
P

R

P

R

JFlex

P

SableCC
R

P

R

Decision Tree

100%

89.1%

100%

38.7%

100%

7.9%

100%

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%

©2016 Information Processing Society of Japan

81.5%

91

ソフトウェアエンジニアリングシンポジウム 2016
IPSJ/SIGSE Software Engineering Symposium (SES2016)

ルサイズが小さいファイル群は解析時間の増加などの原因のソースファイル群から自動生成ファイルを特定したい場とはなりにくい．したがって，それらの誤検出がコードク

合，学習データとして複数種類の自動生成ファイル群を用

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

いるのではなく，1 種類の自動生成ファイル群を用いて学と考えられる．また，switch-case 文やリテラルは，2.1 節

習モデルを構築した方が良いと考えられる．

で述べたように自動生成ファイルの特徴であるので，それ5.3 実験 3 の考察

らが誤検出の要因であると考えられる．
次に，学習データの変数選択において，どの説明変数が実験 3 の結果について考察する．2.3 節で述べた，ファ重要であるかを調べた．選択された説明変数のうち，重要

イル名による自動生成ファイル特定の結果から，Precision

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

および Recall を算出すると表 10 のようになる．表から，よび配列型が複数の自動生成プログラムにまたがって登場

Precision は提案手法による結果と同程度の精度であるが，していることが分かる．また，自動生成プログラムによっ

Recall は提案手法の方が大幅に優れていることが分かる．

て説明変数の重要度は異なっているということが分かる．

このことから，ファイル名検索によって特定できない自動生成ファイルも，提案手法では特定することが可能である

5.2 実験 2 の考察と言える．

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

また，実験 3 の結果はパターンごとに見れば実験 1 の結ルであると判定されたファイルの中身を確認した．そのよ

果よりも優れているため，提案手法とファイル名検索にようなファイルの中身は，switch-case 文やリテラルが多く存る手法を組み合わせるのが最も有用であると考えられる．

在するが，それら以外の要素も多く存在するものであった．

ただし，ファイル名検索による手法はファイル名規則を調すなわち，switch-case 文やリテラルの出現回数は多いが，査するコストが必要となる．

プログラム要素全体に対する割合が低いことが誤検出の要因と考えられる．自動生成でないファイルが自動生成ファイルであると検出されないために，構文情報以外の説明変数を追加するなど，提案手法の改善が必要となる．

5.4 提案手法における有用性
ソースコード解析を行う者自身が解析対象のソフトウェアに精通している場合，どのような自動生成ツールが用い実験 2 の結果は，実験 1 における交差検証の結果と比べられているのか，どのファイルが自動生成されたものなの

ると Precision が低下している．これは，学習データにおかについての知識がある．そのような場合，提案手法を用ける自動生成ファイルの割合と，テストデータにおける自いて自動的に自動生成ファイルを特定する必要性は少な

動生成ファイルの割合が異なることが要因と考えられる．

い．しかし，ソースコード解析を行う者が上記のような知実験 2 の結果から，テストデータにおける自動生成ファイ

識を持っていない場合，自動生成ファイルを自動的に特定

ルと自動生成でないファイルでは，自動生成でないファイ

するのは困難である．したがって，そのような場合，提案

ルの方が数多く存在することが分かる．一方，学習データ

手法は有用であると考えられる．

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

6. 妥当性への脅威
本章では，評価実験に含まれる妥当性への脅威について述べる．
本実験で対象とした自動生成ファイルは，Java で記述さ

れる．
表 10

• 学習データに重み付けを行う• 学習データのファイル数の調整を行う
また，MIX ファイル群を用いて構築した学習モデルとファイル名検索による自動生成ファイル特定の結果自動生成プログラム
Precision
Recall

ANTLR

98.4%

89.4%

JavaCC

98.5%

76.7%

JFlex 生成ファイル群を用いて構築した学習モデルを比較

JFlex

100%

7.9%

すると，後者の方が精度が高かった．このことから，未知

SableCC

96.1%

86.7%

表 9
自動生成プログラム

変数選択における説明変数のランキング
Top 1
Top 2

ANTLR

switch-case 文

修飾子

配列型

JavaCC

数リテラル

代入

switch-case 文

JFlex

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

配列型

while 文import 宣言

配列型

プリミティブ型

SableCC©2016 Information Processing Society of Japan

Top 3

92

ソフトウェアエンジニアリングシンポジウム 2016
IPSJ/SIGSE Software Engineering Symposium (SES2016)

れた 4 種類の自動生成ファイルである．そのため，他の種類の自動生成ファイルを用いた場合や，他の言語で記述された自動生成ファイルを用いた場合では，本実験とは異なる結果が得られる可能性がある．
実験 2 において，学習モデルによって自動生成ファイル

[7]
[8]

と判定されたものが，実際に自動生成ファイルであるかど
うかは目視確認によるものである．そのため，実際には自動生成ファイルではない可能性がある．

7. おわりに

[9]
[10]
[11]

本研究では，機械学習を用いて自動生成ファイルを自動的に特定する手法を提案した．提案手法では，自動生成
ファイル特有のコメント文の有無にかかわらず，自動生成[12]

ファイルか否かを判定するために，与えられたソースファ
イル群の構文情報を取得し，それらから学習モデルを構築

[13]

した．
実験として，4 種類の自動生成ファイルを収集し，それ[14]らを対象に評価実験を行った．実験の結果，ほとんどの場
合で Precision ，Recall ともに 90%以上と，高い精度で自[15]動生成ファイルを特定できていることを確認した．
さらに，自動生成ファイルかどうか判明していないソー[16]

スファイルに対して学習モデルを適用する実験を行った．
その結果，約 70%の精度で自動生成ファイルを特定できることを確認した．しかしこの実験では，一部の自動生成ファイルで構築した学習モデルしか適用していないため，

[17]
[18]

他の自動生成ファイルで構築した学習モデルを適用した結果も得る必要がある．
謝辞

[19]

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

研究 (S)(課題番号：25220003) の助成を得て行われた．

[20]

参考文献
[1]

[2]

[3]

[4]

[5]

[6]

Pam McDonald, Dan Strickland, and Charles Wildman.
Estimating the eﬀective size of autogenerated code in alarge software project. In Proceedings of the 17th International Forum on COCOMO and Software Cost Modeling, 2002.
Shinji Uchida, Akito Monden, Naoki Ohsugi, Toshihiro
Kamiya, Ken-Ichi Matsumoto, and Hideo Kudo. 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.
Nils Göde and Rainer Koschke. Frequency and risks ofchanges to clones. In Proceedings of the 33rd International Conference on Software Engineering, pp. 311–
320. ACM, 2011.
Jan Harder and Nils Göde. Cloned code: stable code.
Journal of Software: Evolution and Process, Vol. 25,
No. 10, pp. 1063–1088, 2013.
Alexander C MacLean, Landon J Pratt, Jonathan L©2016 Information Processing Society of Japan

[21]
[22]
[23]

Krein, and Charles D Knutson. Trends that aﬀect temporal analysis using sourceforge data. Proceedings of the
5th International Workshop on Public Data about Software Development (WoPDaSD 10), p. 6. Citeseer, 2010.
GitHub. http://github.com/.
高 澤 亮 平, 坂 本 一 憲, 鷲 崎 弘 宜, 深 澤 良 彰. Repositoryprobe: リポジトリマイニングのためのデータセット
作成支援ツール. コンピュータ ソフトウェア, Vol. 32,
No. 4, pp. 4 103–4 114, 2015.
jsoup: Java HTML Parser. http://jsoup.org/.
Apache Source code repository. http://svn.apache.org/
repos/asf/.
Etienne M Gagnon and Laurie J Hendren. Sablecc, an
object-oriented compiler framework. In Technology of
Object-Oriented Languages, 1998. TOOLS 26. Proceedings, pp. 140–154. IEEE, 1998.
Christopher JC Burges. A tutorial on support vector machines for pattern recognition. Data mining and knowledge discovery, Vol. 2, No. 2, pp. 121–167, 1998.
Leo Breiman, Jerome Friedman, Charles J Stone, andRichard A Olshen. Classification and regression trees.
CRC press, 1984.
Leo Breiman. Random forests. Machine learning,
Vol. 45, No. 1, pp. 5–32, 2001.
Pedro Domingos and Michael Pazzani. On the optimality of the simple bayesian classifier under zero-one loss.
Machine learning, Vol. 29, No. 2-3, pp. 103–130, 1997.
Vladimir Vapnik. 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.
Mark A Hall and Geoﬀrey Holmes. Benchmarking attribute selection techniques for discrete class data mining. Knowledge and Data Engineering, IEEE Transactions on, Vol. 15, No. 6, pp. 1437–1447, 2003.
Uci
Source
Code
Data
Sets.
http://
www.ics.uci.edu/˜lopse/datasets/.
Hiroaki Murakami, Keisuke Hotta, Yoshiki Higo, andShinji Kusumoto. Predicting next changes at the finegrained level. In Software Engineering Conference(APSEC), 2014 21st Asia-Pacific, Vol. 1, pp. 119–126.
IEEE, 2014.
Eclipse Java development tools (JDT).
http://
www.eclipse.org/jdt/.
Weka 3: Data Mining Software in Java.
http://
www.cs.waikato.ac.nz/ml/weka/.
Nathalie Japkowicz, et al. Learning from imbalanced
data sets: a comparison of various strategies. In
AAAI workshop on learning from imbalanced data sets,
Vol. 68, pp. 10–15. Menlo Park, CA, 2000.

93