Webinaire en vedette : MISRA C++ 2023 : tout ce que vous devez savoir | Voir le séminaire

Qu'est-ce qu'une approche « basée sur l'environnement » pour les tests logiciels ?

Logo cube Parasoft 300x300
le 2 novembre 2023
8 min lire

Qu'est-ce que les tests basés sur l'environnement et pourquoi sont-ils importants dans les tests de logiciels ? Voici une couverture complète du sujet et certains des avantages d'une approche de test basée sur l'environnement.

Tester des applications et des services de manière isolée ne vous mène pas loin et, à terme, vous devez tester dans un environnement opérationnel. L'approche de test « basée sur l'environnement » de Parasoft permet aux équipes de tester leurs applications dans le contexte de toutes les dépendances qui existent dans l'environnement du monde réel.

Souvent, les testeurs et les développeurs examinent leur environnement de déploiement et ses composants sur une base individuelle, en testant ces éléments de manière isolée. Cela fonctionne dans une certaine mesure mais ne teste pas suffisamment le système. Une autre version de cela consiste à tester au niveau de l'interface utilisateur, à un moment où les causes profondes des échecs sont difficiles à diagnostiquer. Le terrain d'entente est l'endroit où les applications peuvent être testées dans un environnement aussi réaliste que possible en utilisant des services virtuels pour imiter des dépendances qui ne sont pas disponibles ou suffisamment cohérentes pour les tests. Au fur et à mesure que de plus en plus de dépendances se mettent en ligne, vous pouvez passer des services virtualisés aux versions actives.

Chez Parasoft, nous appelons cela une approche de test « basée sur l'environnement », qui permet à toute l'équipe de tester son application dans le contexte complet de l'environnement réel. Les tests sont déployés dans un environnement réel, partiellement ou entièrement virtualisé selon les besoins. L'approche des tests basée sur les environnements fournit une plate-forme stabilisée pour l'exécution des tests.

Tests basés sur l'environnement

L'approche de test basée sur l'environnement fournit plus de contexte pour mieux comprendre l'impact des dépendances sur l'application pendant les tests de l'interface utilisateur et aide l'équipe à passer au niveau supérieur en créant des tests d'API et de base de données pour les composants dépendants. Ce faisant, vous pouvez obtenir une couverture de test plus complète pour votre application et dissocier les tests de l'interface utilisateur, afin que les deux puissent être exécutés ensemble ou indépendamment. Les échecs des tests sont mis en évidence dans l’environnement, ce qui facilite leur identification.

Voici quelques avantages supplémentaires associés à une approche de test basée sur l'environnement:

  • Déplacement des tests à gauche en testant l'application dans l'environnement de production dès que possible. Ceci est rendu possible grâce à la virtualisation des services, à la création de services virtuels, puis au transfert vers des services en direct à mesure qu'ils deviennent à la fois disponibles et stables.
  • Réduction du temps et des efforts de diagnostic des échecs de test en identifiant exactement où et pourquoi les tests ont échoué.
  • Étendre facilement les tests des tests d'interface utilisateur aux tests d'API, qui est configurable dans le contexte de l'environnement, ainsi que dans le cadre d'un pipeline CI / CD.
  • Augmentation de la couverture des tests en créant des scénarios qui ne pourraient pas être mis en œuvre à partir des seuls tests d'interface utilisateur.

Ces avantages réduisent la charge globale des testeurs pour configurer, exécuter et diagnostiquer les tests d'application tout en augmentant la couverture des tests et en permettant d'effectuer les tests plus tôt et de manière plus complète.

Types d'environnements de test

Comme de nombreux testeurs le savent, un environnement de test n'est qu'une structure contrôlée qui permet aux systèmes et aux logiciels d'effectuer des tests de fiabilité, de fonctionnalité et de compatibilité. Ceux-ci simulent généralement des scénarios et des conditions du monde réel pour résoudre les bogues ou violations potentiels avant le déploiement. En tant que tel, chaque environnement de test peut être adapté au type de test et aux résultats souhaités par une équipe.

Un environnement de test multi-navigateurs est un parfait exemple d’environnement de test permettant de tester sur différents navigateurs et versions de navigateur. Les équipes de test utilisent l'environnement pour vérifier la qualité et l'impact de l'application avant que les utilisateurs n'interagissent avec elle.

Il existe plusieurs types clés d'environnements de test, notamment :

  • Performance. Les environnements de test des performances vérifient qu'un système fonctionne comme prévu et atteint les objectifs de performances. Ceux-ci peuvent inclure le temps de réponse, la simultanéité, la stabilité, etc. Ce type de test peut être complexe en raison de la diversité des systèmes (taille de la RAM, nombre d'utilisateurs, cœurs de processeur, etc.) et nécessite une configuration minutieuse.
  • Sécurité. Ce type d'environnement donne la priorité à la sécurité des logiciels. Il testera les vulnérabilités concernant l’authentification, l’autorisation, la confidentialité et l’intégrité.
  • L'intégration. Cet environnement teste l'intégration des modules logiciels pour vérifier ou surveiller le comportement. Cela peut implémenter un ou plusieurs modules pour les tests fonctionnels.
  • Le chaos. Cet environnement ciblé cherche à identifier les domaines spécifiques qui posent des menaces de défaillance et à y remédier avant que les utilisateurs finaux ne les rencontrent.

