There are a lot of terms used to talk about testing, but it’s not always clear what they actually mean and what the differences are between them. One of the most common areas of confusion, for both non-technical and technical people, arise from distinguishing the differences between the following terms: error, fault, bug, defect, and failure.
So, what’s correct? And more importantly, does it really matter if you’re 100% absolutely correct when using this terminology?
First, let’s cover the definitions:
Error: A discrepancy found during development, which creates a deviation from the result (i.e. an unexpected result is produced rather than the expected one). Usually, but not always, they are caused by a human error (or a mistake) on the part of the developer.
Fault: An incorrect step, process, or data definition which causes the program to perform in an unintended or unanticipated manner.
Bug: A fault in the program, which causes it to perform in an unintended or unanticipated matter. Bugs are discovered by a tester before the application goes into production
Defect: A defect is the nonconformance to requirements or functional/program specification (i.e. an imperfection in the product), which is discovered internally during acceptance testing, or once it has been deployed to a production environment.
Failure: The inability of a system or component to perform its required functions within the specified performance requirements. Meaning, the program fails to do what it is supposed to and does something it shouldn’t instead. A failure usually indicates the presence of a defect.
To make it even clearer, imagine this scenario:
A client wants a web form that saves and closes when a user clicks SAVE.
- A programmer makes a coding mistake that causes the form to save but the window to freeze. ERROR
- Due to this coding error, an instruction is missing which causes the window to freeze and remain open. FAULT
- The tester discovers the program is not closing the window and reports it to the developers. BUG
- The product is running in beta when the client discovers that while the web form saves and closes, an extra button must be clicked to close the window. FAILURE
- The client wanted a web form that performed both actions when a single button was clicked. The programmer understood the actions, but misunderstood and created two separate buttons to complete the action. DEFECT
A few other things to consider…
– Bugs (or defects) can be introduced in various ways, other than through a coding error. For example, a client could make a mistake about a requirement, or a designer could misunderstand the requirement.
– All these terms can appear similar in meaning and usage, and the truth of the matter is that during real-life projects you have probably heard one or more of these terms used in much the same way.
– The detection of any of these problems should be seen as an opportunity to assess the quality of your product.
Did you find this post helpful? How would you define each term?