情報処理学会論文誌

Vol.53 No.2 612–621 (Feb. 2012)

オープンソースソフトウェアにおけるコメント記述およびコメントアウトとフォールト潜在との関係に関する定量分析
阿萬 裕久1,a)
受付日 2011年6月14日, 採録日 2011年11月7日

概要：一般にコメント文はソースコードを理解するうえで有益な情報を提供する．しかしながら，理解性の低いコードや複雑なコードであってもコメント文の存在によってそれらの問題が目立たなくなる場合もある．リファクタリングの分野では，そういったコードの問題を “不吉な匂い” と呼んでおり，その場合にコメント文は “消臭剤” の役割を果たすともいわれている．そこで，実際の傾向について考察するため，本論
文では 7 種類のオープンソースソフトウェアに対してデータ収集と定量分析を行っている．その結果として次の傾向が確認されている：（1）コメント記述の多いコードほどフォールトの潜在率も高い傾向にある；（2）LOC に対するコメント記述の割合が 12.6%を超えるコードでのフォールト潜在率は，コメント記述のないコードの約 2 倍である；（3）コメントアウトもあわせて登場するコードではその可能性がさらに高い．
キーワード：メトリクス，コメント，コメントアウト，フォールト潜在性

Quantitative Analysis of Relationships among
Comment Description, Comment Out andFault-proneness in Open Source Software
Hirohisa Aman1,a)Received: June 14, 2011, Accepted: November 7, 2011

Abstract: Comment descriptions generally provide useful information for understanding the source code.
However, some comments mask problematic code fragments which are complex and/or hard-to-understand.
In the study of refactoring, such problematic code fragments are called “bad smell” and the associated comments serve as “air freshener.” To investigate such impact of comments, this paper collects a lot of sourcecode from seven major open source software and conducts quantitative analysis on their source code. The
results show the followings: (1) A code having more comments is more fault-prone; (2) A code, whose ratioof comments to LOC is grater than 12.6%, is about double fault-prone than a code which has no comments;(3) The assurance of the above trend is higher when the code has not only many comments but also acomment-out.
Keywords: metrics, comment, comment out, fault-proneness1. はじめにソースコードにおいて，コメント文はプログラムの実行にいっさい影響しない要素である．しかし，コメント文の記述内容は当該ソースコードの内容説明である場合や開発者のメモである場合もあり，そのコードの理解容易性には大きな影響力を持つといえる．それゆえ一般に，コメント

1a)

愛媛大学大学院理工学研究科
Graduate School of Science and Engineering, Ehime University, Matsuyama, Ehime 790–8577, Japan
aman@cs.ehime-u.ac.jp

c 2012 Information Processing Society of Japan

文の記述はコードレベルでの重要な品質維持・向上活動として認識されている．実際，コーディング規則の一部とし

612

情報処理学会論文誌

Vol.53 No.2 612–621 (Feb. 2012)てコメント文記述に関する規則 [1], [2] が設けられている場
合も多い．
しかしその一方で，コメント文が多く書かれたコードに

定義 1（コメント記述率（CMR））
ソースファイルが与えられたとき，CMR 値を式 (1) で定
義する：対する警鐘も見られる．Fowler [3] は，リファクタリング
でいうところの “不吉な匂いの予兆” としてコメント文をCMR =コメント行数,LOC(1)あげている．そこではコメント文そのものを非難している

ただし，コメント行数とはコメント文が行全体あるいは一のではなく，それが “消臭剤” の役割になってしまい，結部に記述されているような行の数である．なお，ここでい果として不吉な匂いのコードを隠してしまっているのではうコメント文はメソッド定義の内部に記述されたものでないかと指摘されている．また，Kernighan ら [4] はプロ

あって，なおかつコメントアウトでないものに限る．また，グラミング作法として，多くのコメントを書かなければな

LOC（Lines Of Code）は当該ソースファイルにおけるコ

らないのであれば，むしろそのプログラムを書き直すべきメントのみの行と空行を除いたコード行数である．

であると述べている．端的にいえば，コメント文は品質を2低下させるような一種の “悪い存在” というわけではない．

CMR はソースファイルにおけるコメント文記述の量をしかしながら，結果としてコメント文が多く書かれるよう

規模（LOC）に対する比率として表したメトリクスである．

なコードは，そのコメント文がなければ理解できないよう

なお，ここで対象としているコメントは，メソッドの内部なコードになっており，それゆえフォールトの温床になっに記述されたものに限定されており，Javadoc のようなドている（質の低下を招いている）のではないかという懸念

キュメンテーションコメントはその目的が他のコメント文がある．

と異なることから対象外としている．同様に，この測定でそこで本論文では，実際のオープンソースソフトウェア

はコメントアウトも含めていない．コメントアウトについに対してコメント文記述の状況を調査し，フォールトの潜ては，次のように別途メトリクスを導入する．

在との関係について定量的な分析を行う．分析を行うにあ定義 2（コメントアウト率（COUTR））

たってオープンソースソフトウェアを調査対象とした理由

ソースファイルが与えられたとき，COUTR 値を式 (2) では，オープンソース開発のようにソースコードが公開され定義する：

