The Unconscious Art of Software Testing. - Armour, Phillip G. (Communications of the ACM, 2005)
The article discusses considerations in software testing. The most important considerations of any software development practice are issues of economics and human psychology. Testing, probably more than any other activity in software development, is about discovery. Sometimes the most effective and efficient way to find certain defects is to test for them. This does not in any way substitute for good engineering practices and feedback mechanisms such as inspections. Indeed, without such processes in place and working, any attempt at dynamic testing quickly becomes overwhelmed and quite ineffective. But there are certain kinds of problems that are very difficult to identify analytically. There is no doubt that inspections can be very effective and must be used to obtain high-quality software. Much of what passes for method in testing involves heuristic strategies. It includes to selectively test complex predicate logic, create test cases that span the classes of inputs and outputs, construct combinations of conditions, press the system to its boundaries both internally and externally, and devise weird combinations of situations that might never occur in the real world.