情報処理学会論文誌

Vol.59 No.4 1250–1261 (Apr. 2018)

深層学習による
ソースコードコミットからの不具合混入予測
近藤 将成1,2,a)

森 啓太1

水野 修1,b)

崔 銀惠2,c)

受付日 2017年8月1日, 採録日 2018年1月15日

概要：ソフトウェアの不具合予測は，ソフトウェアに潜む不具合を予測することで効率的なレビューやテストを可能にしようとするソフトウェア品質保証活動の 1 つである．従来の多くのソフトウェアの不具合予測では，ソースコード分析による不具合予測を行っているが，粒度が粗くまた不具合予測の結果のフィードバックが遅い．この問題を解決するために，ソフトウェアの変更がコミットされたときに，その変更によって不具合が起きるかどうかを予測する手法が提案され，近年注目を集めている．ソフトウェアの変更コミットの不具合予測に関する既存研究では，その変更に対するメトリクス（たとえば，修正されたファイル数，追加されたコード行数など）を計算した後に機械学習や深層学習を適用している．それに対して，本研究では，変更のソースコード片のみに対して深層学習を適用することで不具合を予測する手法，Word-Convolutional Neural Network（W-CNN）を提案する．我々は，評価実験によって，変更ソースコード片に対する深層学習を用いた不具合予測が可能であること，さらに，提案手法 W-CNN は先行研
究に比べて，学習の時間はかかるものの，不具合予測の精度が優れており，予測時間が短いことを示す．
キーワード：不具合予測，畳み込みニューラルネットワーク，変更ソースコード，ソースコード片，文脈

Just-in-Time Defect Prediction
Applying Deep Learning to Source Code Changes
Masanari Kondo1,2,a)

Keita Mori1

Osamu Mizuno1,b)

Eun-Hye Choi2,c)Received: August 1, 2017, Accepted: January 15, 2018

Abstract: Defect prediction is an important task for preserving software quality. A lot of previous research
has analyzed source code to predict defects; however, it contains a problem that is its prediction grain is
too coarse and its feedback is too late for software developers. To achieve a more ﬁne-grained prediction
and an earlier feedback, several approaches that analyzes source code changes has been reported. Those
approaches have applied various machine learning techniques and deep learning techniques to change metrics,
such as the number of lines added, modiﬁed ﬁles, and modiﬁed directories. In this paper, we propose a novel
approach for defect prediction called Word-Convolutional Neural Network (W-CNN ), which applies CNN
to the modiﬁed source code itself. Our evaluation results show that the proposed approach can improve theeﬀectiveness of defect prediction with a small overhead on the prediction time.
Keywords: defect prediction, convolutional neural network, source code changes, source code snippet, context

1
2

a)
b)
c)

京都工芸繊維大学
Kyoto Institute of Technology, Kyoto 606–8585, Japan
産業技術総合研究所
National Institute of Advanced Industrial Science and Technology, Osaka 563–8577, Japanm-kondo@se.is.kit.ac.jp
o-mizuno@kit.ac.jp
e.choi@aist.go.jp

c 2018 Information Processing Society of Japan

1. はじめにソフトウェアの品質は現在の我々の生活に大きな影響を与えており，テストやレビューといった品質保証活動が重要である．ソフトウェアの品質保証を効率的に行うための

1 つの手法として，不具合予測手法の研究がなされてきてい1250

情報処理学会論文誌

Vol.59 No.4 1250–1261 (Apr. 2018)

る [2], [7], [10], [17], [24], [25], [27]．不具合予測とは，過去のW-CNN と，ソースコードの変更メトリクスに対して深層

ソフトウェア開発の履歴情報やソースコードから取り出さ

学習を適用する既存の不具合予測手法である Yang ら [25]

れた特徴を用いて，不具合が混入しそうなソフトウェアのモの手法（Deeper）との比較評価実験を行う．実験では，7ジュールやファイルを予測する手法である．この予測結果

つの Java もしくは C++で書かれたオープンソースソフト

を用いることで，効率的なテストやレビューを行い，リリー

ウェアプロジェクトを用いて，予測精度と学習時間を調査

ス後のソフトウェアの不具合を減らすことが可能である．

する．その結果，RQ1 に対して，提案手法 W-CNN は対象

近年，ツールの発展 [1], [6], [18] や潤沢でオープンア

データに対する不具合の学習，および，不具合の予測が可クセス可能なデータの公開 [9], [15], [20] により，機械能であることが分かった．RQ2 に対して，W-CNN は既存学習を用いた不具合予測手法がさかんに研究されていの深層学習を用いた不具合予測手法 Deeper と比較して予る [2], [7], [10], [24], [25], [27]．中でも，深層学習の他分野

測精度を計る一般的な尺度 AUC（Area Under the receiverでの発展 [4], [11], [13], [26] を受けて，深層学習を用いた不operating characteristic Curve）の値を平均 22%程度上げ

具合予測手法の研究にも注目が集まっている [24], [25]．

ることができた．RQ3 に対して，W-CNN は既存の手法

深層学習を用いた不具合予測の既存研究 [24], [25] では，Deeper より学習に時間がかかるが，学習後の各コミット

深層学習アルゴリズムの 1 つであるディープビリーフネッ

に対する予測時間は 0.0004 秒程度と非常に短く，変更数にトワークを用いることで，従来の特徴セットから不具合予

対する実行時間のオーバヘッドは少ないことが分かった．

測に対して有効な特徴セットを生成できることを示してい

本研究の主な貢献を以下にまとめる．

る．Yang らの研究 [25] では，変更に対するソフトウェア( 1 ) ソフトウェアの変更コミット時のソースコード片に対メトリクスに対して深層学習を適用している．また，Wang

して，深層学習を適用することで，不具合予測が可能

らの研究 [24] では，ソースコードを抽象構文木によって解析し，その特徴を用いている．
しかし，我々が知る限り，変更のソースコード片に対して深層学習を適用した不具合予測手法の研究はいまだ行わであることを，我々が知る限り初めて示した．

( 2 ) 提案手法 W-CNN は，既存の不具合予測手法よりも学習に時間がかかるが，高い不具合予測精度をもたらすことが可能であることを確認した．

れていない．変更に対する不具合予測は，ソフトウェアの以降の本論文の構成を紹介する．2 章では，不具合予測，

変更コミット時に細かい粒度で不具合を予測でき，予測結および，深層学習を適用した不具合予測の関連研究について果のフィードバックも速い，という利点がある [9]．また，述べる．3 章では，提案手法である W-CNN について説明すソースコードに対する不具合予測手法では，メトリクスをる．4 章では，評価実験について説明する．5 章では，それ使用せずにテキストのみを利用して予測する手法が示されぞれの研究設問に対する結果をまとめる．6 章では，本研究ており [17]，同様に変更のソースコード片に対しても，メトの妥当性の検証を行う．7 章では，本研究の結論を述べる．

リクスを用いずに予測することが可能である [2], [7], [10]．
そこで，本研究では，変更のソースコード片に対して深層学習を適用して不具合予測を行う手法を提案し，提案

