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 Slide

  2. Tester son code ?

    View 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 Slide

  4. Évaluer ses tests

    View 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 Slide

  6. La couverture de code

    100 % de couverture : cool !

    View 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 Slide

  8. Fail : les tests vides

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

    View 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 Slide

  10. Mutation testing

    View 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 Slide

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

    View 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 Slide

  14. Avantages

    Pas besoin de coder quoi que ce soit

    Efficace pour des indicateurs

    View Slide

  15. Inconvénients

    Temps de test exponentiel

    Faux positifs

    Ne sert que d'indicateurs

    View Slide

  16. Questions

    View Slide