PVS-Studio: Unterstützung für Codierungsstandards MISRA C und MISRA C ++

PVS-Studio, MISRA C, MISRA C ++

Ab Version 6.27 kann der statische Code-Analysator PVS-Studio seine Warnungen gemäß den Standards MISRA C und MISRA C ++ klassifizieren. Dank der Unterstützung dieser Standards ist es möglich geworden, den Analysator effektiv einzusetzen, um die Sicherheit, Portabilität und Zuverlässigkeit von Programmen für eingebettete Systeme zu verbessern.

In diesem Jahr haben wir begonnen, Standards wie CWE und SEI CERT im PVS-Studio- Analysegerät zu unterstützen. Grundsätzlich bestand die Unterstützung in der Klassifizierung der bereits im Analysegerät implementierten Diagnose nach diesen Standards. Zusätzlich wurden mehrere neue Diagnosen implementiert oder mehrere alte Diagnosen erweitert, um diese Standards besser zu erfüllen.

Konformitätstabellen der PVS-Studio- Diagnose zu verschiedenen Standards:


Jetzt ist es Zeit für die Standards MISRA C und MISRA C ++. Dies sind C- und C ++ - Softwareentwicklungsstandards, die von MISRA (Motor Industry Software Reliability Association) erstellt wurden. Ziel der Standards ist es, die Sicherheit, Portabilität und Zuverlässigkeit eingebetteter Programme zu verbessern. Standardtext wird bezahlt.

Wir sind der Ansicht, dass die Stärke unseres Analysators in der Lage ist, ihn in einem bestehenden Großprojekt einzusetzen. Sie können PVS-Studio auf Codebasis ausführen, alte Fehler erkennen und dann den Analysator regelmäßig verwenden, um neue Fehler so früh wie möglich zu finden.

Viele Analysatoren gehen einen anderen Weg und implementieren Diagnosen in Bezug auf Codierungsstandards. Sie schlagen vor, wie Sie Variablen besser benennen, Sie daran erinnern können, Kommentare am Anfang einer Datei einzufügen, und so weiter. Es ist notwendig und nützlich. In diesem Fall sind die Analysegeräte jedoch sehr "laut" und erzeugen eine große Anzahl von Warnungen, in denen Warnungen bezüglich Fehlern ertrinken.

Wir haben beschlossen, dass PVS-Studio ein Analysegerät ist, das nach Fehlern sucht. Dies ist sein Wettbewerbsvorteil. Der Programmierer kann es auf einer großen Codebasis ausführen und sicher sein, dass er nicht mit einer unglaublichen Anzahl von Nachrichten über das Design des Codes überfordert ist und sich auf Fehler konzentrieren kann.

Daher standen wir den MISRA-Standards zunächst kritisch gegenüber und planten lange Zeit nicht, sie umzusetzen. MISRA-Standards sollen die Qualität des gesamten Codes vereinfachen und verbessern, um Fehler zu vermeiden. Das heißt, nur der Großteil der darin enthaltenen Diagnosen bezieht sich auf den Schreibstil von Code. Dies lässt sich am besten anhand eines Beispiels erklären.

Der MISRA-Standard enthält eine Regel, nach der die Textkörper von if-Anweisungen in geschweiften Klammern eingeschlossen werden sollten. In MISRA C ist dies Regel 15.6 und in MISRA C ++ ist es 6-4-1. Falsches Codebeispiel:

if (i == bestOffs) continue; 

Der richtige Code lautet:

 if (i == bestOffs) { continue; } 

Eine solche Diagnose kann nicht auf vorhandene Projekte angewendet werden, die unter der Kontrolle des Betriebssystems Winodws, Linux oder macOS ausgeführt werden sollen. Beispielsweise gibt die soeben beschriebene Regel für geschweifte Klammern 1947 V2507- Diagnoseoperationen (MISRA C 15.6, MISRA C ++ 6-4-1) für das WinMerge-Projekt an. Aber WinMerge ist ein kleines Projekt! Nur ungefähr 250.000 Codezeilen in C und C ++.

Bis 2018 konzentrierte sich der PVS-Studio-Analysator auf das Testen von Desktopanwendungen unter Windows, Linux und macOS. Dementsprechend ergab die Unterstützung von MISRA wenig praktischen Sinn. Niemand wird diesen Standard in einem großen vorhandenen Desktop-Projekt implementieren.

Alles änderte sich, als wir 2018 damit begannen, eingebettete Systeme zu unterstützen. In diesem Jahr unterstützte der Analysator:

  • Windows IAR Embedded Workbench, C / C ++ - Compiler für ARM C, C ++
  • Windows / Linux Keil µVision, DS-MDK, ARM-Compiler 5/6 C, C ++
  • Windows / Linux Code Composer Studio von Texas Instruments, Tools zur ARM-Codegenerierung C, C ++
  • Windows / Linux / macOS. GNU Arm Embedded Toolchain, Arm Embedded GCC-Compiler, C, C ++