2. 関連研究2.1 不具合予測手法

法の不具合予測性能を評価する．深層学習には，畳み込み

不具合予測はソフトウェアの品質保証活動の 1 つとしてニューラルネットワーク（Convolutional Neural Network:

重要な分野であり，これまでに様々な不具合予測手法が提CNN）を用いる．CNN は主に画像のカテゴリ分類での成案されてきている [2], [7], [10], [17], [24], [25], [27]．たと功が大きいが [13]，近年ではテキスト分類でも成果を示し

えば，Zimmermann らの研究 [27] では，ソースコードに関ている [4], [11], [26]．我々はソースコード片をテキストとする複雑度メトリクスを用いてロジスティック回帰モデル

見なし，不具合を起こすか否かの分類に CNN を適用する．

を作成し不具合の予測を行っている．しかし，このように適用する CNN モデルは，Kim のモデル [11] を参考にし複雑度メトリクスなどを用いてファイルやパッケージレベて構築する．このモデルは，テキストの単語レベルの情報

ルで不具合を予測する手法にはいくつかの問題が指摘されを用いて分類を行う．以上の特徴を備えた我々の提案手法ている [9]．たとえば，予測する時期が遅いという問題がを，W-CNN（Word-CNN）と呼ぶこととする．

ある．開発者は，ソースコードを書いているときに，その本研究では，提案手法 W-CNN を評価するために以下の追加した機能に不具合が含まれているかを知りたい．しか3 つの研究設問を設定する．

し，ファイルやパッケージレベルではこの段階での予測がRQ1：W-CNN による不具合の学習・予測は可能か？

難しい．そのため，追加した機能の記憶が薄れてから修正

RQ2：W-CNN は既存の変更に対する深層学習を用いたを行うことになり，効率的であるとはいいにくい．

不具合予測手法よりも予測精度が良いか？

この問題を解決するために，Kamei らの研究 [9] では，

RQ3：W-CNN の学習・予測時間はどの程度か？

ソフトウェアの変更に対するメトリクス（以降，変更メト

これらの研究設問に応えるために，我々は，提案手法のリクス）を用いる手法を提案している．開発者が変更（コc 2018 Information Processing Society of Japan

1251

情報処理学会論文誌

Vol.59 No.4 1250–1261 (Apr. 2018)ミット）を行った際に，その変更に不具合が含まれている( 1 ) 深 層 学 習 の モ デ ル：W-CNN は CNN を 用 い る が ，かどうかを判断する方法により，変更を行ったすぐ後に不Deeper はディープビリーフネットワークを用いて具合が含まれていそうか否かが分かるため，素早いフィー

いる．

ドバックや，品質保証活動を適切な開発者に割り当てられるなどの利点が期待できる [8]．よって，今回の我々の研究
では，変更に対する不具合予測手法を提案する．
そ の 他 の 不 具 合 予 測 手 法 と し て は ，ソ ー ス コ ー ドなどのテキストに注目している手法も研究されている [2], [7], [10], [17]．テキストは複雑度メトリクスなど( 2 ) 分類手法：W-CNN は深層学習を用いるが，Deeper はロジスティック回帰を用いている．

( 3 ) 分析するデータ対象：W-CNN はソースコード片を用いるが，Deeper はメトリクスを用いている．

3. 提案手法と比較して収集が容易であるという利点がある [17]．テキ

深層学習の一種である畳み込みニューラルネットワー

ストとしてはソースコードが用いられることが多く，テキク（CNN）は人の網膜を模倣したニューラルネットワー

スト分類技術によって不具合が混入しているテキストとクであり，画像分類で成功を収めてきたアルゴリズムであ

そうではないテキストを分類する手法が研究されている．

る [13]．最近ではテキスト分類においても高い精度が得ら

たとえば Mizuno らの研究 [17] では，ソースコードのみをれることが分かってきている [4], [11], [26]．我々は不具合

学習データとし，スパムフィルタを用いて学習することで予測問題を，ソースコードを特徴として用いるテキスト分

不具合予測を行っている．Mizuno らの研究では，ソフト類問題としてとらえ，CNN を用いた解法を提案する．

ウェアが更新される時系列順を用いた適用実験も行ってお一般に深層学習は層の数が多い程表現力が良くなる反面，

り，学習数が少ない間は低い精度であったのが，多くの学大量の学習データと時間を要する傾向にあるため，大規模習を繰り返すと精度が向上することを確認している．ただな深層学習はソフトウェアプロジェクトに適用することがし，時系列を考慮した実験では実践的な結果が得られる反難しい．たとえば，Zhang らの畳み込みニューラルネット

面，現実の開発環境を模すための設定事項が多くなるため，ワークを用いたテキスト分類モデル [26] では，隠れ層が 9

これまでにあまり試みられてはいない．また，提案手法に

層の CNN を構成しており，100 万個程度の訓練データを似た手法として，変更に関するテキスト情報を用いた不具用いている．しかし，我々が対象とするソフトウェアプロ

合予測手法がいくつか提案されているが [2], [7], [10]，変更

ジェクトの不具合予測に用いる変更の学習データ数は，比のソースコード片に対して深層学習を用いた不具合予測手

較的に大きい場合でも数千から 1 万個程度である．

法は提案されていない．

そのため，我々は Kim により提案されている比較的に小規模なテキスト分類モデル [11] を利用する．このモデルは

2.2 深層学習を用いた不具合予測手法

隠れ層が 3 層の CNN であり，Zhang らの 9 層の CNN と比近年，不具合予測のために深層学習を適用する研究が行較して軽量である．また，Kim のモデルは 4,000 から 10,000

われている．Yang らの研究 [25] では，亀井らの提案して程度の訓練データでネットワークを学習可能であることかいる変更メトリクス [9] から特徴を生成し，その特徴を入ら，ソフトウェアプロジェクトの不具合予測に対しても適用力としてディープビリーフネットワークを用いて不具合可能であると判断する．我々は Kim のモデルを参考に，ソー予測を行っている．Wang らの研究 [24] は，ソースコード

スコードの単語レベルの情報を用いた分類機を作成する．

を抽象構文木で分析し，その特徴をディープビリーフネッ

図 1 に提案する不具合予測手法 W-CNN の構成の概要

トワークで分析し，ソースコードの意味的な違いを表現すを示す．提案手法は，分析対象のリポジトリからソースることで，不具合予測の精度を向上できることを示していコード片を取り出す前処理（Preprocess）と，ソースコー

る．Lam らの研究 [14] は，バグレポートからの不具合推

ド片から特徴を取り出し分類の処理を行うネットワーク

定を行うために深層学習と IR 技術を結合する手法を提案（Network Architecture）からなる．処理の流れを以下に説し，既存の手法よりも推定精度が良くなることを示してい明する．

る．しかし，これらの研究では，変更に関するテキスト情( 1 ) 前処理：分析対象のリポジトリから得られた各コミッ報に対して深層学習を適用していない．それに対して我々

