現実から見たテスト工数

この前のエントリの続き。

システムは現実の中にある。これは紛れもない真実である。だからテストも現実というものを考えなければならない。

前回のエントリはあくまでも「理論面」だ。「こう考えろ」という意味ではあれで間違いはない(はず)であるが、「じゃあどうすりゃいいの」ということには何の答えもない。では現実はどう考えるかについて書いてみる。

エンジニアのやってしまいがちの間違いに、「自分の納得の行くまでテストをしてしまう」というものがある。確かに納得が出来るまでテストはしなければならない。しかし、「じゃあどうやったら納得出来るか」という点について考えておかないことには、いたずらに工数をかけることになってしまう。なぜなら、

完全なテストは存在しない

からである。また、「自分の納得」と「顧客の納得」は必ずしも一致しない。両者が完全に一致するのは、「完全」になった時だけである。

障害が発生した時、「上(客、上司、元請け…)」は必ず「ちゃんとテストはやったのか?」と問う。言う側の論理としては当然だろうとは思うが、現に障害が発生してしまったのだから、「同じ条件でのテスト」はされていなかったというのは事実である。仮に同じ条件でテストがされていたなら、その障害はテスト時に発見されていて、対策されているはずだ。だから、答えは「いいえ」しかありえない。だから、発生してしまった障害を基本に考えるなら、

常にテストは不備

なのである。それは顧客感情を思えばもっともであるが、それではSEは単なるサンドバックでしかない。

それを嫌うSEは、過剰なテストをする。しかし、テストはいくらやっても完全なものにならないから、下手をすれば無限の工数がかかる。その限界点が、前回のエントリで書いたことになるのだが、そこはやはり人には感情というものがあるために、損害そのものは小さくても「障害が出た」ということだけで、マイナス評価されてしまう。

では、現実的な限界点はどこかと言うなら、

言い訳が出来る程度

ではないかと思う。感情的なものには、理論的なものは太刀打ちできないのだから、「障害の発生確率損失」みたいな説明は意味を成さない。それよりは、

「テストちゃんとしてたんですけどねぇ〜」

とでも言う方が、ずっとマシである。

とは言え、そういって誤魔化すためには、ある条件がある。それは

同じような障害を繰り返さない

ことだ。つまり、「その障害はたまたま起きたに過ぎない。今回は運が悪かっただけで、同様のものについては完全である」と言い張れなければならないということだ。「今回はたまたまだ」と言っておいて、同じことがまた起きたら、そりゃー信用はなくなる。

ところでPMクラスがよく陥りやすい間違いとして、

テストをしっかりやれば品質が上がる

というものがある。いや、これ自体は正しいのであるが、問題はその先に、

元の品質が悪くてもテストを繰り返すことにより、限りなく完全に近付く

という考えがある。両者は似ているが根本的に違う。

「テストに完全はありえない」ということは何度も言っている。それはなぜかと言えば、「全てを網羅したテストケースは作れない」からである。「テストケース」とはある条件を仮定して作るものであるから、その仮定の外にあるものについてはテストされない。これはわかると思う。

「テストによって品質を上げる」というのは、この仮定の中にあった誤りについて修正を行うことによって、テストが通るようになるということだ。だから、誤りが修正されるのはテストされた範囲内だけである。

もちろん障害というのは常にいろんな誤りが複合した結果発生するものであるから、1つの誤りを直せば全体的な品質が上がる可能性はある。しかし、「テストされていない部分にある誤り」は、テストによっては発見出来ないことに変わりはない。

テストによる品質の評価というのは、「誤りの存在は確率的に一様である」という前提を持っている。1/10の中に誤りが2個あれば、全体としては20個誤りがあると考えるわけだ。これが評価の大前提だ。

ところが元の品質があまり良くなくて、かつテストを繰り返した場合、この前提は崩れてしまう。どんなに元の品質が悪くても、テストした範囲の誤りは修正される。ところが、元の品質が悪い場合、往々にして「テストした範囲だけ」が修正されることになる。あるいは「修正による改善の波及」が限定されてしまうこともある。「濃い色はムラになりやすい」ということだ。何にせよ、「誤りの存在は確率的に一様」ということはなくなってしまい、テストによる品質の評価は不能になってしまう。

そうなると、先程の「今回はたまたまですよ」ということは言えなくなってしまうのだ。

こういったことを避けるためには、元の品質がそれなりに高くなければならない。逆から言えば、

元の品質が悪いものはそれ以上テストしても無駄

ということだ。だから、「言い訳が出来る程度にテストをする」ということは、「元の品質をある程度確保しておく」ということとセットになる。あくまでも「元の品質」であるから、テストとは無関係だ。

ということを思うと、テスト工数をあまり大きく確保するというのは、ナンセンスなことだと言えなくもない。何せよテストとは、

品質を上げるための手法の一つに過ぎない

ということは前提として理解しておくべきである。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です