The Smart Tester
Software components have defects, no matter how well our defect prevention activities are implemented. Developers cannot prevent/eliminate all defects during development. Therefore, software must be tested before it is delivered to users. It is the responsibility of the testers to design tests that (i) reveal defects, and (ii) can be used to evaluate software performance, usability, and reliability. To achieve these goals, testers must select a finite number of test cases, often from a very large execution domain. Unfortunately, testing is usually performed under budget and time constraints. Testers often are subject to enormous pressures from management and marketing because testing is not well planned, and expectations are unrealistic. The smart tester must plan for testing, select the test cases, and monitor the process to insure that the resources and time allocated for the job are utilized effectively. These are formidable tasks, and to carry them out effectively testers need proper education and training and the ability to enlist management support.
Novice testers, taking their responsibilities seriously, might try to test a module or component using all possible inputs and exercise all possible software structures. Using this approach, they reason, will enable them to detect all defects. However an informed and educated tester knows that is not a realistic or economically feasible goal. Another approach might be for the tester to select test inputs at random, hoping that these tests will reveal critical defects. Some testing experts believe that randomly generated test inputs have a poor performance record .
The author believes that goal of the smart tester is to understand the functionality, input/output domain, and the environment of use for the code being tested. For certain types of testing, the tester must also understand in detail how the code is constructed. Finally, a smart tester needs to use knowledge of the types of defects that are commonly injected during development or maintenance of this type of software. Using this information, the smart tester must then intelligently select a subset of test inputs as well as combinations of test inputs that she believes have the greatest possibility of revealing defects within the conditions and constraints placed on the testing process. This takes time and effort, and the tester must chose carefully to maximize use of resources [1,3,5]. This chapter, as well as the next, describes strategies and practical methods to help you design test cases so that you can become a smart tester.