Découvrez comment la solution Parasoft Continuous Quality permet de contrôler et de gérer les environnements de test pour fournir des logiciels de haute qualité en toute confiance. Inscrivez-vous pour la démo >>

BLOG

Vérification du code MISRA C/C++

Vérification du code MISRA C/C++ Temps de lecture : 9 minutes

MISRA est la norme légendaire par rapport à laquelle les équipes de développement mesurent une grande partie des logiciels d'aujourd'hui. Mais qu'est-ce que MISRA exactement, comment s'est-il développé, comment les développeurs C et C++ évaluent-ils les normes par rapport à lui, et comment savent-ils qu'ils sont en conformité ?

Dans cet article, nous examinons le contexte fascinant de la création de la MISRA. Nous répondons également aux questions ci-dessus et révélons comment MISRA aide les programmeurs de code C++ et C à écrire efficacement tout en répondant aux problèmes de sécurité et de sûreté actuels.

Concrètement, nous regardons :

  • Définition et contexte de la MISRA
  • Règles et directives de la MISRA
  • Conformité
  • Signalement:
  • Utiliser avec le code hérité

Qu'est-ce que MISRA?

Les normes MISRA contiennent des directives et des règles de code pour l'écriture de logiciels. Les secteurs de l'automobile, de l'aérospatiale et de la défense, de la médecine, de l'automatisation industrielle et des chemins de fer, entre autres, utilisent la norme pour aider leurs développeurs à écrire du code source qui garantit la sûreté, la sécurité et la fiabilité du logiciel. Étant donné que les ingénieurs en logiciels embarqués utilisent les langages de programmation C et C++ pour écrire du code pour les logiciels critiques pour la sécurité, les créateurs de la norme MISRA les ont conçus pour les codeurs qui utilisent ces deux langages.

Contexte

Le consortium de la Motor Industry Software Reliability Association (MISRA) est similaire à l'ISO (Organisation internationale de normalisation) et à la CEI (Commission électrotechnique internationale), qui définissent des directives générales de conformité pour l'industrie, telles que des normes pour le développement de systèmes électriques/électroniques. ISO 26262 , publiée en 2011, est la norme internationale pour certifier la sécurité de l'électronique sur les véhicules routiers. Les systèmes logiciels qui ont atteint la conformité ISO/IEC peuvent être certifiés sûrs par les autorités de vérification.

MISRA, un consortium d'industries liées à l'automobile, a développé ses premières directives en 1998, MISRA c1998. Le consortium s'est réuni à la suite du programme britannique de recherche sur les systèmes critiques de sécurité, que le gouvernement britannique a institué pour relever certains des défis auxquels l'industrie automobile est confrontée en raison de l'utilisation accrue de logiciels dans la fabrication et l'exploitation des véhicules. Certaines des industries d'origine qui ont contribué à l'élaboration de la norme, qui sont également actuellement des membres actifs du comité directeur, comprennent :

  • Bentley Motors
  • Systèmes diesel Delphi
  • Ford Motor Company Ltd
  • Horiba Mira Ltée
  • Jaguar Land Rover
  • Protéan Électrique Ltée
  • Ricardo SA
  • L'Université de Leeds
  • Services d'ingénierie Visteon Ltée
  • ZF TRW

Bien que le consortium ait créé à l'origine la norme pour le industrie automobile, d'autres industries embarquées ont adopté la norme, y compris celles qui utilisent une technologie embarquée qui connecte des appareils tels que les systèmes loT.

Le comment et le pourquoi de la MISRA

Au début des années 1990, l'électronique prenait de plus en plus d'importance dans l'automobile. Il en était de même pour le logiciel embarqué qui faisait partie intégrante de cette électronique. Ainsi, les ingénieurs et les fabricants ont commencé à se rendre compte que la fiabilité du logiciel était d'une importance vitale, à la fois pour des raisons de sécurité et pour des raisons commerciales. Le défi est encore plus grand aujourd'hui car un logiciel pour une seule voiture peut impliquer plus de 100 millions de lignes de codage.

Logiciels dans les voitures et les camions

