Vol.2010-SE-170 No.10
2010/11/12

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

1. は じ め に

テキスト分類に基づく Fault-prone モジュール検出法における ソフトウェア開発において，不具合を含みそうなモジュール（fault-prone モジュール）を予測することができれば，バグを効率よく除去できるため，開発コストを削減することがで
コメント行の影響の分析
1),2)
きる．そのため，FP モジュールを予測するための研究が数多く行われてきた平 田 幸 直†1

水 野．

従来の研究では，ソフトウェアの不具合はソフトウェアの複雑さに関連しているとの仮定

修†1を置き，ソフトウェアの複雑さを定量化したメトリクスを利用することによって，その不具合を推定するモデルを構築していた．

テキスト分類に基づく fault-prone モジュール検出法である fault-prone フィルタリングではこれまでコード行とコメント行の区別がなされていなかった．しかし，モジュール中のコード行はコンピュータに望む処理が記述されたものであり，コメント行はコードの説明や利用法などの記述が主であるなど，コード行とコメント行は異なる役割を果たすものである．そこで，本研究ではコード行とコメント行を区別して扱いEclipse のデータセットに対して fault-prone フィルタリングを行った．その結果，コメント行を利用した方がコード行を利用した検出よりも高い再現率と適合率を示した．

これに対し，我々は不具合がソフトウェアモジュール中の語や文脈に関連すると考え，モジュールをテキストとして扱いスパムフィルタによって不具合の有無を判定する「fault-proneフィルタリング法」を提案した3)–5) ．
これまでの fault-prone フィルタリングの研究では，モジュールを 1 つのテキストとして扱い，モジュール中のコメント行とコード行を区別することなく扱ってきた．しかし，ソースコード中におけるコメント行とコード行ではその役割が異なるものであるため，これらを区別して fault-prone フィルタリングを行うことで，コメント行やコード行に特化した結果

Analysis of Influence of Comment Lines in Fault-prone Module
Detection Based on Text Categorizationが得られるのではないかと期待する．
そこで，本研究ではコメント行とコード行を区別して実験を行い，その結果を比較するこYukinao Hirata †1 and Osamu Mizuno †1とによって，コメント行のみを用いた fault-prone フィルタリング法の有効性などを評価する．本研究ではコメント行とコード行での予測精度の違いに重点を置くために，従来のものとは別に新たに fault-prone フィルタを試作した．

Comment lines in the software source code includes descriptions of codes,usage of codes, copyrights, unused codes, comments, and so on. From theviewpoint of fault-prone module prediction, comment lines may have useful information for faulty modules as well as in code lines. In fault-proneness ﬁltering
approach, which we have been proposed based on text ﬁltering technique, comment lines and code lines in a source code modules are regarded as text without
any distinction. For better prediction results of fault-prone modules, the eﬀects
of the comment lines on prediction should be investigated. This study conducts
experiments using Eclipse data sets to reveal the eﬀects of comment lines on thefault-proneness ﬁltering. The result of experiments was somehow unexpected:
prediction using comment lines only shows better recall and precision.

具体的には，まず，コメント行とコード行を区別した辞書を学習する．あるソフトウェア
における不具合モジュールの情報を含む公開データセット2) を利用して，対象としたソースコードモジュールを，不具合有りと無しとを区別して取得した．次に，不具合有りと分類されているソースコードモジュールからコメント行とコード行を別々に抽出する．そして，コメント行とコード行のそれぞれについてテキストのトークンを抜き出して，不具合有りのコメント行辞書，不具合有りのコード行辞書のそれぞれに登録する．不具合無しモジュールからも同様にトークンを抽出し，不具合無しの辞書に登録する．こうしてコメント行，コード行のそれぞれに対して作成した辞書を得る．その後，学習した辞書を用いて，新しいモジュールの予測実験を行う．コメント行とコード行を抽出したものをトークン化し，試作した fault-prone フィルタによって不具合の有無を予測する．最後に，予測の精度をコメント†1 京都工芸繊維大学 大学院工芸科学研究科
Graduate School of Science and Technology, Kyoto Institute of Technology

