Pourquoi Automatiser les Tests de Logiciels ?
De notre point de vue
Comment rédiger un article à propos de l’automatisation de tests logiciels et notre passion à ce sujet à l’ère de ChatGPT ? Est-ce qu’un tel article a toujours un sens ? Et si oui, alors sous quelle forme ?
Après mûre réflexion, nous avons choisis d’utiliser ChatGPT comme support lors de la rédaction de notre article, lequel est donc composé de deux parties distinctes :
- Partie 1 : Notre ressenti et nos expériences par rapport à l’automatisation de tests
- Partie 2 : Une sélection de considérations générales sur le thème de l’automatisation de tests qui nous semblent importantes. Elles sont décrites sous la forme d’une checklist afin d’être le plus concis possible.
Dans la première partie, nous apportons un retour d’expériences et de ressentis, qui ne peuvent – à notre avis – pas être rapportés par un outil comme ChatGPT.
La seconde partie est quant à elle relativement générique ; elle se veut plus théorique et informative.
Partie 1 – Notre retour d’expérience
Chez wega, un grand nombre d’activités gravitent autour de la validation de logiciels dans le but d’obtenir les preuves formelles du bon fonctionnement des applications utilisées, notamment dans des environnements pharmaceutiques réglementés.
L’une de ces activités consiste à effectuer manuellement des scripts de test, qui sont des pages d’instructions devant être exécutées très précisément, étape par étape.
- Lorsque l’un d’entre nous effectue ce genre de tâche pour la première fois, il en ressort généralement avec des pensées plutôt mitigées :
- Waouw, ce job me demande vraiment toute ma concentration !
- Oh non, je viens de rater l’étape 9…
- Je m’ennuie ; comment cela est-il possible ?! C'est un défi, cela demande une grande concentration, et c'est excitant de découvrir cette application après tout. Mais malgré cela, cette tâche est vraiment fatigante. J'ai l'impression d'être un robot...
Et voilà le mot magique : « Robot » ! Alors automatisons !
Penser à ce qui peut être automatisé ou non, et où les machines peuvent être meilleures que nous s’est révélé être une façon de tester nouvelle et fascinante. Nous avons également commencé à comprendre la différence entre tester et contrôler, comme décrit par exemple sur tutorialspoint.
Tester, en opposition à contrôler, implique d’explorer le système afin d’évaluer s’il se comporte de la façon souhaitée ; si les utilisateurs se sentent à l’aise avec l’outil et que ce dernier leur apporte de la plus-value dans l’exécution de leur tâches quotidiennes, si de potentielles erreurs humaines dans la manipulation du système sont correctement gérées, si la qualité du système est conforme aux attentes, si l'aspect et la prise en main sont attrayants pour l’utilisateur pour, en fin de compte, fournir un retour d’expérience global sur le système testé. Tester est un processus créatif et exploratoire qui requiert du jugement, de l'expérience ainsi que des compétences humaines. Pour l’instant, cela ne peut être automatisé.
En revanche, contrôler consiste à vérifier qu’un système ou l’un de ses composants satisfasse un ensemble défini d’exigences ou de spécifications – dans notre cas, les exigences minimales. Les scripts sont utilisés pour comparer les résultats réels d'un test avec les résultats attendus afin de déterminer si le système fonctionne correctement. C’est donc un processus plutôt structuré et procédural, qui peut par conséquence être exécuté à l'aide d'un outil d'automatisation des tests.
Mais même si une description étape par étape précise dans un script de test peut être automatisée selon cette définition, cela fait-il vraiment du sens ?
Comme souvent, la réponse est : cela dépend – et c'est vrai, cela dépend des objectifs que vous souhaitez atteindre via l’automatisation.
Jusqu'à présent, nous avons fait l'expérience de trois objectifs différents qui pourraient être atteints :
- La réduction des efforts et des coûts de la phase de test tout en augmentant la fiabilité lorsque le même script de test doit être exécuté de manière répétée, par exemple lors de tests de régression.
- La réduction du temps d'exécution des tests peut également être intéressante. Prenons l’exemple d’une nouvelle fonctionnalité qui vient d’être mise en place sur un logiciel et doit être testée rapidement, dans ce cas, avoir un script de tests automatisés prêt à l’emploi permet de réduire considérablement le temps d'exécution des tests par rapport à une exécution manuelle.
- Augmenter la fiabilité et la satisfaction des utilisateurs en mettant en place un système de surveillance. La digitalisation des sciences de la vie conduit à la création d'écosystèmes d'applications qui doivent communiquer plus ou moins en temps réel entre elles. Mais lorsqu'il s'agit d'applications vendues en tant que SaaS (Software as a Service, ou en français : logiciel en tant que service), il devient plus difficile de gérer les mises à jour et leur impact sur l'ensemble de l'écosystème. Si l'on tient compte du fait que des activités informatiques, telles que le déploiement de correctifs ou les opérations de maintenance, peuvent avoir lieu en dehors des heures de bureau, cela représente un grand nombre de facteurs sur lesquels nous n'avons aucun contrôle, mais qui peuvent entraîner l'arrêt complet de processus opérationnels quotidiens cruciaux. Dans un tel cas, la valeur ajoutée de l'automatisation des tests nous semble énorme : il y a certes un investissement initial plus important pour développer les scripts de test qui permettront de couvrir tous les processus cruciaux, mais une fois que cela est en place, rien ne vous empêche de programmer l'exécution de ces tests tous les week-ends, voir même toutes les nuits ! Vous pouvez programmer votre outil pour qu'il vous envoie une notification en cas de détection d'un défaut, ce qui vous permet d'agir en amont ; il est alors possible de résoudre le problème avant même que les utilisateurs ne s'en rendent compte ou, dans le pire des cas, de les avertir que le problème est connu et en cours de traitement, évitant ainsi un grand nombre de demandes de support.
Pour résumer, nous aimerions souligner quelques-unes des expériences que nous avons faites :
- Dès l'écriture des scripts de tests automatisés, il est possible de tester le système de manière très précise. Le script doit être défini dans ses moindres détails, et il n'est pas possible de le décrire de manière plus ou moins précise, comme c'est le cas pour les scripts d'exécution manuelle.
- Les erreurs dans le script de test sont immédiatement détectées : comme l'exécution est très rapide, le script peut être exécuté à plusieurs reprises pour vérifier sa qualité et sa robustesse. En comparaison, les erreurs dans le script pour l'exécution manuelle ne sont détectées que lors des dry runs, qui sont effectués par un testeur parcourant chaque étape et vérifiant qu'elle soit décrite de manière compréhensible et non ambiguë pour l’être humain.
- Et le dernier point, mais non des moindre, est que le développement de tests automatisés est amusant ! En tant que testeur ayant déjà passé des heures à exécuter manuellement des scripts de test, pouvoir observer les déplacements et les clics programmés du curseur ou encore voir une page de formulaire se remplir « toute seule » est une satisfaction toute particulière.
Partie 2 - Considérations générales sur l’automatisation des tests
Introduction
Dans le cadre du développement de logiciels, la phase de test est une étape essentielle qui permet de s’assurer que le logiciel répond bien aux exigences souhaitées et fonctionne comme prévu. Les tests manuels peuvent être longs, sujets aux erreurs et inefficaces, en particulier lorsqu'il s'agit de tester des systèmes logiciels complexes. L'automatisation des tests est donc devenue de plus en plus importante dans le développement des logiciels modernes.
L'automatisation implique l'utilisation d'outils logiciels pour exécuter automatiquement les tests, comparer les résultats réels aux résultats attendus et générer des rapports de résultats détaillés. L'objectif est d'accélérer les tests, d'améliorer leur précision et de réduire le risque d'erreur humaine. L'automatisation peut être appliquée à différents types de tests, notamment les tests unitaires, les tests d'intégration, les tests système, les tests d'interface utilisateur et les tests de régression.
Cela ne représente cependant pas une solution universelle et nécessite une planification et une exécution minutieuses pour être efficace. Il est important d'identifier les bons tests à automatiser, de s'assurer que le cadre d'automatisation des tests est robuste et facile à maintenir, et de surveiller et mettre à jour les tests en permanence pour suivre le rythme des changements dans le logiciel. Il est également important de trouver un équilibre entre les tests automatisés et les tests manuels, car certains scénarios peuvent être difficiles ou peu pratiques à automatiser.
Avantages et inconvénients des tests logiciels automatisés de l'interface utilisateur
L'automatisation peut présenter plusieurs avantages, notamment :
- Efficacité accrue : les tests automatisés peuvent être exécutés plus rapidement et de manière plus cohérente que les tests manuels, ce qui permet de terminer la phase de test de façon à la fois plus rapide et plus efficace.
- Précision accrue : l’automatisation permet d’éliminer la plupart des erreurs humaines et de fournir ainsi des résultats plus précis que lors d’une exécution manuelle.
- Meilleure couverture des tests : les tests automatisés peuvent couvrir davantage de scénarios que les tests manuels, assurant alors que toutes les parties du logiciel sont testées de manière approfondie.
- Réduction des coûts : l’automatisation peut réduire les coûts, en particulier dans le cas des tests de régression car le temps nécessaire à l'exécution est considérablement réduit.
- Mise sur le marché plus rapide : l'automatisation peut contribuer à accélérer le processus de développement en identifiant rapidement les bugs et les problèmes qui doivent être corrigés.
Si les avantages de l’automatisation sont nombreux, il convient également de tenir compte de certains inconvénients. Voici quelques points importants sur lesquels réfléchir avant de se lancer :
- Investissement initial élevé : que ce soit en termes de temps, de ressources ou d'expertise, l’investissement initial est plus élevé que pour effectuer des tests de façon manuelle. En outre, des licences ou des redevances peuvent être nécessaires en fonction de l’outil d’automatisation sélectionné. Cela peut constituer un obstacle pour les petites équipes ou les organisations disposant de ressources limitées.
- Portée limitée : les tests automatisés ne peuvent tester que ce pour quoi ils sont programmés, ce qui peut ne pas couvrir tous les scénarios possibles ou les cas limites. Cela signifie que des tests manuels peuvent encore être nécessaires pour assurer une couverture complète.
- Coûts de maintenance : les scripts automatisés nécessitent une maintenance permanente pour garantir qu'ils continuent à fonctionner correctement au fur et à mesure que le logiciel évolue. Cela peut prendre du temps et avoir un certain coût.
- Faux positifs : les tests automatisés peuvent parfois produire des faux positifs, c'est-à-dire que le résultat d'un test indique un problème qui, en réalité, n'existe pas, ce qui peut entraîner une perte de temps et de ressources dans l'investigation de problèmes inexistants.
- Manque de vision humaine : l’automatisation des scripts ne peut pas remplacer la perspicacité et la créativité humaines, qui sont parfois nécessaires pour identifier des problèmes subtils ou complexes que les tests automatisés risquent de ne pas détecter.
Dans l'ensemble, l'automatisation des tests de logiciels peut apporter des avantages significatifs en améliorant l'efficacité, la précision et la couverture des tests tout en faisant des économies financières sur le long terme et en diminuant les délais de mise sur le marché.
Il est néanmoins important de prendre en compte les inconvénients potentiels et de peser les pours et les contres avant de se décider ou non à automatiser.
Considérations sur l'élaboration d'une suite de tests automatisés
Lors du développement d'une suite de tests, il y a plusieurs considérations importantes à garder à l'esprit pour s'assurer efficience et efficacité. Voici quelques facteurs clés à prendre en compte et les problèmes potentiels à éviter :
- ouverture des tests : il est nécessaire de s’assurer que la suite de tests couvre les fonctionnalités critiques du système. Omettre de couvrir des scénarios importants peut conduire à des défauts manqués, tandis que sur-tester peut conduire à des tests inefficaces.
- Environnement de test : l'environnement de test se doit de correspondre étroitement à l'environnement de production, y compris concernant les configurations matérielles, logicielles et réseau. Des disparités peuvent conduire à des résultats de test erronés ou à des défauts manqués.
- Maintenance : il est particulièrement important de veiller à ce que les tests développés soient maintenables et puissent évoluer avec le logiciel. Les modifications apportées au système ou aux exigences doivent être reflétées dans la suite de tests automatisés, et les scénarios obsolètes doivent être supprimés.
- Rapports : un grand avantage de l’automatisation des tests réside dans la production automatique de rapports. En s’assurant que la suite de tests fournit des rapports clairs et exploitables, incluant les résultats des tests, les logs et les captures d'écran, l’efficience sera nettement maximisée. Des rapports de mauvaise qualité peuvent rendre difficile l'identification et le diagnostic des défauts.
- Exécution : la suite de tests doit pouvoir être exécutée de manière fiable et efficace, en minimisant autant que possible les interventions manuelles. Des tests peu fiables ou inefficaces peuvent entraîner une perte de temps et de ressources.
- Framework de test : il est également important de s'assurer que la suite de test d'automatisés est construite sur un framework de test à la fois robuste et évolutif. Un framework inadéquat ou mal conçu peut entraîner des problèmes de maintenance, des instabilités et des difficultés de mise à l'échelle.
Voici quelques problèmes potentiels à éviter lors de l'écriture d'une suite d'automatisation des tests :
- Privilégier la quantité à la qualité : plutôt que d'essayer de couvrir autant de scénarios que possible, il faut se focaliser sur une suite de tests qui soit robuste et efficace.
- Négliger la maintenance : comme indiqué précédemment, les tests développés de façon automatique nécessitent une maintenance continue pour conserver leur efficacité ; négliger la maintenance peut conduire à des tests dépassés ou obsolètes.
- Données de test inadéquates : les données de test doivent être exactes, pertinentes et à jour pour garantir l'efficacité.
- Une dépendance excessive à l'égard de l'automatisation : certains scénarios peuvent être difficiles ou peu pratiques à automatiser, et il est important d'équilibrer les tests automatisés et les tests manuels.
- Un framework de test mal conçu : cela peut entraîner des problèmes de maintenance, des tests instables et des difficultés de mise à l'échelle.
En tenant compte de ces facteurs, vous pouvez créer une solution automatisée efficace et efficiente qui contribuera à garantir la qualité de vos systèmes.
Considération sur le choix, la saisie et l'utilisation des données de test
En travaillant avec des tests automatisés, il est nécessaire d'introduire des données de test couvrant différents scénarios afin de s'assurer que le système se comporte comme prévu dans différentes conditions. Voici quelques façons d'introduire de telles données ainsi que quelques points à garder à l'esprit :
- Saisie manuelle : l’introduction manuelle des données dans un script de tests automatisés est envisageable, mais cela peut prendre du temps et entraîner des erreurs. Il est essentiel de s'assurer que les données soient saisies correctement, sous peine d'obtenir des résultats erronés.
- Fichiers CSV ou Excel : les données peuvent être stockées dans des fichiers et être importées dans le script de tests automatisés. Cette approche permet de gagner du temps et de réduire les erreurs ; il est toutefois important de s'assurer que les données sont structurées correctement et que les fichiers sont accessibles et à jour.
- Bases de données : il est possible de récupérer et d’injecter les données de test en interrogeant directement la base de données. Cette approche est efficace mais nécessite des connaissances avancées en SQL et en gestion de bases de données.
- API : un appel d’API peut également être utilisé pour récupérer et injecter des données de test à partir de sources externes, telles que des services web. Cette approche peut être utile pour tester les intégrations avec d'autres systèmes.
Lors de l’injection de données de test il est important de :
- Veiller à ce que les données de test soient représentatives de scénarios réels.
- Vérifier que les données de test soient correctes et à jour.
- Tenir compte de la taille et de la complexité des données de test.
- Planifier la maintenance des données, y compris leur mise à jour.
- Protéger les données sensibles conformément aux politiques de sécurité de l'entreprise et aux exigences réglementaires.
- Tenir compte de l'impact potentiel sur les performances lors de l’utilisation d’un grand ensemble de données de test.
- Vérifier que les données de test soient accessibles et puissent être injectées dans les tests automatisés.
En tenant compte de ces facteurs, vous pouvez vous assurer que vos tests automatisés utilisent des données pertinentes et exactes, augmentant ainsi la probabilité de détecter les défauts et d'assurer la qualité du système.