Configuration de l'environnement de test : meilleures pratiques et considérations

Créer un bon environnement de test ne consiste pas seulement à utiliser des scénarios réalistes. Cela implique tout, de la prise en compte des cas extrêmes à la protection de la sécurité des données, en passant par l'émulation ou l'utilisation d'informations réelles. Bien que chaque équipe ait des objectifs et des exigences différents, certaines bonnes pratiques peuvent être suivies pour garantir le meilleur environnement de test pour votre projet.

Qu'est-ce qu'un bon environnement de test ?

Un bon environnement de test ressemble à un environnement de production en direct dans lequel le logiciel ou le système fonctionnera de très près. Il doit utiliser le même code, le même système d’exploitation, les mêmes données, fonctionnalités et configuration.

Les facteurs clés pour créer un bon environnement de test sont les suivants :

  • Données. Utilisez des données réalistes et de qualité qui incluent également des cas extrêmes pour vérifier que le logiciel ou le système fonctionne comme prévu.
  • Conception. Incluez un échantillon représentatif de l’application ou de l’intégralité de l’application à tester.
  • Automatisation. Tirez parti de l’automatisation pour soulager certaines pressions, renforcer certains processus et récupérer des données exploitables.
  • Sécurité. Assurer la sécurité du test et de ses données.
  • Gestion. Considérez que les tests continus doivent se poursuivre sur le long terme et vérifiez que l'environnement de test est configuré pour cela.

Meilleures pratiques en matière d'environnement de test

En plus des principes mécaniques ci-dessus, les environnements de test s'appuient également sur des directives générales intangibles.

  1. Suivez une méthodologie de test logiciel.
  2. Considérez les tests comme faisant partie du processus de déploiement.
  3. Intégrer la communication dans l’environnement de test.
  4. Recyclez ou réutilisez les ressources et les environnements de test.
  5. Testez tôt, souvent et continuellement.
  6. Adoptez un état d’esprit de gestion des fonctionnalités afin de pouvoir tester des fonctionnalités individuelles plutôt que l’ensemble de la base de code.

Gestion de l'environnement de test

La gestion de vos environnements de test peut être un énorme casse-tête ou s'avérer être une partie incontournable de votre SDLC qui fournit des informations et des données inestimables. La clé réside dans la manière dont vous abordez cette gestion. En chargeant une partie du travail et de l'organisation en amont, vous pouvez créer une configuration plus facile à maintenir tout en bénéficiant des avantages de tests fréquents.

Misez sur la confiance et la transparence

Du développeur le plus expérimenté au testeur QA le plus récent, traitez les membres des équipes de développement comme des membres importants du projet. L'utilisation d'une source unique, ou d'une copie dorée, pour des environnements et des déploiements accessibles à tous, dans des limites raisonnables, favorise un environnement où la communication est ouverte, encouragée et constructive.

Documenter et suivre le processus

La gestion de la base de connaissances, que ce soit sur Confluence, JIRA ou d'autres outils, permet d'éviter les problèmes de communication et de réduire les jeux de téléphone. Les membres de l'équipe peuvent consulter la documentation pour obtenir des informations de base, suivre les modifications, voir qui a travaillé sur quoi, et bien plus encore.

Rendre les informations disponibles

Parallèlement aux principes ci-dessus, la mise à disposition de ces informations aux parties prenantes contribue également à maintenir les environnements de test. Mais cela s'applique également à des éléments tels que les calendriers de déploiement, les plans d'interruption et d'autres aspects du développement.

Évitez les mises à jour manuelles

Les humains font des erreurs. C'est un fait. Les mises à jour manuelles succombent à cette réalité, donc intégrer la gestion de l'environnement de test à la chaîne d'outils que vous utilisez peut contribuer à réduire les erreurs manuelles.

Tirer parti de la virtualisation

Être capable d'interagir avec les données générées par vos cas de test est indispensable. Pouvoir le faire de manière simple et rationalisée est encore mieux. La virtualisation vous permet de prendre des instantanés, de répliquer votre environnement de bout en bout, et bien plus encore. En fait, Parasoft a le sien virtualisation de services de pointe solution juste à cet effet.

Examiner les données et les performances

Cela peut ne pas sembler nécessaire, mais le suivi des KPI tels que le nombre d'interruptions de service imprévues, la disponibilité de l'environnement et d'autres variables peut vous aider à améliorer vos environnements de test. Examinez les données après des cycles de test importants pour voir ce qui fonctionne, ce qui doit être modifié et comment les ressources sont allouées ou pourraient être différentes.

Tests basés sur l'environnement en action avec Parasoft SOAtest

Alors, regardons cela en action. Parasoft SOAtest fournit un gestionnaire d'environnement qui affiche visuellement l'environnement d'exécution de l'application testée. Vous trouverez ci-dessous un exemple d'application dans son environnement, connectée à des dépendances. Chaque composant de l'environnement peut être provisionné en direct ou virtualisé selon les besoins, en fonction de la stabilité et de la disponibilité de ces composants.