る環境では，企業等の内部に閉じた開発環境よりも上述の傾向が顕在化しやすいと考えたためである．また本論文では，コメント文の記述だけでなくコメントアウトについても分析を行う．ソースコードが公開されており，なおかつ
リポジトリを介して過去のコード改変も追跡可能であるという環境において，あえて削除することなく過去のコード
断片をコメントのかたちで残していることにも何らかの意
味があると考えられるため，コメントアウトも調査・分析の対象とした．
以下，2 章ではコメント文記述，コメントアウトおよび
フォールト潜在の状況を定量的にとらえるための準備として，それら 3 つの視点に関するメトリクスを導入する．そして，3 章において各メトリクスによる調査結果を示し，そのうえで実際のフォールト潜在との関係について定量的な分析を行う．4 章で関連研究についてふれ，最後に 5 章
で本論文のまとめと今後の課題について述べる．

2. メトリクス
本論文では，ソースコードにおけるコメント記述の様子を定量的にとらえるため，次のメトリクスを導入する．便
宜上，対象は Java 言語で書かれたソースコードとする．

• コメント記述率（CoMment Ratio: CMR）[5]，• コメントアウト率（Comment OUT Ratio:
COUTR）[5]．

COUTR =

コメントアウトの行数
.
LOC

(2)

ただし，コメントアウトの行数とは，コメントアウトが行
全体あるいは一部において行われている行の数である．なお，与えられたコメントがコメントアウトであるかどうかの判別は，文献 [5] のアルゴリズム（付録参照）によって行うものとする．

2
COUTR はソースファイルにおけるコメントアウトの量
を規模（LOC）に対する比率として表したメトリクスである．コメントアウトは通常のコメントと異なり，ソース
コードの一部を無効化する目的で使用される．その際，あ
えて削除せずにコメントとして残すという行為にも一定の意味はあると筆者は考え，前出のコメントとは区別して測定する．
本章の最後に 3 章での分析に向けた準備として，次の“フォールト潜在率（Fault Ratio: FR）” [5] も導入しておく．
定義 3（フォールト潜在率（FR））
ソースファイルの集合が与えられたとき，FR 値を式 (3) で
定義する：

FR =

フォールトが検出されたソースファイル数.
対象ソースファイル数(3)2
c 2012 Information Processing Society of Japan


613

情報処理学会論文誌

Vol.53 No.2 612–621 (Feb. 2012)

表 1

FR は，与えられたソースファイル集合の中でリリース後に 1 つ以上のフォールトが検出されたソースファイルの占分析対象ソフトウェア

Table 1 Software used in our analysis.

める割合である．つまり，所定のソースファイル集合においソフトウェアてフォールトの潜在がどれだけ疑われるのか（Fault-prone

Apache Ant [7]バージョン ソースファイル数 規模（LOC）

であるか）を表したメトリクスである．多くの Fault-prone
モジュール予測研究と同様に [6] FR は各ソースファイル
でのフォールトの有無に着目している（フォールト数ではない）ことに注意されたい．

Apache log4j [8]なお，これに関しては，フォールトの個数や密度（1KLOC
あたりのフォールト数）といったメトリクスの使用も考え

1.3

122

14,2301.4

173

20,4991.5

286

33,694

1.6

343

45,7961.7

720

87,334

1.0

111

7,636

1.1

98

7,180

1.2

165

14,004られる．上述の FR はフォールトの有無に関するものであ

Apache Tomcat [9]

6.0.0

758

122,512

るため，個数や密度に比べて情報が粗いという欠点がある．

Apache Velocity [10]

1.4

184

22,6671.5

206

24,591

1.6

219

26,285

2.4

634

94,971

主たる研究課題と位置付け，FR を用いることとした．ま

2.5

716

117,692

ずはフォールト潜在との関係の有無を明らかにし，そのう

2.6

828

149,328

えで（今後の課題として）より詳細な観点であるフォール

2.7

850

155,094

2.0

6,143

765,765

2.1

4,838

690,736

3.0

9,727

1,262,893

しかし本論文では，まずは “コメント文やコメントアウト
がフォールトの潜在と関係しているのかどうか” の解明を

ト数や密度との関係分析を行っていくべきであると考え，

Apache Xalan [11]Eclipse [12]

今回は FR による分析を行うこととした．

3. 分析

Xerces [13]

本章では，前章で定義した 3 つのメトリクス（CMR，FR

1.2

411

60,032

1.3

425

64,503

27,957

3,787,442

合計および COUTR）を用いてコメント記述とフォールト潜在の可能性との関係を定量的に分析する．

3.1 分析対象
分析対象のソフトウェアを表 1 に示す．解析の都合上，次の 3 点を満たしているという理由でこれらを分析対象とした：( 1 ) ソースファイルが入手可能であること，( 2 ) Java 言語で記述されていること，( 3 ) 各ソースファイルに対し，そのリリース後でのフォー
ルト検出の有無について情報を入手可能であること．

図 1

CMR 値の分布

Fig. 1 Distribution of CMR values.

( 1 ) および ( 2 ) は我々が開発したデータ収集ツールに起因する制約である．( 3 ) は前述のコメント関連メトリクスの都合上詳細は割愛するが，全体として CMR 値の分布にとフォールト潜在率との関係を解析する目的で必要な制ソフトウェアやバージョンによる大きな差異は見られず，約である．本論文では ( 3 ) を満足するデータ集合として，CMR 値の分布は右裾の長いかたちで歪んでいた．また，

PROMISE データリポジトリ [14] で公開されているフォー