行とコード行を用いた実験の間で比較する．

1c 2010 Information Processing Society of Japan

Vol.2010-SE-170 No.10
2010/11/12

情報処理学会研究報告
IPSJ SIG Technical Reportいる3)–5) ．本研究では，その過程で明らかになってきた 1 つの課題「コメント行の扱い」に本論文の構成を紹介する．まず，第 2 節では fault-prone フィルタリングの概念について説明する．第 3 節では今回の実験のために試作した fault-prone フィルタについて説明する．

対する仮説の実証実験を行う．

第 4 節ではオープンソースのプロジェクトへの適用実験について述べる．第 5 節では実験

2.1 Fault-prone モジュール検出におけるコメント行の利用の結果に対する考察を述べる．最後に，第 6 節では本研究のまとめと今後の課題について述

本研究では，モジュール中のコメントに該当する部分を「コメント行」と呼び，その他をべる．

「コード行」と呼ぶ．コード行とはコンピュータで実現したい動作が記述されたものであり，プログラミング言語の構文に従って記述されている部分である．これに対し，コメント行

2. Fault-prone フィルタリング

は，主に複雑なソースコードの動作の説明やメソッドの利用法の説明などが言語の構文にとFault-prone フィルタリングはモジュールの不具合の検出にスパムフィルタリングの考えらわれず記述されるものである．

方を導入したものである．

Fault-prone フィルタリングは，モジュール中から抽出したトークンに基づいてその分類現在使われている一般的なスパムフィルタでは，その基礎にベイズの定理を用いたものがを行うが，過去の研究 4) においてはコード行とコメント行の区別は行わずにトークンを抽主流となっている．こうしたスパムフィルタでは，受信したメールを学習していくことに出し分類が行われてきた．また，研究 5) においては，コメントを削除した状態での実験がよって，新たに受信したメールを本人に有用なメール（ham）と迷惑なメール（spam）に行われている．

分類することができる．

しかしながら，コード行とコメント行ではその持つべき役割が異なっているため，これらここでは，スパムフィルタの動作について説明する．基本的なスパムフィルタはメールを区別して扱うことで fault-prone モジュールの予測精度に対して及ぼす影響を評価するこの特徴を学習するステップと学習した結果を利用してメールを分類するステップからなる．とが重要だと考える．

学習ステップでは，学習用に ham メールか spam メールかがわかっているメール群を用意

たとえば，コメントはコードが複雑であると開発者が判断したために記述されることが多する．そして，各メールから単語（トークン）を抽出して辞書に記述する．この際，hamい．このような，人間の主観的判断は客観的な複雑性メトリクスなどよりも場合によってはメールから抽出したトークンは ham メール用の辞書に，spam メールから抽出したものは，不具合を検出する指標としての信頼性が高い可能性がある．このため，コメント行を効率よspam 用の辞書に記述する．これにより，2 つの辞書が作成される．以上が学習ステップでく利用することは不具合の検出精度に良い影響を与えることがあると考えられる．そこで，ある．分類ステップでは学習ステップにおいて作成した 2 つの辞書を利用して，新しく受信本研究ではコード行とコメント行を区別して扱いながら fault-prone モジュールの検出を行したメールを ham と spam のどちらかに分類する．

うことによって，コメント行が fault-prone フィルタの分類精度に対して与える影響を調査

このようなスパムフィルタの動作は，ham と spam にはそれぞれ異なる特徴がある，つする．

まり，文中に含まれる語や文の傾向が異なるという仮定に基づいている．

2.2 コメント行の定義

我々は，この仮定が不具合を含むソースコードと含まないソースコードに対しても当ては

本節では，Java 言語におけるコメントとその扱いについて述べる．Java 言語には次に挙まると考えて，スパムフィルタを fault-prone モジュールの検出に導入したものを提案し，げる 3 種類のコメントが存在する．

それを「fault-prone フィルタリング法」と名付けた．fault-prone フィルタリングでは不具(1)// で始まるコメント

合を含まないモジュールを ham メール，不具合を含むモジュールを spam メールと見なし，(2)/* で始まり */ によって閉じられるコメント

