On Software Testing

At some point during his or her career, a programmer might come across the following argument, presented by some colleague, partner, or decision maker:
Since we can always test our software by hand, we do not need to implement Automated Software Testing.
Apparently, I reached that point in my career, so now I need to debate this argument. I decided to be a good internet citizen and publish my thoughts, since others might find themselves in my shoes.

So, in this post I am going to be deconstructing that argument, and demolishing it from every angle that it can be examined.  I will be doing so using language that is easy to process by people from outside of our discipline.

In the particular company where that argument was brought forth, there exist mitigating factors which are specific to the product, the customers, and the type of relationship we have with them, all of which make the argument not as unreasonable as it may sound when taken out of context. However, even for this company, this argument is worth challenging, for reasons that should become clear further down.

That having been said, this discussion is intended to be applicable to software development in general, so I will not be bothering the reader with any details about the specific situation of this company.

In its more complete form, the argument may go like this: