Mutation Testing

Mutation testing is based upon seeding the implementation with a fault (mutating it), by applying a mutation operator, and determining whether testing identifies this fault. A mutated program is called a mutant and if a test case distinguishes between the mutant and the original program it is said to kill the mutant. The idea behind mutation testing is quite simple: given an appropriate set of mutation operators, if a test set kills all of the mutants generated by these operators then, since it is able to find these small differences, it is likely to be good at finding real faults.

Mutation testing may be used to judge the effectiveness of a test suite: it should kill all the mutants. Similarly, test generation may be based on mutation testing: tests are generated to kill the mutants. Interestingly, many test criteria may be represented using mutation testing by simply choosing appropriate mutation operators.

While mutation testing is a powerful and general technique, a number of associated problems have limited its practical impact. One of these problems is that the standard set of mutation operators may lead to a vast number of mutants. However, it has been noted that this problem can be reduced by an appropriate choice of mutation operators. The following are the other main problems that we have considered.

The following papers have come out of our work on semantic mutation testing; they are either about semantic mutation testing itself or about potential semantic mistakes.

The following are also related to mutation testing.

Back to Rob Hierons' home page

Last updated: May 2010.

Disclaimer The contents of this page falls outside the responsibility of Brunel University.