My esteemed colleague and sometime nemesis Michael Bolton has written a screed against the terms "manual testing" and "automated testing". Check it out, sapiently.
In his article, Michael, for reasons which have not become clear to me, attempts to show that these terms are not useful, by arguing that there are other human activities which do not parse nicely into the notions of manual and automated. Unfortunately, there is a useful distinction in software testing that is made by these terms. There might be better terms. Michael himself has offered others from time to time. He has offered the notion of "test" vs "check". This is a useful notion but it turns out that both manual tests and automated tests in our parlance are checks in his. We would have to say "manual checks" and "automated checks" — in fact sometimes we do — but then we'd have to have this discussion all over again.
Michael has also offered or borrowed — I hope the latter — the term "sapient". I don't claim to grok this in fullness but I take it to mean, roughly, "thoughtful". We humans can do things more or less thoughtfully, and to the extent that sapient means "wise", not just "thoughtful", we are certainly capable of doing things more or less wisely. I am living proof of that last bit. Sapience is a useful notion as well, but it turns out that while both manual tests and automated tests can be prepared "sapiently", and manual tests can even be executed sapiently — but often are not — automated tests of today cannot be executed in a sapient fashion.
So neither the notion of check versus test, nor the notion of sapient versus … what … non-sapient? quite captures the distinction intended by manual versus automated tests. What do we mean by manual versus automated? I'm glad you asked.
There is a kind of "testing" where there is a book that tells the "tester" what to enter into the computer, and what the output should be. They enter the input the book calls for, and check to see if the computer says what it was supposed to. If it does not, they — I don't know — blow a whistle or write it down or something. This alerts someone to look at the situation, think about it, determine if there is a problem, and fix it. The person who does all this is often not the person doing the typing and checking. Insultingly, they are often thought of as "smarter" if not more thoughtful or sapient.
That kind of "testing" is what we call "manual testing". We do not like it. It is inhumane. It is intentionally designed to require little thought. It could probably be taught to chickens were they not so tasty.
Yes, we know there is a computer involved. Not everything with a computer involved is "automated". For example, I am thinking about this reply, composing it, trying to be just edgy enough but not too edgy. I am typing this reply. Through some means I do not fully understand, it is going into my computer and ultimately into this little rectangle I'm typing into, and, I hope, onto my web site. It's not as manual as when we used to cut little wedge marks into clay tablets and then bake them, and it's not as automated as it would be if I could just think "Sort Michael out" and carefully crafted ideas would appear on my site — or directly in your head. If you feel yourself getting smarter, don't worry, it's not me putting ideas directly into your head. I can't do that. As far as you know.
I would say that I wrote this reply thoughtfully. As for sapiently, that remains to be seen.
I write code thoughtfully as well. I don't know any way to write code, or blog entries, other than thoughtfully. I cannot write them manually, and in both situations, my writing cannot be automated, as far as I know. The whole notion of concluding that there is no manual testing because we don't call compiling automated programming is empty. (By the way, in the olden days, after the clay tablets but before today, compiling and linking were in fact called automated, or automatic, programming. The term did not gain currency because it was so obviously just another kind of programming, of creating a work of the mind and getting it into a computer.)
Testing, however, can be set up to be done thoughtlessly, and in my experience it often is. Non-sapiently, if you must. That process is what we call manual testing. The creation of the book full of things to check was perhaps thoughtful. The execution of what's in the book is not very thoughtful. We think that the initial thinking should be put into a program, not into a book, and that the execution should be done by a computer, leaving people to do work that is more suited to humans. "Exploratory" testing, for example. We'll leave it to another day to talk about that term, which is not automated, presumably sapient, and — unfortunately — sometimes looks a lot like manual testing. It is distinguished from manual testing in that even if it uses a book, it is not rote in nature. We reserve the term "manual testing" for the kind of testing that could be taught to a chicken — or even to a computer.
Much of the process of building toward certainty that software works, especially when we work in an incremental and iterative fashion, involves checking to be sure that the answers are right — as we understand right — and re-rhecking to be sure that the software is still producing that answer. We do that with tools that encode the ideas of "right", execute the software, and check to see if the computer says what was expected. If it does not, the tools often blow a whistle or write it down or something. This alerts someone to look at the situation, think about it, determine if there is a problem, and fix it. This is always a person today. Perhaps one day the computer will be able to do more to help. Today, all the computer can really do is alert us when something changes.
Because we need to know quite often — weekly, daily, even moment-to-moment — whether something has changed, we prefer to have "automated tests", which we can execute at the press of a button, rather than "manual tests", where we would have to call over a person — or a chicken — to perform the tests and get back to us. Should those tests fail, we then look into the situation further, or, if we are fortunate to have one on hand, ask a sapient tester to look into it with us or on our behalf.
Now these manual tests which we abhor might better be named manual checks, and in fact I try to call them that in day-to-day use. I call them tests here to maintain continuity with Michael's article. In execution, they are not thoughtful, and not "sapient", though their original definition was both.
There are many words that describe ways of improving our certainty that our software works. There is a particular value to defining checks that can be done to help us gain confidence. Those checks can be made by the computer running a checking program, or by a person running through a list of things to type. We call the former "automated", and the latter "manual". We don't want humans doing manual testing. We don't even want chickens doing it. We want computers doing it. The terms manual and automated are useful, and that's why we use them.