スパムフィルタの処理と同様に辞書を学習する．そして，学習した辞書を用いて新しいモ(3)/** で始まり */ によって閉じられるコメント

ジュールが不具合有りモジュールである確率を計算し，fault-prone モジュールであるか判

ここで，3 つ目のコメントはドキュメンテーションコメントと呼ばれ，その他のコメント定を行う．とは利用目的が異なるが，本研究では各コメントを区別しないものとする．また，コメント

Fault-prone フィルタの有効性については，これまでにも実験を行い，議論を進めてきての内容がコードに説明を加えるものであるのか，コードをコメントアウトしたものであるか

2c 2010 Information Processing Society of Japan

Vol.2010-SE-170 No.10
2010/11/12

情報処理学会研究報告
IPSJ SIG Technical Report等の区別も行わないものとする．

Step 1 まず，不具合有り (f t と表記する) モジュールと不具合無し (nf と表記する) モジュールからトークンを抽出する．そして，f t, nf ごとにトークンの出現数を数える．

3. Fault-prone フィルタの実装

これにより，次の 2 つのハッシュテーブルを得る．

• f aulty(t)： 全 FP モジュールにおけるトークン t の出現数．

本節では，実験で利用した fault-prone フィルタについて説明する．この fault-prone フィ• nonf aulty(t)： 全 NFP モジュールにおけるトークン t の出現数．

ルタはベイズの定理に基づいた単純なものである．学習ステップと分類ステップのアルゴリ
ズムについては，文献 6) で提案されたスパムフィルタの基礎理論を踏襲したものになって

Step 2 トークン t が含まれるモジュールが f t モジュールである確率 Pf t|t を得るハッシュいる．

テーブルを作成する．ここで，Nf t は f t モジュールの数，Nnf は nf モジュールの数

3.1 トークン分割である．確率 pf t|t は式 (1) で与えられる．

(Fault-prone フィルタの入力となるソースコードモジュールは，全てトークンと呼ばれる

rnf = min 1,単位に分解される．ここでは，コード行とコメント行におけるトークンの分割方法について(述べる．

f aulty(t)rf t = min 1,Nf t

まず，コード行の分割について説明する．コード行の分割ではコードを以下の 4 種類の(トークンに分割する．

(1)

アルファベット，数字，ドットからなる文字列(2)

Java 言語の演算子(3)

シングルクオートに囲まれた文字列(4)

ダブルクオートに囲まれた文字列

2 × nonf aulty(t)
Nnf))

(rf t
Pf t|t = max 0.01, min 0.99,
rnf + rf t))(1)

3.3 分類ステップ
このステップでは学習ステップで作成した辞書を用いて，与えられたモジュールが f t モ
ジュールであるか (すなわち，fault-prone か)，そうでないのかの判定を行う．

以上のようなトークンに分割する際に，空白や括弧，セミコロンなどの上記トークンの構成

Step 1 分類を行うモジュールからトークンを抽出し，n 個の特徴的なトークン t1 · · · tn

要素ではない文字についてはトークンを区切るためのみに利用されるためトークンとしてを決定する．ここで，式 (2) の値が大きいほど特徴的であるとする．ただし，今までに，は出力されない．

一度も出現していないトークンであった場合は Pf t|t = 0.4 とする．

abs(0.5 − Pf t|t )次に，コメント行の分割について説明する．コメント行の分割もコード行の分割と基本的に同じである．ただし，コメントはコードのようにプログラミング言語の構文に従ったも(2)

なお，今回の実験では n 個の特徴的なトークンを利用せず，全てのトークンを利用しのではないため，ダブルクオート等が正しく閉じられていない場合や，アポスロトフィなたため，上の Step 1 は実質的に省略されている．のかシングルクオートに囲まれた文字列であるのかを判定することが困難な場合などがあStep 2 式 (3) によってモジュールが f t モジュールである確率が計算される．あるモジューる．そのため，シングルクオートとダブルクオートについては区切り文字として扱う．よっルが fault-prone モジュールであるか否かは，Pf t ≥ 0.9 であるか否かで判定する．こて，文字列「output("Hello, world!");」が与えられたとき，コード行としては output，こで使っている 0.9 は変更可能な閾値である．

