Slides de ma conférence donnée a l'AFUP Day 2020 Nantes
https://joind.in/event/afup-day-2020-nantes/vos-tests-sont-ils-de-qualite--decouvrez-le-avec-le-mutation-testing
3. @deliacademynantes.delia.tech
Sondage
01. Je compile et fais tourner mon code
avant livraison ?
Et je les améliore régulièrement
02. J'écris des tests automatisés ?
nombre de tests ?
nombre d'assertions ?
code coverage ?
03. Je regarde les métriques ?
4. nantes.delia.tech
Si les tests vérifient
la qualité du code …
… qui vérifie
la qualité des tests ?
“ “
Question entendue dans la tête de…
Frank – Développeur
Anne – Lead Développeuse
Pierre – Product Owner
Alice – MOA chez Client SARL
5. nantes.delia.tech
Oui et c’est facile à utiliser
Renseigne sur le nombre de
comparaisons effectuées par vos tests
C’est bien ?
Facile de se tromper
Encore faut-il comparer les bonnes
choses de la bonne manière
Plutôt (trop?) facile à contourner
Compare la réalité avec la théorie d’une manière spécifique
Assertion
Définitions
Mais attention …
6. nantes.delia.tech
Oui, et c’est facile à comprendre
Renseigne sur l'entrée de votre système
utilisée par vos test
Révèle les lignes de code non executées
C’est bien ?
Evitez le culte du 100% coverage
Ne renseigne pas sur la sortie de votre système…
… ni sur la qualité de vos tests
Du code executé n’est pas du code testé
Pourcentage de lignes de code qui ont été executées pendant les tests
Code coverage
Définitions
Mais attention …
7. nantes.delia.tech
Oui, il faut savoir rester humble
L’erreur est humaine, et on apprend de
nos erreurs
C’est bien ?
Aux autres #vivreensemble
Sentiment qui peut être blesser par la pratique du Mutation Testing
Confiance en soi
Définitions
Mais attention …
8. nantes.delia.tech
Ne faites jamais confiance à
un test que vous n'avez pas vu
échouer…
Mais ça teste rien ce truc … (╯°□°)╯︵ ┻━┻
Un.e développeur.se, quelque part, dans quelques secondes
“ “
9. @deliacademynantes.delia.tech
MutationTesting
Ingrédients
• Du code
• Des tests
Préchauffer vos tests à 180°C pour vérifier qu’ils passent
1. Modifier le code original à 1 endroit (et 1 seul)
Félicitations, vous avez crée un Mutant
2. Executer les tests jusqu’au 1er échec
• Echec: Bonne nouvelle votre Mutant a été tué
• Succes: Fuyez, votre Mutant s’est échappé
Répéter avec une nouvelle modification
Recette
originally proposed by Richard Lipton
as a student in 1971
10. nantes.delia.tech
Mutation Testing : Mutators
Name Original Mutated
Visibility public function ... protected function ..
Plus + -
Minus - +
IntegerNegation return (Any Integer); return -(Any Integer);
Conditional < <=
CloneRemoval clone (new stdClass()) new stdClass()
ArrayItem [‘a’ => $b->bar] [‘a’ > $b->bar]
TrueValue true false
Break_ break; continue;
https://infection.github.io/guide/mutators.html
13. nantes.delia.tech
En résumé
Testing Mutation Testing
Valide la qualité Du code Des tests
Exécution Unique Répétée
Cible Tous les tests passent Au moins 1 test échoue
Métriques Coverage, Assertions Mutation Score Indicator (MSI)
14. nantes.delia.tech
Conclusion
Le Mutation Testing est un outil
• Complémentaire
• Qui fourni une métrique convainquante sur la qualité des tests
• Très facile à mettre en place
• Intéressant pour plusieurs profils
• technique: usage régulier ou lors de la reprise d'un projet
• fonctionnel: évaluer la pertinence de tests produits par vos équipes, votre fournisseur, …
Le principal coût de cet outil est le temps qu’il requiert pour s’exécuter.