Over the years, I’ve been exposed to arguments claiming that software testing is a science, as well as arguments that claim software testing is an art. Let’s look at the arguments for each side, and try to figure which side is correct.
The Argument for Science
There is definitely a structured, scientific process of evaluation that takes place when software is tested. A tester is constantly testing his or her hypothesis that the software functions properly. He or she systematically exercises the software according to the requirements against which it is measured and records observations (as bugs or perhaps as “Pass” / “Fail” results in an Excel spreadsheet). Furthermore, the software is the product of programming code, which by its nature is logical and deterministic and should thus lead to predictable behavior. Very scientific.
The Argument for Art
If you spend some time watching software being tested, you’ll see that an application’s behavior can be unpredictable, even illogical at times. If the tester is skilled, you’ll also realize that there is more to being a good tester than rote execution of test scripts. Good testers seem to feel their way through an application, invariably zeroing in on the anomalies. It is hard to explain, but often the actions of a good tester are more instinctual than they are rigorously defined. And they find the coolest bugs that way. Very artistic.
So which is it? My answer is that effective software testing is a combination of art AND science. Unimaginative testers who step through a confining test script without ever looking off to the side miss quite a bit of interesting behavior. Moreover, flighty testers who jump about an application without regard for any sort of structure will almost always miss that link at the bottom of the page that leads to a 404 error. A good tester needs to be both logical AND creative and he or she must be able to follow both a test script AND their instincts.