∏n"hello world!"の 2 つに分割され，コメント行としては output，hello，world の 3 つ

Pf t = ∏nに分割されるものとする．

3.2 学習ステップ

P∏nf t|ti

i=1+P
i=1 f t|tii=1(1 − Pf t|ti )(3)

4. 適 用 実 験Fault-prone フィルタの学習ステップについて示す．このステップでは，後の分類ステッこの実験では，fault-prone フィルタリングにおいて，モジュール中のコメント行がモジュープで必要な辞書を作成する．

3c 2010 Information Processing Society of Japan

Vol.2010-SE-170 No.10
2010/11/12

情報処理学会研究報告
IPSJ SIG Technical Report
表 1 Eclipse の各バージョンにおけるモジュールの詳細
Table 1 Specification of modules in the Eclipse

ProjectVersion
Number of modules
Number of faulty
modulesNumber of nonfaulty modules

2.0
6,729975(14.5%)
5,754

Eclipse2.1
7,888854(10.8%)
7,034MJava source code
modules

3.0
10,593
1,568(14.8%)
9,025

Non-faulty

Faultyルの分類に与える影響を調べることを目的とする．そこで，コード行によるモジュールの分類実験とコメント行による分類実験の 2 通りを行う．

4.1 実 験 対 象

FaultyJava source code
modulesNon-faultyJava source code
modules

M ftM nf

実験の対象としたのは，オープンソースプロジェクトである Eclipse の異なる 3 つのバージョンから得られたデータである．実験を行うためには，各バージョンに含まれるソフトウェアモジュールのソースコードだけではなく，各ソフトウェアモジュールについての不具合

FaultyFaultyNon-faulty

Non-faulty

Comment lines
in faulty modules

Code lines
in faulty modulesft
McomftMcodeComment lines
in non-faulty
modules

Code lines
in non-faulty
modules

情報が必要である．この情報として，Zimmermann ら7) によって作成された promise-2.0aと呼ばれるデータセットを用いる．
データセット promise-2.0a にはリリース前後 6ヶ月に発見された不具合の情報と 31 種類のメトリクスを測定したデータが記録されている．これらの情報のうち，本実験ではファイルごとに測定されたリリース後の 6ヶ月間に発見された不具合の情報（post）を用いる．
表 1 にデータセットから得られた Eclipse の各バージョンにおけるモジュールの詳細を示す．表中の括弧内の数値は全モジュールに対する f t モジュールの割合である．

nf
McomnfMcode

図 1 モジュール取得の流れ
Fig. 1 Getting modules

4.2 実 験 方 法
この節では，コード行のみを用いた分類実験とコメント行のみを用いた分類実験との 2 つの実験の方法について説明を行う．

からコメント行のみを取り出したものを Mcom とする．コード行による分類の実験においまず，不具合有り (f t) モジュールと不具合無し (nf ) モジュールの定義について説明すては Mcode のみを用い，コメント行による分類の実験においては Mcom のみを用いる．まる．この実験においてモジュールとは 1 つのソースファイルを指すものとする．そして，各た，上で述べた方法で，それぞれのモジュールに対して不具合有り (f t) であるか，不具合モジュールが f t モジュールであるか nf モジュールであるかはデータセット promise-2.0a無し (nf ) であるかの決定を行う．以上の概略を図 1 に示す．

におけるリリース後の不具合（post）の数値によって定める．もし，post が 0 より大きい場

次に，学習と分類を行う実験をコード行とコメント行に対して実施する．コード行による合，そのモジュールを f t モジュールと決定し，そうでなければ nf モジュールと決定する．

分類の実験は次のような流れになる．

ここで決定された値を今回の実験における真値とする．

学習ステップ 図 2 に学習ステップの概略を示す．

ここで，モジュール M からコード行のみを取り出したものを Mcode とする．そして，Mまず，学習に用いるバージョン（train）を決定する．次に，全ての不具合有り (f t) モ

4

c 2010 Information Processing Society of Japan

