Amélioration de la fiabilité et de l'efficacité des tests dans les pipelines CI/CD
Un test irrégulier est un test qui réussit parfois et échoue parfois sans aucune modification du code testé. Ces tests peuvent être particulièrement gênants car ils compromettent la fiabilité de la suite de tests.
Considérez que votre pipeline CI/CD est configuré de telle sorte qu'une fois la build réussie, uniquement si votre code réussit un ensemble de cas de test prédéfinis.
Dans une situation idéale, vous devez avoir défini la priorité pour chaque scénario de test et supposer que la dernière base de code réussit au moins un certain pourcentage de cas.
Mais en raison des cas de test instables, qui continuent d'échouer, car ils peuvent être obsolètes ou le cas d'utilisation est modifié, votre scénario de test échoue et la fusion de la demande d'extraction devient un cauchemar. Au lieu de réduire le pourcentage de cas réussis, nous devrions envisager de réorganiser ces cas de test.
Résultats de test imprévisibles : les tests irréguliers provoquent une imprévisibilité en réussissant parfois et en échouant parfois, même si le code n'a pas changé. Ce caractère aléatoire peut rendre difficile la fiabilité des résultats des tests.
Débogage complexe : la recherche de la cause première d'un test irrégulier peut être difficile, car le problème peut ne pas se reproduire de manière cohérente, ce qui le rend difficile à identifier et à résoudre.
Perte de temps et de ressources : les développeurs peuvent passer beaucoup de temps à réexécuter des tests, à enquêter sur les faux positifs et à déboguer des problèmes qui ne sont pas réellement liés aux fonctionnalités du code.
Impact sur l'intégration continue (CI) : des tests irréguliers peuvent perturber les pipelines d'intégration continue, entraînant des échecs de construction inutiles et réduisant l'efficacité globale des processus de tests automatisés.
Fausse confiance ou méfiance : les tests instables peuvent soit créer une fausse confiance lorsqu'ils réussissent sporadiquement, soit provoquer une méfiance dans la suite de tests lorsqu'ils échouent de manière imprévisible, ce qui rend plus difficile la confiance dans les résultats des tests.
Meilleures pratiques pour atténuer : pour réduire les tests irréguliers, les développeurs peuvent se moquer des dépendances externes, utiliser des données déterministes, garantir que les tests sont isolés et éviter de se fier au timing ou à l'ordre d'exécution.
Détection automatisée : la mise en œuvre d'outils automatisés qui détectent les tests irréguliers en exécutant des tests plusieurs fois et en comparant les résultats peut aider à identifier et à résoudre les irrégularités dès le début du cycle de développement.
Isolement des tests : garantir que chaque test s'exécute dans un isolement complet, sans dépendre d'états partagés ou de facteurs externes, peut réduire considérablement les risques de défaillance.
Maintenance régulière : réviser et refactoriser régulièrement la suite de tests pour supprimer ou corriger les tests irréguliers permet de maintenir l'intégrité et la fiabilité du processus de test au fil du temps.
Jenkins, CircleCI, Travis CI : des outils d'intégration continue/déploiement continu (CI/CD) comme ceux-ci peuvent être configurés pour réexécuter les tests qui échouent, aidant ainsi à identifier les tests instables. Ils disposent souvent de plugins ou d'un support intégré pour gérer les tests irréguliers.
Docker : les entreprises utilisent Docker pour créer des environnements isolés pour exécuter des tests. Cela garantit que les tests bénéficient d'un environnement cohérent et propre à chaque fois qu'ils sont exécutés, réduisant ainsi la desquamation causée par les différences environnementales.
Machines virtuelles (VM) : à l'instar de Docker, les machines virtuelles peuvent être utilisées pour garantir que les tests s'exécutent dans un environnement contrôlé et isolé, minimisant ainsi les interférences d'autres processus ou dépendances.
Analyse statistique à l'aide de l'apprentissage automatique : certains systèmes avancés utilisent l'apprentissage automatique pour analyser les résultats des tests et identifier les modèles indiquant des tests irréguliers. Cela peut aider à identifier et à traiter de manière proactive les flocons.
Politiques de révision de code et crochets de contrôle de version : la mise en œuvre de politiques de révision de code strictes qui incluent des vérifications des sources potentielles de failles peut empêcher l'introduction de tests irréguliers.
L'utilisation de hooks de pré-validation ou d'autres mécanismes de contrôle de version pour exécuter des tests de manière contrôlée avant que les modifications ne soient fusionnées peut détecter rapidement les tests irréguliers.
Réexécuter les tests ayant échoué : Google a une politique selon laquelle il réexécute les tests qui ne parviennent pas à déterminer si l'échec est cohérent. Cela aide à identifier les tests instables. Ils disposent également d'outils et d'une infrastructure internes pour gérer et atténuer les défauts dans leurs nombreuses suites de tests.
Isolement des tests : Google souligne l'importance de l'isolement des tests pour garantir que les tests n'interfèrent pas les uns avec les autres, ce qui est essentiel pour réduire la fragilité.
Analyses de tests et rapports : Microsoft utilise des outils d'analyse et de reporting de tests détaillés pour suivre les tests instables. En analysant les résultats des tests au fil du temps, ils peuvent identifier des modèles et identifier les tests instables.
Mise en quarantaine des tests irréguliers : Microsoft met parfois en quarantaine les tests irréguliers, les séparant de la suite de tests principale jusqu'à ce qu'ils soient corrigés pour éviter qu'ils n'affectent les résultats globaux des tests.
3. Facebook:
Detox : Facebook a développé une bibliothèque open source appelée Detox pour tester ses applications mobiles. Detox garantit que les tests sont exécutés dans un état et un environnement cohérents, réduisant ainsi les défauts causés par les opérations asynchrones et autres problèmes de synchronisation.
Tests continus : Facebook intègre des tests continus dans son processus de développement, en utilisant des outils pour réexécuter automatiquement les tests et identifier les comportements instables au début du cycle de développement.
4. Netflix :
Ingénierie du chaos : Netflix utilise des pratiques d'ingénierie du chaos pour tester la résilience de ses systèmes. En introduisant intentionnellement des pannes et des perturbations, ils peuvent identifier les tests instables et améliorer la robustesse de leurs tests et systèmes.
Nouvelles tentatives automatisées : Netflix utilise des mécanismes de nouvelles tentatives automatisées au sein de ses pipelines CI/CD pour réexécuter les tests qui échouent par intermittence, aidant ainsi à identifier et à gérer les tests instables.
5. LinkedIn :
Outils de gestion des tests instables : LinkedIn a développé des outils spécifiquement pour la gestion des tests instables. Ces outils permettent de suivre les tests instables, d'offrir une visibilité sur leur occurrence et de prioriser leur résolution.
Standardisation de l'environnement de test : LinkedIn se concentre sur la standardisation des environnements de test pour réduire la variabilité et garantir que les tests s'exécutent dans des conditions cohérentes, ce qui contribue à atténuer les irrégularités.
Apoorv Tomar est développeur de logiciels et blogue sur **Mindroast. Vous pouvez vous connecter sur les réseaux sociaux. Abonnez-vous à la **newsletter pour recevoir les derniers contenus sélectionnés.
Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.
Copyright© 2022 湘ICP备2022001581号-3