CMR = 0，すなわち，メソッド定義の内部にコメントがルト検出情報を利用した．なお表 1 では，実際に公開されいっさい書かれていないというソースファイルも多く見ているソースファイルのうち，PROMISE データリポジト

られ，全体で 39%程度含まれていた．実際，大半のソー

リ上のフォールト情報と対応付けが可能なものに限定してスファイルでは CMR 値は 0 もしくは数パーセント程度

掲載している．それゆえ，表 1 に掲載のソースファイル数（中央値は 0.044）となっていた（図 1 参照；表示の都合上と規模は，実際に配布されているソースファイル数および

CMR ∈ [0, 2] としているが，CMR > 2 となるものも少数

規模より小さいものも含まれていることに注意されたい．

存在する）
．

3.2 準備（1）：コメント記述率の分布

3.3 準備（2）：コメントアウト率の分布

まず，各ソフトウェアのソースファイルに対してコメ

CMR と同様に，各ソフトウェアのソースファイルに対ント記述率（CMR）を測定し，その分布を調べた．紙面

してコメントアウト率（COUTR）を測定し，その分布を調

c 2012 Information Processing Society of Japan


614

情報処理学会論文誌

Vol.53 No.2 612–621 (Feb. 2012)の傾向，すなわち，コード規模が大きくなるにつれてコメ
ント記述率もフォールト潜在率も高くなるという傾向が見られた．Gi と Gi+1 における CMR 値の差および FR 値の差（i = 1, 2, 3）については，いずれの組合せにおいても有意な差であることを有意水準 5%で確認できている．つまり，コードが大きくなるにつれてフォールト潜在の可能性が高まるだけでなく，コメントも多く記述される傾向にあるといえる．なお，COUTR については 3.3 節からも明らかなように，いずれのコード規模でも代表値（中央値）は

図 2 COUTR 値の分布0 であった．

Fig. 2 Distribution of COUTR values.

以上のことから，端的にいえば “規模（LOC）の大きい
表 2 LOC 値の分布

コードは，コメント記述率（CMR）もフォールト潜在率

Table 2 Distribution of LOC values.
最小値

2

第1
四分位数

中央値

24

60

第3
四分位数

146

（FR）も高い傾向にある” といえる．したがって，コメン

最大値

最大値

（外れ値*1 を除く）

5,228

329

べた．その結果，COUTR 値の分布においてもソフトウェ
アやバージョンによる大きな差異は見られなかった．そして，全体で 87%程度のソースファイルでは COUTR = 0，
すなわち，コメントアウトは含まれていなかった（図 2参照；ほとんどが COUTR = 0 であるため表示の都合上

COUTR ∈ [0, 0.1] としているが，CMR > 0.1 となるものも少数存在する）．

ト記述の影響をより適切に分析するには，コード規模の違いを考慮する必要がある．それゆえ以降では，分析をソー
スファイル集合 Gi（i = 1, 2, 3, 4）ごとに区別して実施し，コード規模の差異による影響を軽減させることにする．

3.5 分析（1）：コメント記述率とフォールト潜在率の関係
ここではコメント記述率（CMR）とフォールト潜在率（FR）の関係を分析する．前述したように，ここでの分析
はコード規模で分割した G1 〜G4 の 4 つのソースファイル集合に対してそれぞれ実施する．
分析方法は次のとおりである：対象ソースファイル集合

3.4 準備（3）：コード規模と各メトリクス値の関係
一般に，規模の大きい（長い）ソースコードではフォール
トの潜在がより強く疑われる傾向にある [15]．それゆえ，今回の調査対象ソフトウェアにおいてもコードの規模によってフォールト潜在の可能性が異なっていることが考えられる．また，コメント記述の傾向もコードの規模によって異なっている可能性も考えられる．本論文の目的は，ソース
コードにおけるコメント記述とフォールト潜在の関係を定
量的に分析することにあるが，そのためにはコード規模が分析に及ぼす影響を無視できない．そこで，コメント記述に関する分析に先立って，コード規模（LOC）とコメント
記述率（CMR），コメントアウト率（COUTR）ならびにフォールト潜在率（FR）の関係をそれぞれ分析しておく．
表 1 に示した 27,957 個のソースファイルについてコー
ド規模を LOC で測定すると，LOC 値の分布は表 2 のとおりであった．ここでは，データ分布（表 2）に基づいて，
ソースファイル集合を表 3 に示す（外れ値を除いた）4 つの部分集合 Gi （i = 1, 2, 3, 4）に分割して考える．すると
各 Gi におけるコメント記述率（CMR），コメントアウト
率（COUTR）ならびにフォールト潜在率（FR）はそれぞれ表 4，図 3 および図 4 のとおりであった．図 3 および
図 4 から分かるように CMR と FR については右肩上がり*1

第 1 四分位数を Q1 ，
第 3 四分位数を Q3 として，
Q3 +1.5(Q3 −Q1 )を超えるものを外れ値 [16] とした．

c 2012 Information Processing Society of JapanGi をそれぞれ• CMR = 0 であるもの（便宜上 “ZERO” と表す），• CMR ≤ med[CMR > 0] であるもの（便宜上 “LOW”と表す），• CMR > med[CMR > 0] であるもの（便宜上 “HIGH”と表す），という 3 つに分割して各分割におけるフォールト潜在率（FR）を算出する．ただし，med[CMR > 0] とは “CMR > 0
であるもの” の中での中央値を意味する．そして，ZEROと LOW の間，ならびに LOW と HIGH の間で FR 値に
統計的有意差があるかどうかを有意水準 5%で確認する（i = 1, 2, 3, 4）．

