Why is astronomy considered a science while astrology is considered only a pseudoscience?
In other words, how can we prove that a theory faithfully describes reality,
and that this theory can then be used to predict unknown facts? Karl Popper, the
well-known philosopher, studied these problems and summarized his conclusions in
one phrase: “The criterion of the scientific status of a theory is its falsability, or
refutability, or testability.”* For Popper, “confirming evidence should not count
except when it is the result of a genuine test of the theory.”
The testing process of a scientific theory is quite similar to the process of providing
confirmation either to risky predictions or to attempts to falsify that theory. Testing
is a complex activity. It has to simultaneously bear in mind the theory and the external
reality; it has to provide objective answers to complex questions related to our
own perceptions of a rational reality.
When developing software, we follow the same thought process, since one builds an
abstract model between the external world and the user. In our software, we define
strict processes that will guide our actions, and we build the data we want to
manipulate in complex databases and templates.
Can we test our software with Popper’s principles in mind? The answer is definitively
yes, because software testing should not only be a confirmation that the application
is working correctly but also that it will react correctly when unexpected conditions
occur. This constant and complex relationship between the software one tests
and external reality should guide testers in their daily work.
Although testing is usually perceived as a necessity in software development, it is
rarely applied as a rigorous activity. Within many projects, testing is simply omitted;
in others, it is executed with the distinct intent to prove that the application performs
correctly under test conditions.
After reading John Watkins’s Testing IT you will be convinced that testing is not as
complex as it seems and that it can be managed like any other development activity.
The first thing you notice in reading Testing IT is that John puts the accent on testing
processes and real-world case studies, which are, in my opinion, the most
important aspects of software testing, implicitly applying Popper’s conclusions.
Testing IT is divided into three logical, distinct parts: Part 1 focuses on traditional
testing processes. Although technology is evolving at lightening speed, processes
remain. They become even more important because they are at the heart of any
activity. You will find this part very useful since it presents the testing phases starting
from unit testing up to regression testing in the order found on all projects. Each
phase is presented in the same coherent plan, facilitating access to the information.