Unité 8 / 11

Analyse de la couverture des tests et tests basés sur les risques : viser correctement avec l'IA

Gains :

  • Capacité à lire des métriques telles que la couverture de lignes, de succursales et de conditions sous forme de carte, et non de confiance, et à comprendre qu'une couverture élevée peut donner une pseudo-confiance
  • Possibilité de placer la portée des exigences à côté de la portée du code et de rendre visibles les lacunes en matière de traçabilité grâce à l'intelligence artificielle
  • Capacité à évaluer les fonctionnalités avec la formule risque = probabilité × impact, à diriger les efforts de test limités vers le risque le plus élevé et à documenter délibérément hors de portée

Vous ne pouvez pas tester chaque logiciel indéfiniment ; Le temps et les ressources sont limités. La vraie question est donc la suivante : où concentrer les efforts limités de test ? Deux concepts répondent à cette question. La couverture des tests (une métrique qui mesure la part du code ou des exigences touchée par les tests) représente ce qui est testé. Les tests basés sur les risques - l'approche consistant à déterminer la priorité des tests en fonction de la probabilité de détérioration d'une zone et des dommages qu'elle causera en cas de détérioration - orientent les efforts vers le risque le plus élevé. L’intelligence artificielle (IA) est un puissant partenaire d’analyse dans les deux cas : elle rend visible les lacunes de couverture et suggère les zones à risque. Mais la mise en garde centrale demeure : le nombre de scopes que l’IA voit peut être trompeur ; Même une couverture de 100 % des rangées peut être obtenue avec des tests qui ne vérifient rien. Votre travail consiste à lire la portée comme une carte et non comme une fiducie.

Lire correctement les métriques de couverture

Il existe plusieurs types de portée, et toutes n’ont pas la même signification :

  • Couverture de lignes : combien de lignes de code ont été exécutées au moins une fois. Le critère le plus courant mais le plus faible ; Ce n’est pas parce qu’une ligne fonctionne qu’elle se comporte correctement.
  • Couverture des branches : indique si chaque branche if (à la fois vraie et fausse) a été testée. Plus significatif qu'une ligne.
  • Couverture des conditions : tester séparément chaque sous-condition dans des conditions complexes.
  • Couverture des chemins : combinaisons de chemins logiques dans le code. C’est le plus complet mais difficile à atteindre pleinement dans la pratique.
