Practical Software Testing: A Process-Oriented Approach

In Chapter 1 several software engineering terms related to testing were presented. The terms validation and verification were defined and two definitions for testing were given. The latter are repeated here as a means for initiating a discussion of two major types of testing for software. Other descriptions of the term "testing" are found in IEEE software engineering standards documents and guides [1]. The term "software" here is used in the broadest sense to mean source code and all of its associated artifacts, for example, requirements and design documents, test plans, and user manuals.
Testing is generally described as a group of procedures carried out to evaluate some aspect of a piece of software.
Testing can be described as a process used for revealing defects in software and for establishing that the software has attained a specified degree of quality with respect to selected attributes.
The definitions for testing outline analysis objectives that relate to evaluation, (revealing) defects, and quality. We can use two approaches to achieve these objectives:
static analysis methods where the software artifact is examined manually, or with a set of tools, but not executed;
dynamic analysis methods where the software artifact is executed using a set of input values, and its output behavior is then examined and compared to what is expected.
Dynamic execution can only be applied to the software code. We use dynamic execution as a tool to detect defects and to evaluate quality attributes...