Les tests de mutation sont des procédures mises au point et utilisées pour concevoir des tests logiciels et évaluer la qualité de ceux qui existent. Ils reposent sur des modifications mineures apportées à un programme afin d'avoir un comportement qui diffère du programme original. Ces versions mutées sont appelées mutant. Le but étant que les tests détectent et "tuent" les mutants. Les suites de tests sont mesurées par le pourcentage de mutants qu'elles tuent. Les mutants sont basés sur des opérateurs de mutation bien définis qui imitent les erreurs de programmation typiques (comme l'utilisation d'un opérateur ou d'un nom de variable incorrect) ou forcent la création de tests précieux (comme la division de chaque expression par zéro). L'objectif est d'aider le testeur à développer des tests efficaces ou à localiser les faiblesses dans les données de test utilisées pour le programme ou dans des sections du code qui sont rarement ou jamais consultées pendant l'exécution. Les tests de mutation sont une forme de test en boîte blanche.
Les objectifs des tests de mutation sont :
Par exemple, considérons cet extrait de code Java:
public boolean exemple(Boolean a, Boolean b){
if (a && b) {
return true;
} else {
return false;
}
}
L'opérateur de mutation va remplacer && par || et produire le mutant suivant :
public boolean exemple(Boolean a, Boolean b){
if (a || b) {
return true;
} else {
return false;
}
}
Pour qu'un test tue un mutant, les trois conditions suivantes doivent être remplies :
a = true et b = false respecte cette condition.Ces conditions sont collectivement appelées le modèle RIP,.