PVS-Studio: prise en charge des normes de codage MISRA C et MISRA C ++

PVS-Studio, MISRA C, MISRA C ++

À partir de la version 6.27, l'analyseur de code statique PVS-Studio peut classer ses avertissements selon les normes MISRA C et MISRA C ++. Grâce à la prise en charge de ces normes, l'analyseur est devenu possible d'utiliser efficacement pour améliorer la sécurité, la portabilité et la fiabilité des programmes pour les systèmes embarqués.

Cette année, nous avons commencé à prendre en charge des normes telles que CWE et SEI CERT dans l'analyseur PVS-Studio . Fondamentalement, le soutien se résumait à la classification des diagnostics déjà mis en œuvre dans l'analyseur selon ces normes. De plus, plusieurs nouveaux diagnostics ont été mis en œuvre ou plusieurs anciens diagnostics ont été étendus pour répondre davantage à ces normes.

Tableaux de conformité des diagnostics PVS-Studio à différentes normes:


Il est maintenant temps pour les normes MISRA C et MISRA C ++. Ce sont des normes de développement logiciel C et C ++ créées par MISRA (Motor Industry Software Reliability Association). L'objectif des normes est d'améliorer la sécurité, la portabilité et la fiabilité des programmes intégrés. Le texte des normes est payé.

Nous considérons la force de notre analyseur pour pouvoir le prendre et commencer à l'utiliser dans un grand projet existant. Vous pouvez exécuter PVS-Studio sur la base d'un code, détecter les anciennes erreurs, puis utiliser régulièrement l'analyseur pour détecter les nouveaux défauts le plus tôt possible.

De nombreux analyseurs empruntent un chemin différent et implémentent des diagnostics liés aux normes de codage. Ils suggèrent comment mieux nommer les variables, vous rappellent d'insérer des commentaires au début d'un fichier, etc. C'est nécessaire et utile. Cependant, dans ce cas, les analyseurs sont très «bruyants» et génèrent un grand nombre d'avertissements dans lesquels les avertissements concernant les erreurs sont noyés.

Nous avons décidé que PVS-Studio serait un analyseur qui recherche les erreurs. C'est son avantage concurrentiel. Le programmeur peut l'exécuter sur une grande base de code et être sûr qu'il ne sera pas submergé par un nombre incroyable de messages sur la conception du code et qu'il pourra se concentrer sur les bugs.

Par conséquent, nous avions initialement critiqué les normes MISRA et, pendant longtemps, nous n'avions pas prévu de les mettre en œuvre. Les normes MISRA sont conçues pour simplifier et améliorer la qualité du code dans son ensemble, ce qui permet d'éviter les erreurs. C'est-à-dire que la majorité des diagnostics qu'il contient concernent le style d'écriture du code. Ceci est mieux expliqué avec un exemple.

Il existe une règle dans la norme MISRA selon laquelle les corps des instructions if doivent être placés entre accolades. Dans MISRA C, c'est la règle 15.6 et dans MISRA C ++ c'est 6-4-1. Exemple de code incorrect:

if (i == bestOffs) continue; 

Le bon code est:

 if (i == bestOffs) { continue; } 

Ces diagnostics ne peuvent pas être appliqués à des projets existants écrits pour fonctionner sous le contrôle du système d'exploitation Winodws, Linux ou macOS. Par exemple, seule la règle décrite sur les accolades donne les opérations de diagnostic 1947 V2507 (MISRA C 15.6, MISRA C ++ 6-4-1) pour le projet WinMerge. Mais WinMerge est un petit projet! Seulement environ 250 000 lignes de code en C et C ++.

Jusqu'en 2018, l'analyseur PVS-Studio était axé sur le test d'applications de bureau fonctionnant sous Windows, Linux et macOS. Par conséquent, le soutien à la MISRA n'avait guère de sens pratique. Personne n'implémentera cette norme dans un grand projet de bureau existant.

Tout a changé quand, en 2018, nous avons commencé à prendre en charge les systèmes embarqués. Cette année, l'analyseur a pris en charge:

  • Windows IAR Embedded Workbench, compilateur C / C ++ pour ARM C, C ++
  • Windows / Linux Keil µVision, DS-MDK, ARM Compiler 5/6 C, C ++
  • Windows / Linux Texas Instruments Code Composer Studio, Outils de génération de code ARM C, C ++
  • Windows / Linux / macOS. GNU Arm Embedded Toolchain, compilateur Arm Embedded GCC, C, C ++

Contrairement aux projets de bureau, de nombreux développeurs intégrés écrivent déjà des projets en tenant compte des recommandations MISRA, et leur prise en charge dans notre analyseur sera particulièrement utile pour les développeurs.

