テストとは何か

ソフトウェアテスト技法」より
この本はこれまた原著が70年代の古い本だが内容はイケテる。(と思う)

テストに対する態度は以下の5つに分類できる

フェーズ0 テストとデバッグには何の差もない。デバッグ以外にはテストには特別な目的はない。

品質保証とかそういった概念が一切ない。
個人開発だとこうなるよね。

フェーズ1 テストの目的は、ソフトウェアが動くことを示すことである。

テストが失敗するとテストが動かないことは証明できるが、動くことを証明するには無限のテストが必要になる。
ソフトが動くことが証明できる確立はテストが進むにつれて低くなる。

フェーズ2 テストの目的は、ソフトウェアが動かないということを示すことにある。

フェーズ1の考え方を逆転させる。
そうするとテスト担当者はプログラマの味方ではなく、敵となる。
簿記と会計監査のような関係。
この考え方だとテストとは容赦のないあら捜しということになる。
1件でもバグを見つければ目的を達成できたことになる、すると修正するたびに次から次へとバグを見つけるためのテストを考えることになり、永久にテストが終わらない。

フェーズ3 テストの目的は、何かを証明することではなく、プログラムが動かないことによって発生する危険性をある許容範囲までに減らすことである。

統計にもとづいた品質管理。
たくさん、厳しくテストすればするほど製品に対する自信が高まる。
自信の度合いが十分に高くなった時にその危険率で製品をリリースすることになる。

フェーズ4 テストは行動ではない。大げさなテストをすることなく、品質の高いソフトウェアを作るための精神的な訓練である。

テストは何ができ、何ができないのか。
どうすればプログラムをテストできるようになるか。
何がソフトウェアのテスト可能性を向上させるかという知識を駆使して考えるとフェーズ3までの最終目標を実現するには、それほど多くのテストをする必要はないという結論になる。

テスト計画を立てる上で、まずテストの目的を定義しておかないと目指すところがうやむやになってしまう。
ここで合意を取っておくのは非常に有意義じゃないかな。