トの追加・修正されたソースコードを単語分割し，そは，変更ソースコードのみに対して CNN の深層学習のみ

れぞれのコミットの特徴とする．

を適用するシンプルなテキストベースの不具合予測手法を提案する．
提案手法との比較のために，我々と同様に変更に対する( 2 ) ネットワーク：コミットの単語分割されたソースコー
ド片を入力とし，ネットワークで特徴の学習，および，分類を行う．

不具合予測手法であり，かつ深層学習を用いている Yangらの Deeper [25] を選択する．提案手法 W-CNN と Deeper

3.1 前処理の大きな違いは以下の 3 点である．

（1）ソースコード片の作成：ソースコード片は，変更に

c 2018 Information Processing Society of Japan

1252

情報処理学会論文誌

Vol.59 No.4 1250–1261 (Apr. 2018)

図 1 提案手法 W-CNN の構成の概要

Fig. 1 The outline of proposed defect prediction W-CNN.

より追加・修正された差分のソースコードをつなぎ合わせた文字列である．作成方法について述べる．取得する変更の差分はソースファイル*1 のみからとする．これは，ドキュメントファイルなどは不具合につながる可能性が低
いと考えられるためである．不具合を混入したコミットを見つけることを目的とするため，対象のソースコードとして追加もしくは修正された行を集める（ただし，削除行は含めない．理由は後述する）．さらに，追加修正行の前後

3 行を文脈情報として集める．これは，変更におけるコー
ド片の情報のみを使う場合よりも，その前後のソースコー
ドの文脈情報を追加する方が，より自然言語処理のようにソースコードの意味を学習可能であると仮説を立てたため

図 2である．我々が知る限り，文脈行を不具合予測に適用した先行研究はこれまでにない．そこで，Hadoop プロジェク

文脈行数（# of context lines）と W-CNN による分類精度

AUC の関係（Hadoop Project の場合）
Fig. 2 A relationship between # of context lines and AUC on
prediction accuracy by W-CNN (Hadoop).

トに対して，0 行から 10 行までの文脈行数の不具合予測への影響を測定した．Git の diﬀ コマンドで標準で出力される前後 3 行が最も良かったため，文脈行数は 3 とする（図 2）．より詳しくは妥当性の検証の構成概念妥当性で述べる．ただし，コメント行はソフトウェアの動作に関係がないため取得しない．以上のソースコードを，変更された
ファイルごとに取得し，それぞれのソースコードの先頭に
そのソースコードを取得したファイル名を付与した文字列を連結することで 1 つのソースコード片とする．ソース
コードのファイル名を付与する理由は，そのソースコード
片がどのような機能を持つソースコードの一部であるのかを，最も端的に示すことができる文字列だからである．変
更のソースコード片の例を図 3 に示す．なお，ここでは 2
つのコミットからソースコード片の一部を抜粋している．
赤で示されているのがファイル名，それ以外がソースコー
ド片である．
提案法では，削除行そのものはソースコード片として考慮しない．ただし，削除行の文脈行は考慮する．これは，削除行そのものは，そのコミットを取得した際に削除されるため，直接の不具合の原因にはならないと考えられるた*1

図 3

変更のソースコード片の例（Camel Project の場合．2 つのコミットから一部を抜粋）

Fig. 3 An example of a code snippet in a change level.

めである．ただし，削除することによりその前後のソース
コードに影響を与え不具合の原因となることは考えられる
ため，その文脈行はソースコード片として考慮する．

ここで，ソースファイルとは，分析対象が C++，および，Javaであったことから，拡張子が java，c，h，cpp，hpp，cxx，hxxのファイルとする．

c 2018 Information Processing Society of Japan（2）単語分割：Kim のモデルでは，入力文書を単語分割しているため，我々もソースコード片を単語分割する必要

1253

情報処理学会論文誌

Vol.59 No.4 1250–1261 (Apr. 2018)

がある．ソースコード片の単語分割には Thomas が公開しトデータをテキストベクトル（Text vectors）へ変換する．

ている lscp（A lightweight source code preprocessor）[23]

ただし，マッピングテーブルにない単語は 0 とする．ここを用いる．lscp はソースコードを構文解析せずに経験則的でマッピングテーブルにないとは，トレーニングデータのに単語分割を行うためソースコード片にも適用可能であどのコミットの 2,000 語の単語の中にも含まれていない単る．具体的には，入力を正規表現によってコメントとそれ語を指す．ここでの出力は，ソースコード片を持つコミッ以外の部分に分類し，記号の除去などによって，プログラ

トが 1 次元の数値ベクトルに変換される．数値ベクトルのミング言語の予約語や識別子のみを抽出している．lscp は

各値はそのコミットのソースコード片の各単語に対応する．

多くのパラメータにより動作を規定することができ，本研究で用いたパラメータは以下のとおりである．

数値へのマッピングは，CNN が数値ベクトルのみを処理可能であるため，必要である．マッピングの際，頻出単• コードを対象とする．

語順に 1 から数字をマッピングする理由は，数値の大き• 識別子を抽出する．

さによって単語の重要度に差をつけるためである．たとえ• コメントを除去する．

ば，画像の認識では，数値の大きさは画素の色に対応して• 数値を除去する．

おり，その数値の差をエッジとしてとらえるなどが行われ• 単語を小文字化する．

るが，提案法ではそれを模倣している．なお，提案法では，• 語幹抽出をしない．

マッピングテーブルにない単語は重要単語ではないと仮定• 合成語を分割する．

し，0 へマッピングすることでその影響をなくす．

• 記号（ピリオド，コンマ，疑問符，括弧など）を除去する．

• 短い語（1 文字以下）を除去する．

3.2 採用するネットワーク
前処理によって得られるテキストベクトルを各コミット• ストップワードを除去しない．

の特徴とし，W-CNN のネットワークに入力する．ネット• Java，C，C++などの言語特有のキーワードを除去しワークでは，特徴の抽出，および，分類が CNN によってない．

行われる．この CNN の実装は，Google が公開している

この結果，ソースコード片の演算子や括弧などはすべて削

Tensorﬂow [1] を用いる．これは，実装例やチュートリアル

除され，識別子や予約語のみの列が得られる．

が豊富であり，また，我々の実験環境では，他のライブラ

CNN は固定長の入力のみを受け付けるという制約があリと比較して実行速度が高速であるためである．以下，分るため，ソースコード片の単語数を固定長にする必要があ類に用いられる 3 層のネットワークについて説明する．

る．本実験では，2,000 語を閾値として，それ以上の場合は第 1 層は埋め込み表現層（Embedding layer）で，lscp で切り詰め，それ未満の場合は足りない文字数を 0 で補う 0

分割したそれぞれの単語（作成されたテキストベクトルの埋めを行って，固定長の入力を生成する．たとえば，2,003

各値）の埋め込み表現を学習する．埋め込み表現とは各単語を持つソースコード片は，先頭から 2,000 語までを用い語を表現するベクトルを求めることであり，Mikolov ら [16]て，残りの 3 語を切り捨てる．一方で，1,800 語のコミット

