Someone wrote on Twitter today that any community that disallows testing is anti-software. In this blog, let us look at why building software is like exploration of Truth Scepticism And Heuristics, and how testing helps in orienting towards arriving at the Truth !
For anyone familiar with the scientific approaches of solving issues know that the appropriate way is to disprove things that don’t make sense so that we are left with lesser and lesser choices of what would finally emerge as the Truth. While the scientific experiments can disprove the non-truths, they cannot pinpoint the truth; they can only guide you towards the truth.
If we take the same approach in building software, which is similar to a scientific experiment, tests are important to disprove non-truths after each unit of building. We should be careful in not misunderstanding tests as the checks to prove that something is working! The tests are not an exercise to assert that a requirement or a feature works. Tests are sometimes (not always) an aid to the exploratory processes to disprove non-truths.
Why am I saying that tests are an aid to disproving non-truths only some times and not always? The challenge lies in the infinite possibilities of non-truths that need to be disproved. The whole challenge of proving the truth not being possible stems from the fact that there are infinite non-truths that are waiting to be disproved, and the combinations to prove/disprove are quite exhaustive. This is also why software cannot be ‘proved’ to be working (and this is also why you should not call Software Testing as Quality Assurance, because you cannot assure Quality to anyone under any circumstances!).
Well then, what is the solution then – if we can neither prove nor disprove that software is working. The answer is being skeptical on the every moment of the way – to apply the right heuristics and decide on the actions at any point of time – by applying methods like boundary value analysis, equivalence class partitioning, etc. Would we be ‘complete’ in our claim that we have completed our testing, or declaring that we can assure quality for the software at any point of time? A big NO. But we can say that we have a higher level of confidence (based on our clarity on what works and what doesn’t, and not based on our arrogance or dogma) that things work the way they work, and at the same time being skeptical.
The key in shrewd software development as well as software testing is being skeptical and applying heuristics. Be aware that there are infinite number of possibilities and combinations lurking out there in the field waiting to happen in the production. Let’s be humble and desist ourselves from minimalizing Software Testing to automated checks!
Feel free to chat with me about Software Testing, Truth Scepticism And Heuristics, applying heuristics, and combinatorial explosion. Happy Testing!