キャッチイメージー7-5

28号:殺虫剤のパラドックスにご用心

概要

FLシラバスの「テストの7原則」の5つ目です。前回の原則4は、「欠陥の偏在」でした。敵?である欠陥の性質を知ろうということです。

さて、今回の原則5は、「殺虫剤のパラドックスにご用心」ですが、こちらも欠陥が持つ性質のひとつで「バグを見つける万能薬はないよ」ということです。
原則5は、あまり良い喩えとは思えないのですが、名前のユニークさも手伝ってか、広く知られている原則です。


≣ シラバスの記載

『ISTQBテスト技術者資格制度 Foundation Level シラバス 日本語版 Version 2018.J02』の該当部分を引用します。

5.殺虫剤のパラドックスにご用心

同じテストを何度も繰り返すと、最終的にはそのテストでは新しい欠陥を見つけられなくなる。この「殺虫剤のパラドックス」を回避するため、テストとテストデータを定期的に見直して、改定したり新規にテストを作成したりする必要がある(殺虫剤を繰り返し使用すると効果が低減するのと同様に、テストにおいても欠陥を見つける能力は低減する)。ただし、自動化されたリグレッションテストの場合は、同じテストを繰り返すことでリグレッションが低減しているという有益な結果を示すことができる。


≣ 解説(全体)

ハードウェアのテストは、同じテストを何度も繰り返すことで問題を見つけます。
例えば、カシオ計算機のGショックでは、ビルの3階からの落下テストを1,000回実施しているそうです。この話を聞けば「1,000回もの衝撃に耐えた腕時計なのか!」と素直に感動し欲しくなります(笑)。

ソフトウェアのテストではどうでしょう? 「同じユーザー名・同じパスワードでログインできることの確認テストを1,000回しました」と言われても「すげー。それじゃあ。ログイン機能は完璧だね」と思う人はいないと思います。そうではなく、「ユーザー名やパスワードについて、長さ、文字種、変更の有無、大文字小文字等々の色々なパターンは試した?」かを求められると思います。なぜなら、「同じユーザー名・パスワードで1度ログインしたなら、他の条件が変わらなければ何回やろうと同じ結果になると知っているから」です。

ソフトウェアの場合は条件すら同じであれば、同じ結果となることが期待できます。ですから、ソフトウェアのクレームを受けるコールセンターは地球の裏側にあったって構いません。「どういう環境で、どんな操作手順で、どんなデータを、どんなタイミングで与えたら、この結果になりましたか?」と聞けばよいからです。「環境、操作手順、データ、タイミング」により「結果」が一つに決まるからです。何回実施するかは、あまり関係ありません。

ですから、テストデータやテストについて、同じものを使い続けることは、新しいバグを見つける手段としては、良い方法とは言えないのですね。


≣ 解説(詳細)

ここからは、FLシラバスの解説をもう少し分解して細かく読み解いていきたいと思います。
まずは、FLシラバスの解説を再掲します。

同じテストを何度も繰り返すと、最終的にはそのテストでは新しい欠陥を見つけられなくなる。この「殺虫剤のパラドックス」を回避するため、テストとテストデータを定期的に見直して、改定したり新規にテストを作成したりする必要がある(殺虫剤を繰り返し使用すると効果が低減するのと同様に、テストにおいても欠陥を見つける能力は低減する)。ただし、自動化されたリグレッションテストの場合は、同じテストを繰り返すことでリグレッションが低減しているという有益な結果を示すことができる。

■ 殺虫剤のパラドックス

この原則はボーリス・バイザーが著書(Software Testing Techniques)で述べたものです。原文(と直訳)を引用します。翻訳された書籍が出版されています。『ソフトウェアテスト技法』です。

The Pesticide Paradox

Every method you use to prevent or find bugs leaves a residue of subtler bugs against which those methods are ineffectual.That's no too bad, you say, because at least the software gets better and better. Not quite!

農薬のパラドックス
バグを予防もしくは発見するための方法はどのようなものであったとしても、それらの方法では効果がでない微妙なバグを残します。
そんなに悪くはないんじゃない、とあなたはいう、だって少なくともソフトウェアはどんどん良くなっていくからと。そうとも言えないんだ!

バイザーの原本と若干ニュアンスが異なりますが、ここだけであれば、ほぼ同じことを言っているようにも思います。

ちょっと長くなりますが、原文を省略し、上記の翻訳本の該当部分だけを広めに引用してみます。

1.7 殺虫剤パラドックスと複雑さの障壁

ある綿花栽培農家が、ぞうむしの被害にあい、DDTを買うために農地を抵当に入れたとする。DDTを散布して害虫の98%を駆除し、作柄をなんとか維持できた。翌年の春先、早めにDDTを散布したが、昨年駆除できなかった2%のぞうむしはDDTに耐性がついて、やはり作物を食い荒らしている。そこで今度はDDTとマラソン剤を買うために農地を抵当にいれなければならないことになる。つぎの年には、ぞうむしはどちらの殺虫剤にも耐性が付き、農場をまたも抵当にいれなければならなくなる。これが殺虫剤パラドックス*であり、ソフトウェアテストでのパラドックスでもある。

