Code coverage is a lie. You can have 100% coverage with tests that don't actually 'Assert' anything. Mutation Testing is the only way to know if your tests are actually protecting your code.
A tool like **Stryker.NET** goes into your source code and intentionally 'Mutates' it. - It changes `if (x > 10)` to `if (x < 10)`. - It changes `return a + b` to `return a - b`. Then, it runs your tests. If your tests still **PASS** after the code was corrupted, it means your tests are weak (the mutant "Survived"). If the test fails, the mutant was "Killed."
Forget Code Coverage. The only metric that matters is the **Mutation Score**. It tells you what percentage of code changes are caught by your tests. A high mutation score means you can change your code with 100% confidence.
Q: "Why don't teams use Mutation Testing for every build?"
Architect Answer: "Performance. Mutation testing is extremely slow because it has to run the full test suite hundreds of times (once for every mutation). As an architect, I recommend running it **Weekly** or only on **Modified Code** (incremental mode) to ensure that the quality of the test suite doesn't decay over time without slowing down the daily developer workflow."