BTC TestStack · Cas d’usage

Analyse de la couverture du code

Ai-je testé tout mon code ?

Couverture du code

limiter.c

1int clamp(int v) {
2 if (v > 5)
3 return MAX;
4 return v;
5}
Instructions
100%
Décision
100%
MC/DC
100%

Actualisation automatique en arrière-plan. Aucune exécution de mesure distincte.

Le défi

Une mesure de couverture inefficace.

La couverture fondée sur l’instrumentation alourdit chaque étape du flux de travail. La valeur dont vous avez besoin n’est jamais accessible en un clic : chaque consultation se paie par de nouvelles exécutions.

Exécutez tout, juste pour mesurer

Le code instrumenté ne rend compte que des éléments effectivement exercés. Obtenir une métrique impose donc d’exécuter l’intégralité de la suite de tests, même si une seule fonction vous intéresse.

Modifiez un test, réexécutez-les tous

Chaque modification d’un test invalide le résultat global. Pour pouvoir à nouveau vous fier à la valeur de couverture, vous devez réexécuter toute la suite — un coût qui se répète à chaque itération.

Puis recommencez sur le code de production

L’instrumentation modifie le binaire : les résultats obtenus ne valent donc pas pour le code livré. Démontrer la couverture du code de production non instrumenté impose de tout exécuter une seconde fois, soit deux fois plus de travail.

Intégré · Automatisé · Certifié

La couverture est un résultat, pas une tâche à part entière.

BTC TestStack calcule et met à jour la couverture en arrière-plan chaque fois qu’un cas de test est créé, modifié ou supprimé. Le calcul s’effectue par sous-fonction et par sous-système : la couverture de tout sous-ensemble qui vous intéresse est accessible en un clic, sans réexécution ni étape distincte de génération de rapport.

01

Mis à jour automatiquement

Couverture mise à jour en arrière-plan. Pas de passage d’instrumentation, pas d’exécution de mesure dédiée.

02

Par sous-fonction et sous-système

Les résultats sont détaillés jusqu’à chaque sous-fonction et chaque sous-système, au lieu d’être réduits à une seule valeur pour l’ensemble de la version compilée.

03

Chaque sous-ensemble, en un clic

Sélectionnez un périmètre pour consulter immédiatement son niveau de couverture. Les données étant déjà présentes, le filtrage ne déclenche jamais une autre exécution.

04

Chaque objectif relié aux tests qui le couvrent

Pour chaque objectif de couverture, vous voyez immédiatement la liste des cas de test qui le couvrent — pas de références croisées manuelles pour déterminer quel test a atteint quel objectif.

Quatre domaines de couverture

Tout ce dont vous avez besoin pour mesurer, en un seul endroit.

Métriques structurelles, robustesse, vérifications de domaine et objectifs personnalisés : tout l’éventail de la couverture, présenté côte à côte et toujours à jour.

Couverture structurelle

L’ensemble des métriques structurelles requises pour constituer les éléments de preuve de sécurité fonctionnelle, calculées simultanément.

Instructions (STM)Décision / branche (D)Condition (C)MC/DCFonction + appel de fonctionSwitch/caseOpérateur relationnel
ISO 26262-6 · Tableaux 12 et 15
Couverture des instructions, des branches et MC/DC au niveau de l’unité, ainsi que couverture des fonctions et des appels de fonction au niveau de l’intégration.

Objectifs de robustesse

Les catégories d’erreurs d’exécution sont traitées comme des objectifs de couverture : BTC TestStack démontre soit que le code y résiste, soit génère le test qui provoque l’échec.

  • Division par zéro
  • Conversion de type réductrice (avec perte d’information)
  • Débordement de tableau
ISO 26262-6 · tests de robustesse
Prend en charge la démonstration de l’absence d’erreurs d’exécution et la vérification de la robustesse (tableau 13).

Vérifications de plages de valeurs

Définissez ou importez les valeurs et plages de valeurs valides pour chaque variable d’interface. BTC TestStack mesure directement la couverture de ces domaines.

ISO 26262-6 · Tableau 10
Les vérifications de classes d’équivalence et de valeurs limites sont mesurées automatiquement.

Objectifs de couverture définis par l’utilisateur

Un éditeur donnant accès à toutes vos variables d’interface vous permet d’exprimer chaque objectif sous la forme d’une expression booléenne ou mathématique, puis de mesurer si vos tests l’atteignent.

ISO 26262 · objectifs spécifiques au projet
Des objectifs de couverture complémentaires définis dans votre plan de sécurité, au-delà des tableaux normatifs.
Génération intelligente de tests

Lorsque la couverture n’est pas encore complète, BTC TestStack comble l’écart pour vous. Au lieu de deviner les entrées, un algorithme de vérification de modèles dérive l’ensemble de cas de test le plus petit et le plus court qui atteint une couverture structurelle de 100 %.

L’algorithme accède directement à vos entrées et à vos étalonnages. Lorsqu’un objectif ne peut pas être atteint, il fournit une preuve mathématique de son inaccessibilité : vous pouvez alors le classer comme code mort au lieu de chercher en vain à le couvrir.

Les outils reposant sur l’aléatoire tâtonnent. La vérification de modèles apporte une preuve.
model_check · generate
100%couverture structurelle atteinte
Éprouvé
Ensemble de test généré · minimal
TC_01v = 4 → branche fausse
TC_02v = 6 → branche vraie
TC_03v = 5 → limite
1 objectif dont l’inaccessibilité est démontrée · signalé comme code mort
Avantages clés

Ce que l’analyse de couverture apporte à votre équipe.

01

Toujours à jour

Les mises à jour en arrière-plan maintiennent la valeur de couverture à jour — aucune analyse distincte à planifier.

02

Une couverture là où vous en avez besoin

Résultats par sous-fonction et par sous-système : la couverture de n’importe quel sous-ensemble est accessible en un clic.

03

Tout l’éventail des métriques

Objectifs structurels, de robustesse, de domaine et définis par l’utilisateur : le tout dans un seul rapport, et non quatre outils.

04

Démontre l’inaccessibilité

Les objectifs qui ne peuvent pas être atteints sont démontrés inaccessibles et signalés comme du code mort — inutile de chercher à les couvrir en vain.

Visualisez une couverture de 100 % sur votre propre code.

Une licence d’évaluation comprend un atelier de lancement avec nos ingénieurs, configuré de bout en bout sur l’une de vos unités réelles.