Rendez les tests de régression manuels plus rapides, plus intelligents et plus ciblés. Voyez-le en action >>
En savoir plus sur le test Parasoft C/C++.
Rejoignez notre démo de produit mensuelle de 30 minutes.
Inscrivez-vousWEBINAIRE
La couverture de code mesure la quantité de code source d'une application testée par diverses méthodes, telles que les tests unitaires, les tests manuels et les tests fonctionnels automatisés. Les objectifs de pourcentage de couverture de code peuvent être subjectifs. L'exhaustivité de la couverture dans les systèmes critiques pour la sécurité dépend du niveau d'intégrité de sécurité (SIL) utilisé dans différents secteurs et du niveau d'assurance de conception (DAL) couramment utilisé en avionique. Pour la conception d'applications critiques pour la sécurité où une défaillance peut entraîner la mort, les normes réglementaires et industrielles exigent une couverture de code structurelle de 100 %.
Cette présentation aborde le sujet essentiel de la couverture de code pour les systèmes C/C++ embarqués, en expliquant son importance, les différents types de mesures et son application pratique. Nous explorons comment réaliser des tests approfondis, notamment dans les environnements critiques pour la sécurité, et présentons des outils qui simplifient le processus.
La couverture de code est une mesure qui indique la quantité de code source de votre application exécutée pendant les tests. Elle permet de répondre à la question : « Avons-nous suffisamment testé ? » En mettant en évidence le code non testé, elle permet de détecter les bugs potentiels et d'identifier le code mort. La méthode la plus courante pour y parvenir est l'instrumentation du code, qui consiste à ajouter du code supplémentaire pour suivre l'exécution des instructions, des décisions ou des branches. Cette instrumentation enregistre ensuite l'exécution, permettant ainsi de calculer et de visualiser un pourcentage de couverture de code, souvent avec le code surligné en vert (exécuté) ou en rouge (non exécuté).
La présentation comprenait une démonstration présentant :
Dans le monde embarqué, C et C++ sont fréquemment utilisés dans les systèmes critiques pour la sûreté et la sécurité. Des secteurs comme l'automobile (ISO 26262), l'avionique (DO-178C) et les dispositifs médicaux (CEI 62304) ont des exigences réglementaires et des normes de processus strictes. Ces normes attribuent souvent des niveaux d'intégrité de sécurité (SIL) ou des niveaux d'assurance de conception (DAL) aux composants logiciels. Des niveaux plus élevés, indiquant un risque accru en cas de défaillance du logiciel, exigent généralement des tests plus rigoureux. Par exemple, le niveau SIL 4 de la norme CEI 61508 recommande fortement une couverture à 100 % pour les instructions, les branches et les MC/DC. Le point commun de ces normes est l'accent mis sur la couverture des instructions, des branches et des MC/DC, car ces normes sont considérées comme les meilleures pratiques par les experts du secteur pour garantir un code de haute qualité, sûr, sécurisé et fiable.
Atteindre la couverture du code peut être réalisé par différentes méthodes de test :
De nombreuses organisations combinent les résultats de ces différentes méthodes de test pour atteindre leurs objectifs de couverture globale. Par exemple, la couverture des tests unitaires peut être fusionnée avec celle des tests système.
La couverture du code est un élément essentiel d'un pipeline d'intégration/livraison continue (CI/CD). Les outils permettent d'automatiser l'instrumentation, l'exécution et le reporting des données de couverture, en s'intégrant parfaitement aux systèmes de build et aux plateformes CI/CD comme Jenkins, GitLab et Azure DevOps. Cela permet d'obtenir un retour d'information en temps réel sur la qualité du code et de gérer efficacement les risques.
En définitive, la couverture de code est une technique puissante pour garantir la qualité et la fiabilité des systèmes C/C++ embarqués, notamment dans les domaines critiques pour la sécurité. En comprenant les différents critères de couverture et en exploitant les outils appropriés, les équipes de développement peuvent atteindre leurs objectifs de test plus efficacement.