Couverture des tests dans les tests logiciels : comment la mesurer

⚡ Résumé intelligent

La couverture des tests logiciels mesure la proportion d'une application effectivement testée par un ensemble de tests. Elle révèle les exigences non testées, les chemins d'exécution et les risques, permettant ainsi aux équipes d'ajouter des cas ciblés et de procéder à des mises en production avec un niveau de confiance mesurable.

  • (I.e. Définition: Les rapports de couverture de test indiquent quelles exigences, fonctionnalités et chemins de code les tests existants couvrent déjà.
  • 🧭 Types: Chaque élément (déclaration, branche, condition, chemin, exigences et couverture des risques) répond à une question différente.
  • Code vs Test : Code La couverture mesure les lignes de code source exécutées, tandis que la couverture des tests mesure le plan de test global.
  • 🧮 Formule: Divisez le nombre de lignes exécutées par le nombre total de lignes, puis multipliez par 100 pour obtenir le pourcentage.
  • Techniques: L'analyse des valeurs limites, les tables de décision et les tests de transition d'état élargissent la couverture sans alourdir la suite.
  • 📈 Optimisation: Classez les modules par niveau de risque, automatisez la suite de tests de régression et examinez la tendance de couverture à chaque sprint.
  • 🤖 Assistance IA : Les outils d'IA génèrent les tests unitaires manquants et classent les chemins non testés en fonction du risque de production.

Qu’est-ce que la couverture des tests ?

La couverture des tests est définie comme une métrique dans les tests logiciels qui mesure la quantité de tests effectués par un ensemble de tests. Cela comprendra la collecte d'informations sur les parties d'un programme qui sont exécutées lors de l'exécution de la suite de tests afin de déterminer quelles branches d'instructions conditionnelles ont été prises.

En termes simples, il s'agit d'une technique permettant de garantir que vos tests testent votre code ou la quantité de code que vous avez exercée en exécutant le test.

À quoi sert la couverture des tests ?

Dans le cadre d'un projet en production, la couverture des tests prend en charge quatre activités pratiques :

  • Trouver le domaine d'une exigence non implémentée par un ensemble de cas de test
  • Aide à créer des cas de test supplémentaires pour augmenter la couverture
  • Identifier une mesure quantitative de la couverture des tests, qui est une méthode indirecte de contrôle de qualité
  • Identifier les cas de test dénués de sens qui n'augmentent pas la couverture

Avantages de la couverture des tests en génie logiciel

Ces activités se traduisent par des avantages concrets en matière d'ingénierie.

  • Il peut assurer la qualité du test
  • Cela peut aider à identifier quelles parties du code ont été réellement touchées pour la version ou le correctif.
  • Il peut identifier tous les points de décision et les chemins non testés de votre application, ce qui vous permet d'améliorer la couverture des tests.
  • Prévenir défaut fuite
  • Le temps, la portée et les coûts peuvent être maîtrisés
  • Prévention des défauts à un stade précoce du cycle de vie du projet
  • Les lacunes dans les exigences, les cas de test et les défauts au niveau de l'unité et du code peuvent être détectés facilement.

Types de couverture de test

La couverture ne se résume jamais à un seul chiffre. Équipes tracIl existe plusieurs types de questions simultanément, car chacune répond à une question différente concernant la même suite. Le tableau ci-dessous regroupe les types les plus courants.

Type de couverture Ce qu'il mesure Meilleur utilisé pour
Couverture de la déclaration (ligne) Les lignes exécutables s'exécutent au moins une fois. Tests unitaires et audits de code existant
Couverture de branche ou de décision Résultat vrai et faux de chaque décision Logique conditionnelle et de validation
Couverture des conditions Chaque sous-expression booléenne est considérée comme vraie ou comme fausse. Expressions composées ET ou OU
Couverture du chemin Itinéraires uniques empruntés à travers un module Flux critiques pour la sécurité et flux financiers
Couverture fonctionnelle Fonctions ou méthodes appelées par les tests couches API et de service
Couverture des exigences Exigences associées à au moins un test Acceptation et consentementtracsignature électronique
Couverture des risques Zones à haut risque identifiées cycles de libération courts

Les cinq premiers types sont des mesures au niveau du code et appartiennent à test boîte blanche, tandis que les exigences et la couverture des risques se situent au niveau du plan de test.

Quelles sont les principales différences entre Code Couverture et couverture des tests ?

Code couverture et la couverture des tests sont des techniques de mesure qui vous permettent d'évaluer la qualité du code de votre application.

Voici quelques différences critiques entre les cabines de ces méthodes de couverture :

Paramètres Code Couverture Couverture de test
Définition Code Terme de couverture utilisé lorsque le code d'une application est exécuté pendant son exécution. La couverture des tests signifie le plan de test global.
Objectif Code Les indicateurs de couverture peuvent aider l'équipe à surveiller ses tests automatisés. La couverture des tests fournit des détails sur le niveau auquel le codage écrit d'une application a été testé.
Sous-types Code La couverture est divisée en sous-types tels que la couverture des relevés, la couverture des conditions, la couverture des succursales, Togglcouverture électronique, couverture FSM. Aucun sous-type de méthode de couverture de test.

Formule de couverture des tests

Pour calculer la couverture des tests, vous devez suivre les étapes ci-dessous :

Étape 1) que vous avez Y, le nombre total de lignes de code dans le logiciel que vous utilisez vers les tests