Im Gegensatz zu Desktop-Projekten schreiben viele eingebettete Entwickler bereits Projekte unter Berücksichtigung der MISRA-Empfehlungen, und ihre Unterstützung in unserem Analysegerät ist für Entwickler einzigartig nützlich.

Trotzdem befürchten wir immer noch, dass einer der Entwickler ohne Verständnis der Ansicht sein könnte, dass wir den Analysator durch die Einführung einer „seltsamen Diagnose“ „verwöhnt“ haben. Daher ist die MISRA-Diagnose standardmäßig deaktiviert. Wir halten dies für eine sehr richtige Entscheidung. Diese Diagnosen können nur aufgenommen werden, wenn Sie genau wissen, wofür sie bestimmt sind und wie sie verwendet werden.

Beispielsweise ist für Anwendungsprogrammierer möglicherweise nicht klar, warum der Analysator ihnen plötzlich die Verwendung von dynamischem Speicher verbietet. Das heißt, Warum können Sie plötzlich keinen Speicher mehr mit der Malloc- Funktion oder dem neuen Operator zuweisen ? Solche Einschränkungen ( V2511 ) werden jedoch von Entwicklern eingebetteter Geräte gut verstanden. Bei einigen Geräten, die kontinuierlich arbeiten, ist es wirklich nicht akzeptabel, Programme zu verwenden, für die plötzlich der Speicher knapp wird.

Jetzt können Sie PVS-Studio installieren oder aktualisieren und Diagnosen verwenden, die die Regeln von MISRA C und MISRA C ++ implementieren. Die unterstützten Regeln sind unvollständig, dies sollte jedoch kein Hindernis für den Start von PVS-Studio sein. Derzeit gibt es keinen einzigen statischen Analysator, der absolut alle MISRA-Regeln implementiert. In Zukunft planen wir, die in MISRA implementierten Diagnoseregeln zu erweitern, und hoffen, ein führendes Instrument für die Vollständigkeit ihrer Unterstützung zu werden.

Um die MISRA-Diagnose in Visual Studio oder im eigenständigen Dienstprogramm PVS-Studio zu aktivieren, müssen Sie in den Einstellungen Deaktiviert in Alle anzeigen ändern.

Aktivieren Sie Misra

Da Deaktiviert bedeutet, dass überhaupt keine Warnungen generiert werden und nicht in den Bericht aufgenommen werden, ist ein Neustart der Analyse erforderlich. Der deaktivierte Modus ist standardmäßig eingestellt, um die Größe des Berichts zu verringern. Die Einbeziehung der MISRA-Diagnose kann zu einer großen Anzahl von Vorgängen und einer starken Zunahme der Dateien mit dem Bericht (* .plog-Dateien) führen.

Für die Analyse von Projekten unter Linux- und MacOS-Betriebssystemen gibt es ein Dienstprogramm pvs-studio-analyzer. Standardmäßig sind dort nur Allzweckdiagnosen (General Analysis, GA) enthalten. Zusätzliche Regeln können mit der Option -a aktiviert werden:

 -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 

Um GA- und MISRA-Warnungen zu aktivieren, müssen Sie eine Analyse mit den folgenden Parametern ausführen:

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

Der Wert 36 ist ein bitweises ODER für 4 (GA - Allgemeine Diagnose) und 32 (MISRA).

Darüber hinaus wird empfohlen, mehrere Berichte mit unterschiedlichen Arten von Warnungen zu erstellen, z. B.:

 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 

Der erste ga_results.tasks-Bericht enthält allgemeine Warnungen zu hohen und mittleren Konfidenzniveaus.

Und der zweite Bericht "misra_results.tasks" erhält nur Warnungen in Bezug auf MISRA aller Ebenen. Der Schalter "-m misra" zeigt an, dass der Bericht zusätzlich zu den Nummern im PVS-Studio-Format Diagnosenummern gemäß der MISRA-Klassifizierung enthält.

Alle Startmodi des Analysators unter Linux und macOS sowie die Berichtsformate sind in der Dokumentation beschrieben .

PS Wir möchten bewerten, wie viel wir erraten haben, indem wir MISRA als eine der Entwicklungsrichtungen von PVS-Studio gewählt haben. Wenn Sie an diesem Thema interessiert sind, schreiben Sie uns bitte. Auch wenn Sie PVS-Studio noch nicht verwenden möchten, schreiben Sie bitte. Wir möchten Ihnen einige klärende Fragen stellen.

Zusätzliche Links:

  1. Laden Sie PVS-Studio herunter
  2. So führen Sie PVS-Studio unter Linux und MacOS aus
  3. Der statische Code-Analysator PVS-Studio 6.22 ist für ARM-Compiler (Keil, IAR) angepasst.
  4. PVS-Studio unterstützt die GNU Arm Embedded Toolchain



Wenn Sie diesen Artikel einem englischsprachigen Publikum zugänglich machen möchten, verwenden Sie bitte den Link zur Übersetzung: Andrey Karpov. PVS-Studio: Unterstützung von MISRA C- und MISRA C ++ - Codierungsstandards .

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


All Articles