Obtenez la couverture la PLUS ÉTENDUE pour la conformité MISRA C ! En savoir plus >>

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 du 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. Cela permet d'obtenir des métriques de qualité et de couverture plus précises, tout en exposant des parties de code mort, non testées ou sous-testées de l'application.

En conséquence, la couverture des applications fournit un aperçu extrêmement puissant des risques. Dans la plupart des organisations, les tests unitaires sont le principal véhicule pour la couverture de conduite. 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.

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'exhaustivité de la couverture des systèmes critiques pour la sécurité dépend de la métrique du niveau d'intégrité de la sécurité des applications (SIL ou ASIL) utilisée dans diverses industries et du niveau d'assurance de développement (DAL) couramment utilisé en avionique. La rigueur fait référence aux éléments structurels du code. Celles-ci sont généralement décomposées en l'instruction de code, la branche, les décisions de condition modifiées et avec Parasoft, vous pouvez également accéder à un niveau de granularité de couverture beaucoup plus fin, tel que 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 du code, fusionnez les résultats de la couverture du test pour obtenir une vue complète et mesurée de la couverture du 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 fini de tester ? »

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 le coût des défauts

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.

Meilleures 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 automatiquement analyser et générer des cas de tests unitaires pour éliminer les problèmes de pointeur nul, les conditions de valeur hors limite, la division par zéro et de nombreux autres types de défauts. De plus, ces scénarios de test peuvent être activés pour produire une couverture de code et, dans certains cas, vous permettre d'obtenir 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

Pour commencer à collecter la couverture du code, familiarisez-vous avec vos besoins en matière de couverture. Peut-être que votre industrie et votre type d'application ne nécessitent pas l'obtention de mesures de couverture, mais vous voulez vous assurer 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.

L'un des moyens les plus simples d'obtenir une couverture de code est lors de l'implémentation, lorsque les ingénieurs créent des cas de test unitaires pour tester leur code. Des solutions comme Parasoft C/C++test peuvent être intégrées directement dans votre IDE et fournir cette fonctionnalité, offrant une courbe d'apprentissage très courte pour l'utilisateur. Ces cas de test unitaires peuvent être réutilisés par l'équipe d'assurance qualité 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.

 

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 des données de couverture pour obtenir vos métriques de couverture de code complètes. Les rapports de couverture peuvent être générés à partir de votre IDE et exportés vers le DTP du tableau de bord de reporting 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.

Exemple de couverture de code

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

Capture d'écran du tableau de bord Parasoft Report Center Complete Code Coverage.

 

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. Module de couverture du test C/C++ est optimisé pour minimiser l'impact sur les performances d'exécution et tester l'empreinte binaire, ce qui le rend adapté à une utilisation avec des applications serveur haut de gamme, ainsi qu'avec des systèmes très limités basés sur des microcontrôleurs 16 bits.

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.

Questions fréquemment posées

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. Cela permet des mesures de qualité et de couverture plus précises tout en exposant le code mort, les parties non testées ou sous-testées de l'application. En conséquence, la couverture des applications fournit un aperçu extrêmement puissant des risques. Dans la plupart des organisations, les tests unitaires sont le principal véhicule pour la couverture de conduite.

La couverture du code doit être déterminée par vos besoins ou objectifs en matière de couverture. Avez-vous besoin de satisfaire à une norme fonctionnelle de sécurité (DO-178C pour l'avionique ou ISO 26262 pour l'automobile, ou IEC 62304 pour le médical) qui impose ou recommande une couverture à 100 % ? Ou peut-être souhaitez-vous simplement améliorer la qualité de votre code, donc 60% pourrait être votre objectif initial. Déterminez également le type de couverture de code structurel que vous devez satisfaire. Il peut s'agir de l'appel, de la ligne, de l'instruction, du bloc, de la fonction, 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.

Nous recommandons une couverture de code d'au moins 60 %, ce qui devrait être facile à obtenir. Cela vous rassurera un peu, mais sachant que 40% du code n'a pas été testé, vous risquez de passer des nuits blanches.

Certains recommandent 70 à 80 %, mais la meilleure façon de déterminer si vous devez augmenter votre pourcentage de couverture est basée sur le nombre de défauts identifiés. S'il s'agit d'un nombre élevé, la qualité du code est un problème et nous vous recommandons d'augmenter la couverture de votre code. Sachez que même avec une couverture de code à 100%, cela ne garantit pas que tous les défauts ont été identifiés. Il ne fournit qu'une réduction du risque.

Oui, l'obtention d'une couverture de code à 100 % est possible. Vous pouvez y parvenir grâce à l'agrégation de diverses méthodes de test et à l'observation de l'exécution du code à l'aide de votre débogueur. Par exemple, les tests unitaires peuvent vous rapprocher de votre objectif de 100 %, mais pour les lignes de code qui nécessitent des circonstances très spécifiques pour s'exécuter, comme le code défensif, cela peut prendre des semaines, des mois, des années, ou vous pouvez ne jamais atteindre cet événement . Si votre outil de couverture ne permet pas d'atteindre une couverture de code à 100 %, vous pouvez utiliser votre débogueur et, dans certains cas, éditer la pile d'appels et parcourir le code découvert par inspection visuelle.

Sachant que vos tests n'ont oublié aucun code non testé est votre signal. Cependant, vos objectifs d'analyse de couverture de code doivent être basés sur toute exigence de conformité ou sur l'objectif de votre organisation d'améliorer la qualité du code. Si l'exigence est une couverture de relevé de 100 %, une couverture de succursale et une couverture MC/DC, alors c'est votre cible. Lorsque vous avez testé toutes vos lignes de code et que vous avez atteint le pourcentage de couverture prévu par le contrat, vous avez terminé. Gardez à l'esprit que les tests open source ne sont pas aussi précis ou fiables que les outils de test développés par des professionnels, vous voudrez donc utiliser des outils certifiés, tels que ceux proposés par Parasoft.

Absolument! Les solutions d'automatisation des tests de Parasoft ont été intégrées aux pipelines Azure et à d'autres outils tels que GitHub, GitLab, Jira et d'autres qui automatisent votre flux de travail d'intégration continue et de livraison continue. Les intégrations offrent une flexibilité, comme l'utilisation de l'API de ligne de commande pour automatiser non seulement les tests de couverture de code, mais tous vos tests logiciels en appelant toutes vos suites de tests.