2

分析結果を表 5 および図 5 に示す．なお，今回の収集
データにおいては med[CMR > 0] = 0.126 であった．表中の “有意差” の列では，統計的有意差を確認できた場合に不等号（<），確認できなかった場合には等号（=）をそれぞれ記載している．
表 5 および図 5 から，フォールト潜在率の分布には“ZERO = LOW < HIGH” あるいは “ZERO < LOW <HIGH” という傾向を確認できた．つまり，コメント記述率の高いソースファイル（HIGH）は，コメントのないファ
イル（ZERO）に比べてフォールト潜在率が高い傾向にあるといえる．なお，いずれのコード規模（G1 〜G4 ）においても，HIGH（CMR > 0.126）でのフォールト潜在率は615

Vol.53 No.2 612–621 (Feb. 2012)

情報処理学会論文誌

表 3

ソースファイル集合の分割

Table 3 Partition of source file set.

表 4

名称

該当するファイル

実際の範囲

ソースファイル数

G1

最小値 ≤ LOC ≤ 第 1 四分位数

2 ≤ LOC ≤ 24

7,203

G2

第 1 四分位数 < LOC ≤ 中央値

24 < LOC ≤ 60

6,823

G3

中央値 < LOC ≤ 第 3 四分位数

60 < LOC ≤ 146

6,970

G4

第 3 四分位数 < LOC ≤ 最大値（外れ値を除く）

146 < LOC ≤ 329

4,226

各ソースファイル集合 Gi における CMR，COUTR およびFR
Table 4 CMR, COUTR and FR values in Gi .
ファイル集合CMR（中央値） COUTR（中央値）

FR

G1

0

0

0.0780G2

0.031300.1517G3

0.072700.2303G40.105400.3495図 5

コード規模（Gi ）とコメント記述率（CMR）の各組合せにおけるフォールト潜在率（FR）

Fig. 5 FR value in each combination of code size and CMR
categories.

ZERO（CMR = 0）でのそれのおおむね 2 倍程度であった：• G1 : 0.073 → 0.130（1.78 倍）*2

図 3 各ソースファイル集合 Gi におけるコメント記述率 CMR（中• G2 : 0.123 → 0.248（2.02 倍）

央値）

Fig. 3 CMR median value in Gi .

• G3 : 0.162 → 0.312（1.93 倍）• G4 : 0.235 → 0.440（1.87 倍）
つまり，コメント記述率が 12.6%を超えるような比較的コ
メントの多いコードは，コメント記述のないコードよりもフォールトの潜在が強く疑われるという結果がコード規模を問わず得られた．

3.6 分析（2）：コメントアウト率とフォールト潜在率の関係
図 4 各ソースファイル集合 Gi におけるフォールト潜在率 FR

3.5 節と同様にして，コメントアウト率（COUTR）とFig. 4 FR value of Gi .

フォールト潜在率（FR）の関係を分析した．ここでもソース
ファイル集合をコード規模に従って G1 〜G4 の 4 つに分割

表 5 コード規模（Gi ）とコメント記述率（CMR）の各組合せにおけるフォールト潜在率（FR）

Table 5 FR value in each combination of code size and CMR
categories.

し，それぞれを分析の対象とした．分析方法も 3.5 節と同様であるが，COUTR の場合は大半のコードで COUTR = 0である（3.3 節参照）こともあり，次のように分析することとした：

ソースファイル
集合

ZERO

有意差

CMR
LOW

有意差

HIGH

G1

0.073

=

0.071

<

0.130

G2

0.123

=

0.111

<

0.248

G3

0.162

<

0.198

<

0.312

G4

0.235

=

0.283

<

0.440

c 2012 Information Processing Society of Japan

対象ソースファイル集合 Gi をそれぞれ• COUTR = 0 であるもの（便宜上 “ZERO” と表す），• COUTR > 0 であるもの（便宜上 “NON-ZERO” と表す），*2

G1 において “CMR が ZERO の場合の FR 値が 0.073，HIGHの場合の FR 値が 0.130 であり，後者が前者の約 1.78 倍になっている” という意味である．G2 ，G3 および G4 についても同様
である．

616

情報処理学会論文誌

表 6

Vol.53 No.2 612–621 (Feb. 2012)

コード規模（Gi ）とコメントアウト率（COUTR）の各組合

表 7

Table 7 FR value in each categories about code size, CMR

せにおけるフォールト潜在率（FR）

Table 6 FR value in each combination of code size andand COUTR.

COUTR categories.
ソースファイル
集合

G1

ZERO

各分類におけるフォールト潜在率（FR）

ソースファイル
集合

COUTR
有意差
NON-ZERO

0.076

<

G2

0.143

<

0.326

G3

0.219

<

0.309

G4

0.340

<

0.376

G1

0.333

G2

G3

G4

COUTR

ZERO

CMR
有意差

HIGH

ZERO

0.072

<

0.117

有意差

—

NON-ZERO

—

—

—

ZERO

0.117

<

0.233

有意差

<

NON-ZERO

0.323

=

0.415

ZERO

