Webinaire en vedette : MISRA C++ 2023 : tout ce que vous devez savoir | Voir le séminaire

Couverture du code : évaluez et assurez la confiance dans vos tests

La solution de Parasoft pour la couverture de code expose le code de votre application qui a et n'a pas été testé. Les utilisateurs peuvent effectuer une couverture de code à différents niveaux, fonction ou unité, l'intégralité du fichier ou l'intégralité de l'application sur le matériel cible ou les environnements hôtes. Et vous pouvez agréger la couverture des différentes méthodes de test telles que les tests unitaires et les tests système.

Qu'est-ce que la couverture de code ?

La couverture du code structurel est l'identification du code qui a été exécuté et enregistré dans le but de déterminer si le système a été testé de manière adéquate.

La couverture de code exprime le degré auquel le code source de l'application est exercé par toutes les pratiques de test, y compris les tests unitaires, les tests manuels, les tests fonctionnels automatisés, etc. Ça aussi:

  • Permet des mesures de qualité et de couverture plus précises.
  • Expose le code mort et les parties non testées ou sous-testées de l'application.

Par conséquent, la couverture des applications fournit un aperçu extrêmement puissant des risques. Dans la plupart des organisations, les tests unitaires sont le principal moyen de couverture. Et bien que les tests unitaires soient une pratique de test précieuse qui offre également plusieurs avantages axés sur les processus, ils sont également coûteux en termes d'expertise et de temps pour créer, gérer et maintenir les tests.

La couverture du code peut être exploitée dans le cadre du processus d'intégration continue (CI), ainsi que dans le cadre du flux de travail du bureau du développeur. Vous pouvez également effectuer des analyses avancées sur le code source et identifier les tests unitaires qui doivent être réexécutés en fonction des modifications de code effectuées par le développeur.

Véhicule électrique enfichable avec lueur et flou de mouvement et traînées de lumière rouge rendu 3d

Ces outils de couverture de code sont particulièrement utiles dans les industries pour le développement intégré d'applications critiques pour la sécurité et la sûreté où les systèmes logiciels ne peuvent pas échouer, ou des vies seront perdues.

L'étendue de la couverture des systèmes critiques pour la sécurité dépend de la métrique du niveau d'intégrité de sécurité de l'application (SIL ou ASIL) utilisée dans diverses industries et du niveau d'assurance de développement (DAL) couramment utilisé en avionique. La minutie fait référence aux éléments structurels du code. Ceux-ci sont généralement décomposés en instruction de code, branche, décisions de condition modifiées et avec Parasoft, vous pouvez également accéder à un niveau de granularité de couverture beaucoup plus fin, comme le code objet ou le langage d'assemblage.

Comment la couverture du code est-elle mesurée ?

La couverture du code est souvent identifiée ou mesurée par l'instrumentation du code. Cela se fait en ornant le code source avec un code de suivi supplémentaire pour déterminer pendant son exécution si chaque chemin d'instruction, de branche et/ou de décision de condition modifiée (MC/CD) a été exécuté.

Ce qu'il faut savoir sur le gonflement du code

Il est important de savoir que l'instrumentation du code provoque un gonflement du code. L'augmentation de la taille du code n'est généralement pas un problème. Pour les cibles embarquées avec des contraintes de mémoire, l'augmentation peut avoir un impact sur la capacité à charger le code sur votre matériel cible pour les tests.

Étapes pour empêcher le gonflement du code pour les cibles intégrées

  1. Partie instrumentale du code.
  2. Effectuez le test.
  3. Collectez les métriques de couverture de code.
  4. Répétez en instrumentant l'autre partie du code et en désinstrumentant ce que vous venez de tester.
  5. Après avoir testé toutes les parties de code, fusionnez les résultats de la couverture de test pour obtenir une vue complète et mesurée de la couverture de code pour l'ensemble de l'application.

Quel pourcentage de couverture de code est idéal ?

Les objectifs de pourcentage de couverture de code peuvent être subjectifs dans certains cas. Dans d'autres cas, ils sont obligatoires. Lors de la création 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 à 100 % du code structurel.

