To show that the underlying systems are flawless you either
a) Need to proof they are flawless
- Mathematical proof
- Only realistically possible for trivial programs
b) Make an exhaustive test
- Only possible for trivial programs and some simple programs
- As soon as a timing element enters the test it is not possible to make an
exhaustive test as time can be indefinitely divided.
- Beyond the trivial programs the possible execution options explode exponentially.
In software testing the exhaustive test is only used in unit testing of some simple functions.
Example:
You want to test a 8 character utf-8 input to some field, you make the choice to cut the input at 8 times the maximum length 6 of utf-8 in bytes which gives 8*6=48 bytes to actually have a finite amounts of possibilities.
You could now think you only need to test the 1,112,064 valid code points of each of the 8 character, ie. 1,112,064^8 (say 10^48) tests (which is already unlikely be possible), but you actually have to test each value of each of the 48 bytes or 256^48 which is around 10^120 which is the same complexity as chess compared to the total number of atoms in the universe of roughly 10^80.
Instead you can use, in increasing order of effort and each test should cover all the previous:
a) test a good and a bad sample.
b) code coverage, ie. try to test every line of code, which is relative simple for most code. Now you can wonder what the last 1% of the code you can't test is there ... bugs, dead code, hardware exceptions etc.
c) path coverage, all outcomes of all branches in all combinations are tested. Now you know why the test department hates you when your functions contains more than 10 conditions. Also you wonder why the last 1% can't be tested ... some branches are depended on the previous branches.
d) data test, test a number of sample with border value, common problematic values and magic numbers, zero, -1, 1, min +/-1, max +/-1, 42, rnd values. If this doesn't give you path coverage you know you haven't caught all the values in your analysis.
If you already do this you should be ready for ISTQB foundation exam.