品質メトリクス -バグ密度/欠陥密度-

2023年8月11日

「ソフトウェア開発データ白書」(IPA発行)の最新版(2018-2019)が2018年10月に発行されたので、最新版の品質指標値を引用する。旧版との大きな違いは、「言語別の統計値」の掲載が取りやめになっていることである。その理由を、
①現状、多種類の言語を用いた開発が一般的になっている。
②白書データでの言語別の生産性、信頼性などの差は、言語そのものの差ではなく、QCD要求レベルなど他の要因も含んだ開発の結果を示すものであり、誤解を招く恐れがあるため。
としている。
②に関して、個人的には言語による効率の差(例えば、低級言語と高級言語の差異)があるようにも思うが、白書に指摘があるとおり、業種やシステムの種類(勘定系、基幹系、情報系、など)でQCD要求レベルが異なることを考えれば、そちらの要因の方が大きいのかもしれない。
下記の引用を見てわかる通り、結合テストの標準偏差は総合テストの標準偏差よりも大きい(データのばらつきが大きい)。目標値を設定する場合はその点にも留意した方が良い。以下に新版「2018-2019」の指標値を引用する。
SLOC規模あたりの検出バグ数(新規開発) [件/KSLOC](2018-2019)
P25 中央値 P75 平均 標準偏差
結合テスト 0.943 1.6 2.626 2.142 2.719
総合テスト 0.112 0.32 0.833 0.557 0.667
SLOC規模あたりの検出バグ数(改良開発) [件/KSLOC](2018-2019)
P25 中央値 P75 平均 標準偏差
結合テスト 0.308 1.101 2.425 34.093 476.47
総合テスト 0.033 0.183 0.721 4.001 47.889
FP規模あたりの検出バグ数(新規開発) [件/KFP](2018-2019)
P25 中央値 P75 平均 標準偏差
結合テスト 67.6 123.7 268.6 174.1 161.5
総合テスト 10 32.7 54.3 43.1 44.3
FP規模あたりの検出バグ数(改良開発) [件/KFP](2018-2019)
P25 中央値 P75 平均 標準偏差
結合テスト 30 57.8 102.4 164.5 358
総合テスト 5.8 23.3 67.7 78.2 137.6
旧版のデータは以下を参照下さい。


「ソフトウェア開発データ白書」(IPA発行)の最新版(2016-2017)が2016年10月に発行されたことにともない、本記事中の品質指標値を更新した。
最新版のデータは赤字で示し、旧版(2014-2015)と対比できる形とした。旧版と新版を比較して、ほとんどの数値に大きな差異はみられないが、ただ一点、結合テスト(改良開発)におけるCOBOLのバグ密度の平均値には大きな差異がある。

システム構築における品質管理では、品質を定量的に分析・評価することが重要である。そしてシステム構築のなかのソフトウェア開発部分については、テスト密度やバグ密度などの品質メトリクスを使って、それら指標値の計画値と実績値を比較・評価するということが一般的に行われている。
ソフトウェアの品質に関してはJISの規約や経済産業省の資料などがあり、例えば、「バグ」という言葉は使用せず、開発工程における不具合を「欠陥」、本番リリース後の不具合を「障害」と定義するなどの例がみられる。そして品質メトリクスとして、「テスト密度」や「テストカバレッジ」、「欠陥密度」、「欠陥除去率」などが定義されている。
しかし、実際のところはSIベンダー毎に、それぞれメトリクスの定義(方言)があり、過去のプロジェクトの実績値から計画値を導出するというのが一般的である。
従って、ソフトウェア開発の現場では、使用する品質メトリクスとその基準値は各ベンダー毎に異なっているというのが実情だ。
過去のプロジェクトの実績値はそのベンダーの資産であり、品質のみならず見積もりや開発スケジュールを立てるうえでの基準となる。
品質メトリクスの参考図書に、「ソフトウェア開発データ白書 2014-2015」(IPA:独立行政法人情報処理推進機構)がある。これは国内企業29社、3,541件のプロジェクトデータを統計処理したものだから、品質計画を策定する時や品質評価をする際の参考になるだろう。
但し、回帰式から導出した数値などは、それを鵜呑みにせず、自社の数値と比較したり、相関係数で数値の信頼性を確認するなど、数値の取り扱いには注意が必要である(当該図書にもその旨の注意書きがある)。
「ソフトウェア開発データ白書」では、大きく「FP(ファンクションポイント)規模」と「SLOC(コード行数)規模」に分け、それぞれのメトリクスとその数値が掲載されている。例えば、発生不具合密度であれば、「FP発生不具合密度」と「SLOC発生不具合密度」に分けて数値が出ている。
昨今の業務系システムの開発は、新規開発案件よりも改修案件が多いと思われる。本書に収集されているプロジェクト・データを見ても、新規開発42.1%、改修・保守37%、拡張16.2%、再開発4.7%となっている(本書では改修・保守と拡張を合わせて改良開発と称している。改良開発は53.2%になる。)。
そうなると改修案件(本書でいう改良開発案件)の場合の品質指標値が必要になるわけだが、本書では「母体は含まない」と書かれている。
一般に改修案件のバグは、改修部分だけでなく、改修が母体に影響を与える範囲にも関係してくると考えられる。従って、バグ密度は改修規模だけでなく、母体の影響範囲の規模も勘案する必要があるが、残念ながら本書ではそこまでの分析データはない。
改修案件の場合、バグ密度だけでなくテスト範囲が大きな問題になる。改修部分をテストするのは当たり前として、母体のどこまでをテストするのかが問題になるだろう。
母体のうちの影響範囲に限定してテストを行うのか、母体全てに対してテストを行うのか。論理的には影響範囲のみで良さそうだが、影響範囲を見誤ることもあるから、対象システムがミッション・クリティカルなほど、より広い範囲のテストを求められるであろう。
本書から新規案件と改修案件のバグ密度を比較してみる。工程は、結合テストと総合テストである。
改修案件は、母体の影響範囲で発生するバグ(いわゆるデグレ)がある分、新規開発よりもバグ密度が高いと考えられるが、データを見ると必ずしもそうとは言えないようである(ただし、総合テストのバグ密度を平均値で見ると、総じて改修案件の方が新規案件よりも高い数値を示している)。

