Sorting it all Out Michael Kaplan's random stuff of dubious value Be sure to read the disclaimer here first!
Like any science (and please do not for a moment doubt that Test is an engineering discipline, and at heart a good engineer is an applied scientist!), software testing has some basic principles which cannot be proven but are simply universal truths upon which other theorems can be based.
(The original version of these was put up years ago by me in a newsgroup, but after many reformulations, the current ones have stayed stable for some time. There have been other corollaries and theorems proposed but I have not captured all of them here)
Here are the Tester's axioms:
Axiom I: If you have not tested it, assume it is broken.
Axiom II: If someone changes it, they probably broke it.
Axiom III: Sometimes when it is not changed, it breaks too.
Axiom IV: What is broken on the test machine often works fine on the dev machine.
Axiom V:There is always another bug that a user can find.
And there is of course the first theorem of test, which is largely based on applying on the developer's doubt of Axioms 2, 3, and 5 created by the circumstances of Axiom 4:
THEOREM I: Developers will often not believe there is a bug until it is proven to them, sometimes with extreme prejudice.
And of course the corollary to Axiom V:
There are at least as many bugs left to be found as there are users who haven't yet run your code.
(Special thanks to David Fenton for pointing out the corollary to Axiom V, years ago!)