Pour les applications qui ne sont pas critiques pour la sécurité, la couverture du code a tendance à être laissée à l'organisation de développement pour décider. Le niveau de confort commun pour ces types de circonstances est d'atteindre un objectif de couverture du code de 80 %.

Les 6 principaux avantages de la couverture du code

Réponses "Ai-je terminé les tests ?"

La couverture du code peut aider à mesurer l'exhaustivité des tests et garantit que vous avez inspecté chaque ligne de code de votre application pendant l'exécution. Tirer parti d'une combinaison de méthodes de test telles que l'analyse statique, les tests unitaires, les tests système, les tests de performances, etc., est le meilleur moyen de garantir la qualité du code.

Satisfaire les besoins de conformité de la couverture du code

Respectez les exigences de couverture de code pour les normes de sécurité fonctionnelle telles que DO-178B/C, ISO 26262, ISO 21434, IEC 62304, IEC 61508 et EN 50128. Les exigences de couverture de code aident à garantir la sécurité, la sécurité et la fiabilité du code en exposant le code non testé et en l'éliminant défauts.

Réduire les défauts de coût

Les défauts de code trouvés dans la production sont les plus chers. Empêchez-les de passer entre les mailles du filet en mettant en évidence le code qui n'a pas été testé avant de publier votre application. Cela peut être effectué sur le poste de travail du développeur ou automatisé dans le cadre du pipeline d'intégration continue (CI).

Effectuer la vérification du code d'assemblage / objet

Pour les exigences absolues de couverture de code critiques pour la sécurité, telles que DO-178C Niveau A, Parasoft offre une couverture de code au niveau de l'assemblage. Gagnez des jours - voire des semaines - d'efforts manuels à forte intensité de main-d'œuvre et sujets aux erreurs grâce à notre solution automatisée.

Remplir la couverture de code sur le matériel hôte et cible

Des tests approfondis des applications embarquées critiques pour la sécurité nécessitent de tester le matériel sur la cible et dans l'environnement hôte. Parasoft fournit une instrumentation de code permettant à la fois de capturer et de signaler la couverture de code structurel pour les instructions, les branches, la couverture de décision de condition modifiée (MC/DC), et plus encore.

Obtenez une couverture de code à 100%

Bien que vous puissiez généralement atteindre des objectifs de couverture de code structurel de 100 % grâce aux tests unitaires, gagnez du temps et des efforts en agrégeant les résultats de couverture de code obtenus automatiquement à partir des tests système. Et puis complétez le code non couvert restant à l'aide de tests unitaires.

Outils de couverture de code structurel

Déployez la suite de produits Parasoft pour assurer la couverture du code structurel des applications écrites en C, C ++, Java, C # et VB.NET.

Icône de test Parasoft C/C++

Parasoft C / C ++test

Collectez la couverture des tests unitaires, des tests système, des tests manuels, ainsi que de toutes les autres méthodes d'exécution de test utilisées. Parasoft C/C++test prend en charge une gamme de métriques de couverture (Branch, Statement, MC/DC, etc.), que les équipes peuvent utiliser dans le développement d'applications natives et croisées.

Icône Parasoft Jtest

Jtest Parasoft

Collectez et surveillez la couverture du code lors des tests fonctionnels manuels ou automatisés effectués sur votre application Java. Les utilisateurs peuvent envoyer des données de couverture et des résultats de test à fusionner et à mettre en corrélation pour l'analyse, ce qui fournit des informations sur la qualité des tests de l'application et la qualité de vos tests.

Icône Parasoft dotTEST

Parasoft dotTEST

Collectez des informations sur la couverture du code pour les applications autonomes et Web écrites en C# et VB.NET. Installez l'application surveillée sur la même machine où dotTEST est installé ou sur une autre machine.

8 bonnes pratiques pour la couverture du code

L'obtention de la quantité de code exercé lors des tests est une métrique puissante afin de comprendre le niveau de risque restant dans l'application. Voici quelques bonnes pratiques à suivre.

Pipeline CI