SLOC規模あたりの検出バグ現象数(新規開発) 結合テスト [件/KSLOC]   (2016-2017)※
開発言語 P25 中央値 P75 平均値
COBOL 0.444 1.126 1.859 2.053
C 0.917 1.283 1.638 1.447
VB 0.407 1.239 3.688 2.639
Java 0.892 1.596 2.635 2.114
SLOC規模あたりの検出バグ現象数(新規開発) 結合テスト [件/KSLOC]  (2014-2015)
開発言語 P25 中央値 P75 平均値
COBOL 0.444 1.181 1.742 2.115
C 0.849 1.259 1.548 1.412
VB 0.414 1.239 2.986 2.522
Java 0.821 1.467 2.524 2.015
SLOC規模あたりの検出バグ現象数(改良開発) 結合テスト [件/KSLOC]  (2016-2017)※
開発言語 P25 中央値 P75 平均値
COBOL 0.338 1.076 2.253 10.354
C 0.202 0.913 1.774 2.969
VB 0.868 1.396 3.578 3.336
Java 0.506 1.362 2.729 3.585
SLOC規模あたりの検出バグ現象数(改良開発) 結合テスト [件/KSLOC]  (2014-2015)
開発言語 P25 中央値 P75 平均値
COBOL 0.250 0.965 2.243 1.628
C 0.333 1.271 2.576 4.708
VB 0.787 1.383 3.400 2.264
Java 0.535 1.294 2.802 3.922

SLOC規模あたりの検出バグ現象数(新規開発) 総合テスト [件/KSLOC]  (2016-2017)※
開発言語 P25 中央値 P75 平均値
COBOL 0.052 0.297 0.835 0.733
C 0.080 0.288 0.666 0.610
VB 0.060 0.241 1.068 0.908
Java 0.092 0.320 0.911 0.713
SLOC規模あたりの検出バグ現象数(新規開発) 総合テスト [件/KSLOC]  (2014-2015)
開発言語 P25 中央値 P75 平均値
COBOL 0.045 0.296 0.884 0.729
C 0.085 0.288 0.612 0.590
VB 0.076 0.303 1.313 0.916
Java 0.088 0.323 0.901 0.832
SLOC規模あたりの検出バグ現象数(改良開発) 総合テスト [件/KSLOC]  (2016-2017)※
開発言語 P25 中央値 P75 平均値
COBOL 0.028 0.256 0.853 1.330
C 0.026 0.152 0.747 0.846
VB 0.168 0.498 0.923 1.563
Java 0.000 0.196 0.592 0.826
SLOC規模あたりの検出バグ現象数(改良開発) 総合テスト [件/KSLOC]  (2014-2015)
開発言語 P25 中央値 P75 平均値
COBOL 0.049 0.271 0.865 0.991
C 0.075 0.315 0.960 1.045
VB 0.200 0.588 1.050 1.036
Java 0.000 0.196 0.699 0.938
注)表の数値の出展は「ソフトウェア開発データ白書 2014-2015」(IPA:独立行政法人情報処理推進機構)である
※は、「ソフトウェア開発データ白書 2016-2017」より引用


ソフトウェア開発データ白書には、FP(ファンクションポイント)規模あたりの検出バグ数も出ているので、参考までに引用しておく。FPはIFPUGグループのものであり、FP規模は調整前の機能規模(未調整ファンクションポイント)を使用している。

FP規模あたりの検出バグ現象数(新規開発) [件/KFP]  (2016-2017)※
工程 P25 中央値 P75 平均値
結合テスト 58.1 128.6 248.1 195.4
総合テスト 6.3 24.5 39.6 45.0
FP規模あたりの検出バグ現象数(新規開発) [件/KFP]  (2014-2015)
工程 P25 中央値 P75 平均値
結合テスト 48.3 119.5 215.4 187.2
総合テスト 6.3 22.7 37.7 46.7
FP規模あたりの検出バグ現象数(改良開発) [件/KFP] (2016-2017)※
工程 P25 中央値 P75 平均値
結合テスト 48.8 96.9 192.3 163.6
総合テスト 8.2 20.9 45.9 109.5
FP規模あたりの検出バグ現象数(改良開発) [件/KFP]  (2014-2015)
工程 P25 中央値 P75 平均値
結合テスト 47.4 95.2 188.9 149.0
総合テスト 8.2 17.7 44.2 110.8

PJ管理あれこれ
「PJ管理あれこれ」のINDEX