Menu
MISRA C : une référence pour la sécurité du code

MISRA C : une référence pour la sécurité du code

 Historique

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.
Les standards MISRA C et MISRA C++, ont été créés en 1998 avec pour objectif de définir un certain nombre de règles permettant d’utiliser les langages c / c++ avec plus de sureté.

  1. La première version de cette liste de règles se nomme MISRA C :1998. Elle regroupe un total de 127 règles dont le but principal est d’améliorer la fiabilité des logiciels.
  2. Par la suite il y aura deux autres révisions de ces standards, l’une en 2004 (MISRA C:2004) visant à clarifier certaines règles
  3. puis une seconde révision en mars 2013 (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.

 

Le standard Misra C est une référence dès que la sécurité du code est importante. Il est utilisé dans des entreprises telles que : Bosch, Ford Motor Company, Jaguar mais également chez Portalp pour leurs projets de portes palières de quais.

 

Quelques exemples de règles Misra 

  • Rule 18-4-1 "Dynamic heap memory allocation shall not be used."
    Dans le standard Misra l’allocation dynamique ne doit pas être utilisée pour des raisons de sécurité(débordement mémoire, libération d’espace non alloué, etc).
  • Rule 14.8.1 "The while statement should be followed by a compound statement {}."
    while (condition)  // Non conforme
DoSomething();
	
while (condition) // Conforme
{  
DoSomething();
}

Le but ici est d’éviter les confusions donc rendre explicite le contenu de la boucle while même dans le cas où celle-ci serait vide.

 

  • Rule 15.3.1 " The switch statement should have a default clause. "
    switch (condition)  // Non conforme
{
	    Case 0 :
	    // Do something
	    Break ;
}
	
switch (condition)  // Conforme
{
	    Case 0 :
	    // Do something
	    Break ;
	    
	    Default : 
	    Break ;
}

Ici on va rendre la prise en compte du default case même dans le cas où il est vide.

 

  • -Rule 9.5 " Array declarations should include an explicit size specification. "
    Array[] = {2,4,8} ;  // Non conforme
Array1[] ; // Non conforme
Array2[3] = {2,4,8} ; // conforme
Array3[5] ; // conforme

Il y a également des règles sur les conventions de nommages. Celles-ci doivent être décidées au préalable. Les deux plus connues sont le PascalCase : NomVariable1 et le camelCase : nomVariable2.

 

Comment intégrer les règles de codage Misra dans un projet

Deux solutions sont possibles pour intégrer MISRA à un développement :

  • Utiliser un outil automatisé d’analyse statique : L’utilisation d’un logiciel d’analyse statique tel que LDRA (qui fait partie du regroupement MISRA) permet d’automatiser la vérification des règles du standard MISRA. Le contrôle régulier du code permet d’améliorer la qualité de celui-ci et de diminuer les risques de bugs.
  • Faire des audits de code source de façon ponctuelle


Quelque soit le cas choisi, il est important de sensibiliser les développeurs amenés à travailler sur le projet sur l’utilisation de ces normes de codage afin de partir sur de bonnes bases et éviter d’avoir trop de reprise à faire par la suite.

 

Conclusion 

L’utilisation du standard MISRA couplée avec des règles de nommage et l’utilisation régulière d’un analyseur statique permet au développeur de se concentrer sur son code tout en assurant un code sûr et lisible.

Retour aux articles

C'est à lire...