Les constructeurs automobiles utilisent des logiciels dans les opérations de moteur et de groupe motopropulseur. Il surveille et fournit la quantité correcte de carburant dans les ICE (moteurs à combustion interne) et fournit des données à l'ECM (module de commande du moteur, parfois appelé ECU ou unité de commande du moteur). Il s'agit du principal ordinateur automobile qui recueille des informations sur la consommation de carburant, la puissance générée par le moteur, les émissions et d'autres données vitales liées au moteur, essentielles pour une conduite sûre et efficace. (Les véhicules électriques et hybrides ont des exigences logicielles similaires liées au moteur et au groupe motopropulseur.)

Les fabricants utilisent également des logiciels pour faire fonctionner les ordinateurs de bord pour les capteurs omniprésents sur les véhicules actuels, y compris la surveillance des portes et des fenêtres, les systèmes de climatisation et les capteurs de stationnement et de circulation. Ils les utilisent également dans des systèmes critiques pour la sécurité comme les airbags et l'ABS. Davantage de logiciels liés à l'exploitation sont certainement dans l'avenir des véhicules routiers, les ingénieurs et les concepteurs accordant une attention particulière aux capacités de conduite autonome, à l'amélioration de l'efficacité énergétique et à une sécurité accrue.

Au-delà de l'industrie automobile

Les industries du monde entier acceptent les règles MISRA C pour l'écriture de code C critique pour la sécurité et la sûreté. Les règles et directives inspirent confiance parce qu'elles sont lisibles, concises et parce qu'elles se concentrent sur l'essentiel. Bien que l'application de la norme MISRA ne garantisse pas que le logiciel soit exempt de problèmes de sécurité et de qualité, elle aide les ingénieurs logiciels à écrire un code plus sûr, plus robuste, plus portable et plus facile à entretenir. (Les directives MISRA traitent également des vulnérabilités de sécurité, mais d'autres normes de codage comme CERT C abordent spécifiquement les problèmes de sécurité écrits dans le code.)

Normes de codage MISRA pour la sécurité fonctionnelle

Aujourd'hui, les équipes de développement utilisent des normes de codage comme méthode pour définir, gérer et utiliser un groupe de pratiques de codage, l'objectif principal étant la cohérence. L'objectif principal d'une règle de codage est de limiter l'utilisation du langage afin d'empêcher le développeur de faire des choses qui sont « mauvaises » et peuvent être potentiellement dangereuses.

Les développeurs peuvent éviter de nombreux défauts dans les logiciels en adoptant des restrictions d'utilisation de la langue judicieuses. Il en résulte une uniformité de style, qui est précieuse en tant que discipline dans un projet logiciel.

Polyvalence et vulnérabilité de C et C++

L'aspect polyvalent des langages C++ et C permet à un développeur d'écrire du code qui peut être involontairement incorrect et éventuellement dangereux. Il lui est facile d'écrire du code qui respecte les exigences de la norme du langage, mais cela peut néanmoins entraîner un comportement indésirable et des « plantages » du programme. Ceux-ci incluent, par exemple, le code qui accède à la mémoire au-delà des paramètres d'un processus arithmétique, ou d'un tableau qui entraîne des violations de mémoire ou de limites.

Il est évidemment important d'identifier ces problèmes potentiels. Mais le but de MISRA est de prévenir les problèmes, pas simplement de les identifier. Un compilateur peut en détecter certains mais l'utilisation d'un outil d'analyse dédié est plus efficace.

La norme MISRA souligne que le respect des règles de codage n'est qu'un élément du développement réussi d'un logiciel. Les développeurs doivent intégrer chaque projet de programmation dans un environnement d'ingénierie discipliné qui comprend des flux de travail de développement méthodiques et l'application d'outils de validation éprouvés.

Directives et règles de langage MISRA C et C++ couramment utilisées

Chaque norme MISRA comprend un ensemble de paramètres et de règles de codage, ainsi que des supports. Les documents de support sont une partie supplémentaire de la norme et fournissent des informations de base importantes essentielles pour tout programmeur qui souhaite obtenir la conformité.

