The basis of a testing rationale is to assume that if the software deals with these inputs correctly, and the inputs are sufficiently representative of all possible sets of input data, then it can be assumed that the software will operate correctly for all valid sets of input data. This does not provide a proof of the correctness of the software, the conclusion that it will operate correctly for all possible sets of input data is only an assumption. The validity of the assumption depends upon the sets of input data being sufficiently representative of all possible sets of input data. Consequently a requirement of a test design is to select a set of test data which can be argued to be sufficiently representative of all possible inputs. A second requirement of the program testing processes is to test the software adequately with the minimum of effort.
Testing can be a time consuming and expensive process.
It is a requirement that the tester should design the minimum adequate set of test data which can be used. The test of the software will be made with respect to its specification. If the specification is incomplete or ambiguous, or the programmer's understanding of the specification incomplete, then adequate testing will not be possible. Testing can only be used to provide evidence that the software module produced will perform according to its specification. However if the specification is incorrect or the module is inappropriate as part of a system then the module will not fulfil its role within the system.