Testing is an activity performed for evaluating product quality, and for improving it, by identifying defects and problems. Software testing consists of the dynamic verification of the behavior of a program on a finite set of test cases, suitably selected from the usually infinite
executions domain, against the expected behavior. We’ve emphasized in italics the words that capture the key features of software testing; these are their definitions as they relate to this book. Dynamic: This means that we execute the program with specific input values to find failures in its behavior. In contrast, static techniques (e.g., inspections, walkthroughs, and static analysis tools) do not require execution of the program).