Examinons les normes de codage C et C++ MISRA actuelles elles-mêmes et leurs brèves descriptions.

  • MISRA C++ 2008. Bien que C soit resté le langage de codage dominant, cette version parlait de l'utilisation accrue de C++. Remarque : De nombreuses entreprises optent pour la standardisation sur AUTOSAR C++ 14, qui couvre les modifications récentes apportées à C++. En fait, AUTOSAR et MISRA ont uni leurs forces pour produire la prochaine génération de normes.
  • MISRA C 2012. Sortie en 2013, cette version, également appelée MISRA C3, a développé davantage la norme MISRA C. Il s'est appuyé sur 14 ans d'expérience d'interaction avec des milliers d'organisations et d'utilisateurs, et a inclus de nouvelles règles, a comblé certaines lacunes et a amélioré les explications et les descriptions derrière les règles existantes. La norme a étendu la prise en charge de C99 et les a maintenues pour C90, C11 et C18. Il a également apporté un certain nombre d'améliorations qui ont réduit la complexité et le coût de la conformité.
    • MISRA C 2012 Amendements pour la sûreté et la sécurité. Avec l'évolution du langage de programmation C et pour souligner que MISRA C:2012 était tout aussi utile dans les applications de sécurité, MISRA a publié plusieurs addendums et amendements à la norme qui offraient de nouvelles règles et directives pour une meilleure couverture de la sécurité et des vulnérabilités de sécurité bien connues.
  • Conformité MISRA 2020. Le présent document établit un cadre pour assurer la conformité à la norme de codage MISRA. Elle remplace les exigences de conformité, de processus et d'écart dans les versions précédentes de la norme.

Atteindre la conformité MISRA à l'aide de l'analyse statique

La norme de codage MISRA fournit des règles et des directives détaillées afin que les entreprises puissent protéger leurs applications contre les erreurs d'exécution et les pannes logicielles, et les rendre moins sujettes aux vulnérabilités de sécurité et de sûreté. La conformité à la norme MISRA permet d'améliorer la syntaxe, crée la conformité du code et facilite la portabilité. Pour les équipes qui n'utilisent pas de solutions ou d'outils d'analyse statique (ou SAST - Static Application Security Testing), la validation de la conformité peut être problématique. Parasoft simplifie le processus, ce qui est essentiel pour garantir la livraison rapide des logiciels et la sécurité du codage.

Livre blanc gratuit: Premiers pas avec l'analyse statique

Pour parvenir à une conformité réussie, les solutions doivent offrir :

  1. Application dynamique en vérifiant la conformité MISRA via une analyse de code statique chaque fois que les codeurs modifient le logiciel.
  2. Intégration de l'analyse statique dans votre pipeline CI/CD rationalisé avec des tests continus qui fournissent rapidement des logiciels de haute qualité.
  3. Validation de la conformité en créant des aperçus et des rapports détaillés de haut niveau auxquels vous pouvez vous référer rapidement.

Il est important d'appliquer la conformité MISRA tout au long du cycle de vie du développement logiciel, y compris pendant la mise en œuvre du code pour les tests de décalage à gauche et pour accélérer les révisions de code. Cela fournit non seulement des améliorations de la qualité, mais aussi des mesures de progrès, une traçabilité continue et une mise en application. L'automatisation de la documentation et des rapports de conformité selon MISRA Compliance 2020 est également un facteur clé pour économiser les ressources et le temps, et pour éviter la frustration lors de la résolution des violations elles-mêmes.

Des outils comme Parasoft peuvent être configurés pour détecter un sous-ensemble de l'ensemble des normes MISRA. Cela réduit la quantité de bruit produite par l'analyse et met davantage l'accent sur le traitement des violations graves.

Rapport de conformité

L'un des problèmes associés aux entreprises qui parviennent à se conformer à la MISRA a été l'absence d'un mécanisme standard pour démontrer la conformité. Pour résoudre ce problème, la MISRA a publié « MISRA Compliance 2020 : Achieving Compliance with MISRA Coding Guidelines », qui est la dernière mise à jour qui fournit une définition plus concrète de la « conformité MISRA » et identifie plusieurs livrables requis pour démontrer la conformité à la norme MISRA.

  • Le résumé de conformité aux lignes directrices. Un enregistrement obligatoire et principal de la conformité globale du projet. Le GCS comprend une entrée pour chaque directive, son niveau de conformité, tout écart et/ou re-catégorisation.

