Every tester in the world misses bugs. What is the reason for that fact? Lack of testing craft is an expected excuse, but why experienced testers miss essential bugs? This post gives an answer that is aligned with the Black Box Software Testing Foundations course (BBST) created by Rebecca Fiedler, Cem Kaner, and James Bach.
If tester states that he is so good in his craft that he has never missed a bug, he is a liar. Our observations can fail in many ways.
First, We miss bugs because our model of System under test (SUT) is wrong. We do not have oracle or oracles that are impractical to use. If we apply for oracle comparable SUT, that comparable SUT can differ from our SUT because we missed putting in model many variables.
Second, humans have selective attention and inattentional blindness. You have probably seen monkey business illusion video:
What about these brain tricks:
Humans often don’t see what they don’t pay attention to.
What about program blindness? Programs don’t see what they haven’t been told to pay attention to.
Not only that we miss bugs, but we find irreproducible bugs. There is no such thing as an irreproducible bug, we just pay attention to wrong conditions.
One reason is that we can’t attend to all program conditions, our tests can’t practically address all the possibilities. Our checks have side effects. Rowhammer is a problem with some recent DRAM devices in which repeatedly accessing a row of memory can cause bit flips in adjacent rows [source]. This is an excellent example of side effects. Programs are prone to Heisenberg uncertainty. More precisely the position of some particle is determined, the less accurately its momentum can be known, and vice versa [source].
Testers like to say: It works!
What this really means is:
It appears to meet some requirements to some degree.