Tests de Mutation
Une technique pour évaluer la qualité des tests en introduisant de petits changements (mutations) dans le code et en vérifiant si les tests les détectent. Les mutations non détectées indiquent des tests faibles.
Definition
Les tests de mutation créent des "mutants" — des copies du code avec de petits changements comme inverser des opérateurs (> en <), supprimer des déclarations ou changer des valeurs de retour. Les bons tests devraient échouer lors de l'exécution contre des mutants (les "tuer"). Les mutants survivants révèlent des lacunes dans la couverture de tests ou les assertions. Les outils incluent Stryker (JavaScript/TypeScript), PIT (Java) et mutmut (Python). Mutation score = mutants tués / total des mutants.
Pourquoi c'est important
La couverture de code peut être élevée tandis que les tests restent faibles (ex. tests qui exercent le code sans vérifier les résultats). Les tests de mutation mesurent l'efficacité réelle des tests. La recherche montre que les tests de mutation trouvent 2-4 fois plus de défauts que les tests basés sur la couverture.
Exemple
Code: if (age >= 18) return true. Un mutant change >= en >. Si les tests ne le détectent pas (tous les utilisateurs de test sont >18, aucun exactement 18), le mutant survit, révélant un test de cas limite manquant.