L'intégration des tests et de la couverture du code dans votre système de build augmentera l'efficacité, favorisera la collaboration et offrira une plus grande visibilité sur l'ensemble de votre cycle de vie de développement logiciel.

Tests du système

Tirez parti de vos tests système pour obtenir une couverture de code et identifier les tests manquants qui peuvent exposer des bogues cachés.

Conseiller en couverture

Ne perdez pas de temps à essayer de déterminer toutes les valeurs d'entrée et les conditions préalables requises dans un scénario de test afin d'obtenir une couverture sur une instruction insaisissable, une branche ou une ligne de code MC/CD. Utilisez le conseiller en couverture.

Couverture globale

Utilisez les différentes méthodes de test que vous devez effectuer pour accélérer vos besoins de couverture. Une couverture globale peut être obtenue à partir de tests système, d'intégration, unitaires et manuels.

Génération de cas de test automatisée

Les solutions Parasoft peuvent analyser et générer automatiquement des cas de test unitaires pour éliminer les problèmes de pointeur nul, les conditions de valeur hors limites, la division par zéro et de nombreux autres types de défauts. De plus, ces cas de test peuvent être activés pour produire une couverture de code et, dans certains cas, vous fournir jusqu'à 90 % de couverture de code structurel.

Instrumentation partielle

L'instrumentation du code provoque un gonflement du code et l'augmentation de la taille du code peut avoir un impact sur la capacité à charger le code sur votre matériel cible à mémoire limitée pour le test. Instrumentez des portions de votre code à la fois, exécutez vos tests et agrégez vos métriques de couverture à chaque exécution.

Débogueur pour la couverture

Si vous devez satisfaire une couverture de code structurel à 100 % mais que vous disposez d'un code défensif qui ne s'exécutera que lorsque le système entrera dans un état de panne qui pourrait prendre des semaines, des mois, voire des années (ou peut-être jamais), utilisez votre débogueur pour simuler les conditions nécessaires et effectuer une inspection visuelle de l'exécution/couverture du code.

Code mort

Si du code est trouvé parce qu'il n'a aucun chemin vers son exécution, pour des raisons de sécurité et de sûreté, assurez-vous qu'il est supprimé et qu'il ne sort jamais sur le terrain.

Comment démarrer avec la couverture de code

Capture d'écran du tableau de bord de couverture complète du code de Parasoft Report Center.

Couverture du code Parasoft dans les solutions de reporting et d'analyse de tableau de bord IDE et DTP.

1. Familiarisez-vous avec vos besoins en matière de couverture

Pour commencer à collecter une couverture de code, familiarisez-vous avec vos besoins en matière de couverture. Peut-être que votre secteur d'activité et votre type d'application ne nécessitent pas l'obtention de métriques de couverture, mais vous souhaitez garantir ou améliorer la qualité du code, donc 75 % pourrait être votre objectif initial.

Si votre secteur exige la conformité à une norme fonctionnelle telle que DO-178C pour l'avionique ou ISO 26262 et ISO 21434 pour l'automobile ou CEI 62304 pour le médical, déterminez si vous devez obtenir une couverture de code à 100 % ou si un autre pourcentage de couverture de code est recommandé. Sachez également quel type de couverture de code structurel vous devez satisfaire. Il peut s'agir de la fonction, de la ligne, de l'instruction, du bloc, de l'appel, du chemin, de la décision, de la condition simple, du MC/DC, de l'objet/de l'assemblage ou d'une combinaison de ceux-ci.

2. Obtenir la couverture du code

L'un des moyens les plus simples d'obtenir une couverture de code est lors de la mise en œuvre, lorsque les ingénieurs créent des cas de test unitaire pour tester leur code. Avec des solutions comme Parasoft C/C++test et Jtest,

  • Les utilisateurs bénéficient d'une courbe d'apprentissage très courte car il s'intègre directement dans votre IDE et fournit cette fonctionnalité.
  • Les équipes d'assurance qualité peuvent réutiliser ces cas de test unitaire pour les tests de régression et/ou dans le cadre du processus de construction dans un workflow de pipeline CI automatisé.