0.159

<

0.298

—

<

<

有意差

=

NON-ZERO

0.202

<

0.377

ZERO

0.248

<

0.434

有意差

=

NON-ZERO

0.129

<

0.452

=

( 2 ) COUTR が ZERO のコード（COUTR = 0）よりもNON-ZERO のコード（COUTR > 0）の方がフォー
ルト潜在率（FR）が高い．
そこでこれらを組み合わせた視点でも分析を行った．
図 6

コード規模（Gi ）とコメントアウト率（COUTR）の各組合
せにおけるフォールト潜在率（FR）

Fig. 6 FR value in each combination of code size and COUTR
categories.

分析結果を表 7 に示す．表 7 ではソースファイルの規模 G1 〜G4 ごとに CMR の 2 つのカテゴリ（ZERO およ
び HIGH）と COUTR の 2 つのカテゴリ（ZERO およびNON-ZERO）の組合せについて，フォールト潜在率（FR）という 2 つに分割して各分割におけるフォールト潜在率を記載している．また，“有意差” と記した行および列では，（FR）を算出する．そして，ZERO と NON-ZERO の間でそれぞれ隣接する FR 値の間に統計的な有意差があるかど

FR 値に統計的有意差があるかどうかを有意水準 5%で確うかを有意水準 5%で確認した結果を記載している．不等認する（i = 1, 2, 3, 4）．

2号（<）は有意差あり，等号（=）は有意差なしを表してい

分析結果を表 6 および図 6 に示す．表中の “有意差” のる．なお，G1 で COUTR が NON-ZERO（COUTR > 0）

列では，統計的有意差を確認できた場合に不等号（<）をの行に関しては，いずれも該当ファイル数が 30 未満と少な記載している．

かったため，記載ならびに有意差の確認を省略している．
表 7 における各行（横方向）に着目*3 すると，いずれも各 Gi において NON-ZERO でのフォールト潜在率（FR）
は ZERO よりも高く，コード規模が同じ程度であってもコ

コメント記述の多い（CMR が HIGH）ファイルのフォー

メントアウトを含んだコードの方がフォールトの潜在が疑

ルト潜在率（FR 値）の方がコメント記述のない（CMR がわれるという傾向を確認できた．ただし，表 6 および図 6ZERO）ものよりも高いことが分かる．G2 の “COUTR がから分かるように，コード規模が大きいほど，その傾向は

NON-ZERO” の場合に限っては統計的な有意差までは確認

弱いといえる．

できていないが，この傾向を否定する結果ではないと考える．つまり，コメントアウトの有無にかかわらず，メソッ

3.7 分析（3）：コメント記述率とコメントアウト率の組合せに関する分析

ド内にコメント記述の多い（CMR > 0.126）コードの方がフォールトの潜在がより強く疑われると思われる．

最後に，コメント記述率（CMR）とコメントアウト率

一方，同表の各列（縦方向）に着目*4 すると，COUTR（COUTR）の組合せについて，3.5 節および 3.6 節と同様が NON-ZERO の場合の FR 値は COUTR が ZERO の場にフォールト潜在率（FR）を算出して比較を行う．前小節

合よりも必ずしも高いという傾向にはなっていない．つままでの分析結果として，G1 〜G4 いずれの規模においてもり，コメントアウトの有無に着目することに一定の価値は次の 2 つの傾向が共通して確認できている：あると思われるが，コメント記述率に比べるとその影響力( 1 ) CMR が ZERO のコード（CMR = 0）よりも HIGH

*3のコード（CMR > 0.126）の方がフォールト潜在率*4（FR）が高い．

c 2012 Information Processing Society of Japan

COUTR を ZERO または NON-ZERO に固定した場合について考えることに相当する．
CMR を ZERO または HIGH に固定した場合について考えることに相当する．

617

情報処理学会論文誌

Vol.53 No.2 612–621 (Feb. 2012)

は小さいといえる．

“コメント記述の割合がコード改変とともにどう変化して

なお，“CMR が HIGH” のもの（表 5 参照）と “CMR がいくのか” という変化の様子や “どういったエンティティ

HIGH であり，かつ COUTR が NON-ZERO” のもの（表 7（if 文等）にコメントが付きやすいか” 等の傾向分析が行わ参照）を比較すると，（データ数の都合上 G1 を除外して）れており，本論文のようにフォールト潜在との関係分析や•G2 : 0.248 → 0.415（67%向上）*5

コメントアウトに関する分析は行われていない．

• G3 : 0.312 → 0.377（21%向上）

文献 [18] では，プログラムの可読性という観点から，手• G4 : 0.440 → 0.452（3%向上）

続き（procedure）の構成とコメントの有無がそれぞれ可読となっている．

性の向上に役立つかどうかの検証が行われている．そこで以上の分析結果から，CMR と COUTR の両方が独立しは実験によりコメントの存在が可読性の向上に役立つことて同程度にフォールト潜在率と関係しているわけではなく，が確認されているが，その実験はプログラムにあらかじめ

基本的には CMR の影響が大きいといえる．つまり，CMR

フォールトが含まれないことが確認されたうえで行われて値が大きい場合にはフォールトの潜在がより強く疑われ，おり，本論文のようにフォールト潜在との関係性を論じる

そのコードにコメントアウトもあわせて存在するようであ

