Qu'est-ce que le test logiciel ?

Il permet de rechercher les erreurs logicielles et de vérifier qu'une application ou un système peut être utilisé

Programmeur tenant un smartphone avec un code ; il est assis devant un ordinateur avec un code

Comment fonctionne le test logiciel ?

Le test logiciel est le processus qui consiste à évaluer et à vérifier qu'un produit ou une application logicielle fait ce qu'il ou elle est censé(e) faire. Les avantages du test comprennent la prévention des bogues, la réduction des coûts de développement et l'amélioration des performances.


Types de tests logiciels

Il existe de nombreux types de tests de logiciels, chacun ayant des objectifs et des stratégies spécifiques :

  • Tests d'acceptation : ils permettent de vérifier si l'ensemble du système fonctionne comme prévu.
  • Tests d'intégration : ils permettent de s'assurer que les composants logiciels ou les fonctions fonctionnent ensemble.
  • Tests unitaires : ils permettent de valider que chaque unité logicielle fonctionne comme prévu. Une unité est le plus petit composant testable d'une application.
  • Tests fonctionnels : ils permettent de vérifier les fonctions en émulant des scénarios métiers, en fonction des besoins fonctionnels. Les tests en boîte noire sont un moyen courant de vérifier les fonctions.
  • Tests de performance : ils permettent d'évaluer les performances du logiciel sous différentes charges de travail. Les tests de charge, par exemple, sont utilisés pour évaluer les performances dans des conditions de charge réelles.
  • Tests de régression : ils permettent de vérifier si de nouvelles fonctionnalités brisent ou dégradent la fonctionnalité. Les tests d'intégrité peuvent être utilisés pour vérifier les menus, les fonctions et les commandes au niveau de la surface, lorsqu'il n'y a pas suffisamment de temps pour effectuer un test de régression complet.
  • Tests de charge : ils permettent de tester la quantité de contraintes que le système peut supporter avant qu'il ne tombe en panne. Ils sont considérés comme un type de test non fonctionnel.
  • Tests d'utilisation : ils permettent de valider la capacité d'un client à utiliser un système ou une application Web pour effectuer une tâche.

Dans chaque cas, la validation des exigences de base est critique. Tout aussi important, les tests exploratoires aident un testeur ou une équipe de test à découvrir des scénarios et des situations difficiles à prévoir et qui peuvent entraîner des erreurs logicielles.

Même une application simple peut faire l'objet d'un grand nombre et d'une variété de tests. Un plan de gestion de tests permet de hiérarchiser les types de tests qui apportent le plus de valeur, compte tenu du temps et des ressources disponibles. L'efficacité des tests est optimisée en exécutant le moins de tests possible pour trouver le plus grand nombre de défauts.


Historique du test logiciel

Le test logiciel est arrivé en même temps que le développement logiciel, qui a débuté juste après la seconde guerre mondiale. C'est à l'informaticien Tom Kilburn que l'on doit l'écriture du premier logiciel qui a été lancé le 21 juin 1948 à l'Université de Manchester, en Angleterre. Il effectuait des calculs mathématiques à l'aide d'instructions en code machine.

Le débogage était la principale méthode de test à l'époque et il l'est resté pendant les deux décennies suivantes. Dans les années 1980, les équipes de développement ne se contentaient plus d'isoler et de corriger les bogues des logiciels, mais elles testaient les applications dans des conditions réelles. Cela a ouvert la voie à une vision plus large des tests qui englobaient un processus d'assurance qualité faisant partie du cycle de vie du développement logiciel.

« Dans les années 1990, il y a eu une transition des tests vers un processus plus complet appelé assurance qualité, qui couvre l'ensemble du cycle de développement logiciel et affecte les processus de planification, de conception, de création et d'exécution des cas de test, le support des cas de test existants et les environnements de test », déclare Alexander Yaroshko dans son article sur le site des développeurs uTest.

« Les tests avaient atteint un niveau qualitativement nouveau, ce qui a conduit au perfectionnement des méthodologies, à l'émergence d'outils puissants de gestion du processus de test et d'outils d'automatisation des tests. » 1

Tests en continu

Le test logiciel a traditionnellement été séparé du reste du développement. Il est généralement effectué plus tard dans le cycle de vie du développement logiciel après la phase de construction ou d'exécution du produit. Un testeur peut ne disposer que de très peu de temps pour tester le code, parfois juste avant la mise sur le marché de l'application. Si des défauts sont détectés, le temps pour recoder ou retester peut être limité. Il n'est pas rare de publier un logiciel dans les temps, mais avec des bogues et des correctifs nécessaires. Sinon, une équipe de test peut corriger des erreurs, mais manquer une date de mise sur le marché.

Effectuer des tests plus tôt dans le cycle permet de garder l'effort de test au premier plan plutôt que comme une réflexion après coup par rapport au développement. Effectuer des tests logiciels précoces permet également de réduire les coûts de la résolution des défauts.

De nombreuses équipes de développement utilisent désormais une méthodologie connue sous le nom de tests en continu. Cette dernière s'inscrit dans une approche DevOps, où le développement et les opérations collaborent tout au long du cycle de vie du produit. L'objectif est d'accélérer la livraison des logiciels tout en équilibrant les coûts, la qualité et les risques. Avec cette technique de test, les équipes n'ont pas besoin d'attendre que le logiciel soit construit avant de commencer les tests. Elles peuvent exécuter des tests beaucoup plus tôt dans le cycle pour découvrir les défauts plus tôt, lorsqu'ils sont plus faciles à corriger.


Pourquoi le test logiciel est-il important ?

