【てすとおらくる】

テストオラクル とは?

💡 テスト結果に「合ってるよ」と教えてくれる、答え合わせの神託
📌 このページのポイント
テストオラクル — 正しさの判断基準 テスト実行 実際の出力を取得 比較 一致? テストオラクル(期待値の源泉) 仕様書 / 旧バージョン / 別実装 / 数学的性質 ドメイン専門家の判断 オラクル問題 適切なオラクルが存在しない場合、テスト結果の正しさを判断できない 例: AI画像生成の出力品質、複雑な数値計算の厳密解 → メタモルフィックテスティングで入出力の「関係性」をチェックして回避
テストオラクルのイメージ
ひよこ ひよこ

テストオラクルって、データベースOracleとは関係ないの?

ペンギン先生 ペンギン先生

全く別物だよ。テストオラクルは「テスト結果の正しさを判断する基準」のこと。仕様書に「1+1=2」と書いてあれば、その仕様書オラクルになるんだ

ひよこ ひよこ

仕様書以外にもオラクルになるものはあるの?

ペンギン先生 ペンギン先生

たくさんあるよ。前のバージョンの動作結果、別の言語で書いた同じロジック、数学的な性質(ソート後の配列は昇順になるはず)、ドメインの専門家の判断なども立派なオラクルだよ

ひよこ ひよこ

オラクルが無い場合ってあるの?

ペンギン先生 ペンギン先生

これが「オラクル問題」と呼ばれる難題だよ。たとえば機械学習モデルの出力が「正しい」かどうか、自動で判定する基準がない場合がある。画像生成AIの出力品質なんて、人間が見ないと分からないよね

ひよこ ひよこ

オラクル問題を解決する方法ってあるの?

ペンギン先生 ペンギン先生

メタモルフィックテスティングという手法が注目されているよ。「入力を2倍にしたら出力も2倍になるはず」のような入出力の関係性だけをチェックする。正確な期待値が分からなくても、性質をテストできるんだ

ひよこ ひよこ

テストを書くときにオラクルを意識した方がいいの?

ペンギン先生 ペンギン先生

もちろんだよ。assertの期待値を「なんとなくこの値」で決めていたら危険だね。そのexpected valueの根拠(=オラクル)が何なのかを常に意識すると、テストの信頼性がぐっと上がるんだ

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「テストオラクル」って出てきたら「テスト結果が正しいか判断するための基準・根拠」と思えればだいたいOK!
📖 おまけ:英語の意味
「Test Oracle」 = テストの神託
💬 ギリシャ神話の「神託(oracle)=神のお告げ」が語源だよ。テスト結果に「正しい」「間違い」を告げる存在というわけだね
← 用語集にもどる