や Pennington ら [19] によって提案されている．Kim のモ

は，2,000 語として処理するために足りない残りの 200 語

デル [11] では埋め込み表現学習ツール word2vec [16] を利を 0 として処理する．つまり，全コミットのソースコード

用しているが，word2vec の学習には大量のデータが必要で片の単語数がすべて 2,000 語で統一されることになる．0

ある．Kim のモデルでは Google News のデータを用いる

埋めは深層学習を用いる際に一般に用いられる手法である

ことで 1,000 億の単語を持つコーパスを利用しているが，が，切り詰めの処理は一般には行われない．今回の場合，我々の分類対象はソースコード片であり，Google News の

最も多くの単語数を持つコミットに合わせて固定長データ

ような自然言語のコーパスでは良い識別結果を得られなを作成すると，入力が非常に大きくなり計算が難しくなっ

かった．また，トレーニングデータのコード片を word2vecてしまう．そこで，閾値として適切な値を調べた結果，多の学習に用いる実験も行ったが，トレーニングデータ不足

くのプロジェクトで 90%以上のコミットが 2,000 語以下でにより，こちらも良い識別結果を得られなかった．そのた収まることを確認したため，提案法では 2,000 を閾値としめ，本研究では埋め込み表現を CNN のネットワークに組て切り詰めの処理を行う．切り詰め方法としては，先頭かみ込み，CNN の一部として学習させる．この層では単語をら数えて 2,000 語以降を切り捨てる簡潔な方法を採用する．

128 次元のベクトルへと変換するためのルックアップテー（3）マッピングとベクトル変換：最後に，手に入れたトブルを作成する．この 128 が埋め込み表現のベクトルサイ

レーニングデータのすべてのコミットの 2,000 語の単語にズ（Embedding size）である．Kim のモデルでは 300 次元

対して頻出単語順に 1 から数字をマッピングし，トレーニの埋め込み表現を採用している．しかし，計算時間が長く

ングデータ全体で 1 つのマッピングテーブルを作成する．

なるため，今回はサイズを縮小する．一般的に 2 の階乗のマッピングテーブルを利用して，訓練データ，および，テス

サイズがよく使われるため，256 もしくは 128 を検討し，

c 2018 Information Processing Society of Japan


1254

情報処理学会論文誌

Vol.59 No.4 1250–1261 (Apr. 2018)

256 では 300 との大幅な差が期待できなかったため，そのまた，Kim のモデルは正規化項として CNN の重みに上限

1 つ下の 128 次元を利用する．

を設ける手法を採用しているが，この正規化では良い識別第 2 層は畳み込み・プーリング層（Convolution/max-

結果が得られなかった．そのため，より単純な 2 乗ノルム

pooling layer）である．畳み込み（Convolution）では，新を採用する．また，ミニバッチサイズを 64 とし，64 デー

しい特徴を抽出するためのフィルタを学習する．本手法でタずつパラメータの更新を行う．

は n-gram [3] のように複数の単語の共起を加味するため，複数の単語ベクトルを同時に処理できるようなフィルタを

4. 評価実験適用する．ここで用いるフィルタは，横幅が埋め込み表現

提案手法の評価実験では，Yang らの Deeper [25] と比較のベクトルサイズの 128 で高さが 3，4，5 の 3 種類のフィ評価を行う．評価実験の概要を図 4 に示す．実験の主要な

ルタ各 128 個である．つまり，3，4，5 単語の共起を考慮

ステップを以下にまとめる．

している．それぞれ 128 個のフィルタを持つ 3 種類のフィ( 1 ) 提案手法に関しては，リポジトリから変更（コミット）

ルタをかけるため，フィルタ適用の結果として計 384 個のを取得し，Commit Guru [9], [20] を用いて，変更が不特徴マップ（Feature maps）が得られる．フィルタの高さ具合を混入したかどうかのラベル情報を基に変更には，Kim のモデルと同じ設定にしている．フィルタの個数

ラベル付けをする．各変更に対し，変更されたソース

は，Kim のモデルにおけるフィルタ数よりも数を増やし，コードを収集し変更のソースコード片を作成する．

( 2 ) Deeper に関しては，Commit Guru から 14 個の変更

2 の階乗となるようにしている．
次に，プーリングでは，フィルタから得られた特徴マッ

メトリクスを取得する．

プから重要な特徴を抽出するためにマックスプーリング( 3 ) どちらに対しても同じリサンプリングを行う．

（Max-pooling）を適用する．ここでのマックスプーリング( 4 ) 提案手法 W-CNN と比較対象の不具合予測手法 Deeper

は各フィルタから得られた特徴マップの最大値を最も重要に対して 10 × 10 重交差検証による予測精度の評価をな情報として保存する手法である．そのため，畳み込みに行いその結果をまとめる．

よりフィルタが適用された後の 384 個の特徴マップを 384

以降，それぞれの方法について詳細を説明する．

個のノードに変換することができる．この設定は Kim の

4.1 Commit Guru による分析データの準備モデルと同じである．
第 3 層は全結合層であり，出力のノードを 2 つとして，

不具合予測手法の評価において実験データの公開性と透不具合である確率をソフトマックス関数を用いて計算する．

明性は重要である [8]．そのため，我々は Rosen らが公開している Commit Guru [9], [20] から得られるデータを利

3.3 ハイパーパラメータと訓練データ用する．Commit Guru は Git のリポジトリを指定すると本研究におけるハイパーパラメータは，Kim のモデルを参考にして設定している．ただし，学習におけるパラメー

変更メトリクス [9]，および，不具合混入コミットの情報を自動で計算可能な Web アプリケーションである．

タの更新の際の最適化アルゴリズムには Adam [12] を利用

本研究では，不具合混入コミットの情報をコミットのラする．Adam はニューラルネットワークの学習でよく利用

ベル付けに利用する．また，メトリクスを比較評価のためされている確率的勾配降下法（SGD）よりも早く誤差を収の不具合予測手法 Deeper の入力で用いる．Commit Guru

束させることができるアルゴリズムであると報告されていが行う（1）不具合混入コミットのラベル付けと（2）メトる．そのため，より高速な学習が可能と考えたためである．

リクスの収集方法について以下に述べる．

図 4

評価実験の概要

Fig. 4 The outline of experiments.

c 2018 Information Processing Society of Japan


1255

Vol.59 No.4 1250–1261 (Apr. 2018)

情報処理学会論文誌

表 1 変更メトリクス

表 2

Table 1 Change metrics.
名称

定義

Table 2 Subject datasets.
Project

Language

The Total Number

Buggy Rateof Changes

NS

修正されたサブシステムの数ND修正されたディレクトリの数

HadoopJava

13,920

24.8%

NF修正されたファイルの数

Camel

Java

24,74023.2%

Entropy

修正されたコードの各ファイルごとの分布

GerritJava

18,794

20.1%

OsmandJava

31,36614.0%

LA追加されたコード行数

LD