Capture d'écran du rapport de conformité MISRA pour un projet répertoriant la directive, la catégorie (conseillée ou requise), la conformité (conforme aux violations, non conforme ou conforme), le nombre de violations et le nombre d'écarts.

  • Le plan de reclassement des lignes directrices. Toutes les directives obligatoires doivent être suivies pour atteindre la conformité. Cependant, les lignes directrices obligatoires et consultatives peuvent être reclassées dans des catégories plus strictes (par exemple, de conseil à obligatoire), mais seules les lignes directrices consultatives peuvent être reclassées dans des catégories moins strictes (par exemple, de conseil à non appliqué).

Capture d'écran d'un plan de recatégorisation des directives MISRA en utilisant le test Parasoft C/C++ comme outil d'analyse. Le plan répertorie les descriptions des lignes directrices de la MISRA avec les catégories originales et révisées.

  • Rapport sur les écarts. Votre projet peut présenter des écarts par rapport aux directives ou des violations de règles et être toujours considéré comme conforme si les écarts sont justifiés, documentés dans le rapport et n'ont pas d'impact sur la sécurité.

Capture d'écran du rapport de déviation MISRA en utilisant Parasoft C/C++test comme outil d'analyse. Le rapport répertorie chaque règle et l'état Aucune règle activée, Aucune déviation ou Déviation. Pour ceux qui présentent des écarts, fournit des détails tels que l'ID de règle, le type d'écart et l'historique des modifications.

  • Plan d'application des lignes directrices. Montre comment vérifier chaque directive MISRA. Dans le contexte de la conformité MISRA avec Parasoft, le GEP mappe les directives MISRA aux règles d'analyse de code Parasoft et à la fonctionnalité PAO.

Capture d'écran du plan d'application des directives MISRA qui répertorie les détails de la directive, de la catégorie, de la description, du compilateur, de l'ID de la règle Parasoft et de la révision manuelle.

Certifié pour une utilisation sur les logiciels critiques pour la sécurité, y compris dans les dispositifs médicaux

Certifié par le TÜV SÜD, le test C/C++ automatise l'application et le suivi des critères de codage d'analyse comme MISRA. Cela inclut une plate-forme de test unitaire. Cette plateforme intègre la création de tests et leur exécution, ainsi que le reporting de couverture. Puis le hub centralisé d'analyse et de reporting de Parasoft PAO Parasoft, qui est également certifiée TÜV, agrège et corrèle les données d'analyse et de test de la Parasoft C / C ++test .

Atteindre la pleine conformité MISRA avec le code hérité, y compris les systèmes embarqués

C'est un fait que les développeurs réutilisent le code hérité pour les logiciels critiques pour la sécurité. Cependant, la réutilisation du code hérité et la réalisation d'une conformité complète à la MISRA C 2012 peuvent être intimidantes.

La conformité MISRA est beaucoup plus facile à gérer et à atteindre au fur et à mesure que le code est écrit. Le document MISRA C 2012 fournit même un avertissement que nous pouvons interpréter lors de son application aux programmes hérités :

« … un projet qui vérifie la conformité à la MISRA à la fin de son cycle est susceptible de passer un temps considérable à recoder, revoir et tester à nouveau. On s'attend donc à ce que le processus de développement logiciel nécessite l'application précoce des principes MISRA C.

Notant la réutilisation des logiciels hérités, le MISRA Consortium Limited, l'organisation responsable de la création et de la maintenance de la norme MISRA, a créé la version mise à jour et actuelle de MISRA Compliance:2020. Ce document fournit des conseils aux développeurs qui écrivent du nouveau code et à ceux qui utilisent du code adopté ou hérité.

Cependant, la distinction peut ne pas être totalement claire. Par exemple, lors du développement d'un produit, un codeur écrit un logiciel pour un prototype uniquement pour découvrir que le projet doit être conforme à la MISRA, il doit donc revenir en arrière et appliquer les directives. Bien qu'il ne s'agisse pas d'appliquer MISRA au code existant, il en est de même en ce sens que lorsque le code est scanné ou analysé, les résultats révèlent des milliers, voire des dizaines de milliers, de violations. Ajoutez à cela le fait que les auteurs de logiciels embarqués déclarent souvent que développer un code entièrement conforme est trop difficile, la tâche de se conformer à MISRA peut sembler écrasante. Mais il est possible de trouver un juste milieu réaliste entre « intimidant » et la conformité.

