Testing-Essentials ▪ Think Like a Tester ▪ Test Strategy ▪ Test Tooling, Automation ▪ Test Analysis and -Design ▪ Performing Tests and Reporting ▪ Appendix
Software testing is a set of activities carried out to gather (usually quality-related) information and reduce uncertainty about the product. The subset of activities carried out, who does them, and what form they take can differ greatly from case to case. The differences depend on contextual factors such as the kind of software being tested and the level at which it is being tested, the project budget, the available tools, the test team members’ availability and skills, the software development lifecycle model, the information objectives and more. We will discuss these contextual differences in more detail in upcoming chapters.
Poor testing may be worse than no testing at all. – Weinberg
Consider the following analogy, from Myers (1979). Suppose that something’s wrong with you. You go to a doctor. He’s supposed to run tests, find out what’s wrong, and recommend corrective action. He runs test after test after test. At the end of it all, he can’t find anything wrong.
Is he a great tester or an incompetent diagnostician? If you really are sick, he’s incompetent, and all those expensive tests were a waste of time, money, and effort. In software, you’re the diagnostician. The program is the (assuredly) sick patient. – Nguyen, Kaner, Falk
Perfect tests would detect every bug in the system under test (no misses) and never flag correct behaviour as a bug (no false alarms). Moreover, a perfect test would provide a clear description of the test conditions and the steps taken to produce the results. Performing the test on time, with the available resources would be possible, and its cost would be sustainable.
We know that the the first requirement can’t be fulfilled.
There are practical limitations to the granularity with which we can document our tests. The right amount of documentation will depend on the project situation and other context factors. However, providing information about making our method offers benefits in various common situations for example:
Karl Popper (1965) argues that the correct approach to testing a scientific theory is not to try to verify it, but to seek to refute the theory - that is, to prove that it has errors. The harsher the testing, the more confidence we can have in a theory that passes it. Much of Popper’s reasoning applies directly to software testing. – Nguyen, Kaner, Falk
Testing as Popper suggests means:
There are groups of activities that can usually be identified in test processes.
The strategy and plan inform the other test activities.