削除されたコード行数

バグ修正の変更か否か

Purpose

変更される前のファイルのコード行数

FIX

HistoryLT

NDEV

修正に関わった開発者の人数

AGE

最後の変更から最新の変更までの平均時間

NUC

ユニークな変更の数

ExperienceSize

Diﬀusion

分類

対象プロジェクト

EXP

開発者の経験

REXP

最近の開発者の経験

SEXP

サブシステムについての開発者の経験

CMake

C++

28,40010.1%

BitcoinC++

11,093

14.4%

Gimp

C++

37,11622.5%

なお，Commit Guru で分析可能なデータは Git リポジ
トリで管理されているデータであるが，比較対象の先行研（1）不具合混入コミットのラベル付け：Commit Guru

究 [25] で分析されているほとんどのプロジェクトのソー
スコード管理システムが Git ではないため，先行研究と同
じプロジェクトのセットを使用することはできなかった．
我々は，Commit Guru を利用可能なプロジェクトの中から様々な分野（サーバやアプリ）のプログラムでかつ異なる言語で書かれているプロジェクトを利用する．

4.3 比較手法 Deeper

はコミットに対し，不具合が混入したコミット（buggy）

比較手法の Deeper [25] では，ディープビリーフネットとそれ以外のコミット（clean）にラベル付けをする．不ワークが採用されている．この論文から得られた Yang ら具合混入コミットは不具合を修正したコミットから推定が採用しているディープビリーフネットワークについてのする．Commit Guru は，まずコミットメッセージを解析

情報は，ネットワークのアーキテクチャ，および，メトリ

し，Hindle らの研究 [5] におけるコミットを分類するため

クスの前処理についてである．Deeper のディープビリーのキーワード（たとえば bug や ﬁx など）があれば，そのコ

フネットワークは以下のネットワークが指定されている．

ミットが不具合を修正しているコミットであると決める．

• 3 つの隠れ層を持つ．

次に，その修正を行ったコミットの修正行を特定し，その• 各層のノード数は，入力層から出力層まで順番に 14，行が追加されたコミットを不具合が混入したコミットとしてラベル付けする．他の不具合コミットを推定する一般的

20，12，12，2 である．
• 学習時のミニバッチサイズは 100 である．

な手法として SZZ アルゴリズム [21] があるが，公開されまた，前処理として，各メトリクスを 0–1 範囲にスケーリている信頼性の高いライブラリなどがなく，それぞれの研ングする．計算式は以下である．

究で独自の実装が試みられているため，公開性という観点
で SZZ アルゴリズムではなく Commit Guru を利用する．
（2）メトリクスの収集：収集されるメトリクスは亀井ら

X0−1 =

Xorg − Xmin
Xmax − Xmin

(1)

各メトリクスに対して，Xorg は全変更に対するそのメトの 14 個の変更メトリクス [9] である（表 1）．これらのメ

リクス値のベクトル，Xmin は全変更の中で最小のメトリ

トリクスを，比較評価のための不具合予測手法 Deeper の

クス値，Xmax は最大のメトリクス値である．

入力として用いる．

学習の繰返し回数は，Deeper の説明に記載されていな
い．そのため，誤差をプロットし繰返し回数を決定する．

4.2 対象とするプロジェクトデータ
本研究では，不具合予測手法を作成するために十分な履

結果，50 回の繰返しにより，Deeper の汎化を十分行えることが分かったため，Deeper の繰返し回数を 50 とする．

歴のある 7 つのオープンソースソフトウェアプロジェク
ト（Hadoop，Camel，Gerrit，Osmand，CMake．Bitcoin，

4.4 データのリサンプリング

Gimp）のリポジトリを利用する．また，プロジェクトは，

表 2 に示すとおり，不具合を混入した変更は全体の変更

それぞれすでに Commit Guru で解析され，14 個の変更メの数に対して少ない傾向にある．クラスごとのデータ数のトリクスと不具合混入コミットかどうかのラベルが利用可

不均一は多数派のクラスにバイアスをかけ，予測モデルの能である．対象プロジェクトの詳細を表 2 に示す．

学習精度を下げてしまう可能性がある．不具合予測においc 2018 Information Processing Society of Japan


1256

Vol.59 No.4 1250–1261 (Apr. 2018)

情報処理学会論文誌

表 3 リサンプリング済みのプロジェクトの変更数

Table 3 The number of changes of resampled datasets.
Clean Changes

まず，提案手法 W-CNN が変更のソースコード片に対する
不具合予測に適用可能かどうかを調べる．
また，学習が可能であるならば，どの程度の W-CNN の学

Project

Buggy Changes

Hadoop

3,280

3,280

Camel

5,620

5,620

が適切であるのかを調査する．エポック数とは，W-CNN

Gerrit

3,470

3,470

における学習を何回繰り返すかの値である．通常，エポッ

Osmand

4,150

4,150

ク数が大きければ大きいほど，より訓練データに適合した

CMake

2,790

2,790

CNN を生成できる．しかし，エポック数が大きすぎると，

Bitcoin

1,450

1,450

ネットワークが訓練データに特化しすぎてしまい，テスト

Gimp

8,080

8,080

習の繰返し回数（本研究ではエポック数を単位としている）

データに対して精度が悪くなる（汎化性能が悪くなる）という過適合の問題が発生する．したがって，汎化性能を大ては，データのリサンプリングにより精度を上げることがきくし，かつ，過適合を起こさない最大のエポック数を求可能であると知られており [22]，その評価においてもデー

める．

タ数を均一にするためのリサンプリング技術が用いられて5.1.2 アプローチいる [9], [22], [25]．

W-CNN が不具合を学習可能か，また過適合を起こさず

本研究では各クラスのデータ数を統一する手法として，に汎化できているかを調査するため，学習精度を示す訓ランダムアンダーサンプリングを用いる．ランダムアン

練誤差（Train loss），および，汎化性能を示すテスト誤差

ダーサンプリングは，データ数が各クラスで均一になるま（Test loss）を計算する．この計算のために，我々の手法でで，データ数の多いクラスからランダムにデータを削除しは交差エントロピーを用いている．50 エポックまで学習をていく手法である．表 3 にリサンプリング後のプロジェ

進めて，訓練誤差，および，テスト誤差をプロットし，そクトごとの変更数を示す．ここで，変更数が表 2 から計算の学習精度，および，汎化性能を調べる．エポック数が増できる変更数と異なることが分かる．たとえば，Hadoop

えているにもかかわらず，テスト誤差が一定か大きくなるであれば，不具合を含んだ変更が 24.8%あり，各クラスの場合は過適合の恐れがあると判断する．

データが 3,452 個に揃わなくてはならない．これは，すべ

さらに，AUC の値を 5 エポックごとに記録することで，ての変更にソースコードの変更が含まれているわけではな

分類精度の推移を調べる．これにより，適切なエポック数

いためである．そのため，各プロジェクトで，表 2 から計を選択する．AUC の値は 10 × 10 重交差検証によりプロ算できる変更数よりも少ない変更数となっている．また，

