One of the barriers to the practical use of mutation testing is the unacceptable computational expense of generating and running vast numbers of mutant programs against the test cases. The number of mutants generated for a software unit is proportional to the product of the number of data references and the number of data objects. Typically, this is a large number for even small software units. Because each mutant program must be executed against at least one, and potentially many, test cases, mutation analysis requires large amounts of computation.
Approaches to reduce this computational expense usually follow one of three strategies:
do fewer ,
do smarter , or
do faster . The
do fewer approaches seek ways of running fewer mutant programs without incurring intolerable information loss. The
do smarter approaches seek to distribute the computational expense over several machines or factor the expense over several executions by retaining state information between runs or seek to avoid complete execution. The
do faster approaches focus on ways of generating and running each mutant program as quickly as possible.