Le Mutation Testing

Le Mutation Testing

Survol très rapide à l'occasion d'une pizza party. Présentation de https://github.com/Halleck45/MutaTesting/

Cad0f293595fc534e4ebd1eb7e3f1a1a?s=128

Jean-François Lépine

June 05, 2013
Tweet

Transcript

  1. 3.

    Tests unitaires • Robots automatisés qui exécutent des contrôles •

    Garants du bon fonctionnement du code source • Indiquent : – Des anomalies de fonctionnement sont survenues – Des erreurs sont survenues – Aucune anomalie ou erreur n'est survenue • (SimpleTest), PHPUnit, atoum
  2. 5.

    La couverture de code • Testons ce code source :

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

    Fail : Nœuds et chemins • Tests de AC, BD

    = 2 nœuds couverts = 100 % des nœuds couverts • Je n'ai en réalité couvert que 50 % des chemins possibles ! La couverture de code est totalement bidon
  4. 8.

    Fail : les tests vides • Les tests sont verts

    : class FooTest extends PHPUnit_Framework_TestCase { public function testFoo1() { $this->assertTrue(true); } }
  5. 9.

    Fail : le surmocking • Il est nécessaire de virtualiser

    certains morceaux de code pour isoler un test • Il est fréquent de virtualiser à l'excès – Les tests ne testent plus le code source, mais le code source virtuel
  6. 11.

    Le mutation testing • Injecter des bugs dans le code

    « créer des mutants » • Vérifier que les tests plantent « tuer les mutants »
  7. 12.

    Le mutation testing Introduction d'une mutation if($x === 1) {

    (…) } if($x !== 1) { (…) } Le test unitaire doit planter
  8. 13.

    En PHP • MutaTesting (https://github.com/Halleck45/MutaTesting) – Ne nécessite aucune configuration

    PHP particulière – PHPUnit, atoum... – A besoin de contributeurs :-)
  9. 14.

    Avantages • Pas besoin de coder quoi que ce soit

    • Efficace pour des indicateurs
  10. 16.