ジェクトごとに 100 回実行が行われた結果の平均とする．

すべてのプロジェクトで 1 桁目の端数は丸めている．

5.1.3 結果

4.5 10 × 10 重交差検証
本研究では実験におけるデータの選択の偏りを減らすた
めに，訓練データ，および，テストデータの選択に 10 × 10
重交差検証を利用する．10 × 10 重交差検証は，10 重交差
検証を 10 回実行する評価手法であり，不具合予測手法の研究で多く利用されている [25]．
それぞれの回でランダムアンダーサンプリングを再度実行することでデータの偏りをできる限り減らすことを行う．最後に，10 × 10 重交差検証の結果の平均値を計算し，各々の手法の評価値とする．評価値には閾値に依存しない

ROC（Receiver Operating Characteristic）曲線から得られる AUC（Area Under the Curve）を利用する．

5. 結果
5.1 RQ1：W-CNN に よ る 不 具 合 の 学 習・予 測 は 可
能か？

5.1.1 動機
我々の知る限り，今までに変更のソースコード片に対して深層学習を適用した研究は行われていない．そのため，

c 2018 Information Processing Society of Japan

学習が進むごとに訓練誤差，および，テスト誤差が減少していることから，提案手法 W-CNN は変更のソースコード片に対する不具合予測に適用可能である．
図 5 に，各プロジェクトの学習過程における訓練誤差，
および，テスト誤差を示す．この図から，学習を進めるごとにすべてのプロジェクトにおいて訓練誤差，および，テ
スト誤差が減少していることが分かる．訓練誤差が小さけ
れば学習が進んでいることを示し，テスト誤差が小さけれ
ばテストデータに適合（汎化）していることを示している．
ただし，15 エポック以降は学習データに対する学習は進んでいるが，汎化は進みにくくなることが確認できる．
これは，図 5 より 4 つのプロジェクト（Hadoop，Camel，Gerrit，Osmand）でエポック数が 15 を超える程度で訓練誤差，および，テスト誤差の差が大きくなり始めていることか
ら確認できる．また，残りの 3 つのプロジェクト（CMake，

Bitcoin，Gimp）ではより早い段階でこの傾向が見られる．
これらより，エポック数 15 を学習が進んだ W-CNN として以降の RQ で利用する 1 つ目のエポック数とする．

1257

情報処理学会論文誌

Vol.59 No.4 1250–1261 (Apr. 2018)

図 5

各プロジェクトの学習過程における W-CNN の訓練誤差（Train loss）およびテスト誤差（Test loss）

Fig. 5 Train loss and test loss for each project in W-CNN learning process.
表 4

学習過程における W-CNN の AUC のプロジェクト間での平均値

Table 4 Average AUC values in W-CNN learning process.
エポック数

AUC

5

10

15

20

25

30

35

40

45

50

0.788

0.797

0.803

0.807

0.811

0.813

0.815

0.816

0.816

0.817

学習が進むごとに AUC の値が上昇していることが確認でき，最高で平均 AUC 0.817 が得られる．
表 4 は各プロジェクトで得られた AUC の値の平均を 5
エポックごとにまとめた表である．学習が進むごとに AUCの値が上昇していることが分かる．一方で，進むごとに上昇幅は小さくなることも確認できる．エポック数 40 から

50 の範囲ではほとんど変化が見られない．そこで，エポッ
ク数 50 を学習を十分進めた W-CNN として以降の RQ で利用する 2 つ目のエポック数とする．
提案手法 W-CNN の学習過程を記録した結果，W-CNN
は本実験で用意した学習データに対して適用可能であり，
平均 AUC は最高で 0.817 であることから，提案手法による不具合分類が可能であることが分かる．また，得られた結果からエポック数 15 と 50 の時点のモデルを以降の RQ
で用いることとする．

た CNN によって，バグ検出の精度が向上するのではないか」というものである．先行手法として本研究でも比較対象とする Deeper においては 14 個の変更メトリクスからDeep Belief Network を構築しており，入力としては比較的小さいものとなっている．大規模な特徴抽出をテキストから行うことで，バグ検出精度が向上することを期待する．

5.2.2 アプローチ
比較対象として，従来の不具合予測手法で我々の手法とアプローチが最も近い Yang らの Deeper [25] を用いる．

Deeper も，変更に対して深層学習を用い不具合予測を行うが，変更メトリクスを用いた点や，深層学習のモデルなどが異なる．提案手法に関しては，RQ1 で示した 2 つのエポック数（15，および，50）における W-CNN（以降，それぞれ W-CNN 15，および，W-CNN 50 と呼ぶ）を用いる．評価値には AUC を用いる．この値は 10 × 10 重交差
検証を行った平均値として計算する．

5.2.3 結果

5.2 RQ2：W-CNN は既存の変更に対する深層学習を

W-CNN 15，および，W-CNN 50 は，既存の深用いた不具合予測手法よりも予測精度が良いか？

層学習による変更に対する不具合予測手法よりも予測5.2.1 動機

精度が良い．

提案手法 W-CNN が不具合予測として既存の手法よりも精度が良いか否かを調べる．これにより，W-CNN による不具合予測が効果的であるかを調べる．
ここで，我々が立てた仮説は「大規模なデータを利用し

c 2018 Information Processing Society of Japan

表 5 は，W-CNN 15，W-CNN 50，および，Deeper から得られた AUC の値をまとめた表である．すべてのプロ
ジェクトにおいて，W-CNN 50 が最良であることが分か

1258

情報処理学会論文誌

表 5

Vol.59 No.4 1250–1261 (Apr. 2018)

W-CNN 15，W-CNN 50，および，Deeper の AUC

Table 5 AUC values by W-CNN 15, W-CNN 50, and Deeper.

表 6

W-CNN 15，W-CNN 50，および，Deeper の学習時間（秒）Table 6 Training times by W-CNN 15, W-CNN 50, andDeeper (s).

提案手法

従来手法
提案手法

従来手法

W-CNN 15

W-CNN 50

DeeperHadoop

0.788

0.802

0.684

Camel

0.783

0.798

0.630

Hadoop

260.5

625.4

54.6

Gerrit

0.817

0.832

0.752

Camel

363.9

1,006.2

92.7

Osmand

0.810

0.825

0.698

Gerrit

300.9

692.8

71.4

CMake

0.803

0.821

0.622

Osmand

350.5

830.0

118.1

Bitcoin

0.793

0.811

0.675

CMake

263.0

588.7

107.7

Gimp

0.825

0.830

0.624

Bitcoin

219.0

384.1

45.5

Gimp

502.6

1,439.6

138.3

AVG

322.9

795.3

89.8

プロジェクト

AVG

0.803

0.817

プロジェクト

0.669

る．また，W-CNN 15 も Deeper より予測精度が高いことが確認できる．以上より，W-CNN は既存の手法より高い精度をソースコード片のみから学習可能であることが分かる．この結果から，多くの入力データを利用することで予

表 7