Attention : le pourcentage de couverture n'est pas un « score de qualité ». Une couverture de lignes à 100 % vous indique que les lignes fonctionnent ; non pas qu'il produise le résultat correct (la pseudo-passe dans l'unité 1). Utilisez le champ d'application comme une réponse à la question « où n'ai-je jamais regardé », et non comme une assurance que « tout a été testé ».

Angles morts de la portée

Les métriques de couverture mesurent uniquement la quantité de code qui a été exécutée ; ne peut pas voir : (1) les exigences non testées (le code existe mais la règle métier est erronée), (2) le code manquant (aucune portée pour un contrôle qui n'a jamais été écrit), (3) les combinaisons données/état, (4) la convivialité, les performances, la sécurité. Par conséquent, la couverture des exigences (chaque critère d’acceptation doit être satisfait par au moins un test) doit être placée à côté de la couverture du code. L’IA est très utile pour réaliser la cartographie exigences-tests (matrice de traçabilité).

Tests basés sur les risques : où déployons-nous les efforts ?

Risque = probabilité (chance de casse) × impact (dommage en cas de casse). Avec l'IA, vous pouvez établir une liste de fonctionnalités sur ces deux axes et créer une carte thermique. Les domaines à forte probabilité × élevés (paiement, authentification, intégrité des données) méritent les tests les plus intenses ; Les tests de lumière dans les zones basses × basses (un écran de préférence rarement utilisé) sont suffisants.

zone

probabilité

Impact

Risque

Densité des tests

Flux de paiement

moyen

très élevé

haut

Profond + automatisation

authentification

moyen

très élevé

haut

Profond + sécurité

Recherche de produits

haut

moyen

Moyen-élevé

Automatisation + découverte

Photo de profil

faible

faible

faible

contrôle de la lumière

Page d'aide

faible

trop bas

trop bas

examen

Le piège de la poursuite de la portée

Faire du pourcentage de couverture un objectif (par exemple, la règle « l'équipe doit respecter une couverture de 90 % ») a un effet secondaire dangereux : les développeurs et les testeurs se concentrent sur l'augmentation du pourcentage plutôt que sur la gestion du risque réel. Le résultat est souvent une portée gonflée, sans assertions ni tests triviaux : le nombre semble joli mais il n'y a aucune protection. C'est le phénomène de corruption du critère lorsqu'il devient lui-même le but : « quand une mesure devient un but, elle cesse d'être une bonne mesure ». Utilisez l’oscilloscope comme un outil de diagnostic et non comme un rapport sur les performances.

Une approche plus saine consiste à lire le champ d'application de manière directionnelle : « Pourquoi la couverture des agences est-elle bloquée à 40 % dans le module de paiement critique ? » La question est « la couverture globale est-elle de 90 % ? » C’est bien plus précieux que la question. Demandez à AI de décomposer le rapport de portée par module et niveau de risque ; Mettez en évidence les zones à haut risque avec une faible couverture. Ainsi, la portée devient une boussole qui oriente le travail plutôt qu'un pourcentage aveugle.

Attention : Le slogan « couverture à 100 % » est un piège. Tester du code (accesseurs simples, parties générées automatiquement) est de faible valeur ; les efforts qui y sont consacrés sont détournés des règles métier à haut risque. L’objectif est de tester chaque comportement et risque important, pas chaque ligne.

Invite faible/Invite forte

Faible : « Augmenter ma couverture de tests. »
Fort : "Compte tenu de cette liste de critères d'acceptation et de ces cas de test existants. (1) Tableau indiquant quels critères d'acceptation n'ont été satisfaits par aucun test (écart de couverture des exigences).

Invite puissante ; combine la portée avec le risque commercial et donne la priorité à une main-d'œuvre limitée.

Quatre modèles copiables

1) Lacune dans la portée des exigences :

Compte tenu des critères d'acceptation suivants et de ces cas de test. Produire un tableau de traçabilité : chaque critère -> test(s) qui y répondent. Les critères qui ne comportent aucun test sont appelés « ÉCART DE COUVERTURE » et les tests qui ne se connectent à aucun critère sont appelés « NÉCESSAIRE ? Note : Critères : [...] / Tests : [...]

2) Notation des risques :

Notez cette liste de fonctionnalités/modules de 1 à 5 sur les axes de probabilité (probabilité de rupture) et d'impact (dommages en cas de rupture). Risque = probabilité × impact. Triez dans un tableau et spécifiez le type de test recommandé (unité/API/UI/reconnaissance/sécurité) pour chaque zone à haut risque. Liste : [...]

3) Interprétation de la portée :

Le rapport de couverture suivant a été fourni (% de ligne, branche). Dites-moi ceci : - Qu'est-ce que ces chiffres ne prouvent PAS ? - Quelles sont les zones qui pourraient être à risque malgré une couverture élevée des lignes ? - Quels tests supplémentaires recommanderiez-vous pour les lacunes que la couverture ne voit pas (exigence, combinaison de données, sécurité) ? Rapport : [coller]

4) Plan à durée limitée :

Il reste [X heures] avant la diffusion. Le classement des risques et les lacunes de couverture suivants sont indiqués. Durant cette période, le plan de tests qui réduira le risque maximum est préparé par ordre de priorité. Énoncez clairement ce qu'il ne faut PAS tester consciemment et le risque accepté de le faire.Données : [...]

trois mini-cases

