What is a bug?

Software testing, Program analysis, and program synthesis. Across the dynamic and static analysis, we use terms like defect prediction, bug finder, fault localization, bug localization and so on.

I was just thinking why do they use different terms for the same thing.

For example, FL and BL are just completely different methods.

Would the definitions of the terms be different then?

The term software reliability is defined as “The probability of failure-free software operation for a specified period of time in a specified environment”[1]

So, the definition gives out the term failure first. let’s start from failure.

What is failure?

A failure is the inability of a software system or component to perform its required functions within specified performance requirements.

So basically, when a defect reaches the end customer it is called a Failure. During development, Failures are usually observed by testers[2].

bug1

Then, What is defect?

Defect is defined as the difference between the actual outcomes and the expected outcomes throughout the calculated semantics.

We are almost there!

What is bug?

I could not find the legit definition of bug. It is probably because the term bug was first derived by actual bug(moth) trapped in Mark 2 machine in 1870.

But, apperently, it is widely used for defects that is reported during the developing stage.

Now, then, Fault means..?

Any anomaly in the software. Meaning the software at the testing stage, possibly before the touch of the end-user.

This is why FL and BL are different. FL is for the software that is being tested and perhaps already released to the end-user, and BL is for the software that is still in the development stage.

Error..?

when we say bugs, we usually mean errors. But, error is a subset of bugs.

Bugs include many other defects such as security vulnerabilities, performance issues like memory leakage, and so on.

bug2

While surveying, I realized that the terms are used interchangeably in real development field.

However, I think it has to be clearly defined in terms of software engineering. Developers are not scholars. This is probably our job to do so.

Reference [1] ANSI/IEEE, “Standard Glossary of Software Engineering Terminology,” STD-729-1991,ANSI/IEEE, 1991 [2] https://www.javatpoint.com/bug-vs-defect-vs-error-vs-fault-vs-failure