Sachez que l'instrumentation du code peut entraîner une surcharge du code et si vous testez sur du matériel cible, vous devrez peut-être effectuer une instrumentation partielle. Le code instrumenté peut également altérer les performances de l'exécution, vous pouvez donc souhaiter vous familiariser avec les différentes fonctionnalités d'optimisation qui s'offrent à vous.

3. Collecte et rapport de vos mesures de couverture de code

La collecte et le reporting de vos métriques de couverture de code sont essentiels. Il existe plusieurs méthodes selon que votre application s'exécute sur une cible intégrée ou sur un système ou un serveur entièrement doté de ressources.

En fin de compte, vous obtiendrez ou fusionnerez les données de couverture pour obtenir vos métriques de couverture complète du code. Des rapports de couverture peuvent être générés à partir de votre IDE, et ils peuvent être exportés vers le DTP du tableau de bord de rapport et d'analyse de Parasoft. Dans DTP, les utilisateurs peuvent inspecter visuellement les zones à haut risque, comprendre ce qui doit être traité ensuite et produire des rapports de conformité et d'audit.

Pourquoi les outils de couverture de code Parasoft ?

La solution de Parasoft pour la couverture de code fournit des commentaires critiques sur l'exhaustivité et la rigueur du processus de test, en corrélant les tests et les résultats de la couverture de code structurel. Vous pouvez utiliser ces résultats ou métriques pour évaluer l'exhaustivité des tests au niveau des unités, de l'intégration et du système grâce à notre prise en charge de tous les types importants de couverture de code (fonction, appel, ligne, instruction, bloc, chemin, décision, condition simple et MC/ DC), y compris la couverture des objets/assemblages.

Les résultats de couverture sont disponibles directement dans l'IDE, avec des vues et des faits saillants pratiques dans l'éditeur de code source, ainsi que sous la forme de rapports HTML ou pdf statiques, et de rapports dynamiques via le tableau de bord de reporting centralisé de Parasoft.

Les utilisateurs peuvent surveiller les applications exécutées nativement sur le bureau, sur plusieurs plates-formes à l'aide de simulateurs ou sur du matériel embarqué réel. Le module de couverture de C/C++test est optimisé pour minimiser l'impact sur les performances d'exécution et l'empreinte binaire de test, ce qui le rend adapté à une utilisation avec des applications haut de gamme basées sur des serveurs, ainsi qu'avec des systèmes très limités basés sur 16 bits. microcontrôleurs.

Lorsqu'ils sont connectés au Process Intelligence Engine de Parasoft, les utilisateurs bénéficient de l'analyse d'impact des tests. Pour chaque test effectué, y compris manuel, au niveau du système ou basé sur l'interface utilisateur, les tests sont enregistrés non seulement pour les tests/échecs et les résultats, mais également pour leur impact sur la couverture de la base de code.

Chaque test supplémentaire est superposé à ces informations existantes, créant une image complète de la réussite et de la couverture des tests. Au fur et à mesure que le code est modifié, l'impact est clairement visible sur l'enregistrement sous-jacent, mettant en évidence les tests de couverture qui échouent désormais ou le code qui n'est plus testé. La collecte de ces informations à divers degrés de détail permet aux développeurs et aux testeurs d'identifier rapidement ce qui doit être modifié/corrigé pour la prochaine exécution de test.

Avec Parasoft, les équipes peuvent se concentrer sur la couverture du code pour les domaines de développement actif, au lieu de l'intégralité de la base de code, ce qui peut être particulièrement problématique lorsque l'on travaille avec des bases de code héritées. Plutôt que d'essayer uniquement d'obtenir un numéro de couverture pour l'ensemble de la base de code, Parasoft vous aide à identifier les parties du code qui changent.

Le tableau de bord de reporting de Parasoft corrèle les données du test C/C++ avec les changements observés dans la base de code pour concentrer l'équipe de développement sur l'obtention de niveaux plus élevés de couverture de code pour ces parties spécifiques et modifiées de la base de code. Avec Parasoft, vous pouvez minimiser l'impact des changements en gérant efficacement le changement lui-même.

Foire aux Questions