Fault Reduction Techniques in Software Engineering
A fault is a defect in the program that, when executed under particular conditions causes a different result of the program operation from its requirements. It is the condition that causes the software to fail to perform its required functionality. The following are the techniques used to reduce faults in software:
- Fault Prevention – Fault Prevention/Avoidance strategies identify all potential areas where a fault can occur and close the gaps. These prevention strategies address system requirements and specifications, software design methods, re-usability, or formal methods. They are employed during the development phase of the software to avoid or prevent fault occurrence. They contribute to the system dependability through the rigorous specification of the system requirements, programming methods, and software re-usability. But it is difficult to quantify the impact of fault avoidance strategies on system dependability. So, despite fault prevention efforts, faults are created, so fault removal is needed.
- Fault Removal – Fault removal strategies are dependability-enhancing techniques employed during verification and validation. They improve by detecting existing faults and eliminating the defected faults. They are employed after the development phase of the software to contribute to the validation of the software. Common fault removal techniques involve testing. It follows that minimizing component size and interrelationship maximizes accurate testing. The difficulties encountered in testing programs are often related to the prohibitive costs and exhaustive testing. Therefore, fault removal is imperfect, hence fault tolerance is needed.
- Fault Tolerance – Fault tolerance includes dependability-enhancing techniques that are used during the validation of software to estimate the presence of faults. It is used to reduce system design faults and enhance the reliability of the software. Fault tolerance techniques are employed during the development phase of the software which enables the system to tolerate faults remaining in the system after its development and provide operation complying with the requirements specification in spite of faults. Therefore, when a fault occurs it prevents the system failure.
Fault prevention, fault removal, and fault tolerance represent the successive lines of defense against the contingency of faults of software systems and their impact on system. Despite the fact, that the benefits of each of these techniques are remarkable, the law of diminishing returns advocates that they should be used in unison where each one is applied wherever it is most effective.