Weg frei für einen MISRA-Checker in Open Source?

Automotive-Blogger  –  1 Kommentare

Die Anwender von Eclipse CDT diskutieren seit Längerem einen MISRA-Checker. MISRA hat seine Position zu einem Open Source Checker in einem Forumbeitrag dargelegt.

Für die Entwicklung von Embedded-Software sind Codier-Richtlinien wie der MISRA-C-Standard für die Sicherheit der Software relevant. Diese Standards schließen bei der Programmierung mit C gewisse Teile des Sprachumfangs aus, die oft zu Fehlern führen. Die Überprüfung erfolgt durch Checker, die meist als eigene Standalone-Software vorliegen und Lizenzen benötigt. Dabei bietet Eclipse CDT (C/C++ Development Toolkit) ein Framework, mit dem sich ein nicht unerheblicher Teil der Checks auch direkt in der Entwicklungsumgebung ausführen ließe. Inzwischen liegt auch von MISRA eine Aussage über die Umsetzung des Standards als Open Source vor.

Einer der aufwendigen Aspekte bei der Umsetzung eines Richtliniencheckers für C ist das Parsen des Quellcodes. Ist das erledigt und der Quellcode in eine abstrakte Darstellung (Abstract Syntax Tree, AST) gebracht, sind einige Checks sehr leicht zu implementieren. Inzwischen existieren verschiedene Projekte, die hierbei helfen. Auch in CDT liegt beim Editieren des Codes ein AST vor, der sich nutzen lässt. Diesen nutzt das Teilprojekt Codan, das eine Schnittstelle zur Source-Code-Validierung bereitstellt und es so ermöglicht, eigene Checks einzuhängen.

Über den Extension-Mechanismus von Eclipse können Checks aus verschiedenen Quellen beigesteuert werden. Ein XML-File (plugin.xml) definiert in der IDE neue Überprüfungen.

Das auf der Codan-Website dargestellte Beispiel zeigt das XML für die Integration eines Checks:

<extension point="org.eclipse.cdt.codan.core.checkers">
<checker class="org.eclipse.cdt.codan.checkers.sample.AssignmentInConditionChecker"
id="org.eclipse.cdt.codan.checkers.checker1"
name="Assignment in condition">
<problem
defaultSeverity="Warning"
id="org.eclipse.cdt.codan.checkers.sample.assignment_in_condition"
name="Assignment in condition">
</problem>
</checker>
</extension>

Die eigentliche Überprüfung, ob in einer Bedingung eine Zuweisung durchgeführt wird, ist in der Klasse AssignmentInConditionChecker implementiert und umfasst circa 30 Zeilen Code. Ähnlich einfach ist ein Test darauf, ob alle Elemente eines if-else-Statements von geschweiften Klammern umgeben sind.

Das starke CDT-Framework hat schon lange die Idee hervorgebracht, die bekannten Codierrichtlinien auch in der Codan-Komponente umzusetzen. Ein entsprechender Bugzilla-Eintrag bei Eclipse hat eine lange Historie. Die unklare Lizenzsituation bremste aber eine Umsetzung. In einem Forums-Posting hat MISRA nun Position bezogen. Zusammenfassend ist es wohl so, dass die Umsetzung von Checks als Open Source möglich ist, MISRA aber ein Copyright auf die Fehlertexte hat und sie nur bei Erwerb einer entsprechenden Lizenz in einem Werkzeug ausgegeben werden dürfen. Für Open-Source-Projekte ist daher nur die Ausgabe der entsprechenden Fehlernummern (also "2.3", "4.3") gestattet.

Immerhin ein erster Schritt, um schnelle interaktive Checks als Open Source umsetzen zu können. Eine Umsetzung in Codan wird etablierte Werkzeuge nicht ersetzen, denn mit ihr bestehen manche Einschränkungen bei der Sicht auf den vorliegenden Quellcode, insbesondere bei der Auflösung der Makros, und es ist schwierig, an den AST von Dateien zu kommen, die gerade nicht im Editor geöffnet sind. Hier haben nach wie vor Werkzeuge, die den gesamten Code inklusive Includes und Makro-Auflösung analysieren, ihre Stärken.