ものではない．また，プログラムの可読性に関する研究とればフォールト潜在の疑惑がさらに強まるといえる．

しては Buse ら [19] の報告もある．そこではコメント文を最後に，各ソフトウェアにおける個別の傾向についても

含むさまざまなコード特性について，それらがプログラム

ふれておく．今回の分析対象では Eclipse のファイル数おの可読性に関する有用なメトリクスとなりうるかどうかをよび規模が他のソフトウェアに比べて特に大きい（表 1 参実験によって検討している．結果として，コメント文には照）ため，分析結果全体が Eclipse のみの結果に強い影響

可読性をある程度向上させる効果があることが示されていを受けている可能性も懸念された．そこで補足として，各るが，もともと可読性の低いコードにコメントを書くこと

ソフトウェアについても 3.5 節および 3.6 節と同様の分析

でその可読性の調整（効果の相殺）が行われている場合もを個別に実施した*6（付録 A.2 参照）．その結果，FR 値にあると論じられている．本論文はコードの可読性ではなく個体差は見られたものの，CMR に関する傾向は全ソフト

フォールト潜在の可能性との関係を論じるものであるためウェアでおおむね共通していた．また，COUTR に関する

文献 [19] とも着眼点は異なる．しかしながら，可読性の低傾向は，CMR ほど強い傾向ではなかったが，NON-ZERO

いコードとコメント文の間での効果の相殺という視点は本の場合の FR 値は ZERO の場合と同等かそれ以上という論文の動機付け（“消臭剤” としての効果；1 章参照）に通傾向を確認できた．このことから，今回の分析によって得ずるものであり，可読性を視野に入れた分析も今後検討しられた CMR および COUTR に関する傾向には一定の一般ていく必要があると思われる．

性があるものと思われる．

4. 関連研究

Fault-prone モジュール予測に関して，コードの内容をトークン単位で抽出し，ベイジアンフィルタによる学習を利用して Fault-prone モジュールを検出する研究があ

筆者の知る範囲では，コメント文を主たる分析対象としる [20]．平田ら [21] はその手法をコメント文の内容についた研究はほとんど見られない．多くの文献では，コメントても適用し，実行可能文と同様にコメント文も Fault-prone

文をソースコードから除去ないし無視したうえでコード

モジュール検出に有用であることを示している．コメント

解析やメトリクス測定が行われ，データ分析が行われてい文のフォールト潜在に対する影響を分析するという方向性

る．あるいはコメント文記述に関するメトリクスも使われは本論文と同じであるが，その手法はメトリクスに基づいるが，他のメトリクスとともに分析データの一部という位たものではないため基本的なアプローチが本論文とは異置付けになっている．

なる．ただし，コメント文の内容に踏み込んだ関連研究とコメント文を主対象とした数少ないものとしては Fluri
ら [17] や Tenny [18] の研究がある．

して，本研究の今後の発展において参考になるものと思われる．

文献 [17] ではソフトウェア発展の過程において，コード

文献 [5] および [22] は本論文の先行研究であり，それらとともにコメント文も発展（加筆ないし修正）されていくでは Eclipse に対する CMR および COUTR の測定と FR

様子について定量的な分析を行っている．しかしそこではとの関係分析を行っている．しかし，文献 [5] ではコード*5*6

G2 において “CMR が HIGH” である場合に FR = 0.248 であるのに対し，これを “CMR が HIGH” であってなおかつ “COUTR
が NON-ZERO” であるものに絞り込むと FR = 0.415 となり，FR 値（フォールト潜在の高さ）が 67%高くなるという意味である．他も同様である．
CMR と COUTR の組合せについてはソースファイル数が極端に少なくなる場合も多く，統計的有意差の確認が難しいため個別の分析は割愛した．

c 2012 Information Processing Society of Japan

規模の影響が考慮されておらず，また，いずれの文献においても分析が Eclipse に限定されており，しかも CMR とCOUTR の組合せについては考慮されていなかった．本
論文では分析対象を拡充し，コード規模ならびに CMR とCOUTR の組合せについても分析を行っている．

618

情報処理学会論文誌

Vol.53 No.2 612–621 (Feb. 2012)

コメントなしでも十分に理解できるようなソースコードを

5. おわりに
本論文は，ソースコードにおけるコメントの記述量とコ
メントアウトの存在に着目し，それらとフォールト潜在率との関係を定量的に分析した．

7 種類のオープンソースソフトウェア（ソースファイル数
27,957，コード規模 3,787,442 LOC）についてデータ収集と統計解析を行った結果，コメントが 12.6%を超える割合で記述されているようなコード（コメント記述率 > 0.126）
では，コメントがまったく記述されていないコードに比べてフォールト潜在の可能性が 2 倍程度（正確には 1.78〜

2.02 倍）高いという傾向を確認できた．また，前者のコードにコメントアウトも含まれているような場合は，その可能性がさらに高いということも確認できた．

書くことが理想的ではあるが現実的には難しく，多少のコ
メント記述は必要な場合も多いと思われる．その中においてコメント文の存在を問題視するのが本論文の主旨ではな
く，より多くのコメントを必要とするようなコードは品質管理において特に注意を要する存在にもなりうるという警鐘であることに注意されたい．
謝辞

学研究費補助金・若手研究（B）（課題番号：22700035）の助成を受けています．
参考文献
[1]