Capture d'écran montrant Parasoft SOAtest Environment Manager.

Les préréglages de déploiement configurent l'environnement en fonction des exigences de test actuelles. Différentes catégories de scénarios peuvent nécessiter différents préréglages. Ces préréglages contiennent tous les paramètres nécessaires pour le gestionnaire d'environnement :

Capture d'écran des paramètres prédéfinis dans le gestionnaire d'environnement de SOAtest.

 

 

 

 

 

 

 

 

 

Une fois par l'environnement de test est fourni, un ensemble d'interactions API et UI sont exécutés sur l'application testée. Les résultats sont capturés, enregistrés et comparés aux résultats attendus dans l'IDE et dans le portail Web Parasoft, où l'utilitaire Environment Manager fait office de plaque tournante pour les tests fonctionnels.

Les échecs sont mis en évidence dans le gestionnaire d'environnement et il est possible de suivre les rapports d'erreurs à partir de là dans un rapport plus détaillé.

Capture d'écran montrant la notification de 2 tests échoués dans le gestionnaire d'environnement de SOAtest.

 

 

 

 

 

 

Les rapports de test d'API générés indiquent à la fois les échecs et les informations de couverture des tests. Les échecs signifient qu'une nouvelle fonctionnalité est interrompue ou qu'il y a un problème avec un test. La cause première de ces échecs peut être retracée depuis l'échec ici jusqu'à l'API appropriée. Les informations sur la couverture des tests sont importantes car elles indiquent les tests manquants et potentiellement l'envoi de code non testé.

Capture d'écran Parasoft SOAtest montrant une liste des détails de la couverture des tests API.

Le rôle de la virtualisation des services

Des erreurs proviennent également de dépendances manquantes. C'est où la virtualisation des services entre en jeu. Il est souvent impossible de disposer de dépendances actives disponibles pour les tests, peut-être parce qu'elles ne sont pas encore prêtes ou parce qu'il est difficile et long de les dupliquer à partir de l'environnement de production. Mais pour garantir des applications de haute qualité dans le respect des contraintes de calendrier et de budget, il est essentiel d'avoir un accès illimité à un environnement de test fiable et réaliste, qui inclut l'application testée et tous ses composants dépendants tels que les API, les services tiers, les bases de données, les applications. , et d'autres points de terminaison.

Capture d'écran montrant la notification d'un test ayant échoué avec un point de terminaison réel actuellement hors ligne dans le gestionnaire d'environnement de SOAtest.

 

 

 

 

 

La virtualisation des services permet aux équipes logicielles de accéder à un environnement de test complet, y compris tous les composants système dépendants critiques, ainsi que de modifier le comportement de ces composants dépendants d'une manière qui serait impossible avec un environnement de test par étapes, vous permettant ainsi de tester plus tôt, plus rapidement et de manière plus complète. Il vous permet également d'isoler différentes couches de l'application pour le débogage et les tests de performances, mais nous n'allons pas y entrer autant ici.

Les services individuels peuvent être configurés en direct ou virtualisés. Les configurations de déploiement qui sont des combinaisons de dépendances actives et virtualisées peuvent être enregistrées en tant que préréglages.

Intégration avec les pipelines CI/CD

Les exemples de tests manuels sont intéressants, mais le véritable travail se déroule dans un pipeline d'intégration continue. Les environnements de test dynamiques de Parasoft peuvent être déployés à partir de Jenkins dans le cadre d'un pipeline d'intégration/déploiement continu. L'exemple suivant montre « Déployer un environnement dynamique » en tant que build Jenkins.

Capture d'écran de Parasoft SOAtest montrant que des environnements de test dynamiques peuvent être déployés à partir de Jenkins dans le cadre d'un pipeline d'intégration/déploiement continu. L'exemple montre « Déployer un environnement dynamique » en tant que version Jenkins.

À l'aide du plugin Parasoft Jenkins, des étapes de build sont ajoutées pour déployer des suites de tests à partir de la build. Les résultats sont capturés et liés au gestionnaire d'environnement.

Des étapes de construction du plugin Parasoft Jenkins peuvent être ajoutées pour déployer des suites de tests à partir de la version. La capture d'écran montre les résultats capturés et liés au gestionnaire d'environnement.

Une fois la construction terminée, les résultats des tests sont affichés dans Jenkins. Les échecs sont directement liés au gestionnaire d’environnement et au scénario de déploiement.

Résumé

En considérant d'abord l'environnement opérationnel et en tirant parti d'une approche de test basée sur l'environnement, les testeurs de logiciels peuvent s'assurer que tout est en place pour rendre les tests productifs et efficaces. Plutôt que de passer du temps à essayer de tester des applications de manière isolée ou dans un environnement pseudo-réaliste, les testeurs peuvent consacrer plus de temps aux tests eux-mêmes.

Tests continus pour DevOps : évoluer au-delà de la simple automatisation