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

Vérification du code MISRA C/C++

Portrait de Ricardo Camacho, directeur de la conformité de la sûreté et de la sécurité
le 30 novembre 2023
10 min lire

Les normes MISRA sont des références utilisées dans plusieurs industries pour mesurer les normes de code source écrites par les développeurs. Lisez la suite pour découvrir comment l'analyse statique et les solutions SAST de Parasoft peuvent vous aider à répondre aux exigences de conformité MISRA.

MISRA est la norme de codage légendaire par rapport à laquelle les équipes de développement mesurent une grande partie des logiciels actuels. Mais justement qu'est-ce que MISRA?

  • Comment MISRA s'est-elle développée ?
  • Comment les développeurs C et C++ évaluent-ils les normes par rapport à cela ?
  • Comment savent-ils qu'ils sont en conformité avec les directives MISRA ?

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

Concrètement, nous regardons :

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

Qu'est-ce que MISRA?

Les normes MISRA contiennent des directives de codage et des règles 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 logiciel embarqué 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 Motor Industry Software Reliability Association (MISRA) est composé de diverses entreprises partageant leurs meilleures pratiques de codage C et C++. Il est similaire à l'ISO (Organisation internationale de normalisation) et à la CEI (Commission électrotechnique internationale), qui établissent des directives générales de conformité de 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 de certification de la sécurité des véhicules routiers électroniques. Les systèmes logiciels qui ont atteint la conformité ISO/CEI 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 C:1998. Le consortium s'est formé à 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 était 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, comprenaient :

  • 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 comme l'Internet des objets (loT) et les systèmes IoT médicaux.

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 les automobiles. Il en était de même du logiciel embarqué qui faisait partie intégrante de ces appareils électroniques. Ainsi, les ingénieurs et les fabricants ont commencé à réaliser 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 du moteur et du groupe motopropulseur. Il surveille et fournit la quantité correcte de carburant dans les ICE (moteurs à combustion interne) et il 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 (VE) et les véhicules 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.

Plus de logiciels liés à l'exploitation sont certainement à 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 à la 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é. Les règles et directives inspirent confiance car elles sont lisibles, concises et 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 telles que CERT C traitent spécifiquement des vulnérabilités de sécurité écrites 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, avec l'objectif principal de cohérence. L'objectif principal d'une règle de codage est de limiter l'utilisation incorrecte du langage afin d'empêcher le développeur de faire des choses «mauvaises» et potentiellement dangereuses.

Les développeurs peuvent éviter de nombreux défauts dans les logiciels en adoptant des restrictions raisonnables d'utilisation du langage. Cela se traduit également par 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 polyvalence 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 des comportements indésirables et des plantages du programme. 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 la mémoire ou des limites.

Il est important d'identifier ces problèmes potentiels. Cependant, le but de MISRA est de prévenir les problèmes, pas seulement de les identifier. Un compilateur peut en détecter certains mais utiliser 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 cadre d'ingénierie discipliné qui comprend des workflows de développement méthodiques et applique des outils de validation éprouvés en cours d'utilisation.

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 et de brèves descriptions.

MISRA C 2012. MISRA C 2012 a été publié en 2013. Il s'est appuyé sur l'expérience de l'interaction avec des milliers d'organisations et sur les meilleures pratiques d'ingénieurs en logiciel pour fournir les meilleures directives de codage pour le langage de programmation C.

La première édition de la norme était MISRA C 1998, évoluant au fil des ans vers MISRA C:2004 puis MISRA C:2012. Initialement, la norme fournissait la prise en charge de C90 et a évolué pour étendre ses directives à la prise en charge de C99, C11 et C18. MISRA C 2012 a également apporté un certain nombre d'améliorations qui ont réduit la complexité et le coût de la conformité.

  • Amendements MISRA C 2012 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 proposaient de nouvelles règles et directives pour une meilleure couverture de la sécurité et des vulnérabilités de sécurité bien connues.

MISRA C 2023. Il s'agit de la dernière norme MISRA C. Il consolide MISRA C 2012 ainsi que tous les amendements et corrigendums qui ont été publiés à ce jour. La norme prend en charge le langage de programmation C, versions C90, C99, C11 et C18, et remplace MISRA C 2012.

MISRAC++2008. Publié en juin 2008 et développé en support de C++98 et C++11. Bien que le langage de programmation C soit resté le langage de codage dominant, cette norme a parlé du développement accru des applications C++. Cependant, de nombreuses entreprises ont choisi de normaliser à l'aide de la norme de codage AUTOSAR C++ 14, car elle prend en charge la version C++14 du langage de codage C++ au lieu de l'ancien C11. La version de codage C++, officiellement ISO/IEC 14882:2014 a été publiée en décembre 2014.

