Sometimes, software systems don’t work properly or as expected. There may be various reasons for the improper working of any software application including. The system user is making some mistake in using the system or software. Causes of software defects will be much more.
Software developers or system builders made some mistakes while designing and building the system, leaving some flaws in the software or system. And this is avoiding the system to work correctly.
- Error (Mistake): Any human action that can produce a wrong result.
- Defect (Bug, Fault): A flaw in a component or whole system that may cause the system or particular component to fail to perform its intended function.
- Failure: Deviation of any component or system from its expected function or result.
Any software programmer or tester can make an error while developing or testing the system that can lead to some defects in the software or system. When a defected code is executed, the system may experience a failure. Defects in software or systems may result in failure, but not always.
We make errors in designing or developing software when we don’t have appropriate information about the system, we misunderstand the requirements of the system or under time pressure. Additionally, we make mistakes when a complex business or technical problems, varying technologies, complex software code. This is because we can deal with a reasonable amount of complexity.
Defects and failures may arise due to various environmental conditions including radiation burst, pollution in the environment, strong magnetic field etc. Some human error in interacting with the software or someone knowingly trying to fail the system. As a result of previous error, intentional damage or previous defects in the system
When Software defects arise
Defects in any system may arise in various stages of development life cycle. At each stage, the impact and cost of fixing defects are dependent on various aspects including the defect arising stage.
In case-1, every step is implemented correctly and hence the product is delivered with correct functional and non-functional attributes. In this case, we gathered correct requirements from the customer, designed the product with as per the requirements, build correctly to meet the design, and finally, the product will work as expected.
In case -2: Mistakes are made in build phase of software life cycle resulting in a product with defects in the form of wrong operations or improper behavior of the system. These defects can be easily spotted as in testing phase, we can see that the product is not built as per the product design.
In case-3: Mistakes are made in design phase giving rise to serious defects in the software. The product is developed as per the designed architecture, but the designer made mistakes in designing the architecture of software product. We can find those defects only by checking the requirements as the product build was as per design, but the design was not as per the requirements. The architecture of the system needs to be re-designs to correct the defects.
In case-4: Mistakes are made in getting requirements from the customer giving rise to most costly defects in the system. The product build, in this case, is designed and build as per the flawed requirements, resulting in unexpected behaviors of the system or software. In this case, the product will pass the design and build testing phase but the customer will reject the product as it is not as per the requirements of the customer.
Cost of Fixing Defects
The cost of fixing defects is dependent on resources need to fix a defect. The cost of defects rises considerably across the software life cycle. To find and fix defects is cheap and efficient in early stages of development. The defect found in the design phase can be corrected by redesigning the architecture with a little expense.
Once the system is implemented, then it is most expensive to find and fix the defects in the system as rework is needed in all previous phases to spot the errors in the system. Further whole testing work also needs to be repeated to gain the required confidence level in the system.