Detecting Equivalent Mutants through Fuzzing
Description
Software testing is the long-running phase of the software lifecycle. Almost 50% of the efforts and costs of software development are spent on testing. Mutation testing is one of the most studied approaches to measuring the quality of tests. Unfortunately, mutation testing is still not widely accepted at the industrial level due to its computational cost i.e., the enormous number of mutants and required efforts. Mutation score is the key metric that is used to gauge the quality of test suites. Equivalent mutants create a serious noise in the mutation score and also increase the computational overhead. As the program equivalence is an undecidable problem, therefore, complete automation of the equivalent mutant identification doesn't exist. It consumes a lot of effort to separate the equivalent and non-equivalent from the live mutants. Even though different approaches are proposed to sense the equivalent mutants but still detection of equivalent mutants is an open challenge.
Fuzzing is a testing technique where inputs are randomly generated and the program under test is executed against those inputs with the hope that it may produce some anomalous behavior. A key challenge in fuzzing is to determine the quality test oracle. In this study, we want to investigate the extent to which we can find the equivalent mutants by fuzzing the live mutants to get actual results and executing the original program against the same input for the expected output. We aim to compare the actual and expected values and observe the program's equivalency. If we do not notice any difference in outputs for the specified time then semantically that mutant can be equivalent to the original program. Otherwise, that particular input data can augment the test suite with the triggering values generated by the fuzzer.