Temps de lecture : 4 minutes
Dans les industries développant du logiciel critique en C ou C++, les standards MISRA C/C++ sont régulièrement cités comme les règles de codage à appliquer. Mais en pratique, celles-ci sont rarement suivies de manière complète, et les chefs de projet ou ingénieurs qualité logiciel ont de grandes difficultés à s’en assurer.
Existe-t-il des moyens simples et efficaces de diminuer l’effort de vérification, et maximiser leur respect ?
Qu'est-ce que MISRA ?
Le consortium MISRA (Motor Industry Software Reliability Association) est née au début des années 1990 d'un regroupement de sociétés automobiles, puis d'experts en Assurance Qualité du Logiciel comme LDRA, dans le but de partager et de promouvoir leurs bonnes pratiques en termes de développement et tests de logiciels, et pour améliorer la qualité, la sûreté puis la cybersécurité des systèmes embarqués.
Suite aux premiers travaux de recommandations sur le processus logiciel, incluant la mise en place de règles de codage et menant à de nombreuses questions à ce sujet, le consortium décida de créer les standards de règles de codage MISRA C et MISRA C++ (ces deux langages étant les plus utilisés au sein des développements embarqués) devenus par la suite les références des autres secteurs industriels (avionique, militaire, ferroviaire, médical, …)
Suite aux premiers travaux de recommandations sur le processus logiciel, incluant la mise en place de règles de codage et menant à de nombreuses questions à ce sujet, le consortium décida de créer les standards de règles de codage MISRA C et MISRA C++ (ces deux langages étant les plus utilisés au sein des développements embarqués) devenus par la suite les références des autres secteurs industriels (avionique, militaire, ferroviaire, médical, …)
Les standards de règles de codage MISRA C et MISRA C++
Le but principal des 127 règles du MISRA C:1998, et repris dans toutes les versions postérieures, était d'améliorer la fiabilité des logiciels en réduisant le champ des possibilités du langage C, permissif et très peu typé, notamment celles entrainant un comportement non prévu par le C ISO/ANSI (et donc dépendantes du compilateur ou de l’environnement d’exécution).
Cette première version fut révisée en MISRA C:2004 afin de clarifier certaines règles (paradigme « une règle par problème »), puis en MISRA C:2012, supportant le C99, intégrant les notions de portée (chaque règle doit-elle être vérifiée par fonction de code ou globalement), de « Decidability » (la règle peut-elle être détectée par un outil d’analyse statique dans tous les cas ?), et de « Directive », qui sont des règles pour lesquelles il n’est pas possible de fournir une description complète de tous les cas possibles permettant leur vérification.
La dernière version du MISRA C est le MISRA C:2012 Amendment 1, mise à jour du MISRA C:2012 parue en mai 2016 sur le thème de la cybersécurité, afin d’intégrer une comparaison entre le MISRA C et l’ISO/IEC 14971 « C Secure », et ajoutant les quelques règles manquantes pour qu’un respect des règles MISRA C entraine automatiquement un respect de ce nouveau standard.
Entretemps, le consortium sortait le MISRA C++:2008, composé de 198 règles et avec des buts identiques aux standards C.
Vous souhaitez plus d’informations sur les règles de codage MISRA, ou obtenir un exemplaire des règles de codage ?
Cette première version fut révisée en MISRA C:2004 afin de clarifier certaines règles (paradigme « une règle par problème »), puis en MISRA C:2012, supportant le C99, intégrant les notions de portée (chaque règle doit-elle être vérifiée par fonction de code ou globalement), de « Decidability » (la règle peut-elle être détectée par un outil d’analyse statique dans tous les cas ?), et de « Directive », qui sont des règles pour lesquelles il n’est pas possible de fournir une description complète de tous les cas possibles permettant leur vérification.
La dernière version du MISRA C est le MISRA C:2012 Amendment 1, mise à jour du MISRA C:2012 parue en mai 2016 sur le thème de la cybersécurité, afin d’intégrer une comparaison entre le MISRA C et l’ISO/IEC 14971 « C Secure », et ajoutant les quelques règles manquantes pour qu’un respect des règles MISRA C entraine automatiquement un respect de ce nouveau standard.
Entretemps, le consortium sortait le MISRA C++:2008, composé de 198 règles et avec des buts identiques aux standards C.
Vous souhaitez plus d’informations sur les règles de codage MISRA, ou obtenir un exemplaire des règles de codage ?
Comment respecter les règles MISRA ?
Bien que chaque règle ait son intérêt propre, respecter le MISRA C:2012 Amendment 1, c’est respecter 156 règles et 17 directives ! De même avec le MISRA C++ et ses 198 règles : avoir en tête l’ensemble de ces règles durant le codage est très difficile. Cependant, et contrairement à une idée reçue, la complétude est tout à fait possible, les règles n’étant pas contradictoires entre elles, mais pouvant par contre imposer une rigueur importante pour leur respect conjoint.
Le consortium MISRA recommande l’utilisation d’un outil d’analyse statique afin d’automatiser la vérification d’une grande partie des règles, permettant au développeur de se focaliser sur sa véritable tâche, à savoir le codage, tout en diminuant les bugs logiciels et en maintenant un grand niveau de qualité au sein des développements.
Le consortium MISRA recommande l’utilisation d’un outil d’analyse statique afin d’automatiser la vérification d’une grande partie des règles, permettant au développeur de se focaliser sur sa véritable tâche, à savoir le codage, tout en diminuant les bugs logiciels et en maintenant un grand niveau de qualité au sein des développements.
La société LDRA participe depuis près de 20 ans à l’élaboration des standards de codage MISRA, notamment au travers de son président Mike Hennell et de Chris TAPP, ingénieur d'applications LDRA, président du groupe MISRA C++ et membre actif du groupe MISRA C depuis l’élaboration du premier standard de codage. LDRA a apporté au comité son expertise de plus de 40 ans en Assurance Qualité du Logiciel, et l’a mise au profit de ses clients en développant l’un des meilleurs outils du marché de vérification des règles de codage MISRA C & C++ : LDRA TBvision Statique / LDRArules.
L’offre ISIT en matière de MISRA C et MISRA C++
Vous souhaitez respecter les règles MISRA au sein de vos développements ? Plusieurs solutions s’offrent à vous :
- Utiliser un outil performant de vérification automatisé des règles MISRA, assurant à la fois un taux de couverture maximal des règles , mais aussi détectant pour chaque règle plus de cas de violations que les autres outils du marché : LDRA TBvision Statique / LDRArules
- Vérifier les règles MISRA ponctuellement : ISIT vous propose des prestations d’audits de code source, utilisant l’outil de référence LDRA TBvision Statique / LDRArules
- Formation « Mise en pratique des règles MISRA C »
"MISRA" est une marque déposée de la Motor Industry Research Association, détenue par le consortium MISRA. Certains passages de ce document sont des copyrights © The Motor Industry Research Association, 1998, 1999.