Genetic Algorithms for MUtation Testing (GAMUT)
Dr Robert M. Hierons
Department of Information Systems and Computing, Brunel University
Many problems may be represented in terms of searching for values that minimising the value of some function, often called the objective function. Where there may be local minima, traditional approaches such as hill-climbing can fail through finding one of these minima rather than the global minimum. Meta-heuristic algorithms, such as Genetic Algorithms, Simulated Annealing, and Tabu search, are designed to avoid getting stuck at local minima. It has thus been found that they are able to solve a wide range of problems.
Software testing is a vital yet expensive part of the software development process, studies suggesting that it often consumes in the order of fifty percent of the total development budget (see, for example, [1]). Thus approaches that automate or semi-automate sections of software testing may significantly improve the efficiency and quality of the software development process.
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 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 set: the test set 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 ([6,5]). The following are the other main practical problems.
GAMUT will explore the application of meta-heuristic algorithms (such as Genetic Algorithms) to assist in solving the problems outlined above. While meta-heuristic algorithms have already been successfully used to generate tests that achieve full branch coverage ([4]), they have yet to be applied to mutation testing, where the challenges are quite different. The project will investigate the following issues.