The Bedrock of Testing

The purpose of Software Testing is to find defects and faults. We normally call these "issues" - it's a less negative word.

With the information provided by the Tester, the issues and faults can be rectified, or determined to be acceptable.

It is one of the axioms of Software Testing that the earlier an issue is found, the cheaper it is to fix it.

Supposing for example you are working on testing the software that will go into a hardware peripheral device.

And then imagine, as an example, a defect being found in the initial design of this software. By initial, I mean before any code has even been written - the design idea is still on paper. When it is found at this stage, it is a simple matter of rectifying the design defect. The cost is neglible.

But if that same defect is not caught at the design stage, and gets through into the development stage and is coded into the software, if it passes through all the hurdles of software testing (we'll discuss how a defect gets past the testing stage in another article) and finally makes its way into the finished product ready for shipping, to be ultimately found by a customer, then the cost to fix it can be enormous. We're talking about hardware here, and a defect could mean a product recall, which means refunding all the customers or replacing the product, and re-designing the software to put into the next batch. We haven't even begun to calculate the cost in lost sales because the hardware production has to be halted whilst the software defect is fixed. And then there is the cost to the reputation of the producer.

The cheapest point at which to find it is in the initial design - and the most expensive point at which to find it is in the hands of the customer. Now this defect could have been found anywhere along that path between initial design and being found by a customer. But you need to bear in mind that at each stage, it is cheaper to find and fix the defect than at the next stage, and it is more expensive to find and fix it than at the previous stage.

The cost of fixing a defect gets larger the further into the development process it is found.

If you are working on a server or web based application, then at least the recall cost of the hardware is avoided. But it is still more expensive to fix a defect found at that stage than if it had been found earlier in the development life cycle.