The Need for Testing
My favourite quote on software, from Bruce Sterling's “The Hacker Crackdown” –
The stuff we call "software" is not like anything that human society is used to thinking about.Software is something like a machine, and something like mathematics, and something like language,and something like thought, and art, and information.... but software is not in fact any of those otherthings. The protean quality of software is one of the great sources of its fascination. It also makessoftware very powerful, very subtle, very unpredictable, and very risky.Some software is bad and buggy. Some is "robust," even "bulletproof." The best software is thatwhich has been tested by thousands of users under thousands of different conditions, over years. Itis then known as "stable." This does NOT mean that the software is now ﬂawless, free of bugs. Itgenerally means that there are plenty of bugs in it, but the bugs are well-identiﬁed and fairly wellunderstood.There is simply no way to assure that software is free of ﬂaws. Though software is mathematical innature, it cannot by "proven" like a mathematical theorem; software is more like language, withinherent ambiguities, with different deﬁnitions, different assumptions, different levels of meaning thatcan conﬂict.
Software development involves ambiguity,assumptions and ﬂawed human communication.Each change made to a piece of software, each new piece of functionality, each attempt to ﬁx adefect, introduces the possibility of error. With each error, the risk that the software will not fulﬁlits intended purpose increases.Testing reduces that risk.We can use QA processes to attempt to prevent defects from entering software but the only thingwe can do to reduce the number of errors already present is to test it. By following a cycle of testing and rectiﬁcation we can identify issues and resolve them.Testing also helps us quantify the risk in an untried piece of software.After modiﬁcations have been made, a piece of software can be run in a controlled environmentand its behaviour observed. This provides evidence which informs the decision to move to thenext phase of the project or to attempt to rectify the problem.And ﬁnally in some (dare I say enlightened?) software development efforts, testing can actually beused to drive development. By following statistical models of software development and methodssuch as usability testing, software development can move from an unfocused artistic endeavour toa structured discipline.
This primer will be unashamedly pro-testing. I am, and have been for ten years, a tester. As a tester Ihave suffered endless indignities at the hands of project managers and development teams thatresulted in enormous amounts of stress for myself and my teams.There are plenty of books written about and for project managers and software developers.This is probably not one of them.