![見出し画像](https://assets.st-note.com/production/uploads/images/27731778/rectangle_large_type_2_d24c015d908a903b53a166be58c8592a.jpeg?width=1200)
#068 プロマネのお仕事(補遺編4) - 意図的にエラーを埋め込んでテストの進捗を測る
先日まで連載していた
プロマネのお仕事
https://note.com/yukio_tada/m/m49d2c80ad937
というマガジン、
一旦終了したつもりだったのですが、その後もいろいろと書き足しておきたい内容を思いつくことがありまして。
今後、これらの記事を補足するような内容がかけたら、その都度記事を追加していきたいと思います。
今回は、
#057 プロマネのお仕事(本編7) - 品質マネジメント(ちょうどいいテスト工数を見つけよう)
https://note.com/yukio_tada/n/na413f6e11dc0?magazine_key=m49d2c80ad937
の補足です。
「ちょうど良いテスト工数を見つける」というのは本当に難しくて、現場でも試行錯誤が必要になる仕事なのですが、
1つ、テストの進捗を測る特殊なテクニックがありますので、今回はそれをとりあげてみたいと思います。
IPA の情報処理技術者試験問題より
まずは以下の問題を考えてみたいと思います。
似たような問題は過去に何度も出されていますが、今回は、平成26年春のPM区分、午前2の問16から引っ張ってきました。
(ちなみに IPA の情報処理技術者試験の過去問は、
https://www.jitec.ipa.go.jp/1_04hanni_sukiru/_index_mondai.html
で公開されています。)
【問】
ソフトウェアの潜在エラー数を推定する方法の一つにエラー埋込み法がある。
100個のエラーを故意にプログラムに埋め込んだとき、そのエラーの存在を知らない検査グループが30個のエラーを発見した。
そのうち20個は故意に埋め込んでおいたものであった。
この時点で,このプログラムには埋込みエラーを除く残存エラー数は幾つと推定できるか。
【ア】 40
【イ】 50
【ウ】 70
【エ】 150
回答。
故意に埋め込んだ100個のエラーのうち20個が見つかったのですから、バグの検出率は 20% になります。
(まだテストは始まったばかりのようですね。)
最初から入っていた潜在エラーのうち、見つけることのできたエラーは 30-20 = 10個なので、
潜在エラーの総数は、
10 ÷ 0.2 = 50個
であると予想できます。
よって、残存エラー数は 50 - 10 = 40個。
【ア】が正解です。
※ この問題では、故意に埋め込んだエラーも、最初から入っていたエラーも、その分布が一様だと仮定しています(そうしないと問題が解けません)
「エラーシーディング法」
この問題のように、エラーの総数がわからない問題に対して、あえてわかっている数のエラーを意図的に埋め込むことでテストのカバレッジを推測する方法を、問題文中にも書かれている「エラー(バグ)埋め込み法」とか、「エラーシーディング法(Error Seeding: エラーの種を蒔く)」と呼んだりします。
ソフトウェアの内部構造がわかっていて、テストケースがきちんとかける状況ではほとんど使われない手法ですが、内部構造が完全にブラックボックス化しているような状況では稀に使うことがあったりします。
ソフトウェアテスト以外への応用
このように、検査対象物にわざとエラーを埋め込むことでテストのカバレッジを測るという方法は、ソフトウェアテスト以外にも応用がききます。例えば、
・ドキュメントレビューする際、対象ドキュメントに、わざと誤字や章立ての抜け(2章の次を4章にするとか)を入れることで、本当にレビューをしたかどうかを調べる
・単調なライン検査で集中力が落ちないようにするために、わざと数個に1つ不良品を混ぜる
などの手法もエラーシーディング法と似てますね。
ちょっと話がずれますが、
また、ちょっと話がずれますが、わざと間違えることで場の雰囲気を和らげる、といったテクニックもあったりします。
私の尊敬する先輩に、何かパワーポイントでプレゼンする際、冒頭にあえて誤字などの間違いを入れておき、それで「ひと笑い」とるのが上手な方がいらっしゃいました。
わざと間違えてスキをみせることで、親しみやすさを演出していたのだと思います。
絶対にやってはいけないこと
エラーシーディング法を実行する際に気をつけないといけないのは、意図的にエラーを入れていることについて、テスターさんときちんと合意をとっておく(黙ってやらない)、ということです。
テスト対象物にわざとエラーを入れるということは、ある意味、テスターさんのことを信用していないことに他なりません。これを黙ってやってしまうとお互いの信頼関係が崩れてしまいます。
実際にはあまり使われることのないエラーシーディング法ですが、もしそれに似たことをやる場合には十分気をつけたいと思います。
まとめ。
(1) ソフトウェアのテストを行う際、意図的にエラーを埋め込み、そのエラーがどれくらい検出されたかを測ることで残バグ数を見積もることを、「エラー埋め込み法」とか「エラーシーディング法」と呼びます。
(2) こうした手法は、ソフトウェアテストのみならず、ラインでの検査工程やドキュメントのレビューなどにも応用することが可能です。
(3) ただし、わざとエラーを埋め込むというのは相当注意して慎重にやらないと、テスターさんとの信頼関係を壊してしまうことになりかねません。事前にこうした手法を使うことをお互いに合意しておくことが極めて重要です。
----------
(ここに書かれている内容はいずれも筆者の経験に基づくものではありますが、特定の会社・組織・個人を指しているものではありません。)