Considérez l'objectif final

MISRA Compliance 2020 aide à clarifier comment prouver et démontrer la conformité à la fin d'un projet. La remise des quatre documents obligatoires est indispensable. Tenez compte des éléments suivants pour la conformité aux codes hérités et nouveaux :

  1. Avez-vous établi un GRP (Guideline Re-categorization Plan) au démarrage du projet ? Les normes MISRA suggèrent de négocier avec le client et également de créer plusieurs GRP adaptés au code adopté, que les développeurs peuvent utiliser sans modification, ainsi que pour le nouveau code.
  2. Le client a-t-il examiné les modèles GPS (Résumé de conformité aux directives) au début du projet ? Sont-ils complets et acceptables ?

Parasoft automatise les rapports nécessaires pour aider les entreprises à respecter le programme de conformité MISRA 2020.

Une approche incrémentale

Il est judicieux d'établir un workflow pour corriger les violations dans un délai raisonnable sans interrompre le développement du code et donc le dégrader. Les recommandations cruciales comprennent :

  • Établir une base de référence. Après l'analyse initiale, marquez les violations comme « à traiter plus tard », en définissant ceci comme référence. À partir de ce moment, lorsque les codeurs développent un nouveau code, maintenez une stratégie de « pas de nouvelles violations ».
  • Fixation d'un délai. Fixez une date après laquelle les développeurs doivent avoir résolu toutes les violations pour chaque fichier source.
  • Priorisation en fonction de la gravité. Le chef d'équipe sélectionne les violations en fonction de leur degré de gravité et les développeurs corrigent toutes celles qu'il leur attribue.

Pour rendre cela plus facile, le hub de reporting PAO de Parasoft comprend un tableau de bord d'état de conformité.

Livre blanc gratuit : Comment choisir un outil d'analyse statique moderne

Qualification des outils

Les outils qualifiants ont pour but de certifier qu'ils sont valables pour l'usage prévu. Il comprend la preuve de la façon dont l'équipe est parvenue à les qualifier et la justification derrière cela. Parasoft C/C++test et notre outil de reporting, Parasoft DTP ont été certifiés TÜV SÜD pour une utilisation sur des applications critiques pour la sécurité, et un kit de qualification d'outil existe pour certaines des normes de processus les plus strictes comme DO-178B / C et ce dont ils ont besoin.

Formation et compétence du personnel

La norme MISRA met également l'accent sur la compétence, l'expertise et la formation du personnel en tant que facteurs clés pour évaluer l'état de préparation du produit. Cela inclut la reconnaissance des risques de violations, et la configuration et l'utilisation correctes des outils de développement et de l'analyse statique.

Conclusion

Il est important de prendre en charge la conformité MISRA tout au long du cycle de vie du développement logiciel. Atteindre la conformité avec MISRA est plus facile avec la solution complète de Parasoft. Grâce à l'application continue, à la traçabilité et à l'automatisation de la documentation, les équipes peuvent économiser du temps, des ressources et atténuer les frustrations liées au respect de cette directive.

Le texte est le titre du livre blanc La valeur de l'utilisation d'une solution de test unifiée C/C++ avec un bouton d'appel à l'action rouge en dessous : Télécharger le livre blanc

« MISRA », « MISRA C » et le logo triangulaire sont des marques déposées de The MISRA Consortium Limited. ©The MISRA Consortium Limited, 2021. Tous droits réservés.

Écrit par

Ricardo Camacho

Responsable principal du marketing produit technique pour les solutions de test embarquées de Parasoft, Ricardo possède une expertise dans le SDLC et l'automatisation des tests des applications embarquées en temps réel, critiques de sécurité et de sécurité, ainsi que la conformité des logiciels aux normes de l'industrie.

Recevez les dernières nouvelles et ressources sur les tests de logiciels dans votre boîte de réception.