Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Mutation testing

Mutation testing

Un des moyens pour vérifier le bon fonctionnement d'un développement et assurer sa maintenabilité est l'écriture de tests unitaires sur une partie significative du code source. Cependant, l'écriture de tests en interne ou en externe coûte cher. Alors comment s'assurer de la qualité et de la pertinence de ces tests unitaires ? Nous allons découvrir les tests de mutation (Mutation Testing en anglais), la théorie, la mise en place sur un projet PHP, et un cas pratique d'utilisation (démo \o/).

Vidéo : https://www.youtube.com/watch?v=QkGnHwZz8h4

Présentation réalisée lors du meetup AFUP Aix-Marseille chez Allopneus le 13 juin 2018.

Romain Camp

June 13, 2018
Tweet

Other Decks in Programming

Transcript

  1. 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
  2. • 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
  3. • 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
  4. • 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
  5. • 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
  6. • 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
  7. • Remplacement + en – ; - en + ;

    * en / • true en false • && en || • > en >= • Boucle, incrément, ordre de tri, valeur de retour, nombre • … • Personnalisable ! MUTATION TESTING MUTATIONS 9
  8. • 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
  9. • 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
  10. • Un Phar à télécharger (méthode recommandée) • La clé

    publique associée pour validation • Commande self-update MUTATION TESTING INSTALLATION 12
  11. • infection.json[.dist] • Créé par Infection si inexistant • Contient,

    entre autres : • Chemins des sources • Fichiers logs • Chemin vers phpunit MUTATION TESTING CONFIGURATION 13
  12. • ./infection.phar • Exécute les tests • Crée les mutations

    • Collecte les résultats MUTATION TESTING UTILISATION 14
  13. • 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