コメント文の密度

ソースコードにおけるコメント文の密
度と保守性との関係に関する考察
愛媛大学大学院 理工学研究科
電子情報工学専攻
岡崎 博和,阿萬 裕久, 山田 宏之
本研究の概要

目的


方法


ソースコードの保守性におけるコメント文の効
果を定量的に分析
オープンソースソフトウェアEclipseについて
ソースコードを収集,統計解析
結果

コメント文の密度がどの程度あれば,バージョ
ンアップにおける変更率が小さくなるか確認
研究背景
信頼性・保守性の高い高品質なソフトウェアの開発
が常に求められている
困難
高度な技術者による徹底したコードレビュー
一定のコーディング規則の使用を義務付ける
コメント文の記述を徹底させることが基本的かつ重要
研究背景
一般に,コメント文が多く書かれている方が
ソースコード中のフォールトが発見されやすくなり,
ソースコードの品質は高い傾向にある
しかし
どの程度の量のコメント文を書くべきであるか?
その基準は明確ではない
コメント文とソースコードの保守性
の関係を統計的に分析
コメント文の密度
ソースコードに注釈として書かれる文であり,
ソースコードの翻訳・解釈時は無視される
Javaの場合

EndOfLineComment(EOLC)


DocumentationComment(DC)


“//”から行末までがコメント文となる
メソッド等の機能説明
“/**”から”*/”までの内容がコメント文となる
TraditionalComment(TC)

処理内容の説明
コードの一部を無効化
“/*”から”*/”までのすべての内容がコメント文となる
コメント文
コメント文の密度 
LOC
変更率

ソフトウェア変更量


※コメント文・空文は除く
ソフトウェアのバージョンアップに伴うソースコー
ドの変更(修正,追加,削除)行数
変更行数の測定にはGNUのコマンドdiffを使用
総変更行数
変更率 
LOC
※総変更行数 = 修正行数 + 追加行数 + 削除行数
本研究のアプローチ

統計的検定を用いて,
適切なコメント文の密度を見い出す
両者の間で統計的に有意な差が見られるか?
コメント文の
密度が小さい
ソースコード
コメント文の
密度が大きい
ソースコード
コメント文の密度
仮説検定(p値)
対立仮説(H1) 検定者が設定した仮説
帰無仮説(H0) H1を否定する仮説
• 検定の結果は p値(有意確率)で判別
例) p = 0.03 の時,帰無仮説を
誤って採択する可能性は3%
• p値が小さければ帰無仮説を棄却する
基準 = 有意水準 : 5% を使用
パラメトリック検定とノンパラメトリック検定
一般に2つの水準の差の検定とは,母
平均の差のことを意味する
正規性が見られない
母平均
正規分布に従うと仮定する
コメント文の密度
Wilcoxon検定
2つの母集団の中央値に差があるかどう
か,つまり2つの母集団からのデータを
順位に置き換えて検定する手法のこと
統計解析ソフトウェアRを用いた
中央値
Wilcoxon検定(Rでの検定の様子)
> comment <- 0.29;
> group <- c();
> for ( i in 1:length(data_per$com_per) ){
+ if ( data_per$com_per[i] > comment ){ #グループ1と2に分ける
+ group <- c(group, 2);
+ }
+ else{
+ group <- c(group, 1);
+ }
+}
> ch_data <- data.frame( change=data_per$change_per, group=group );
> wilcox.test( change ~ group, alternative="greater", data=ch_data );
Wilcoxon rank sum test with continuity correction
data:change by group
W = 1528065, p-value = 0.04976
alternative hypothesis: true mu is greater than 0
測定対象

対象:Eclipse バージョン 2.0,2.1,3.0,3.1


36,083個のクラス
Eclipse

統合開発環境
実験の流れ
Ver2.0
コメント文の密度
データベース
変更率
データの分類
Ver2.1
統計的検定
Ver3.0
コメント文の密度
コメント文の密度の目安
変更率
検証
Ver3.1
データの分類(抽象クラスと具象クラス)

抽象クラスと具象クラスに分類


抽象クラス:
具体的な処理が確定していないメソッドを1つ以上
含むクラス
具象クラス:
すべてのメソッドにおいて具体的な処理が確定し
ているクラス
抽象クラスは除外
データの分類(クラスの規模)

小規模なクラスと中規模以上のクラスに分類
コメント文の密度や変更率の個体差が大きいのでは?
小規模なクラス
中規模以上のクラス
64行(中央値)
LOCの中央値以下のものを除外
LOC
データの分類(クラスの規模)
除外
LOC
データの分類
差の有意性
抽象クラスと具象クラス クラスの規模
コメント文の密度
変更率
○
2.2×10-16未満
×
0.9299
○
2.2×10-16未満
○
0.002393
分類後のデータ数
小規模なクラス 中規模以上のクラス
計
抽象クラス
400
966 1,366
具象クラス
2,480
3,491 5,971
変更率
統計的検定
M1:コメント文の密度の小さいクラスの集合
M2:コメント文の密度の大きいクラスの集合
変更率
M1
対立仮説(H1) M1 > M2
M2
帰無仮説(H0) M1 = M2
コメント文の密度
ただし、Eclipseのバージョンアップ“2.0→2.1”及び“2.1→3.0”に着目
p値
結果:コメント文の密度とp値
帰無仮説が
棄却される
有意水準5%
コメント文の密度
結果
p値 < 0.05 となる場合
具象クラス(中規模以上のクラス)
コメント文の密度の目安
コメント文の密度(%)
最小値
29.0
中央値
58.5
最大値
62.0
M1:コメント文の密度が58.5%以下のクラスの集合
M2:コメント文の密度が58.5%より大きいクラスの集合
変更率
対立仮説(H1) M1 > M2
帰無仮説(H0) M1 = M2
有意水準5%で
帰無仮説が棄却される
検証(Eclipse“3.0→3.1”)
コメント文の密度の目安について,
閾値以下か否かでソースコードを
その有意性の検証実験
分類することの有意性を確認
変更率
変更率

対立仮説(H1) M1 > M2
帰無仮説(H0) M1 = M2
M1
M2
58.5%
クラス
具象クラス
規模
中規模以上のクラス
データ数
3,145
閾値
58.5%
p値
6.10×10-6
コメント文の密度
まとめ
コメント文が多く書かれている方が
ソースコードの品質は高い傾向にあり,
少ない変更でバージョンアップに対応できる

上記の仮定を満足できるコメント文の密度

LOCが65行以上の具象クラスにおいてコメント文の密
度が58.5%以上
今後の課題

コメント文がもたらす効果の大きさについて
検討

コメント文だけでなくコーディングスタイルの
効果についても検討

コメント文のみの変更についても検討