A green test suite feels good. But feeling good is not quite the same as being confident.

A test suite gives confidence when it would fail for the right reasons. If the code makes a wrong decision, changes the wrong value, skips a condition, or returns the wrong result, the tests should notice. Coverage cannot tell you that. Coverage tells you the code ran, but it does not tell you the test cared.

Mutation testing asks the missing question. It changes the code in small ways, then runs the tests. Flip a comparison. Remove a condition. Change a return value. If the tests fail, good. They noticed. If they stay green, the mutation survived, and you have learned something useful: that part of the code was visited, but not really checked.

This is why mutation testing is so useful around domain logic. Domain code is full of decisions and transformations. Is this invoice overdue? Does this customer qualify? Which price applies? Your tests should pin those things down. It's not about testing every line, method or class, but about checking whether the suite notices the decisions and transformations the code makes.

Mutation testing does not prove everything. What does? It can tell you that the tests notice when the code stops doing what it says. But! It does not tell you whether the code says the right thing.

That is the next problem: syntactically correct is not the same as semantically correct.