Conférence de Sofia Lescano Carroll
Regarder la vidéo
Présentation de l’oratrice
Passionnée de mathématiques et de logique, elle est développeuse backend et fait partie de la communauté PHP depuis 2018.
Pourquoi écrire des tests ?
Pour la difficulté à connaître toute l’application. Les tests vont fonctionner comme documentation, il peuvent permettre de comprendre des flux utilisateurs et aider à prédire les erreurs (par exemple on travaille sur une partie de l’application et l’autre partie se retrouve en erreur car elle était connecté).
Pour vérifier le bon fonctionnement de l’application et pour éviter des régressions.
Les tests peuvent être automatisés. Cela apporte également une tranquillité lors du développement car les tests permettent de vérifier ce que l’on fait.
Si les tests sont bien écrits
Si les tests sont bien écrits et qu’il ne passe pas, il faut mettre à jour le test s’il y a eu des ajouts de code. Sinon, cela permet de détecter un problème.
Qu’est-ce qui ce passe si je ne peut pas faire confiance en mes tests ?
Un test peu fiable (ou flaky en anglais) est un test qui donne à la fois des résultats positifs et négatifs malgré aucune modification du code ou du test. Le résultat est donc non-déterministe et reproduire et corriger le cas d’erreur peut s’avérer très complexe à résoudre. Ce test peut passer 1 fois sur 2, 3 fois sur 4, 199 fois sur 200… C’est assez aléatoire.
Y a-t-il un vrai problème dans mon application ?
Parfois, plusieurs exécutions ne permettent toujours pas de conclure si le problème vient du cas de test ou du code testé.
Il faut aussi comprendre l’objectif du test et avoir le temps et la capacité à exécuter le test.
Impact des tests instables
S’il y a une base de code avec des tests instables, on n’a pas la certitude que l’application fonctionne, on perd du temps à réaliser les tests et les développeurs sont frustrés. A cause de ces tests instables, on n’arrive plus à détecter les vrai problèmes.
Un problème qui s’aggrave
Il est facile d’aggraver le problème en créant de nouveaux tests basés sur les anciens.
Principales causes de flaky test :
- Tests mal écrits (dates, règles métier, …)
- Temps d’attente dépassé
- Dépendances et problèmes d’ordre
- Dépendances externes
Comment s’attaquer à ce problème ?
Il s’agit à la fois d’un problème humain et d’un problème technique.
Avec une grande base de code et beaucoup de développeurs, cela va arriver tôt ou tard.
Pour lutter contre ça il faut :
- Comprendre les impacts
- Mesurer
- Améliorer les pratiques
- Avoir les bons outils
- Établir une stratégie
Il faut faire comprendre les impacts à la fois aux développeurs et au managers.
A l’échelle du développeur, c’est plus simple de rejouer le test et espérer qu’il passe. Mais il peut faire échouer chaque workflow en cours jusqu’à ce qu’il soit fixé (ou ignoré).
A l’échelle de l’entreprise, il y a une perte de temps et un coût humain et logiciel. Il s’agit d’un effort collectif, il faut allouer du temps pour les corriger.
Il est intéressant d’améliorer les pratiques de test en se formant, en partageant les erreurs rencontrées et en faisant relire les tests (pas seulement le code).
Avoir les bons outils
Il faut également avoir les bons outils et apprendre à les utiliser :
- CircleCI : Intégration et déploiement continu
- DataDog : Monitoring d’infrastructure et d’application
- Allure : Outil de reporting de tests d’automatisation
Ces types d’outils peuvent détecter les tests flaky.
Analyseurs statiques et processus
Il est possible également d’utiliser des analyseurs statiques (comme PHPStan). Ils permettent de trouver les erreurs dans le code. Il est possible d’implémenter ses propres règles dans ces outils.
Il est intéressant de définir un processus pour que les gens reportent les tests flaky, pour qu’ils ne les ignorent pas. Faire attention à la désactivation des tests et à la dette technique.
Défis et limites
Il faut prendre le contrôle de la situation au plus tôt car plus le problème avance, plus il est difficile de le remédier.
Même s’il existe des process, tous le monde ne suit pas les règles car il est plus simple de rejouer le test.
Les instabilités peuvent être compliqué à comprendre, peut-être que la réponse finalement est de supprimer le test ou de le tester autrement.