エラー埋込み法
既知の誤りをプログラムへ意図的に埋め込み、テストで見つかった割合から、もともと存在した潜在エラー数を推定する方法。埋め込んだ誤りと元の誤りの発見されやすさが同程度であることを前提とする。
イマシルちゃんの解説
落とし物を探す人の見つける力を、確かめたいとするよ。
場所の分かっている目印も混ぜておけば、どれくらい拾えたかを比べられるよね。
目印の半分しか見つからないなら、知らない落とし物も全部は拾えていないかもしれない。
ただ、目印だけが目立っていたら、その比べ方は当てにならなくなるんだ。
より深い解説
推定の考え方
もともとの誤りの総数は直接分からない。一方、人が追加した誤りは、総数もテストで発見した数も記録できる。両者の発見率が同じと仮定して、未知の総数を比例関係から求める。
| 記号 | 意味 |
|---|---|
| S | 意図的に埋め込んだ誤りの総数 |
| m | そのうちテストで発見した数 |
| d | テストで発見した、もともとの誤りの数 |
| T | テスト開始前からあった潜在エラー数 |
埋め込んだ誤りの発見率 = m ÷ S
もともとの誤りの発見率 = d ÷ T
m ÷ S ≒ d ÷ T
T ≒ S × d ÷ m
現実には推定なので、結果が真の総数と必ず一致するわけではない。計算問題では、この比例関係が成立するという前提で求める。
発見した総数との関係
テストで発見した全誤りの数をnとすると、その中には埋め込んだものも含まれる。もともとの誤りだけを数えるにはn − mを使う。
d = n − m
T ≒ S ×(n − m)÷ m
nをそのまま発見済みの元の誤りの数として代入すると、人為的に追加した分まで元の誤りとみなしてしまい、推定値が大きくなる。
独自の数値例
あるテストで誤りを40個埋め込み、そのうち10個を発見したとする。同時に、もともとの誤りを15個発見した。
| 計算対象 | 計算 | 推定結果 |
|---|---|---|
| 埋込み分の発見率 | 10 ÷ 40 | 25% |
| 開始前からあった総数 | 40 × 15 ÷ 10 | 60個 |
| 元の誤りの残り | 推定した総数 − 発見した元の誤り | 45個 |
開始前の総数と、テスト後の残存エラー数は区別する。残りを問われた場合、推定したTから発見済みの元の誤りの数を引く。埋込み分の未発見数を混ぜない。
推定が外れる条件
| 条件 | 問題になる理由 |
|---|---|
| 埋込み分だけ簡単に見つかる | 元の誤りも見つけやすいと誤って評価する |
| 特定の処理にだけ埋め込む | テスト対象全体を代表しない |
| テスト担当者が埋込み位置を知っている | 通常の発見過程から偏る |
| mが0 | この式では総数を求められない |
推定の信頼性は、発見されやすさの仮定に強く依存する。追加した誤り同士が干渉する場合や、修正時に新しい誤りを作る場合にも、単純な比例モデルでは扱い切れない。
実施後の管理
埋め込んだ誤りは識別できるように管理し、検証後には除去する。推定用の変更が製品へ残らないようにする必要がある。数式による推定だけで品質を断定せず、テスト範囲や未解決の不具合と合わせて判断する。