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