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 :