Generating test data using evolutionary test data generation has been
shown to be successful [6,17,14,10,8], but
its effectiveness is significantly reduced in the presence of
programming styles which make the definition of an effective fitness function
problematic. For example:
- The presence of side effects in predicates reduces the ability to exploit
the inherent parallelism in a predicate's syntactic structure.
- The use of flag variables (and enumeration types in general) creates
a coarse fitness landscape, thereby dramatically reducing the effectiveness of the search.
- Unstructured control flow (in which loops have many entry
and exit points) affects the ability to determine
how alike are the traversed and target paths.
The presence of these features make a program
less `testable'.
Although unstructured control flow and reliance upon side effects are often deprecated, their
use remains prevalent and so it is not good enough simply to have testing
strategies only
for `pure and clean' programs and languages;
testing is a real world problem and it requires real world solutions.
Mark Harman, Department of Information Systems and Computing, Brunel University, Uxbridge, Middlesex, UB8 3PH.