本来，コメント文はソースコードの理解を助けるものである．つまり，コメント文の存在は決して品質を下げるものではない．しかし，理解性の低い，あるいは複雑性の高[2]いコードは多くのコメントを必要としてしまうことがあり，それゆえコメント記述の多さとフォールト潜在の可能[3]

性の高さがつながるという結果になったものと考えられる．Fowler もリファクタリングにおける “不吉な匂い” の1 つとしてコメント文の存在を指摘しており，今回の調査[4]

結果はその指摘にも符合するものと考える．
また，興味深い結果として，コメントアウトの有無がフォールト潜在率の高さと関係していることも確認でき[5]た．オープンソース開発ではコードそのものが公開されており，過去のコード改変もすべてリポジトリ上で追跡可能である．そのような環境下で，あえてコメントアウトとし[6]て過去のコード断片を現在のコード内に残しているということにも何らかの意味はあるものと考えられる．今回の調[7]

査ではコメントアウトの意味にまで踏み込んだ分析はできておらず，筆者による推察の域を出ないが，そのようなコ
メントアウトの存在は開発における一種の試行錯誤の現れ[8]ではないかと考える．コメント文やコメントアウトの内容についてもより詳しく分析し，フォールト潜在との関係を解析していくことが今後の課題である．

[9]

最後に本論文の主張がコメント文の記述を否定するもの
ではないことを強調しておく．コメント文を多く書くこと[10]がコードの品質低下を招くのではなく，品質の低いコードにはコメントが多く書かれている場合があるということ[11]であり，本論文はその実証を試みたものである．つまり，コード上の問題箇所（分かりにくい部分や複雑な部分）を[12]

カバーするために多くのコメントが書かれている場合も少なくないということである．それゆえ，コメントの多さはフォールト潜在の 1 つの兆候になっており，そのような[13]

コードではコメントの充実よりもむしろ再コーディングや徹底的なコードレビューを検討すべきであるともいえる．

c 2012 Information Processing Society of Japan

本論文の初稿に対しまして有益なコメントをくださった査読者の皆様に感謝いたします．本研究の一部は科[14]

Vermeulen, A., Ambler, S.W., Bumgardner, G., Metz,
E., Misfeldt, T., Shur, J. and Thompson, P.: The Elements of Java Style, Cambridge University Press, NewYork (2000).
MISRA-C 研究会（編）：組込み開発者におくる MISRAC:2004—C 言語利用の高信頼化ガイド，日本規格協会，
東京 (2006).
Fowler, M.: Refactoring: Improving The Design of Existing Code, Addison Wesley Longman, NJ (1999). 児玉公信，友野晶夫，平澤 章，梅澤真史（訳）：リファクタリング—プログラミングの体質改善テクニック，ピアソ
ン・エデュケーション，東京 (2000).
Kernighan, B.W. and Pike, R.: The Practice of Programming, Addison Wesley, NJ (1999). 福崎俊博（訳）：プログラミング作法，アスキー，東京 (2000).
阿萬裕久：オープンソースソフトウェアにおけるコメント
文記述とフォールト潜在率との関係に関する実証的考察，
ソフトウェアエンジニアリング最前線 2010，松下 誠，
紫合 治（編），pp.97–100, 近代科学社，東京 (2010).
野中 誠，水野 修：fault-prone モジュール予測技法の基礎と研究動向，ソフトウェアエンジニアリングシンポジ
ウム 2010 チュートリアル資料，情報処理学会シンポジウ
ムシリーズ，Vol.2010, No.2, 情報処理学会，東京 (2010).
Apache Ant project: Apache Ant, Apache Software
Foundation (online), available fromhttp://ant.apache.org/ (accessed 2011-05-27).
Apache Logging Services project: Apache log4j, Apache
Software Foundation (online), available fromhttp://logging.apache.org/log4j/ (accessed 2011-0527).
Apache Tomcat project: Apache Tomcat, Apache Software Foundation (online), available fromhttp://tomcat.apache.org/ (accessed 2011-05-27).
Apache Velocity Project: Apache Velocity Site, Apache
Software Foundation (online), available fromhttp://velocity.apache.org/ (accessed 2011-05-27).
Apache Xalan project: Apache Xalan Project, Apache
Software Foundation (online), available fromhttp://xalan.apache.org/ (accessed 2011-05-27).
Eclipse Foundation: Eclipse Foundation open source
community website, Eclipse Foundation (online), available from http://www.eclipse.org/ (accessed 2011-0527).
Apache Software Foundation: Apache Xerces Project,
Apache Software Foundation (online), available fromhttp://xerces.apache.org/ (accessed 2011-05-27).
Boetticher, G., Menzies, T. and Ostrand, T.: PROMISE

619

情報処理学会論文誌

[15]

[16]

[17]

[18]

[19]

[20]

[21]

[22]

[23]

[24]

付

Vol.53 No.2 612–621 (Feb. 2012)

