The Major Mutation Framework
Easy and scalable mutation analysis for Java!
Latest version of the Major mutation framework
January 22, 2023
- Migrated mutator to being a (Java-8) javac plugin.
- Support automated AST refactoring to address code-too-large errors when mutating large methods or declarations.
- Fine-grained logging of mutant generation and mutant context.
- Various bug fixes and improvements to mutation operators.
- Allow individual preprocessing and analysis runs.
- Persist preprocessing results (coverage information) for reuse.
- Support inclusion/exclusion of individual mutants and/or tests.
- Fix for type casts: propagate type information such that the type of the type cast expression matches the type of the mutated expression.
- Export more fine-grained AST context information for mutants.
- Smaller memory footprint for the Ant-based analyzer.
- Properly label mutants that time out to avoid rerunning them again.
- Don't apply the EVR mutation operator to null expressions.
- Added a new command-line analyzer (beta version).
- Export of AST context information: for each generated mutant, what is its parent context, data type context, and children context.
- Smaller documentation improvements.
- Fix for the EVR mutation operator: EVR can't be applied to a return statement of a method whose return type is void.
- Major's kill matrix now provides the kill reason (assertion, exception, timeout) for each mutant-test execution.
- Added a new configuration option (timeoutOffset) to define a minimal test timeout regardless of the runtime of that test on the original version of the code.
Major's DSL (MML)
- Support for targeting a set of overloaded methods (by name) or a particular method (by signature).
- Support for enabling/disabling the LVR mutation operator for specific types of literals (numerical, boolean, and String literals).
- Support for enabling/disabling the STD mutation operator for specific types of statements (method call, assignment, increment, decrement, break, continue, return)
- Fix for the COR mutation operator: ternary operators, whose conditions have no logical connectors, are now properly mutated. For example, isFlag() in int a = isFlag() ? 1 : -1 is replaced by true and false.
- New EVR (Expression Value Replacement) operator: replaces an expression (in an otherwise unmutated statement) with a default value.
- Support for Java 8.
- Support for parameterized unit tests, when running test methods in isolation (i.e., sort="sort_method").