W-CNN 15以上の実験の過程で，Deeper と W-CNN に関する興味

学習後の W-CNN，および，Deeper の 1 コミットに対する識

Table 7 Prediction times by W-CNN and Deeper for one
commit (s).

プロジェクト

提案手法

従来手法

W-CNN

DeeperHadoop0.00040.0008

不具合あり，変更行数が少ないものを不具合なしと判定す

Camel

0.00030.0008る傾向が強かった．一方，W-CNN では変更行数の違いにGerrit0.00040.00080.0008

よる判定傾向に差は出なかった．これは W-CNN は変更行

Osmand0.0004

数の影響を受けにくいことを示している．より詳細な分析

CMake

0.00040.0008にはさらなる実験が必要であるため，今後の課題としたい．

Bitcoin

0.00040.0009Gimp

0.00040.0008AVG

0.00040.00085.3 RQ3：W-CNN の学習・予測時間はどの程度か？
5.3.1 動機
一般に深層学習はロジスティック回帰などの軽量な機械
学習よりも学習の時間を必要とする．また，巨大なネット
ワークを持つ深層学習は，小規模なネットワークを持つ深層学習よりも学習時間がかかる．我々は，W-CNN と Yangらの Deeper [25] の学習および予測時間を比較して，提案手法を考察する．

5.3.2 アプローチ
学習が終了するまでの時間を学習時間として 1 重交差
検証ごとに計測する．つまり，W-CNN 15 ならば，15 回の学習のエポックが終了するまでの時間である．この時間を，10 × 10 重交差検証を行い 100 回計測し，その平均値を評価する．実行環境は，Intel Xeon CPU E5-1620 v3 @3.50 GHz，NVIDIA GeForce GTX TITAN X（3584 cuda

Deeper

別時間（秒）

測精度が改善できる可能性が示された．
深い差異が見つかった．Deeper では変更行数が多いものを

W-CNN 50

表 6 は，W-CNN 15，W-CNN 50，および，Deeper から得られた 1 フォールドの学習時間をまとめた表である．

W-CNN 15 は Deeper よりも，また，W-CNN 50 は W-CNN
15 よりも，長い学習時間がかかる．そのため，学習時間の点では，Deeper が最も良い．ただし，最も学習に時間がかかる Gimp であっても，学習時間は 23 分程度である．また，表 7 に示しているとおり，一度学習すれば，その後の各コミットに対する予測時間は，提案手法で 0.0004 秒程
度などと短い．そのため，変更に対する実行時間のオーバ
ヘッドは少ない．

W-CNN の学習時間は，変更数（コミット数）によらないが，既存手法である Deeper は変更数と強く関係がある．

cores, 12 GB）である．
5.3.3 結果
W-CNN 15，および，W-CNN 50 は既存手法よりも長い学習時間を必要とするが，各コミットに対する予測時間は短い．

c 2018 Information Processing Society of Japan

表 3 と合わせて考えると，従来手法である Deeper は変更数が多いプロジェクトほど多くの学習時間がかかる傾向があるが，W-CNN はその傾向が小さい．これは，W-CNNの分析対象が変更のソースコード片であり，その長さが学習時間に影響を与えているためである．

1259

情報処理学会論文誌

Vol.59 No.4 1250–1261 (Apr. 2018)

6. 妥当性の検証
6.1 構成概念妥当性
評価指標として AUC を用いている．他に不具合予測で一般的に利用される評価指標として Precision や Recall，ある．特に，比較評価に用いた Yang らの Deeper はスク
リプトなどが公開されておらず，実装が完全に再現できているかを確認する手段がない．

7. 結論

これらの組合せである F1 値があるが，AUC はこれらの指本論文では，深層学習の分類モデルである畳み込みニュー標の要素を表現可能な指標であり，不具合予測の評価指標

ラルネットワークを用いた不具合予測手法 W-CNN を提として妥当であると考える．

案した．我々の知る限り，提案手法は，変更のソースコー

また，本実験では，データの選択の偏りを取り除くため

ド片に対して深層学習を適用し不具合予測を行った初めてに 10 × 10 重交差検証を行っている．そのため，データのの研究である．また，提案手法の評価のために 7 つのソフ

選択の偏りも小さくできていると考える．

トウェアプロジェクトに対して，提案手法と従来の変更に

本実験では，考慮する文脈行数を 3 行として実験を行っ対する深層学習を用いた不具合予測手法 Deeper の比較実ている．これは，Hadoop プロジェクトに対して文脈行数験を行った．実験から得られた本研究の貢献を以下にまとが 3 行のときに最も良い識別結果であったこと，および，める．

Git の diﬀ コマンドで標準で出力される行数が 3 行である

( 1 ) 提案手法 W-CNN の学習過程の訓練誤差，および，テ

ことによる．一方で，他の文脈行数が最も良い識別性能を

スト誤差を調べることにより，変更のソースコード片出す場合もあり，文脈行数 3 行が最も良い文脈行数であるのみを用いた深層学習によって不具合の予測が可能でとは断定できない．しかし，本研究の目的は，変更のソーあり，さらに，その分類精度が高いことを示した．

スコード片に対して深層学習を適用し不具合予測を行うこ( 2 ) 提案手法 W-CNN は，既存の変更に対する深層学習をとであり，どの文脈行が最も優れているかを検証すること用いた不具合予測手法と比較して，学習に時間がかかではない．そのため，最適な文脈行に関する検証は今後のるが，コミットごとの予測時間は短く，高い不具合予研究課題として考えている．

測精度をもたらすことが可能であることを確認した．
以上の結果から，W-CNN は分類精度の高い不具合予測

6.2 外的妥当性
本実験では 7 つのソフトウェアプロジェクトを選択し，手法として期待できる．また，W-CNN は学習に時間がか
かるが，1 度学習を終えると以降の各コミットに対してのそれらから収集した変更を実験データとして利用している．

不具合である確率計算は 0.0004 秒程度と非常に短い時間選択したプロジェクトは，C，および，Java の 2 つの言語で実行することが可能であり，実用に足る効率的な不具合のどちらかで書かれており，また，様々な分野（サーバ，

予測手法になりうると考える．

Web アプリケーション，モバイルアプリケーション，開発
ツール，デスクトップアプリケーション）をカバーしてい参考文献

る．しかし，これらのプロジェクトだけでは，世にあるす[1]

べてのソフトウェアプロジェクトに対しての一般的な結果を示せていない可能性がある．より対象プロジェクトを増やすことで，外的妥当性を高めることができる．また，本
実験の対象プロジェクトはすべて OSS であるため，実開[2]発組織と共同研究による妥当性の向上が必要である．
[3]

6.3 内的妥当性
本研究の実験ではデータへのラベル付けに Commit Guruを利用している．しかし，Commit Guru による不具合混[4]

入コミットの網羅率は完全ではない．たとえば，不具合を修正したコミットのコミットメッセージに特定のキーワー[5]ドが含まれていなかった場合は，その不具合を見逃してしまう．一方で，公開されている Web アプリケーションで[6]あり，実験の再現性が高く，また今後の応用も行いやすい
と考える．