MISRAC++2023. AUTOSAR et MISRA ont uni leurs forces pour produire la prochaine génération de la norme de codage C++. MISRA C++ 2023 a été publié en octobre 2023 et offre aux ingénieurs logiciels la possibilité d'analyser leur code C++17 et C++20 moderne pour détecter les problèmes de sûreté et de sécurité.

Conformité MISRA 2020. Ce document établit un cadre pour assurer la conformité avec 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.

Comment atteindre la conformité MISRA à l'aide de l'analyse statique

La norme de codage MISRA fournit des règles et des directives approfondies afin que les entreprises puissent protéger leurs applications contre les erreurs d'exécution et les défaillances logicielles et les rendre moins sujettes aux vulnérabilités de sécurité.

La conformité à la norme MISRA contribue à améliorer la syntaxe, crée la conformité du code et facilite la portabilité. Pour les équipes qui n'ont pas utiliser l'analyse statique or SAST (tests statiques de sécurité des applications) solutions ou outils, la validation de la conformité peut être problématique. Parasoft simplifie le processus, ce qui est essentiel pour assurer la livraison rapide des logiciels et la sécurité du codage.

Premiers pas avec l'analyse statique

Pour parvenir à une conformité réussie, les solutions doivent fournir les éléments suivants.

  • Application dynamique en vérifiant la conformité MISRA par une analyse statique du code chaque fois que les codeurs modifient le logiciel.
  • Intégration de l'analyse statique dans votre pipeline CI/CD rationalisé avec des tests continus qui fournissent rapidement des logiciels de haute qualité.
  • 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 lors de 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 des améliorations de la qualité ainsi que des mesures de progression, une traçabilité continue et une application.

L'automatisation de la documentation et des rapports de conformité selon MISRA Compliance 2020 est 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 de la norme MISRA. Cela réduit la quantité de bruit produite par l'analyse et augmente l'accent mis sur la résolution des violations graves.

Démontrer la conformité avec les rapports

L'un des problèmes associés aux entreprises qui parviennent à se conformer à la MISRA est l'absence d'un mécanisme standard pour démontrer la conformité. Pour résoudre ce problème, MISRA a publié le document « MISRA Compliance 2020 : Achieving Compliance with MISRA Coding Guidelines » mentionné précédemment. Il 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 directives (GCS). Un enregistrement obligatoire et principal de la conformité globale du projet. Le GCS comprend une entrée pour chaque ligne directrice, son niveau de conformité, tout écart et/ou re-catégorisation.

Capture d'écran du rapport de conformité MISRA C 2023 pour un projet répertoriant la directive, la catégorie (consultative ou requise), la conformité (conforme avec 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 assurer la conformité. Cependant, les lignes directrices requises et consultatives peuvent être reclassées dans des catégories plus strictes, telles que de consultatif à requis. Cependant, seules les lignes directrices consultatives peuvent être reclassées dans des catégories moins strictes, par exemple d'avis à 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 directives, la catégorie, la description, le compilateur, les ID de règle Parasoft pour MISRA C 2023 et les détails de l'examen manuel.

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

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

Comment obtenir une conformité totale à 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 2023 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 2023 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.

Constatant la réutilisation de logiciels hérités, MISRA Consortium Limited, l'organisation responsable de la création et de la maintenance de la norme MISRA, a créé 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 à MISRA, il doit donc revenir en arrière et appliquer les directives.

Bien que cela n'applique pas MISRA au code hérité, il est similaire 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, et la tâche de se conformer à MISRA peut sembler écrasante. Mais trouver un juste milieu réaliste entre intimidant et conformité est possible.

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. Considérez ce qui suit pour la conformité au code hérité et nouveau.

  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 à satisfaire 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 ligne de base. 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 ».
  • Fixez-vous une date limite. Fixez une date après laquelle les développeurs doivent avoir résolu toutes les violations pour chaque fichier source.
  • Prioriser 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é.

Qualification des outils

La qualification d'outils a pour but de certifier qu'ils sont valables pour l'usage auquel ils sont destinés. Il comprend la preuve de la façon dont l'équipe est arrivée à les qualifier et la justification derrière cela. Le test C/C++ et le DTP de Parasoft ont été certifiés TÜV SÜD pour une utilisation sur des applications critiques pour la sécurité. Un kit de qualification d'outils existe pour certaines des normes de processus les plus strictes et leurs exigences telles que DO-178C.

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.

Découvrez comment votre équipe de développement peut obtenir la couverture MISRA la plus étendue.

« 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.