演習で学ぶソフトウェアメトリクス
の基礎
第 7 章 欠陥に学ぶ
2011 年 10 月 10 日豊橋市民センター カリオンビル 小会議室
この章で学ぶこと
7.1 なぜ欠陥を学び、計るのか? 7.2 障害と故障
7.3 欠陥の法則性と振る舞い
欠陥発見率 / 欠陥と工数の関係 / 欠陥と要員割り当ての関係 欠陥発見率とコードの生産率の関係
欠陥密度とモジュール複雑度の関係 / 欠陥密度とシステム規模の関係 7.4 欠陥の予測技法とそのモデル
動的欠陥モデル / 静的欠陥モデル
7.5 そのほかの欠陥ベンチマークデータ
アプリケーションドメインごとの欠陥データ / 欠陥除去率( DRE )のベンチマーク
SEI レベルと欠陥の関係 / 潜在欠陥 / 推奨事項 7.6 工程ごとの欠陥除去率のコスト効率
7.7 シンプルな欠陥メトリクスの定義と使用例 7.8 顧客から報告された欠陥に関する逆説
7.9 冒頭の質問に対する回答 7.10 まとめ
なぜ欠陥を学び、計るのか?
質問1:出荷から半年欠陥が見付かっていない、 喜んで良い?
質問2: CEO から「 99% のバグを発見しろ!」と言われた ら?
- 上記を導き出すのが本章のテーマ
・欠陥へのイメージ(人で言うと「痛み」)
ほとんどの人 ・・・ 良くないもの?
ソフトウェア技術者 ・・・ 進捗、プロセス、品質の 兆候
※ 欠陥は目に見えて、数えられる⇒最良で役に立つデータ
※ 欠陥はパターンと法則性がある⇒多くの知見が得られる
でも、早く取 り除きたい!!
障害と故障
故障とは・・・
障害箇所が実行されて、パフォーマンスが発揮できない 障害⇒欠陥メトリクス
故障⇒信頼性メトリクス
ソースコードに欠陥があっても、その箇所が実行されない ⇒ MTBF (平均故障間隔):無限大、可用性: 100 % しかし、欠陥が 1 つだけでも、毎回実行されたら・・・ ⇒ MTBF : 0 に漸近、可用性: 0 %
※ 欠陥重大度の仕組みが必要
※ 製品等に影響のある欠陥に着目すること
どうでもいい障害は 相手にしない
欠陥の法則性と振る舞い
1.欠陥発見率(時刻ー欠陥発見率)
ライフサイクルを時系列としてレイリー曲線に従う ⇒ PJ 規模、プロセス成熟度、過去の履歴により予
測可
2.欠陥と工数の関係(工数ー欠陥数) 一般的に直線関係
(但しプロセス、チームスキル、技術が一定が前提) ※傾きを緩やかにしたい
(工数あたりの欠陥数を削減する)
⇒プロセス改善、スキルアップ等により実現
欠陥の法則性と振る舞い
3.欠陥と要員割り当ての関係(時刻ー比率) 欠陥数は要員の工数と同じような曲線
但し、欠陥は工数よりも後方にずれる(発見までの時 間)
4.欠陥発見率とコース生産率の関係(時刻ー比率) 工数比率、欠陥発見率、コード生産性⇒レイリー曲線
但し、正式テストの開始以降に 欠陥データの追跡を始めたなら、 欠陥発見率は指数曲線に従う
※ どこが指数曲線になってる?
欠陥の法則性と振る舞い
5.欠陥密度とモジュール複雑度の関係(複雑度ー欠 陥数)
バスタブ曲線
※モジュールがバスタブの底(欠陥密度が低い)を 目指す
6.欠陥密度とシステム規模の関係
欠陥数はコード行数(又は FP )に比例する
欠陥の予測技法とそのモデル
・「推定」と「予測」
推定・・・モデルを得るためのパラメータを特定 予測・・・モデルを用いて目的変数の値を特定
・動的モデルと静的モデル
動的モデル・・・欠陥の統計分布に基づいて欠陥 を予測
※欠陥データが必要⇒記録を開始しないと予測 不可
静的モデル・・・プロジェクトとプロセスの属性 より予測
※欠陥データ不要⇒記録を始める前に予測可能
動的欠陥モデル
欠陥分布の方程式モデル
・レイリーモデル・・・開発ライフサイクル全体が対象 ・指数モデル、 S 字モデル・・・
テストプロセス、システム導入プロセスを対象とする 分布関数
・確率密度関数( PDF )・・・
所望時間の欠陥発見数 f ( t ) ・累計分布関数( CDF )・・・
所望時間までの欠陥数の合計 F(t)
レイリー曲線と指数曲線の関数式(どちらもワイブル曲線)
F’ (t) = f(t)
m
m
c t
c t m
e t
F
t e
c t m t
f
) / (
) / (
1 ) (
/
* ) / ( )
(
m=1 指数分布
m=2 レイリー分布
レイリーモデル
2 2
2 2
) 2
/ 1 (
) 2
/ 1 ( 2
1
)
(
)
/
1
(
)
(
t tm
t tm
e
K
t
F
te
tm
K
t
f
)
1
(
)
(
)
/
(
2
*
)
(
2
2
) / (
) (
2 c t
c t
e
K
t
F
e
c
t
K
t
f
40%
tm t 40%
tm
c 2
レイリーモデル
手法1:分布の推定ーきわめて簡単な手法
E x)1 週から 5 週の欠陥累計 223 個なので K = 223* ( 100/40 ) =557 、 tm=5 ここから関数式を求める
週 1 2 3 4 5 6 7 8 9
欠陥 20 41 48 52 62 59 52 44 33
※ 最初の 40% の欠陥がtmまでに発見されるパターンを利用
)
1
(
557
)
(
3
.
22
)
25
/
(
557
)
(
50 /
50 /
2
50 / 2 2
t
t t
e
t
F
te
e
t
t
f
レイリーモデル
手法 2 :分布の推定ー少しだけ複雑な手法
週 1 2 3 4 5 6 7 8 9
欠陥 20 41 48 52 62 59 52 44 33 K 510.1 446.9 478.9 516.4 511.1 505.0 494.8 494.5 463.2 平均 491.2
標準偏差 22.38 /50
)
2(
25 f t e
tK
*
25
*
20
)
25
/
1
(
20
20
)
1
(
)
50 / 1
50 / 1
e
K
e
K
f
ex
レイリーモデル
手法 3 :総欠陥数とスケジュールを与えたときの 欠陥分布の予測
)2
/ ( 2 3
))
/(
6
(
)
( t K T
dte
t Tdf
Ex) 欠陥密度 10.53/KLOC 、開発規模 100KLOC 欠陥密度を 5% 改善可能な場合
10.53 * 100 * 0.95 = 1000 個
指数関数、 S 字型の欠陥分布モデル
t
t
K
t
F ( ) 1 ( 1 )
S 字型モデルの一例
)
(
)
(
)
1
(
)
(
t t
te
K
t
f
e
K
t
F
指数型モデルの一例
※ データポイントが得られたら、下記で K を推定 ・信頼性、統計分析ツールを使用
・複数のデータポイントで式を解く ・エイ、ヤーで決める