[7]

実験に利用したスクリプトに対して検証は行っているが，我々が気づいていない不具合が含まれている可能性は

c 2018 Information Processing Society of Japan[8]

Abadi, M., Agarwal, A., Barham, P., Brevdo, E., Chen,
Z., Citro, C., Corrado, G.S., Davis, A., Dean, J., Devin,M., et al.: Tensorﬂow: Large-scale machine learningon heterogeneous distributed systems, arXiv:1603.04467(2016).
Aversano, L., Cerulo, L. and Del Grosso, C.: Learning from bug-introducing changes to prevent fault prone
code, IWPSE, pp.19–26, ACM (2007).
Brown, P.F., Desouza, P.V., Mercer, R.L., Pietra, V.J.D.
and Lai, J.C.: Class-based n-gram models of natural language, Computational Linguistics, Vol.18, No.4, pp.467–
479 (1992).
Dos Santos, C.N. and Gatti, M.: Deep Convolutional
Neural Networks for Sentiment Analysis of Short Texts,
COLING, pp.69–78 (2014).
Hindle, A., German, D.M. and Holt, R.: What do largecommits tell us?: A taxonomical study of large commits,
MSR, pp.99–108, ACM (2008).
Ihaka, R. and Gentleman, R.: R: A language for data
analysis and graphics, Journal of Computational andGraphical Statistics, Vol.5, No.3, pp.299–314 (1996).
Jiang, T., Tan, L. and Kim, S.: Personalized defect prediction, ASE, pp.279–289, IEEE (2013).
Kamei, Y. and Shihab, E.: Defect prediction: Accom-

1260

情報処理学会論文誌

[9]

[10]

[11]
[12]
[13]

[14]

[15]

[16]

[17]

[18]

[19]

[20]

[21]

[22]

[23]

[24]

[25]

[26]

[27]

Vol.59 No.4 1250–1261 (Apr. 2018)

plishments and future challenges, SANER, Vol.5, pp.33–
45, IEEE (2016).
Kamei, Y., Shihab, E., Adams, B., Hassan, A.E.,
Mockus, A., Sinha, A. and Ubayashi, N.: A LargeScale Empirical Study of Just-in-Time Quality Assurance, IEEE Trans. Software Engineering, Vol.39, No.6,
pp.757–773 (2013).
Kim, S., Whitehead, Jr., E.J. and Zhang, Y.: Classifying software changes: Clean or buggy?, IEEE Trans.
Software Engineering, Vol.34, No.2, pp.181–196 (2008).
Kim, Y.: Convolutional neural networks for sentenceclassiﬁcation, arXiv:1408.5882 (2014).
Kingma, D. and Ba, J.: Adam: A method for stochastic
optimization, arXiv:1412.6980 (2014).
Krizhevsky, A., Sutskever, I. and Hinton, G.E.: Imagenet classiﬁcation with deep convolutional neural networks, NIPS, pp.1097–1105 (2012).
Lam, A.N., Nguyen, A.T., Nguyen, H.A. and Nguyen,
T.N.: Combining deep learning with information retrieval to localize buggy ﬁles for bug reports (n), ASE,
pp.476–481, IEEE (2015).
Menzies, T., Krishna, R. and Pryor, D.: The Promise
Repository of Empirical Software Engineering Data,available from http://openscience.us/repo (accessed2017-10-17).
Mikolov, T.: word2vec: Tool for computing continuous distributed representations of words, available fromhttps://code.google.com/archive/p/word2vec/
(accessed 2017-10-17).
Mizuno, O. and Kikuno, T.: Training on errors experiment to detect fault-prone software modules by spamﬁlter, ESEC/FSE, pp.405–414, ACM (2007).
Pedregosa, F., Varoquaux, G., Gramfort, A., Michel, V.,
Thirion, B., Grisel, O., Blondel, M., Prettenhofer, P.,
Weiss, R., Dubourg, V., et al.: Scikit-learn: Machinelearning in Python, Journal of Machine Learning Research, Vol.12, No.10, pp.2825–2830 (2011).
Pennington, J., Socher, R. and Manning, C.D.: Glove:
Global Vectors for Word Representation, EMNLP,
Vol.14, pp.1532–1543 (2014).
Rosen, C., Grawi, B. and Shihab, E.: Commit Guru:
Analytics and Risk Prediction of Software Commits,
ESEC/FSE, pp.966–969, ACM (2015).
Śliwerski, J., Zimmermann, T. and Zeller, A.: Whendo changes induce ﬁxes?, Sigsoft Software Engineering
Notes, Vol.30, No.4, pp.1–5, ACM (2005).
Tan, M., Tan, L., Dara, S. and Mayeux, C.: Online defect prediction for imbalanced data, ICSE, pp.99–108,
IEEE (2015).
Thomas, W.S.: lscp: A lightweight source code preprocesser, available from https://github.com/doofuslarge/
lscp (accessed 2017-10-17).
Wang, S., Liu, T. and Tan, L.: Automatically learning
semantic features for defect prediction, ICSE, pp.297–
308, ACM (2016).
Yang, X., Lo, D., Xia, X., Zhang, Y. and Sun, J.: Deeplearning for just-in-time defect prediction, QRS, pp.17–
26, IEEE (2015).
Zhang, X., Zhao, J. and LeCun, Y.: Character-level convolutional networks for text classiﬁcation, NIPS, pp.649–
657 (2015).
Zimmermann, T., Premraj, R. and Zeller, A.: Predicting
defects for eclipse, PROMISE, p.9, IEEE (2007).

c 2018 Information Processing Society of Japan

近藤 将成
平成 29 年京都工芸繊維大学工芸科学
部情報工学課程卒業．学士（工学）．
同大学大学院工芸科学研究科情報工学専攻博士前期課程在学中．平成 29 年
国立研究開発法人産業技術総合研究所
リサーチアシスタント．教師なし学習
モデルによるソフトウェア不具合予測に関する研究に従事．

森 啓太
平成 29 年京都工芸繊維大学大学院工芸科学研究科情報工学専攻博士前期課
程修了．修士（工学）．CNN のソフト
ウェア工学への応用に関する研究に従事．同年 4 月より三菱電機（株）．

水野 修 （正会員）
平成 11 年大阪大学大学院基礎工学研
究科助手．平成 13 年博士（工学）大阪
大学．平成 22 年京都工芸繊維大学大学院工芸科学研究科准教授．平成 29年同大学情報工学・人間科学系教授．
主にソフトウェアのバグ検出手法，ソフトウェアリポジトリのマイニングに関する研究に従事．

崔 銀惠 （正会員）
平成 14 年大阪大学大学院情報数理系
専攻博士後期課程修了．博士（工学）大阪大学．同年（株）東芝研究開発センター．平成 16 年より産業技術総合研究所特別研究員，研究員を経て，現在，主任研究員．主にソフトウェアのテスト，検証，不具合特定に関する研究に従事．

1261