Repository of empirical software engineering data
http://promisedata.org/ repository, West Virginia University, Department of Computer Science (2007).
Fenton, N. and Ohlsson, N.: Quantitative Analysis ofFaults and Failures in a Complex Software System, IEEE
Trans. Softw. Eng., Vol.26, No.8, pp.797–814 (2000).
Upton, G. and Cook, I.: A Dictionary of Statistics, 2nd
Edition, Oxford University Press, Oxford (2008). 白旗
慎吾（監訳）：統計学辞典，共立出版，東京 (2010).
Fluri, B., Würsch, M., Giger, E. and Gall, H.C.: Analyzing the co-evolution of comments and source code, Software Quality Journal, Vol.17, No.4, pp.367–394 (2009).
Tenny, T.: Program Readability: Procedures Versus
Comments, IEEE Trans. Softw. Eng., Vol.14, No.9,
pp.1271–1279 (1988).
Buse, R.P. and Weimer, W.R.: A Metric for Software
Readability, Proc. 2008 Int’l Symp. Softw. Testing andAnalysis, pp.121–130 (2008).
Mizuno, O. and Kikuno, T.: Prediction of Fault-Prone
Software Modules Using a Generic Text Discriminator,
IEICE Trans. Information and Systems, Vol.E91-D,
No.4, pp.888–896 (2008).
平田幸直，水野 修：テキスト分類に基づく Fault-prone
モジュール検出法におけるコメント行の影響の分析，情報処理学会研究報告，Vol.2010-SE-170, No.10, pp.1–8(2010).
阿萬裕久：フォールト潜在予測に向けたコメント文記述及びコメントアウトの定量分析，電子情報通信学会技術研究
報告，Vol.110, No.305, KBSE2010-25, pp.13–18 (2010).
Gosling, J., Joy, B., Steele, G. and Bracha, G.: Java
Language Specification, 3rd Edition, Pearson Education, NJ (2006). 村上雅章（訳）：Java 言語仕様第 3 版，
ピアソン・エデュケーション，東京 (2006).
Geeknet, Inc.: Azureus/Vuze, Geeknet, Inc. (online),available from http://sourceforge.net/projects/
azureus/ (accessed 2011-05-27).

末尾の “*/” は C に含めない．同様に 1 行コメント（//）の場合，先頭の “//” と末尾の改行文字は C に含めない．

C において最後に登場する非空白文字が次の（1），（ 2），（3）のいずれかであるとき，C をコメントアウトと見なす：（1）セミコロン “;”，
（2）左波括弧 “{”，
（3）右波括弧 “}”．
ただし，非空白文字とは，次のいずれにも該当しない文字をさす：空白（ASCII の SP 文字），水平タブ（ASCII のHT 文字），フォームフィード（ASCII の FF 文字），改行（ASCII の LF 文字），復帰（ASCII の CR 文字）．

2

ここに示したアルゴリズムは，コメントの内容の末尾文
字に着目した簡易的なものであり，それゆえ容易に実装できる．ただし，当然ながらすべてのコメントアウトを自動判別できるような万能なアルゴリズムではない．しかしながら，文献 [5] では中規模のオープンソースソフトウェ
ア（Azureus [24] ver.4.2.0.4；ソースファイル数 3,263，総LOC 467,329）に対して評価実験を行っており，上述のアルゴリズムによって 99.8%の Traditional コメントと 98.7%の1 行コメント（総合で 98.9%のコメント）を適切に判別できることを示している．つまり，決して完璧な判別アルゴ
リズムではないが，簡易的な方法により約 99%の判別精度（適切に判別できている割合）を達成できており，十分に実用的である．

A.2 各ソフトウェアに対する傾向分析結果
各ソフトウェアにおける CMR 値および COUTR 値と

FR 値との関係を個別に分析した結果を表 A·1 に示す．表の見方については表 5 および表 6 に同じである．ただし，
ここでは一定の標本数（> 30）を確保して統計的な有意差

録について確認するために，ソースファイル集合 G2 と G3

A.1 コメントアウト判別の簡易アルゴリズ
ム [5]の和集合についてのみ分析を行った．表中の “—” はデー
タ数が 30 に満たなかったものを意味する．

判別対象コメントの内容を C とする．C は長さ 0 以上の文字列で，途中に改行文字を含んでもよい．ただし，コメントの開始および終了を表す文字列は含めない．つまり，

Traditional コメント [23]（/* */）の場合，先頭の “/*” と表 A·1 コメント記述率（CMR）とコメントアウト率（COUTR）に対するフォールト潜在率（FR）

Table A·1 FR value in each category of CMR and COUTR.

ソフトウェア

ZERO

CMR
有意差

HIGH

ZERO

COUTR
有意差
NON-ZERO

Apache Ant

0.106

<

0.205

0.149

=

0.109

Apache log4j

0.475

=

0.538

—

—

—

Apache Tomcat

0.035

=

0.089

0.029

<

0.133

Apache Velocity

0.508

<

0.722

—

—

—

Apache Xalan

0.491

<

0.631

0.545

<

0.607

Eclipse

0.062

<

0.198

0.128

=

0.121

Xerces

0.067

<

0.333

—

—

—

c 2012 Information Processing Society of Japan


620

情報処理学会論文誌

Vol.53 No.2 612–621 (Feb. 2012)

阿萬 裕久 （正会員）
昭和 48 年生．平成 13 年九州工業大学大学院工学研究科電気工学専攻博士後期課程修了．同年愛媛大学工学部助手．平成 19 年より同大学大学院理工学研究科講師．ソフトウェアメトリク
ス，エンピリカルソフトウェア工学に関する研究に従事．博士（工学）．電子情報通信学会，日本
ソフトウェア科学会，日本知能情報ファジィ学会，IEEE
各会員．

c 2012 Information Processing Society of Japan

621