Cas 1 : couverture à 100 %, confiance zéro. Une équipe affichait une couverture de ligne de 94 %. L'analyse « Interprétation de la portée » a montré que la plupart des tests étaient sans assertion, ce qui signifie qu'ils exécutaient des lignes mais ne vérifiaient rien. La couverture de protection réelle était bien inférieure. L'équipe ne s'est pas concentrée sur les chiffres mais sur les tests de mutation (unité 10) ; le taux réel de détection des erreurs a doublé.

Cas 2 — Priorité corrigée de la carte des risques. Une équipe consacrait 40 % de ses efforts de test à un écran de reporting rarement utilisé, sautant le flux de paiement parce qu'il « fonctionne tout simplement ». La notation des risques de l’IA a montré ce déséquilibre. Le travail a été redistribué ; Deux semaines plus tard, un bug à fort impact a été découvert dans le flux de paiement et a été résolu avant la mise en ligne.

Cas 3 — Conscient hors de portée. Quatre heures après le début d'une version, l'équipe a décidé quoi tester et quoi ignorer consciemment avec le modèle « horaire limité ». Deux flux à haut risque ont été testés en profondeur ; un filtre de préférence à faible risque a été documenté comme « risque accepté » et ignoré. La décision était transparente et motivée ; La version est sortie en toute sécurité.

Erreurs courantes

  • Confondre pourcentage de couverture et qualité. Lire la couverture des rangées élevées comme une assurance « testée ».
  • Je regarde simplement la couverture du code. Couverture des exigences de saut (test de chaque critère d'acceptation).
  • Tester également sans prendre en compte le risque. Allouer la main-d’œuvre aux zones à faible risque et négliger les flux critiques.
  • Se cacher hors de portée. Ne pas documenter ce qui n'a pas été testé lorsqu'il n'y avait pas assez de temps ; Des surprises après la sortie.
  • Accepter le score de risque de l'IA sans aucun doute. L'IA ne connaît pas entièrement le contexte du produit ; Ajustez les scores avec un œil expert.

En résumé

La couverture des tests et les tests basés sur les risques sont deux outils permettant de diriger des efforts limités vers le bon endroit. Les métriques de couverture (ligne, branche, condition, chemin) montrent ce qui a été touché mais ne prouvent pas qu'il s'est comporté correctement ; La portée est une carte, la confiance ne l’est pas. Placez la couverture des exigences à côté de la couverture du code. Notez les caractéristiques avec la formule risque = probabilité × impact et dirigez l'effort vers le plus de risque. L'IA rend les lacunes visibles, évalue les risques, planifie un temps limité ; mais la priorité finale et la décision de « retrait conscient » appartiennent à l'expert qui connaît le contexte commercial.

Tâche de candidature

Choisissez un module de votre propre projet. Exécutez le modèle « écart de portée des exigences » avec l'IA et découvrez quels critères d'acceptation ne sont pas testés. Classez ensuite les sous-fonctionnalités du module sur les axes probabilité × impact avec « notation des risques ». Répartissez les 3 heures (hypothétiques) de temps de test dont vous disposez avec le « planning limité » ; Notez ce que vous ne testerez pas consciemment et le risque accepté. Ajoutez un test concret qui comblera l’écart de couverture à risque le plus élevé que vous trouvez.

liste de contrôle

  • [ ] Je lis le pourcentage de couverture sous forme de carte, pas de qualité.
  • [ ] Outre la couverture du code, j'ai également supprimé la couverture des exigences.
  • [ ] J'ai noté les caractéristiques par probabilité × impact et je les ai classées par risque.
  • [ ] J'ai redirigé l'effort de test vers le risque le plus élevé.
  • [ ] J'ai documenté des domaines qui n'ont pas été consciemment testés et qui n'ont pas reconnu les risques.
  • [ ] J'ai examiné les scores de risque d'AI en fonction du contexte de mon produit.