Néanmoins, nous craignons toujours que l'un des développeurs, sans comprendre, puisse considérer que nous avons «gâché» l'analyseur en y introduisant des «diagnostics étranges». Par conséquent, les diagnostics MISRA sont désactivés par défaut. Nous considérons que c'est une décision très correcte. Ces diagnostics ne peuvent être inclus que si vous savez exactement à quoi ils servent et comment les utiliser.

Par exemple, pour les programmeurs d'applications, il peut ne pas être clair pourquoi l'analyseur leur interdit soudainement d'utiliser la mémoire dynamique. C'est-à-dire pourquoi tout à coup vous ne pouvez pas allouer de mémoire en utilisant la fonction malloc ou le nouvel opérateur. Mais de telles limitations ( V2511 ) sont bien comprises par les développeurs d'appareils embarqués. Dans certains appareils qui fonctionnent en continu, il est vraiment inacceptable d'utiliser des programmes pour lesquels la mémoire peut s'épuiser soudainement.

Vous pouvez donc maintenant installer ou mettre à jour PVS-Studio et commencer à utiliser des diagnostics qui implémentent les règles de MISRA C et MISRA C ++. L'ensemble des règles prises en charge est incomplet, mais cela ne devrait pas être un obstacle au démarrage de l'utilisation de PVS-Studio. Pour le moment, il n'y a pas un seul analyseur statique qui implémente absolument toutes les règles MISRA. À l'avenir, nous prévoyons d'élargir l'ensemble des règles de diagnostic mises en œuvre dans MISRA et espérons devenir un outil de premier plan dans l'exhaustivité de leur support.

Pour activer les diagnostics MISRA dans Visual Studio ou dans l'utilitaire PVS-Studio Standalone, vous devez remplacer Désactivé par Tout afficher dans les paramètres.

Activer Misra

Étant donné que Désactivé signifie que les avertissements ne sont pas générés du tout et n'entrent pas dans le rapport, un redémarrage de l'analyse sera nécessaire. Le mode désactivé est défini par défaut afin de réduire la taille du rapport. L'inclusion des diagnostics MISRA peut conduire à un grand nombre d'opérations et à une forte augmentation des fichiers avec le rapport (fichiers * .plog).

Pour l'analyse des projets dans les systèmes d'exploitation Linux et macOS, il existe un utilitaire pvs-studio-analyzer. Par défaut, seuls les diagnostics à usage général (analyse générale, GA) y sont inclus. Des règles supplémentaires peuvent être activées à l'aide de l'option -a:

 -a [MODE], --analysis-mode [MODE] MODE defines the type of warnings: 1 - 64-bit errors; 2 - reserved; 4 - General Analysis; 8 - Micro-optimizations; 16 - Customers Specific Requests; 32 - MISRA. Modes can be combined by adding the values Default: 4 

Pour activer les alertes GA et MISRA, vous devez exécuter une analyse avec les paramètres suivants:

 pvs-studio-analyzer analyze ... -a 36 ... -o /path/to/report.log ... 

La valeur 36 est un OU au niveau du bit pour 4 (GA - General Diagnostics) et 32 ​​(MISRA).

De plus, il est recommandé de créer plusieurs rapports avec différents types d'alertes, par exemple, comme ceci:

 plog-converter -a GA:1,2 -t tasklist -o /path/to/ga_results.tasks /path/to/project.log plog-converter -a MISRA:1,2,3 -t tasklist -m misra -o /path/to/misra_results.tasks /path/to/project.log 

Le premier rapport ga_results.tasks contiendra des avertissements généraux des niveaux de confiance élevés et moyens.

Et le deuxième rapport «misra_results.tasks» ne recevra que des avertissements liés à MISRA de tous les niveaux. Le commutateur "-m misra" indique qu'en plus des nombres au format PVS-Studio, le rapport inclura des numéros de diagnostic selon la classification MISRA.

Tous les modes de lancement de l'analyseur sous Linux et macOS, ainsi que les formats de rapport, sont décrits dans la documentation .

PS Nous voulons évaluer combien nous avons deviné en choisissant MISRA comme l'une des directions de développement de PVS-Studio. Si vous êtes intéressé par ce sujet, veuillez nous écrire . Même si vous ne prévoyez pas encore d'utiliser PVS-Studio, veuillez écrire. Nous voulons vous poser quelques questions de clarification.

Liens supplémentaires:

  1. Télécharger PVS-Studio
  2. Comment exécuter PVS-Studio sur Linux et macOS
  3. L'analyseur de code statique PVS-Studio 6.22 est adapté aux compilateurs ARM (Keil, IAR)
  4. PVS-Studio prend en charge la chaîne d'outils intégrée GNU Arm



Si vous souhaitez partager cet article avec un public anglophone, veuillez utiliser le lien vers la traduction: Andrey Karpov. PVS-Studio: Prise en charge des normes de codage MISRA C et MISRA C ++ .

Source: https://habr.com/ru/post/fr432660/


All Articles