Vol.2010-SE-170 No.10
2010/11/12

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

Non-faulty

M
A new
Java source code
moduleComment lines
in faulty modules

Code lines
in faulty modulesft
McomftMcodeComment lines
in non-faulty
modulesnf
Mcom

Code lines
in non-faulty
modules
nf
Mcode

Mcom
Tokenize andlearn

Tokenize andlearn

Tokenize andlearn

Comment lines
in a module

Tokenize andlearn

Faultycomment
corpusFaulty code
corpusClassification

Faulty comment
corpusFaulty code
corpusNon-faulty
comment
corpus

Mcode
Code lines
in a module

Classification

Non-faulty
comment
corpusNon-faulty code
corpusNon-faulty
code
corpus
Probability tofaulty

図 2 学習ステップの概略
Fig. 2 Learning procedure

Probability tofaulty

図 3 分類ステップの概略
Fig. 3 Classification procedureft
ジュールから Mcodeを取り出し，トークンを抽出して f t 辞書に学習させる．さらに，ft
残りの不具合無し (nf ) モジュールからも同様に Mcodeを取り出し，nf 辞書に学習さ類実験と同じである．
この実験では，Eclipse の 3 つのバージョンを用いるが，学習には分類対象のバージョンせる．

より古いバージョンのものを用いる．これは，実用的な面を考えると古いバージョンで新し分類ステップ 図 3 に分類ステップの概略を示す．
まず，分類に用いるためのバージョン（test）を決定する．これには，学習ステップでいバージョンの予測ができることが望ましいからである．従って，バージョン 2.0 で学習を用いたバージョンとは異なるものを選択する．次に，分類するモジュールから Mcode行う場合は，バージョン 2.1 と 3.0 の分類を行い，バージョン 2.1 で学習を行う場合はバーを取り出してトークンを抽出し，学習ステップで作成した辞書を利用して分類を行う．

ジョン 3.0 の分類を行う．3 通りの学習・分類の組み合わせに対して，コメント行・コード

これを分類対象のバージョンの全てのモジュールに対して行う．3.3 節において述べた行による予測を実施するため，全部で 6 通りの実験結果を得ることになる．これらの 6 通

ように，分類をするためには利用するトークンの数 n を決定する必要があるが，このりの実験を 3 項組，(利用する情報, 学習バージョン, 分類バージョン) で表すことにする．

4.3 評 価 指 標

実験では分類対象の Mcode 内の全てのトークンを用いることにしている．

モジュールの予測結果は表 2 のようにまとめられる．得られた結果の評価指標として、正コメント行による分類の実験は，モジュールからコード行を取り出した Mcode を利用す答率（Accuracy），再現率（Recall），適合率（Precision），F1 値を用いる．

るのではなく，コメント行を取り出した Mcom を利用することを除いてコード行による分

5

c 2010 Information Processing Society of Japan

Vol.2010-SE-170 No.10
2010/11/12

情報処理学会研究報告
IPSJ SIG Technical Report
表 2 実験結果の凡例
Table 2 Classification result matrix

4.3.1 正 答 率
正答率（Accuracy）は，全モジュールのうち，実測が不具合であるファイルを fault-prone(FP)，不具合ではないモジュールを fault-prone ではない (NFP) と正しく予測できたモ
実測

ジュールの割合を示す．よって，凡例の表 2 の値を用いて式 (4) のように定義される．

Accuracy =N1 + N4
N1 + N2 + N3 + N4(4)4.4 実 験 結 果

正答率はデータの偏りなどに影響されやすい指標であり，この値のみをもって予測精度を評価することは難しい．そのため，下に示す再現率，適合率，F1 値なども併用した評価をす

表 3 から表 8 に 6 つの実験におけるモジュールの分類結果を示す．また，表 9 に分類結るのが一般的である．

果をまとめて評価指標を算出したものを示す．

4.3.2 再 現 率

表 9 に示したコメント行とコード行による予測の結果について比較すると，Recall につ再現率（Recall）は実測が不具合である全てのモジュールのうち，正しく FP と予測できいては，コメント行による結果とコード行による結果でどちらが必ず高いといった特徴は見た割合を示す．よって，再現率は式 (5) のように定義される．

