1.3 What Is a Defect?
A system defect (informally known as a bug) is a flaw or weakness in the system or one of its components that could cause it to behave in an unintended, unwanted manner or to exhibit an unintended, unwanted property. Defects are related to, but are different from:
- Errors Human mistakes that cause the defect (for example, making a programming mistake or inputting incorrect data)
- Faults Incorrect conditions that are system-internal and not directly visible from outside the system’s boundary (for example, the system stores incorrect data or is in an incorrect mode or state)
Failures Events or conditions in which the system visibly behaves incorrectly or has incorrect properties (that is, one or more of its behaviors or properties are different from what its stakeholders can reasonably expect)
Common examples of defects include the following flaws or weaknesses:
Defects can cause the SUT to violate specified (or unspecified) requirements, including:
- Functional requirements
- Data requirements
- Interface requirements
- Quality requirements
- Architecture, design, implementation, and configuration constraints
- Defects can also result when the SUT conforms to incorrect or unnecessary requirements.
Defects can cause the SUT to:
- Fail to behave as it should
- Be missing characteristics that it should have
- Behave as it should not behave
- Have characteristics that it should not have
- Defects can cause the SUT to be inconsistent with its architecture or design.
- Defects can result from incorrect or inappropriate architecture, design, implementation, or configuration decisions.
- Defects can violate design guidelines or coding standards.
- Defects can be safety or security vulnerabilities (for example, using inherently unsafe language features or failure to verify input data).