『ビューティフルテスティング――ソフトウェアテストの美しい実践』をざっと読んだ。
感想――絶望。
「完全な仕様書」なるものを考えよう。そのまま実行できるか、少なくとも完全なテストスイートを生成できる仕様書だ。「完全なテストスイート」とは、それをパスすれば必ず仕様を満たしていると言えるテストスイートだ。ただし、これらはあくまで思考実験上の存在である。現実的な時間内に実行を終えられるかどうかは問わないし、実在できなくてもかまわない。
1913年、ホワイトヘッドとラッセルは、算術の完全な仕様書を書いた。タイトルを『Principia Mathematica』という。算術、つまり、1+1=2や4x4=16といった操作が、この仕様書には定義されている。
ウィトゲンシュタインはこの仕様書を次のように批判した。
「足し算引き算割り算掛け算は、世界中の人間が毎日やっている。全世界の全歴史のどこでも1+1=2だし、4x4=16だ。もしこういう操作で意見の不一致を生じたら大問題になるだろうが、深刻な不一致はどうやら今まで一度も起きていないらしい。
さて、『Principia Mathematica』を徹底的に検討したところ、バグが見つかったとしよう。世界中の人間が一致して出すはずの答えと、『Principia Mathematica』の導く答えが食い違うケースを発見したとしよう。
そのバグがどんなものであろうと、
『つまり、これまで全世界の人間がやっていた算術にはバグがあるんだよ!』
『な、なんだってー!!』
……ということにはならない。バグっているのは『Principia Mathematica』のほう、ということになる。
こういう事態が生じる可能性をゼロにすることはできない。完全な仕様書なのにバグっている可能性があるとは、いかがなものか」
ウィトゲンシュタインによる批判を、実践的に表現すると、本書216-217ページのようになる――
最近では、特定のアサーションのみをチェックすることが一般的になっています。このため、テストの自動化では以下のような点が確認できなくなります。
・アイコンの背景色が透明ではない
・[Submit]の実行後、演算子のドロップダウンリストがデフォルトの[Plus](加算)になるため、「4+4=16」のように表示してしまう。
・2番目の値の入力後、キャンセルボタンを無効化してしまう
・[Answer](解答)が無効化されるべき(グレーアウトされるべき)ときに編集可能となる。
・演算の完了に8秒もかかる。
・生成した新規ページには正しい答えを表示しているが、入力した最初の値として0を表示している。このため、「0+4=8」と表示してしまう。
人間のテスターは思考することができるため、瞬時にこれらの問題に気づきます。
「人間のテスターは思考することができるため、瞬時にこれらの問題に気づきます」とは、「バグっているのは『Principia Mathematica』のほう」というのと同じことだ。上で引用したような問題が報告されて、「仕様ではその動作は不定だから問題ない」と言い放つ勇気はなかなか持てない。「バグっているのはこれまでの全世界の人間のほう」よりはまだ言いやすいが。
つまり、そこにあるのは政治であり、権力だ。習慣という旗印のもとに味方を集められると踏んだテスターや、習慣と争っても勝負にならないと踏んだウィトゲンシュタインは、権力の大小にもとづく政治的な判断を下している。
テストやバグや仕様について考えるには、これらが政治的問題であることをまず認識しなければならない。が、本書のなかには、そうした認識は見つけられなかった(私が見落とした部分にはあるのかもしれないが)。政治的問題を無視してテストを論じる本書は、私の目には、無様なナンセンスと映る。そのナンセンスに気づきもしない著者たちの鈍感さは、私を絶望させた。