ソースコードにおけるコメント文の密 度と保守性との関係に関する考察 愛媛大学大学院 理工学研究科 電子情報工学専攻 岡崎 博和,阿萬 裕久, 山田 宏之 本研究の概要 目的 方法 ソースコードの保守性におけるコメント文の効 果を定量的に分析 オープンソースソフトウェア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%以上 今後の課題 コメント文がもたらす効果の大きさについて 検討 コメント文だけでなくコーディングスタイルの 効果についても検討 コメント文のみの変更についても検討
© Copyright 2024 ExpyDoc