N4
Recall =N3 + N4られない．これに対し，Precision では，コメント行による結果がコード行による結果よりも高い．また，Recall と Precision を組み合わせた値である F1 値についてもコメント行の(5)

直感的には再現率は実不具合を予測できる網羅率を表している．そのため，fault-prone モ

表 3 予測結果: (コメント行, 2.0, 2.1)
Table 3 Prediction result: (comment, 2.0, 2.1)

ジュールの検出という場面では非常に重要な指標となる．

4.3.3 適 合 率
適合率（Precision）は FP と予測したモジュールのうち，実測が不具合であったモジュー

実測ルの割合を示す．適合率は式 (6) のように定義される．

P recision =N4N2 + N4nfft

予測
NFP
FP
5,952
1,082508346

表 4 予測結果: (コード行, 2.0, 2.1)
Table 4 Prediction result: (code, 2.0, 2.1)

実測nfft

予測
NFP
FP
5,711
1,323492362(6)
表 5 予測結果: (コメント行, 2.0, 3.0)
Table 5 Prediction result: (comment, 2.0, 3.0)

直感的には，適合率は実不具合を発見するために必要なコストを表していると考えられる．
すなわち，この値が低いと実際は不具合ではないものまで調べる手間が増えるためである．

4.3.4 F1

nfft

予測
NFP
FPN1
N2N3N4値

実測

再現率と適合率はトレードオフの関係にある．つまり，どちらか一方を下げる代わりに，

nfft

予測
NFP
FP
7,625
1,400835733

表 6 予測結果: (コード行, 2.0, 3.0)
Table 6 Prediction result: (code, 2.0, 3.0)

実測nf
ft

予測
NFP
FP
7,477
1,548934634

他方を上げることができる．そこで，再現率と適合率の調和平均である F1 を式 (7) により定義する．

2 × Recall × P recision
F1 =Recall + P recision

表 7 予測結果: (コメント行, 2.1, 3.0)
Table 7 Prediction result: (comment, 2.1, 3.0)

(7)F1 値は再現率と適合率を総合的に判断するための指標である．一般にこの値が高いほど予実測測精度が高いと判断できるが，やはりデータの偏りなどの影響は受ける．

6nf
ft

予測
NFP
FP
7,563
1,462986582

表 8 予測結果: (コード行, 2.1, 3.0)
Table 8 Prediction result: (code, 2.1, 3.0)

実測

nfft

予測
NFP
FP
7,883
1,142
1,133435

c 2010 Information Processing Society of Japan

Vol.2010-SE-170 No.10
2010/11/12

情報処理学会研究報告
IPSJ SIG Technical Report
表 9 実験結果のまとめ（閾値 = 0.9）
Table 9 Summary of experimental results (Threshold = 0.9)

おいてコメント行を利用することは予測精度をやや向上させていることが分かる．

学習(Training)

分類(Test)

利用情報(Target)

正答率(Accuracy)

再現率(Recall)

適合率(Precision)

F1

2.0

2.1

コメント行
コード行

2.0

3.0

コメント行
コード行

2.1

3.0

コメント行
コード行

0.798
0.770
0.789
0.766
0.769
0.785

0.405
0.424
0.467
0.404
0.371
0.277

0.242
0.215
0.344
0.291
0.285
0.276

0.303
0.285
0.396
0.338
0.322
0.277

コード行による結果とコメント行による結果に差が余り無かったのは，どちらの場合についても学習データが十分でなかったためであると考えられる．これは，スパムフィルタが正しく動作するには十分な量の学習データが必要であり，スパムフィルタを利用する fault-proneフィルタリングにおいても同様だからである．従来の手法では，過去数年間の履歴といった巨大なデータを学習させていたため，学習量は十分であった．しかし，今回の実験では，学習には単一のバージョンのみを用いたため，学習量という点では過去の研究と比べても非常に少ない．このため，十分な量の学習データを利用した場合には，コード行とコメント行のどちらによる分類がより良い結果を出すのかを調査する必要がある．

みを利用した実験の場合の方が高い値を示している．

