ABSTRACT
Software testing of any kind is a process of sampling. Each
test case for a piece of software must be chosen from a set
of possibilities, here called the test domain. (See the formal
definitions, to follow.) It is a basic fact of practical testing
that this domain is almost always hopelessly large, so that
the number of test samples possible during software devel-
opment is a minuscule fraction of the possibilities. Thus the
choice of test cases is the critical factor in any testing
activity. At the same time, once software has been released
its users proceed to sample the test domain, and may do so
far more thoroughly than the developer could. A trivial
example will illustrate this unfortunate situation. Imagine a
program that makes a numerical calculation using two
non-negative integer inputs. Further stipulate that the pro-
gram correctly checks that its inputs are integers in the
range [0, 232 – 1], issuing a proper message otherwise. This
confines the test domain to about 264 values. (Without the
stipulation, the test domain would be effectively unlimited,
since it would include unlimited strings for inputs,
e.g., "2B or not 2B, that is the ?". It is very often the case that programs fail to check for valid input.) Suppose
also that the developer has a collection of 104 integer test
cases for which the required results are known, and has time
to execute and check these. Discount any time required to
fix problems that are encountered. (Again, the situation is
idealized because typically no such collection may exist,
and weeks of test time may not be available; fixing pro-
blems could be a lengthy operation.) Finally let this soft-
ware be intended for the PC market with about 10 million
users, each of whom uses the program 100 times a week on
average. Altogether the idealized situation differs from
reality in giving development testing a huge favorable
bias. The test domain has about 4.3 billion points, of
which 104, about 0.00023%, are tested, while usage is
about 109 points/week, about 23% of the test domain. (It
is true that a great deal depends on exactly which elements
of the test domain are tried and which used, but that
important subject will be raised later in the “Functional
Subdomain testing” section.) Thus in this case some user
hits almost every point within a month of usage, while only
a negligible fraction have been tested. Thus if there are any
problems with the software, it is quite likely that they will
be seen by users but not by prerelease testers.