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

Ma stratégie de tests

Ma stratégie de tests

Alexandre Salomé

January 28, 2020
Tweet

More Decks by Alexandre Salomé

Other Decks in Programming

Transcript

  1. Ma stratégie de tests
    Alexandre Salomé - 2020

    View full-size slide

  2. Introduction

    View full-size slide

  3. Sécurité
    - Ne pas mettre en péril le projet
    - Être rassuré avant de déployer
    Vert ⇒ on peut mettre en production

    View full-size slide

  4. Performance
    - Déployer rapidement
    - Déployer souvent
    - Détecter les erreurs le plus vite possible
    - Plus c’est tard, plus c’est cher

    View full-size slide

  5. Qualité
    - Oser “aller à la masse dans le code”
    - Tests de qualité de code ⇒ bien, mais hors sujet

    View full-size slide

  6. Les types de tests

    View full-size slide

  7. Tests unitaires
    Tester un fragment de code isolé de tout contexte.

    View full-size slide

  8. Tests fonctionnels
    Vérifier le bon fonctionnement de l’application dans ses cas nominaux.

    View full-size slide

  9. Tests d’intégration
    Vérifier la bonne articulation des applications une fois intégrées.

    View full-size slide

  10. Tests manuels
    Tester ce qui n’est pas (encore?) automatisé

    View full-size slide

  11. En résumé
    - Tests manuels : si on a pas trouvé mieux
    - Tests d’intégration : s’assurer que les
    applications communiquent bien
    - Tests fonctionnels : s’assurer du
    fonctionnement de l’application
    - Tests unitaires : garantir l’exhaustivité des cas
    fonctionnels, unitairement

    View full-size slide

  12. Souvent l’inverse
    - Tests longs à exécuter
    - Code difficile à maintenir
    - Développement lent et coûteux

    View full-size slide

  13. Les dépendances

    View full-size slide

  14. Solution simple
    Application A
    Base de données
    Internet
    Utilisateur

    View full-size slide

  15. Solution simple
    Application A
    Base de données
    Internet
    Utilisateur

    View full-size slide

  16. Solution complexe
    Application A
    Base de données
    Service tiers
    Service tiers
    Application B
    Internet
    Utilisateur

    View full-size slide

  17. Solution complexe
    Application A
    Base de données
    Service tiers
    Service tiers
    Application B
    Internet
    Utilisateur

    View full-size slide

  18. Solution avec bouchons
    Application A
    Base de données
    Service tiers
    Service tiers
    Application B
    Internet
    Utilisateur

    View full-size slide

  19. Facteur à prendre en compte : coût / bénéfice / risque
    Intégrée et maîtrisée : base de données, moteur de recherche, cache
    - Pas recommandé de bouchonner
    Si externe
    - Bouchonnée pour les tests fonctionnels
    - Supprimer la dépendance (tester dans l’avion)
    - Permet de tester les cas où le service est KO
    Faut-il bouchonner ?

    View full-size slide

  20. Le mythe “iso-production”

    View full-size slide

  21. Les tests unitaires

    View full-size slide

  22. Check-list pour des TU réussis
    - Teste une pièce isolée du logiciel
    - Un code simple qui teste un code simple
    - WebTestCase n’est pas un test unitaire
    - Service assez linéaire, que des mocks
    - 30 lignes de préparation pour 1 test

    View full-size slide

  23. Code que je ne teste pas unitairement

    View full-size slide

  24. Les tests fonctionnels

    View full-size slide

  25. Mon outil fétiche : Behat

    View full-size slide

  26. Données de production ⇒ problèmes assurés (anonymisation, maintenance)
    Fixtures ⇒ meilleure idée
    Fixtures et reset entre chaque test ⇒ début des ennuis (10sx100t = 16m)
    Données en pré-requis ⇒ mon état actuel
    - Le test est auto-suffisant, peut se lancer à tout moment
    - Permet de détecter d’autres problèmes (parce que des données “traînent”)
    Les données de test (aka fixtures)

    View full-size slide

  27. Des tests fonctionnels le plus simple possible

    View full-size slide

  28. Les tests d’intégration

    View full-size slide

  29. Tests d’intégration ⇒ métier

    View full-size slide

  30. Tests de performance

    View full-size slide

  31. Tests d’intégration ⇒ charge
    Vérifier, une fois déployé, que la performance est correcte

    View full-size slide

  32. Expériences “atypiques”

    View full-size slide

  33. Tester l’envoi de mails
    https://github.com/alexandresalome/mailcatcher

    View full-size slide

  34. Tester Ansible

    View full-size slide

  35. Librairie WebDriver
    - Extension Behat similaire à Mink
    - Quelques Bonus
    - Retry
    - Selecteurs faciles
    - Capture d’écran en cas d’erreur ⇒ JournalExtension
    - Abandonné car mieux depuis ⇒ Cypress

    View full-size slide

  36. Behat Launcher

    View full-size slide

  37. Cas pratique

    View full-size slide

  38. Notre cas pratique
    Un formulaire en ligne pour savoir si on est un bon testeur via nos dépôts Github
    Formule : pour chaque dépôt, une note sur 10 :
    - Si fichier .travis.yml présent ⇒ 2 points
    - Ratio fichiers de test / fichiers dans le dépôt ⇒ 8 points

    View full-size slide

  39. Expérience utilisateur
    - Formulaire Web pour mettre son identifiant github
    - Redirection vers une page d’attente
    - En arrière plan, un traitement va analyser le Github et envoyer le résultat
    - Affichage de la page de résultat

    View full-size slide

  40. Le code framework
    - 1 table “request” avec UUID + username + note
    - 3 contrôleurs
    - App\Controller\RequestController
    - App\Controller\RunningController
    - App\Controller\ResultController
    - 1 commande “request-analyze” pour traiter les demandes

    View full-size slide

  41. Le code métier
    - GithubAnalyzer
    - RepositoryFetcher(= interface)
    - GithubRepositoryFetcher
    - StaticRepositoryFetcher

    View full-size slide

  42. Le code métier

    View full-size slide

  43. Le code métier

    View full-size slide

  44. Le code métier

    View full-size slide

  45. Le code métier

    View full-size slide

  46. Tests unitaires
    - GithubAnalyzerTest, via le StaticRepositoryFetcher
    - Aucun dépôt
    - 1 seul dépôt sans .travis.yml
    - .travis.yml présent mais pas de tests
    - 200 tests, 1 classe
    - 1 test, 200 classes
    - BONUS - GithubRepositoryFetcher, via des mocks
    - Cas utilisateur existant / non existant
    - Cas erreur réseau / erreur 500
    - Cas nominal

    View full-size slide

  47. Tests fonctionnels
    2 solutions possibles :
    - StaticRepositoryFetcher déclaré pour l’environnement de test
    - GithubRepositoryFetcher avec des bouchons Wiremock + dépôts Git
    Ma préférence ⇒ StaticRepositoryFetcher, car plus simple

    View full-size slide

  48. Tests fonctionnels

    View full-size slide

  49. Tests fonctionnels

    View full-size slide

  50. Tests d’intégration
    - Un environnement de pré-production
    - Je teste avec Cypress que “ça marche” pour le cas nominal
    - Visual testing

    View full-size slide

  51. Tests manuels
    - Pour l’instant, aucun

    View full-size slide

  52. Résultat
    - Tests continus
    - Tests unitaires
    - Tests fonctionnels
    - Déploiement continu
    - Pré-production
    - Tests d’intégration
    - Production
    - Tests d’intégration

    View full-size slide

  53. Mes conseils

    View full-size slide

  54. Le premier test
    - Écrivez un premier test
    - Ce que vous faites à la main plusieurs fois, automatisez le
    Des tests isolés
    - N’importe quel test dans n’importe quel ordre ⇒ parallélisation
    - Ne pas tester ses dépendances (Doctrine, Postgres). Faites confiance

    View full-size slide

  55. 4 couches, 4 rôles
    - Les tests unitaires pour tester tous les cas particuliers (OK/KO1/KO2/KO...)
    - Les tests fonctionnels pour tester les cas nominaux (OK/KO)
    - Les tests d’intégration pour tester que ça communique (OK)
    - Les tests manuels en dernier recours

    View full-size slide

  56. Ne négociez pas les tests

    View full-size slide

  57. Automatisez ce que vous voulez garantir
    “Pas de tests,
    pas de garantie”

    View full-size slide

  58. Et voilà !
    Remerciements
    La coopérative des Tilleuls, bravo les bureaux
    et merci l’accueil
    Cécile Hamerel, meilleure organisatrice jamais
    Et à vous bien sûr (coeur avec les doigts)
    Contenu de la présentation
    - Icônes de Freepik de Flaticon
    - Code rendu avec carbon.now.sh

    View full-size slide