Slide 1

Slide 1 text

Mutation Testing en PHP Pizza Party – Juin 2013

Slide 2

Slide 2 text

Tester son code ?

Slide 3

Slide 3 text

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

Slide 4

Slide 4 text

Évaluer ses tests

Slide 5

Slide 5 text

La couverture de code ● Testons ce code source :

Slide 6

Slide 6 text

La couverture de code ● 100 % de couverture : cool !

Slide 7

Slide 7 text

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

Slide 8

Slide 8 text

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

Slide 9

Slide 9 text

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

Slide 10

Slide 10 text

Mutation testing

Slide 11

Slide 11 text

Le mutation testing ● Injecter des bugs dans le code « créer des mutants » ● Vérifier que les tests plantent « tuer les mutants »

Slide 12

Slide 12 text

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

Slide 13

Slide 13 text

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

Slide 14

Slide 14 text

Avantages ● Pas besoin de coder quoi que ce soit ● Efficace pour des indicateurs

Slide 15

Slide 15 text

Inconvénients ● Temps de test exponentiel ● Faux positifs ● Ne sert que d'indicateurs

Slide 16

Slide 16 text

Questions