Slide 1

Slide 1 text

PRÉSENTATION MEETUP MUTATION TESTING

Slide 2

Slide 2 text

Romain Camp Responsable architecture logicielle 6 ans chez Allopneus • Équipes internes et externes • Automatisation des contrôles qualités MUTATION TESTING QUI SUIS-JE ? 2

Slide 3

Slide 3 text

• Tester chaque élément indépendamment • Valider un développement • Détecter une régression • Intégration continue • Complément tests fonctionnels MUTATION TESTING TESTS UNITAIRES 3

Slide 4

Slide 4 text

• Coûte cher ! • Interne : Du temps • Externe : De l’argent • +30% • Contrôler la qualité • Vérifier la pertinence • Solutions ? • Couverture (code coverage) • Relecture MUTATION TESTING TESTS UNITAIRES 4

Slide 5

Slide 5 text

• Introduire des modifications dans le code • Vérifier l’incidence sur le résultat des tests • Tester la pertinence des tests • Vérifier la qualité MUTATION TESTING TESTS DE MUTATION 5

Slide 6

Slide 6 text

• Mutant : une altération du code • Mutations (mutators) : les différentes altérations possibles • Tué/Capturé (killed/captured) : un mutant qui a été découvert car le résultat des tests a changé (+) • Échappé (escaped) : un mutant qui n’a pas été découvert car aucune incidence sur le résultat (-) MUTATION TESTING VOCABULAIRE 6

Slide 7

Slide 7 text

• Mutation Score Indicator (MSI) • Le ratio nombre de mutants détectés / nombre de mutations générées • Ex. MSI 60% = 60% des mutants tués, 40% des mutants échappés • Mutation Code Coverage • Covered Code Mutation Score Indicator • Ignore le code non couvert par les tests • Mesure l’efficacité des tests existants MUTATION TESTING VOCABULAIRE 7

Slide 8

Slide 8 text

MUTATION TESTING MUTANTS 8

Slide 9

Slide 9 text

• Remplacement + en – ; - en + ; * en / • true en false • && en || • > en >= • Boucle, incrément, ordre de tri, valeur de retour, nombre • … • Personnalisable ! MUTATION TESTING MUTATIONS 9

Slide 10

Slide 10 text

• Seule librairie disponible pour PHP ? • Basé sur AST • Inspiré par Humbug • https://github.com/infection/infection • PHP 7+ • PHPUnit, PhpSpec • xDebug, phpdbg MUTATION TESTING INFECTION 10

Slide 11

Slide 11 text

• Abstract Syntax Tree • Depuis PHP 7.0 • Facilite l’analyse et la compilation • Accélère l’exécution mais nécessite plus de mémoire • Facilite les mutations : modification d’un nœud MUTATION TESTING AST 11

Slide 12

Slide 12 text

• Un Phar à télécharger (méthode recommandée) • La clé publique associée pour validation • Commande self-update MUTATION TESTING INSTALLATION 12

Slide 13

Slide 13 text

• infection.json[.dist] • Créé par Infection si inexistant • Contient, entre autres : • Chemins des sources • Fichiers logs • Chemin vers phpunit MUTATION TESTING CONFIGURATION 13

Slide 14

Slide 14 text

• ./infection.phar • Exécute les tests • Crée les mutations • Collecte les résultats MUTATION TESTING UTILISATION 14

Slide 15

Slide 15 text

MUTATION TESTING DÉMO 15

Slide 16

Slide 16 text

• Facile à installer • Utile sur le code métier • Des faux positifs • Rallonge le temps d’exécution des tests • Permet d’améliorer les tests MUTATION TESTING CONCLUSION 16

Slide 17

Slide 17 text

• Options CLI • Custom mutator • Branchement CI MUTATION TESTING ALLER PLUS LOIN 17

Slide 18

Slide 18 text

QUESTIONS ?