Peu de gens peuvent s'opposer à la nécessité d'un contrôle qualité lors du développement logiciel. Les retards de livraison ou les défauts logiciels peuvent nuire à la réputation d'une marque, et entraîner la frustration et la perte de clients. Dans des cas extrêmes, un bogue ou un défaut peut dégrader les systèmes interconnectés ou provoquer de graves dysfonctionnements.

Prenons l'exemple de Nissan qui a dû rappeler plus d'un million de voitures en raison d'un défaut de logiciel dans les capteurs d'airbags. Ou celui d'un bogue logiciel qui a provoqué l'échec du lancement d'un satellite militaire d'un montant de 1,2 milliard de dollars. 2  Les chiffres parlent d'eux-mêmes. Les défaillances logicielles aux États-Unis ont coûté à l'économie 1,1 billion de dollars d'actifs en 2016. De plus, elles ont touché 4,4 milliards de clients. 3

Bien que les tests eux-mêmes sont coûteux, les entreprises peuvent économiser des millions par an en développement et en support si elles disposent d'une bonne technique de test et de processus d'assurance qualité. Les tests logiciels précoces révèlent les problèmes avant qu'un produit ne soit mis sur le marché. Plus vite les équipes de développement reçoivent des informations sur les tests, plus vite elles peuvent résoudre des problèmes comme ceux ci-dessous :

  • Défauts architecturaux
  • Mauvaises décisions de conception
  • Fonctionnalité non valide ou incorrecte
  • Vulnérabilités de sécurité
  • Problèmes d'évolutivité

Lorsque le développement laisse une large place aux tests, il permet d'améliorer la fiabilité des logiciels et de livrer des applications de qualité avec peu d'erreurs. Un système qui répond aux attentes des clients, voire les dépasse, permet d'augmenter les ventes et la part de marché.


Meilleures pratiques de test logiciel

Le test logiciel suit un processus commun. Les tâches ou étapes comprennent la définition de l'environnement de test, le développement de cas de test, la rédaction de scripts, l'analyse des résultats de test et la soumission de rapports de défauts.

Les tests peuvent être chronophages. Des tests manuels ou des tests ad hoc peuvent suffire pour les petites versions. Cependant, pour les systèmes plus grands, des outils sont fréquemment utilisés pour automatiser les tâches. Les tests automatisés aident les équipes à mettre en œuvre différents scénarios, à tester les différenciateurs (comme le déplacement de composants dans un environnement cloud) et à obtenir rapidement un retour sur ce qui fonctionne et ce qui ne fonctionne pas.

Une bonne approche de test englobe les niveaux de l'interface de programmation d'application (API), de l'interface utilisateur et du système. En outre, plus les tests sont automatisés et exécutés tôt, mieux c'est. Certaines équipes construisent des outils d'automatisation de tests en interne. Cependant, les solutions des fournisseurs offrent des fonctions qui peuvent rationaliser les tâches clés de la gestion de tests, telles que :

  • Tests en continu : les équipes de projet testent chaque version dès qu'elle est disponible. Ce type de test logiciel repose sur l'automatisation de tests qui est intégrée au processus de déploiement. Il permet de valider le logiciel dans des environnements de test réalistes plus tôt dans le processus, ce qui améliore la conception et réduit les risques.
  • Gestion de la configuration : les entreprises gèrent de manière centralisée les actifs de test et suivent les versions logicielles à tester. Les équipes ont accès à des actifs tels que le code, les exigences, les documents de conception, les modèles, les scripts de test et les résultats de tests. Les bons systèmes incluent l'authentification des utilisateurs et les pistes d'audit pour aider les équipes à respecter les exigences de conformité avec un minimum d'efforts administratifs.
  • Virtualisation de services : les environnements de test peuvent ne pas être disponibles, surtout au début du développement du code. La virtualisation de services simule les services et les systèmes manquants ou qui ne sont pas encore achevés, ce qui permet aux équipes de réduire les dépendances et de tester plus rapidement. Elles peuvent réutiliser, déployer et modifier une configuration pour tester différents scénarios sans avoir à modifier l'environnement d'origine.
  • Suivi des défauts ou des bogues : le suivi des défauts est important pour les équipes de test et de développement pour mesurer et améliorer la qualité. Des outils automatisés permettent aux équipes de suivre les défauts, de mesurer leur portée et leur impact, et de découvrir les problèmes connexes.
  • Métriques et création de rapports : la création de rapports et les analyses permettent aux membres de l'équipe de partager le statut, les objectifs et les résultats des tests. Des outils avancés intègrent des métriques de projet et présentent les résultats dans un tableau de bord. Les équipes voient rapidement l'état global d'un projet et peuvent surveiller les relations entre les tests, le développement et les autres éléments du projet.

Solutions connexes

IBM Rational Test Workbench

IBM Rational Test Workbench fournit des outils de test logiciel pour soutenir une approche DevOps : tests d'API, tests fonctionnels d'interface utilisateur, tests de performances et virtualisation de services.

IBM Rational Test Virtualization Server

Le logiciel IBM Rational Test Virtualization Server permet de réaliser des tests précoces et fréquents dans le cycle de vie du développement.

IBM Rational Performance Tester

IBM Rational Performance Tester permet aux équipes de test logiciel de tester plus tôt et plus fréquemment dans le cadre d'une approche DevOps.

IBM Engineering Workflow Management

Utilisez un outil unique pour collaborer entre les équipes, gérer le code, organiser des stand-up meetings, planifier des sprints et suivre votre travail. Disponible sur site et sur le cloud.

IBM Rational ClearCase

IBM Rational ClearCase fournit un accès contrôlé aux actifs logiciels, y compris le code, les exigences, les documents de conception, les modèles, les plans de test et les résultats de tests.

IBM Engineering Test Management

IBM Engineering Test Management est une solution collaborative de gestion de la qualité qui offre une planification des tests de bout en bout et une gestion des actifs de test, des exigences aux défauts.