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

    View full-size slide

  2. Tester son code ?

    View full-size slide

  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

    View full-size slide

  4. Évaluer ses tests

    View full-size slide

  5. La couverture de code

    Testons ce code source :
    class Foo {
    public function bar($x, $y) {
    if($x == 1) {
    echo 'A';
    } else {
    echo 'B';
    }
    if($y == 1) {
    echo 'C';
    } else {
    echo 'D';
    }
    }
    }

    View full-size slide

  6. La couverture de code

    100 % de couverture : cool !

    View full-size slide

  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

    View full-size slide

  8. Fail : les tests vides

    Les tests sont verts :
    class FooTest extends PHPUnit_Framework_TestCase
    {
    public function testFoo1()
    {
    $this->assertTrue(true);
    }
    }

    View full-size slide

  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

    View full-size slide

  10. Mutation testing

    View full-size slide

  11. Le mutation testing

    Injecter des bugs dans le code
    « créer des mutants »

    Vérifier que les tests plantent
    « tuer les mutants »

    View full-size slide

  12. Le mutation testing
    Introduction d'une mutation
    if($x === 1) { (…) }
    if($x !== 1) { (…) }
    Le test unitaire doit planter

    View full-size slide

  13. En PHP

    MutaTesting (https://github.com/Halleck45/MutaTesting)
    – Ne nécessite aucune configuration PHP particulière
    – PHPUnit, atoum...
    – A besoin de contributeurs :-)

    View full-size slide

  14. Avantages

    Pas besoin de coder quoi que ce soit

    Efficace pour des indicateurs

    View full-size slide

  15. Inconvénients

    Temps de test exponentiel

    Faux positifs

    Ne sert que d'indicateurs

    View full-size slide