Le principe  des tests par mutation est de lancer les tests unitaires de la classe sur les mutants.

Voici le déroulement des tests :

  1. On lance les tests unitaires sur la classe de base pour voir si les tests sont tous verts (tests réussis).
  2. On génère tous les mutants de la classe.
  3. On lance un carnage :
    • Le carnage consiste à détruire les mutants. Il se déroule en lançant les tests unitaires sur les mutants. Si un des tests échoue (rouge), on détruit le mutant. Sinon (tous les tests sont au vert) le mutant est gardé pour pouvoir compléter les tests unitaires et pouvoir traiter le cas qu’apporte le mutant et qui n’a pas été pris en compte.
  4. S’il reste des mutants on génèrent de nouveaux tests pour traiter les cas si possible.
  5. On recommence au 1 jusqu’à la disparition totale des mutants.

Un des cas particuliers est le mutant sémantique.

Prenons le bout de code suivant :

int i = 0;
do
{
    i++;
    if (i == 10) break;
} while (true);

et son mutant (== en >=) :

int i = 0;
do
{
    i++;
    if (i >= 10) break;
} while (true);
Sémantiquement parlant la condition de sortie de la boucle est la même et est difficilement détectable par un test unitaire.

Last edited Apr 5, 2012 at 3:30 PM by niccoudev, version 3

Comments

No comments yet.