第1法則:殺虫剤パラドックス-- バグの予防や発見にどんな方法を使用しても、それを通り抜ける巧妙なバグが存在する。 

「なかなか大したものだ。やっただけは品質が上がるのだから」と考えるかも知れないが、品質は完全ではないことに注意すること。 
_____________________
* ぞうむしが、綿花よりも好きな作物をオトリとして綿花畑のまわりに植えることにより、殺虫剤パラドックスを解決できる。どんなバグをもおびき寄せるオトリサブルーチンを作れないものか。

かなり、ニュアンスが違う気がします。バイザーが本当に言いたかったことは、「同じテスト」の問題というよりも、「どんなテストだってすり抜けるバグが存在する」ということのように思います。というのは本の後半に「すり抜けたバグを分析してテストに反映するように」と書いてあるからです。

■ 自動化されたリグレッションテストの場合は、同じテストを繰り返すことでリグレッションが低減しているという有益な結果を示すことができる

後半のこちらは、例外的な話が書いてあります。バグ修正時に新しいバグを作りこんでいないこと(=リグレッションを作りこんでいないこと)を確認するリグレッションテストでは同じテストが通ることを確認することが目的だからこの原則は関係ないということです。


≣ ゼノンのパラドックスと殺虫剤のパラドックス

「殺虫剤のパラドックスにご用心」という原則5について説明すると「『同じテストを繰り返すと、新しい欠陥を見つけられなくなる』のどこがパラドックスなのでしょうか?」という質問が来ることがあります。

確かに、パラドックス(= 間違っていることは確信していても、どこが違うかについて上手く説明できない論理)とは思えません。『同じテストを繰り返すと、新しい欠陥を見つけられなくなる。』が明らかに間違っているとでもいうのでしょうか?? 私はそうは思いません。

ということで、まずは、「ゼノンのパラドックス」について復習しようと思います。「ゼノンのパラドックス」といっても複数あります。

Wikipediaを参照すると、代表的なものだけでも「二分法」、「アキレスと亀」、「飛んでいる矢は止まっている」の3つがあります。

ここでは一番シンプルな「二分法」について、Wikipediaの説明を引用します。

目的点の半分の点にまで到着したとしても更に残りの半分の半分にも、到着しなければならない。更にその残りの半分にも同様、と到着すべき地点が限りなく前に続く故に到着しない。だから運動はない。

具体例に書き直してみます。

私たちは、毎朝、出勤するわけですが、会社が目的地とすると、私たちはまずは、自宅と会社の中間地点(A地点としましょうか)まで到着する必要があります。A地点に到着したら、次にはA地点と会社の中間地点(B地点とする)まで到着する必要があります。さらに、B地点に到着したら、次にはB地点と会社の中間地点(C地点とする)まで到着する必要があります。以下、同じ繰り返しが無限に続くので、会社に到着することはないといえます。

いやいや・いやいや(笑)。毎朝会社についているのだから明らかに上の説明が間違っていることは、誰もが確信しています。でも、「このお話のどこが間違っているの?」と子供に聞かれたら上手く説明できるか自信がない人が多いのではないでしょうか。こういうモヤっとする話がパラドックスです。他にも、

クレタ人であるエピメニデスが「クレタ人はいつも嘘をつく」と言った場合、「クレタ人はいつも嘘をつく」のか? (エピメニデスのパラドックス)

とか。モヤっとしますよね?

日常生活の中では、「ここに張り紙を張ってはならない」と書かれた張り紙を見たときのモヤっと感でしょうか。

さて、「パラドックス」について、分かったところで、「殺虫剤のパラドックス」に話を戻します。バイザーのオリジナルの文の一部を改編して再掲します。

 DDTを散布して害虫である「ぞうむし」の98%を駆除したが、翌年、昨年駆除できなかった2%の「ぞうむし」にはDDTに耐性がついて作物を食い荒らしている。そこで今度はDDTとマラソン剤を買うが、つぎの年には、「ぞうむし」はどちらの殺虫剤にも耐性が付き、作物を食い荒らしている。

これをパラドックスっぽく書き直してみます。

DDTで害虫を残り2%に減らした。次にマラソン剤を追加しさらに減らしたが、まだ、2種類の殺虫剤(テスト)の攻撃をすり抜けて生き残る害虫(バグ)がいる。きっと、無限に殺虫剤を増やしても害虫を完全に駆除することはできないのだろう。

「テストとバグはこういう関係なんだよ」という原則なのだと思います。


≣ まとめ

「殺虫剤のパラドックスにご用心」という原則5はバイザーの元ネタに当たった方が良いかもしれません。
原則というよりもお伽噺の教訓のような……。

この記事が気に入ったらサポートをしてみませんか?