Découvrez GoogleTest certifié TÜV avec Agentic AI pour les tests C/C++ !
Plus de détails »
Aller à la section
Blog Parasoft
Découvrez comment surveiller les indicateurs de couverture de code et identifier et corriger efficacement les lacunes de couverture des logiciels critiques pour la sécurité à l'aide de C/C++test CT avec GoogleTest certifié TÜV SÜD.
Aller à la section
Pour les équipes développant des systèmes critiques pour la sécurité, le respect des exigences de couverture de code ne se limite pas à l'exécution de tests ; il nécessite un flux de travail fondamentalement intégré entre votre framework de tests unitaires, la traçabilité des exigences et les outils de couverture.
Les tests unitaires sont un élément fondamental de processus de vérification et de validation (V&V) pour les logiciels embarqués critiques pour la sécurité. Toutes les principales normes de sécurité fonctionnelle exigent une preuve objective de l'exhaustivité des tests au niveau unitaire.
Cette exhaustivité est généralement démontrée par la traçabilité des exigences et les rapports de couverture du code structurel. Par conséquent, tout framework de tests unitaires utilisé dans le cadre de la conformité Le contexte doit s'intégrer parfaitement au système de gestion des exigences (RMS) du projet et aux outils de couverture de code.
Dans un scénario de développement idéal, les équipes commencent par définir des exigences claires et sans ambiguïté, accompagnées d'une spécification de test complète. L'implémentation se déroule conformément à ces exigences, et les rapports de couverture de code ne fournissent qu'une preuve objective de l'exhaustivité de la vérification au niveau du code source.
En pratique, les équipes atteignent rarement cet idéal. Elles entament souvent la mise en œuvre et le développement des tests avec des exigences incomplètes ou évolutives.
Dans certains cas, les exigences formelles peuvent être totalement absentes, par exemple lorsque les processus de vérification et de validation et de sécurité sont appliqués rétrospectivement à un code source existant qui n'a pas été initialement développé dans le cadre d'un système de sécurité fonctionnelle.
Dans de telles situations, le développement, la définition des exigences et la création des tests se déroulent en parallèle. Ce flux de travail oblige les équipes à :
Un écart de couverture peut indiquer du code mort, un cas de test manquant ou une exigence incomplète ou non définie.
Dans tous les cas, l'enjeu crucial est de comprendre pourquoi une structure de code donnée reste non couverte. Pour des indicateurs relativement simples comme la couverture de lignes, cette analyse est souvent directe. Cependant, des critères plus avancés comme la couverture conditionnelle/décisionnelle modifiée (MC/DC) peuvent rendre l'analyse des causes profondes beaucoup plus complexe.
Bien que ce flux de travail soit loin d'être idéal, en pratique, le processus commence souvent par l'identification d'une lacune en matière de couverture, suivie de l'analyse des stimuli manquants nécessaires pour exécuter le code non couvert.
Sur la base de cette analyse, les développeurs créent un cas de test pour couvrir le comportement qui n'avait pas été testé auparavant.
Le cas de test ainsi obtenu sert de base à une meilleure compréhension du système et oriente les améliorations et définitions d'exigences ultérieures.
Les outils de tests unitaires bien intégrés peuvent soutenir ce processus en fournissant des détails sur les lacunes de couverture et, dans certains cas, en aidant à générer les cas de test initiaux pour orienter les affinements des exigences comme décrit ci-dessus.
Test CT Parasoft C/C++ Cette version de GoogleTest, certifiée TÜV, intègre un système de rapports de couverture de code, simplifiant considérablement l'analyse des écarts de couverture. Elle inclut également des fonctionnalités d'intelligence artificielle pour la génération automatisée de cas de test.
Avec C/C++test CT, les équipes peuvent exécuter leurs suites de tests GoogleTest et collecter la couverture de code à la fois localement et au sein de pipelines CI.
De nombreuses équipes apprécient la possibilité d'exécuter localement un sous-ensemble ciblé de tests Google Test avant de valider leurs modifications, puis d'exécuter la suite complète de tests dans leur pipeline d'intégration continue (CI). Les résultats de couverture peuvent ensuite être récupérés depuis le pipeline CI et analysés directement dans l'IDE, ce qui permet un cycle de rétroaction efficace. Pour les équipes utilisant Visual Studio Code, C/C++test CT offre une prise en charge simplifiée de ce flux de travail.
Une fois les rapports de couverture disponibles, l'étape suivante consiste à analyser les écarts. C/C++test CT simplifie ce processus, notamment pour les critères de couverture plus exigeants tels que MC/DC.
La capture d'écran ci-dessous illustre un exemple de résultats de couverture MC/DC pour une décision spécifique au sein d'une fonction.

Un exemple de résultats de couverture MC/DC pour une décision spécifique au sein d'une fonction dans Parasoft C/C++test CT.
Comme indiqué, les résultats fournissent une analyse détaillée des conditions couvertes et non couvertes par la décision, ainsi qu'un tableau de l'ensemble minimal précalculé de vecteurs de test requis pour atteindre une couverture complète de 100 %. Cet ensemble minimal est particulièrement précieux car il oriente les développeurs vers les combinaisons de conditions spécifiques à mettre en œuvre pour satisfaire aux exigences MC/DC.
Une fois les lacunes de couverture identifiées, l'étape suivante consiste généralement à développer un ou plusieurs cas de test couvrant le code non couvert, permettant ainsi aux équipes d'évaluer si des mises à jour ou des améliorations des exigences sont nécessaires. Comme indiqué précédemment, bien qu'il s'agisse d'une approche réactive, cette pratique est courante dans de nombreux projets.
Ces cas de test peuvent être créés manuellement, sur la base des informations de couverture fournies par C/C++test CT, ou générés automatiquement à l'aide des outils disponibles.
C/C++test CT inclut un serveur MCP qui expose des données de couverture structurées aux agents d'IA. Pour les métriques avancées telles que MC/DC, ces données contiennent des informations détaillées sur les vecteurs de test manquants nécessaires pour explorer pleinement toutes les conditions d'une décision donnée.
Avec le serveur MCP de C/C++test CT, les utilisateurs peuvent, entre autres requêtes, demander à l'agent IA : « Générez des cas de test GoogleTest pour éliminer les lacunes de couverture dans le fichier <> ».
Le graphique ci-dessous présente une vue simplifiée du flux de données entre le moteur de couverture, le serveur MCP et l'agent d'IA.
Flux de données simplifié entre le moteur de couverture, le serveur MCP et l'agent d'IA
Grâce à ces données structurées, les agents d'IA peuvent générer automatiquement des cas de test Google Test ciblant les scénarios non couverts, ce qui contribue à améliorer la couverture tout en réduisant l'effort de développement. Les développeurs peuvent ensuite examiner ces tests générés et évaluer leur pertinence par rapport au comportement du système et aux exigences existantes ou à définir.
En combinant un framework GoogleTest certifié TÜV avec une analyse de couverture avancée et une génération de tests basée sur l'IA, C/C++test CT simplifie l'obtention d'une couverture de code complète et la conformité. Il permet aux équipes de développement C++ modernes d'identifier les lacunes en matière de tests, de générer les tests manquants et de maintenir un flux de travail de vérification efficace et évolutif.
Découvrez comment votre équipe peut atteindre ses objectifs de couverture de code grâce à C/C++test CT intégré à GoogleTest, le seul logiciel certifié TÜV.
Blog
5 min de lecture
COURTE DÉMO
Livre blanc