핵심 개념
A model-driven approach to mutation testing of Java bytecode, providing advanced mutation operators that can detect weaknesses in test suites beyond basic arithmetic and relational operator replacements.
초록
The paper presents a model-driven approach to mutation testing of Java bytecode, called Model Mutation Testing (MMT). The key points are:
-
MMT uses a model-driven approach to implement mutation operators, automatically apply them, run the test suite on the mutants, and summarize the errors caused by the mutations that were missed by the test suite.
-
MMT provides an Eclipse plugin that integrates with the Java Development Tools and allows users to control the set of mutation operators and the scope of mutations.
-
MMT includes a wide range of mutation operators, including standard ones as well as advanced operators that modify object-oriented structures, Java-specific properties, and method calls of APIs. In total, MMT provides 68 mutation operators.
-
Compared to other mutation testing tools for Java bytecode, MMT is the only one that supports such advanced mutation operators. This enables generating a more diverse set of mutants, which can reveal weaknesses in test suites that are not detected by basic mutation operators.
-
The model-driven approach, based on the Mod-BEAM metamodel for Java bytecode, allows mutation operators to be specified as model transformations. This makes them more readable and easier to extend than low-level bytecode manipulations.
-
The paper demonstrates the installation and usage of MMT, as well as the process of defining custom mutation operators using the Henshin model transformation language.
통계
"Mutation testing is a technique for testing the quality of a test suite. The assumption is that a program is well-tested if its tests can eliminate most of the errors injected into the program by mutations."
"MMT is the only mutation testing tool for Java bytecode that supports advanced mutation operators for modifying object-oriented structures, Java-specific properties and method calls of APIs."
인용구
"Mutations for Java programs can either be performed on the source code or the bytecode. For both cases tools exist to support writing code transformations, for example, Polyglot [2] for source code, and ASM [3] or BCEL [4] for bytecode. While mutating source code is often straightforward, this approach also has drawbacks: Each mutated program must be recompiled, which can lead to significant compilation overhead [5]."
"Looking at Java bytecode mutation tools like Major [5], Javalanche [6], PITest [7], they all provide mutation operators for manipulating arithmetic operators like replacing '+' with '-', relational operators like replacing '==' with '!=', operators that replace return values, and operators that change the values of variables and constants. However, they do not provide mutation operators for manipulating the object-oriented structure, Java-specific properties of a program and library method calls, and therefore cannot assess the ability of a test suite to detect errors in the use of such concepts."