Quoth the master:

As I have now said many times and written in many places: program testing can be quite effective for showing the presence of bugs, but is hopelessly inadequate for showing their absence.

— Dijkstra, A Discipline of Programming

This is much less powerful than it should be when taken out of context. Clearly, test suites no more “prove” that a program is valid than a predicate is “proved” by manually checking a few cases. Test suites are actually an improvement over customary practices, but only because customary practices are abysmally primitive. I’m not talking about pre-Internet primitive. I’m talking about pre-Russell, not to say pre-Descartes primitive.

Dijkstra’s writings are still among the most clear and solid examples of reasoning I’ve read, let alone reasoning about computer programming, and the fact that one can make a living as a “programmer” without thinking formally about anything ever, is as damning an indictment of the industry as I can imagine.

Leave a Reply