Étape 2) que vous avez X, le nombre de lignes de code que tous les cas de test exécutent actuellement

Maintenant, vous devez trouver (X divisé par Y) multiplié par 100. Le résultat de ce calcul est votre % de couverture de test.

Par exemple :

Si un composant système comporte 500 lignes de code et que 50 lignes ont été exécutées au total pour l'ensemble des tests existants, alors votre couverture de test est :

(50 / 500) * 100 = 10%   // executed lines divided by total lines

Exemples de couverture de test

Le pourcentage à lui seul ne dit jamais tout, comme le montrent les exemples ci-dessous.

Exemple 1:

Par exemple, si vous souhaitez tester un couteau, vous devez vérifier s'il coupe les fruits et légumes avec précision. Cependant, d'autres aspects sont à prendre en compte, comme le confort d'utilisation.

Exemple 2:

Par exemple, si vous souhaitez tester l'application Bloc-notes, il est indispensable de vérifier ses fonctionnalités essentielles. Cependant, il faut également s'assurer que l'application fonctionne correctement lorsqu'on utilise d'autres applications, que l'utilisateur comprend son fonctionnement, qu'elle ne plante pas lorsqu'il effectue une action inhabituelle, etc.

Techniques de couverture des tests

Les deux exemples convergent vers la même conclusion : atteindre un objectif de couverture dépend moins de la quantité de tests écrits que du choix d’une technique de conception de tests appropriée. Les techniques ci-dessous permettent d’élargir la couverture tout en maintenant…ping la suite est petite.

  • Analyse des valeurs limites : Sélectionne les entrées situées aux extrémités de chaque plage valide, là où les défauts sont les plus concentrés. Voir analyse des valeurs limites pour les dossiers traités.
  • Partitionnement par équivalence : Regroupe les entrées que l'application traite de manière identique, de sorte qu'un seul cas puisse représenter en toute sécurité une classe entière de valeurs.
  • Tests de table de décision: Couvre les combinaisons de conditions et leurs résultats attendus au sein d'une même grille.
  • test de transition d'état: Effectue tous les mouvements valides et invalides entre les états de l'application.
  • Tests de chemin de base: Déduit l'ensemble minimal de chemins indépendants du graphe de flux de contrôle.
  • Tests basés sur les risques: Classe les fonctionnalités en fonction de leur impact sur l'activité et traite en premier celles présentant le risque le plus élevé.
  • Essais exploratoires: Révèle des lacunes que les études de cas scénarisées et les rapports de couverture n'exposent jamais.

Comment assurer une couverture de test optimale ?

Une fois les techniques choisies, quatre itinéraires établis assurent la couverture.

  • La couverture des tests peut être effectuée en appliquant les techniques d'examen statique telles que les examens par les pairs, les inspections et la procédure pas à pas.
  • En transformant les défauts ad hoc en cas de tests exécutables
  • Au niveau du code ou au niveau des tests unitaires, la couverture des tests peut être obtenue en utilisant les outils automatisés de couverture de code ou de couverture de tests unitaires.
  • La couverture des tests fonctionnels peut être effectuée à l'aide d'outils de gestion de tests appropriés

