Les tests de mutation

@Halleck45

Test unitaire ?

Evaluer ses tests

<?php
class Foo {
    public function bar($x, $y) {
        if($x == 1) {
            echo 'A';
        } else {
            echo 'B';
        }
        if($y == 1) {
            echo 'C';
        } else {
            echo 'D';
        }
    }
}

100% de couverture

Fail !

Les tests sont vides de sens

<?php
class FooTest extends PHPUnit_Framework_TestCase
{
    public function testFoo1()
    {
        $this->assertTrue(true);
    }
}

Le Mutation Testing

1. on crée des bugs dans le code

  • on injecte des mutants

2. On vérifie que le test échoue

  • tuer les mutants
if($x === 1) { (...) }
if($x !== 1) { (...) }

On introduit une mutation

Les tests DOIVENT échouer

MutaTesting

  • https://github.com/Halleck45/MutaTesting
  • Ne nécessite aucune configuration PHP particulière
  • PHPUnit, atoum...

Ligne de commande

Rapport HTML

Inconvénients

  • Faux positifs
  • Temps de test exponentiel
  • Ne sert que d'indicateur

Questions ?

Merci

Les tests de mutation

By Jean-François Lépine

Les tests de mutation

  • 716