What is Mutation Testing?
Mutation Testing is an approach that evaluates the quality of existing software tests. The whole idea is to modify a small part of your code (mutated version code- faulty seed) covered by tests and check whether the existing test suite will find the errors and reject this mutated code. If it doesn’t, it means the tests are less strong and do not match your code’s complexity and thus leave many aspects untested.
The changes introduced or injected in the program code are generally referred to as ‘mutants’.
Let’s take an example now- say we have a function where we take the monthly Total income of a family as an input and then decide whether they are eligible for a subsidy of Gas or not. If it is equal to or less than ₹10,000, give them a subsidy. It will be something like:
– Input the monthly Total income
– If monthly Total income=<₹10,000
– Gas Subsidy= Yes
– Loop End if (Gas Subsidy= No)
For testing, our test data inputs will be like 9999, 10000, 10001, 0, some negative value, some decimal value, some fractional value, etc. These should be enough to catch if there is an issue with the code.
But as part of the mutant test, we do more like, we will seed fault in the code by adding these mutants:
– Removing/Updating the Arithmetic operator, Relational and Logical operator
– Removing the If Statement itself
– Adding Incorrect syntax
– Absolute value insertion like Subsidy=5000 instead of Boolean Yes/No, etc.
P.S. In any project where we have many devs contributing to the product/project; mutation testing of even a small module can block your CI cycles. Plus, the time and expense involved in it are huge as compared to the perceived value returned.
Parallel Isolated Test (http://pitest.org) is a Java-based mutation testing system.