Comment améliorer la couverture des tests

L'établissement de la couverture est le point de départ ; son extension est une procédure régulière. Suivez cette séquence au début de chaque cycle de publication.

  1. Établir la base du nombre actuel. Exécutez un rapport de couverture et enregistrez séparément la couverture des instructions, des branches et des exigences, afin que les lacunes restent visibles par module plutôt que d'être cachées dans une moyenne globale du projet.
  2. Associer les tests aux exigences. Construire un tracGrille de test reliant chaque exigence à au moins un cas de test. Une ligne vide indique une lacune confirmée, et non une simple suspicion.
  3. Classer les modules par niveau de risque. Les logiques de paiement, d'authentification et de migration des données méritent une couverture bien plus approfondie qu'un simple écran d'aide statique ; il faut donc consacrer le budget là où une défaillance serait la plus préjudiciable.
  4. Ajouter les cas négatifs et les cas limites. Les entrées vides, les valeurs surdimensionnées, les délais d'attente réseau et les erreurs d'autorisation atteignent des branches que les tests de scénario nominal n'atteignent jamais.
  5. Superposez les niveaux de test. Combiner tests unitaires, test d'intégrationet des contrôles de bout en bout, car chaque niveau couvre ce que les autres ne peuvent pas structurellement couvrir.
  6. Automatisez la suite de tests de régression. Promoles cas stables dans tests d'automatisation et les exécuter à l'intérieur du Pipeline CI / CD après chaque commit.
  7. Supprimer les dossiers redondants. Supprimez les tests dupliqués qui ajoutent des minutes d'exécution sans ajouter une seule ligne non couverte.
  8. RevSuivre la tendance à chaque sprint. Traccouverture k à côté de densité de défautsUne fuite croissante sur une surface plane est un signe avant-coureur d'un angle mort.

⚠️ Attention : Ne visez pas 100 %. Une suite de tests couvrant 85 % du code, avec des assertions robustes, protège bien mieux une version que 95 % de contrôles superficiels qui exécutent du code sans vérifier aucun résultat.

Inconvénients de la couverture des tests

La couverture reste précieuse, mais elle comporte des limites qu'il convient de préciser avant de communiquer tout pourcentage.

  • La plupart des tâches de la couverture des tests sont manuelles car il n'existe aucun outil à automatiser. Par conséquent, il faut beaucoup d’efforts pour analyser les exigences et créer des cas de test.
  • La couverture des tests vous permet de compter les fonctionnalités, puis de les mesurer par rapport à plusieurs tests. Cependant, il y a toujours de la place pour des erreurs de jugement.

FAQ

La plupart des équipes considèrent un taux de réussite de 70 à 80 % comme un objectif réaliste, et de 90 % ou plus pour les modules critiques. Viser les 100 % est rarement rentable. Il est préférable de privilégier la profondeur des tests sur les éléments logiques à haut risque plutôt que de répartir les tests uniformément dans le code.

Non. Une couverture complète prouve que chaque élément a été exécuté, mais pas que chaque valeur, exigence ou parcours utilisateur a été validé. Des exigences manquantes, des assertions faibles et des défauts non fonctionnels, comme des temps de réponse lents, peuvent échapper à une suite de tests affichant un taux de couverture de 100 %.

Un rapport de couverture répertorie les lignes, branches et fonctions couvertes et non couvertes par fichier, avec des pourcentages agrégés par module et par projet. Des outils tels que JaCoCo Signaler également les branches partiellement couvertes, car ce sont généralement les espaces qui se referment le plus rapidement.

L'IA analyse le code source, l'historique d'exécution et les données de défauts pour identifier les chemins d'exécution à haut risque non testés, puis propose des solutions pour les corriger. Elle hiérarchise également les tests à exécuter en premier, ce qui raccourcit le cycle de test sans compromettre la couverture.

Oui. Des outils tels que Bleu différentiel Les tests unitaires pour la logique non couverte sont automatiquement générés, et les modèles génératifs transforment les exigences en langage clair en cas exécutables. La vérification humaine reste essentielle, car les assertions générées peuvent être validées sans vérification du comportement attendu.

Résumez cet article avec :