What is a Defect?
A software defect, also known as a bug, is a deviation of the software's behaviour from its specification.
Real-world Examples
- Users cannot log in even when they enter the correct username and password.
- The web site does not load in Google Chrome.
- Clicking on any link always opens a new browser window.
- The application interface has incorrect french translations.
- Search results do not match the search query.
Cause of Defects
- Unclear or incomplete specification - this leads to developers misinterpreting the requirements.
- Miscommunication between the design and the development teams.
- High complexity - makes it unlikely to cover all scenarios during testing.
- Changing client requirements - leads to code fatigue.
- Low skill - developers who don't have the appropriate skill level are known to have a high defect density.
Classification of Defects
You can order defects in two primary ways:
Based on Priority
Defect priority is assigned based on its impact on the business.
It determines the order in which developers resolve the defects.
A defect is marked as High, Medium or Low priority in the defect report based on how significantly it impacts the business.
Based on Severity
Defect severity is determined based on its impact on the usability of the software.
A defect is classified as Critical, Major, Minor or Trivial in the defect report based on how significantly it impacts the user.
Defect Metrics
Defects are an essential indicator of software quality. A few metrics that help understand the code quality and the effectiveness of the processes put in place to improve it are:
- Defect Age
- Defect age measures the time taken to fix the code. Smaller the better.
- Defect Density
- Defect density measures the number of bugs per module or component. A high number means that the code quality of that particular component is not acceptable, and the developers should take steps to fix it.
- Defect Detection Efficiency
- Defect detection efficiency measures each test run's efficiency and is also used to judge testing quality.