This post explains what a partial oracle is and why every oracle is a partial one. The post is aligned with the Black Box Software Testing Foundations course (BBST) designed by Rebecca Fiedler, Cem Kaner, and James Bach.
An oracle is a heuristic principle or mechanism that could help us to identify and application bug [Bach]. One type of oracle is a partial oracle. Partial oracle verifies only some aspects of test output. And here is the fact that makes software testing fun: every oracle is partial one :).
Being a partial, it is much easier to come up with partial oracle than a complete one. Therefore, it is much less expensive. The problem with partial oracle is that it can miss obvious or systematic bugs.
Let’s say that you need to test Bing advanced feature find the exact words in a phrase. Your oracle is to search for “partial oracle,” and the bing result should have some pages. Bing result is 18700 pages:
You conclude that the bing search for exact words in the phrase is working.
This is an example of partial oracle. It is cheap, and it missed an apparent error. If you click on the first returned page, you will found on that page does not contain “partial oracles.” You found a problem just by extending your partial oracle with an oracle that checks do the actual page contains searched word. Using only one phrase also makes it a partial oracle. If you choose a different expression, let’s say “automated testing,” the first page in Bing results contains words “automated testing.”
We can only use partial oracles in software testing. So we must be aware which project risks are covered with those patrial oracles.