テストオラクルについて

先日、鈴木氏がブログにて「テストオラクル」について書かれていました。若干、自信のない表現のように読みとれましたので、私の理解で補足してみます。次のように考えたらどうでしょうか。

テストケースはテストベースとなるドキュメント(仕様書や設計書など)を参照して作成します。ですが、そのテストベースにテストケースの作成に必要な期待結果が記述されていなかったら、どうでしょう。そのときに利用するのがテストオラクルです。

テストケースを作成するときには、以下の状況でテストオラクルを利用することになります。

  • 適当なテストベースがない。
  • テストベースに期待結果が明言されていない。
  • テストベースで期待結果として明示的に特定のテストオラクルを参照するように記述されている。

どんなものがテストオラクルになるかというと「信頼性のある期待結果を予測でき、提供できるもの」と言えます。具体的には以下の3つといえるでしょう。

  • 信頼性ある期待結果を提供できる既存システム、他システムやツール
  • 信頼性ある期待結果を提供できる外部資料
  • 信頼性ある期待結果を提供できる専門家の知識
テストベースに直接明示されていないものを扱うので、それの代替保証となるような「信頼性ある期待結果を提供できる」ものである必要があります。コードはそれを保証できるレベルのものではないので、テストオラクルとしては除外することが推奨されています。

テスターのエラー推測は、テスターの専門知識をテストオラクルとして利用していると言えます。既存システムを利用したバックツーバックテストは、テストオラクルを利用した典型的なテストです。

なお、適当なテストベースがない状況でテストケースを作成してテストを実行する必要があるのかについては、異論もあるかとは思いますが、テスト条件がテストベースに依存していないような状況で抽出されれば、テストケースもテストベースに依存しない状況で設計する必要があり、そこではテストオラクルがフルに活用されるはずです。