6. ま と め

3.3 節で示したように，fault-prone モジュールと判定するための閾値は 0.9 で実験を行ったが，この値は現実的には高すぎるとも考えられる．そこで，閾値を 0.5 とした時の実験結

本研究では FP フィルタリングにおいてコメント行のみを用いて予測する実験とコード行果を表 10 に示す．FP モジュールと判定する基準を下げたため，閾値 0.5 の結果は FP とのみを用いて予測する実験を行った．その結果，コメント行のみを用いた実験ではコード行判定した数が増え，Recall が増加している．逆に Precision に関しては低下している．しかのみを用いた実験よりもわずかではあるが，F1 値が高くなることがわかった．

し，予測の全体的な傾向に特に大きな差は見られない．

今後の課題として，他のプロジェクトに適用した場合の結果の調査やどのようなトークンが不具合予測に与える影響が大きいかなどを調査する必要がある．

表 10 実験結果のまとめ（閾値 = 0.5）
Table 10 Summary of experimental results (Threshold = 0.5)
学習(Training)2.0

分類(Test)
2.1

2.0

3.0

2.1

3.0

5. 考

利用情報(Target)
コメント行
コード行
コメント行
コード行
コメント行
コード行

正答率(Accuracy)
0.789
0.755
0.776
0.747
0.738
0.768

再現率(Recall)
0.419
0.438
0.492
0.415
0.416
0.292

適合率(Precision)
0.234
0.204
0.328
0.270
0.260
0.254

また，今回作成した fault-prone フィルタは非常に原始的な実装になっており，今後はソフトウェアモジュールの特性を考慮した手法へと発展させていく必要があると考えられる．

F1

一例として，今回の分析での結果を基に，コメント行やコード行，また，構成管理システム
0.300
0.2790.394
0.327
0.320
0.272のログなどを区別した辞書により不具合を予測し，その予測結果を突き合わせて最終的な予測結果を導き出す手法の開発などが可能だと考えている．

参考文献

1) Khoshgoftaar, T.M. and Seliya, N.: Comparative Assessment of Software Quality
Classification Techniques: An Empirical Study, Empirical Software Engineering,
Vol.9, pp.229–257 (2004).
2) Zimmermann, T., Premrai, R. and Zeller, A.: Predicting defects for Eclipse, Proc.
of 3rd International Workshop on Predictor models in Software Engineering (2007).
3) Mizuno, O. and Kikuno, T.: Training on Errors Experiment to Detect Fault-Prone
Software Modules by Spam Filter, Proc.of 6th joint meeting of the European software engineering conference and the ACM SIGSOFT symposium on the foundationsof software engineering, pp.405–414 (2007).
4) Mizuno, O. and Kikuno, T.: Prediction of Fault-Prone Software Modules Using a察

表 9 と表 10 の結果よりこの実験結果の特筆すべき点は，コメント行のみを用いた予測実験の結果と，コード行のみを用いた実験の結果がほとんど同じ値を示していることにある．
さらに，F1 値を比較すると，コメント行を利用した予測結果の方がコード行を利用した結果よりもわずかではあるが高くなっている．このことから，fault-prone フィルタリングに

7c 2010 Information Processing Society of Japan

Vol.2010-SE-170 No.10
2010/11/12

情報処理学会研究報告
IPSJ SIG Technical ReportGeneric Text Discriminator, IEICE Trans.on Information and Systems, Vol.E91-D,No.4, pp.888–896 (2008).
5) Hata, H., Mizuno, O. and Kikuno, T.: Fault-Prone Module Detection Using LargeScale Text Features Based on Spam Filtering, Empirical Software Engineering,
Vol.15, No.2, pp.147–165 (2010).
6) Graham, P.: Hackers and Painters: Big Ideas from the Computer Age, chapter8,
pp.121–129, O’Reilly Media (2004).
7) Boetticher, G., Menzies, T. and Ostrand, T.: PROMISE Repository of empiricalsoftware engineering data repository, http://promisedata.org/, West Virginia University, Department of Computer Science (2007).

8c 2010 Information Processing Society of Japan