What is Software Testing ?

While embarking on the journey to learn Software Testing, the starting point is understanding its meaning. So, what is Software Testing ?

The IEEE definition states that testing is, "an activity in which a system or component is executed under specified conditions, the results are observed or recorded, and an evaluation is made of some aspect of the system or component". According to Hetzel, "Software Testing is any activity aimed at evaluating an attribute or capability of a program or system and determining that it meets its required results". Further, Myers states, "Software Testing is the process of executing a program or system with the intent of finding errors".

Software Testing involves an evaluation of the system or component. This evaluation is done to: a) see if the system does not perform what it is supposed to perform b) to see if it performs what it is not supposed to be performing

Given the above definitions, a question that gets asked is - What does testing prove ? Does testing prove the absence of defects ? The answer: Testing does not prove anything. Testing is not about proving the absence of defects. Testing helps reduce the risk perception associated with the system or component. Testing is about finding defects but not about finding all of the defects. This distinction is important to make.

Software Testing involves operating a system or component under controlled conditions, evaluating the results and checking if performance meets expectations. Testing is usually compared to the headlights of a car while driving on an unknown stretch in the dark. Testing brings to light critical information that enables better decision making. In the words of James Bach, testing is "organized skepticism", an inherent belief that things may not be as they seem; testing helps to reduce uncertainty about the state of the system or component and is usually thought of as the process of comparing the ambiguous to the invisible, so as to avoid the unthinkable happening to the unknown. On a lighter note, testing is considered to be a support function that enables developers to look good by finding their "mistakes" before anyone else does.

This is the part 1 of the series on Software Testing, from the ground up. Stay tuned for upcoming posts in this series.