Hacker News new | ask | show | jobs
by sitkack 2107 days ago
Mutation Testing [1] is a generalized form of fuzzing. It is also analogous to Sensitivity Analysis [2]. As part of closing the feedback loop between the code and the tests, if one had a repeatable way to break the code and measure the selectivity in the test result, one could ensure that they are testing the same thing as the code evolves.

Automatic program repair [3] tries to find patches to broken code, maybe goal directed program breaking (possibly using DNNs) could be used to infer properties for code so that better invariants could be discovered.

[1] https://en.wikipedia.org/wiki/Mutation_testing

[2] https://en.wikipedia.org/wiki/Sensitivity_analysis

[3] https://arxiv.org/abs/1807.00515

1 comments

The Wikipedia article states "fuzzing can be considered to be a special case of mutation testing." I'm not sure I agree with that. Regardless, that does not mean "mutation testing is a generalized form of fuzzing."

Normally, fuzzing is done from outside an interface to verify that the interface works and the code behind it doesn't fail horribly. Normally, mutation testing is done from behind an interface to verify that the tests are doing something. Compared with typical unit tests, they may seem similar with their use of randomness or ASTs as machines determine what to test and in that they are not functional tests, but they are very different things.

Both are mutation, I feel like this is splitting hairs, interior vs exterior. It doesn't strike me as very different. What would be some other examples?