Pro Yearly is on sale from $80 to $50! »

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. Mutation Testing en PHP Pizza Party – Juin 2013

  2. Tester son code ?

  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
  4. Évaluer ses tests

  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'; } } }
  6. La couverture de code • 100 % de couverture :

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

    : class FooTest extends PHPUnit_Framework_TestCase { public function testFoo1() { $this->assertTrue(true); } }
  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
  10. Mutation testing

  11. Le mutation testing • Injecter des bugs dans le code

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

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

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

    • Efficace pour des indicateurs
  15. Inconvénients • Temps de test exponentiel • Faux positifs •

    Ne sert que d'indicateurs
  16. Questions