Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Le Mutation Testing

Le Mutation Testing

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

Jean-François Lépine

June 05, 2013
Tweet

More Decks by Jean-François Lépine

Other Decks in Programming

Transcript

  1. 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. 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. 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. Fail : les tests vides • Les tests sont verts

    : class FooTest extends PHPUnit_Framework_TestCase { public function testFoo1() { $this->assertTrue(true); } }
  5. 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. Le mutation testing • Injecter des bugs dans le code

    « créer des mutants » • Vérifier que les tests plantent « tuer les mutants »
  7. Le mutation testing Introduction d'une mutation if($x === 1) {

    (…) } if($x !== 1) { (…) } Le test unitaire doit planter
  8. En PHP • MutaTesting (https://github.com/Halleck45/MutaTesting) – Ne nécessite aucune configuration

    PHP particulière – PHPUnit, atoum... – A besoin de contributeurs :-)
  9. Avantages • Pas besoin de coder quoi que ce soit

    • Efficace pour des indicateurs