Codierrichtlinien Integrierte C++-Richtlinien: Autosar und Misra

Die Schnittmenge der beiden Codierstandards verspricht semantische Klarheit für missionskritische Embedded-Anwendungen. Je nach Entwicklungsziel sind jedoch zusätzliche Standards, zum Beispiel hinsichtlich Security-Anforderungen zu berücksichtigen.

Bestimmte Eigenschaften der Programmiersprache C++ sind eine Problemquelle. Ein etablierter Ansatz zur Vermeidung solcher Probleme ist die Beschränkung auf eine Teilmenge des Sprachraumes, oft auch als »Codierstandard« oder »Richtlinie« bezeichnet. Das soll gewährleisten, dass Entwickler die problematischen Konstrukte nicht einsetzen.

Mittlerweile streben Misra und Autosar, zwei führende Konsortien im Bereich kritische Embedded-Software, eine einheitliche Publikation ihrer jeweiligen C++-Richtlinien an. Tatsächlich ist die Veröffentlichung einer De-facto-Teilmenge der C++-Sprache seit langem überfällig, gerade Entwickler im Automotive-Bereich werden die damit erreichte Klarheit außerordentlich begrüßen.

Die integrierte C++-Sprachteilmenge von Misra und Autosar wird für C++-Sprachversionen bis einschließlich ISO/IEC 14882 C++17 gelten. Sie wird kontinuierlich weiterentwickelt, um dem dreijährigen Release-Zyklus der Sprache Rechnung zu tragen. Sowohl der Functional-Safety-Standard ISO 26262 als auch die Cybersecurity-Richtlinien SAE J3061 fordern eine Sprachteilmenge um sicherzustellen, dass der Code zuverlässig und weniger fehleranfällig ist, sowie einfach prüf- und wartbar ist. Mit Zusammenfassung der entsprechenden C++-Dokumente von Autosar und Misra wird die Auswahl der am besten geeigneten Richtlinien deutlich unkomplizierter gestaltet. Angesichts der Menge an Restriktionen und Verpflichtungen für Entwicklerteams, mit der Norm ISO 26262, den Cybersecurity-Richtlinien J3061 und den Autosar-Standards, ist jede Vereinfachung als Fortschritt anzusehen.

Zwei Basis-C++- Standards

Autosar (Automotive Open System Architecture) ist eine Initiative führender Automobilhersteller und Zulieferer mit dem Ziel, der wachsenden Komplexität moderner Kraftfahrzeuge durch die Entwicklung einer Referenzarchitektur für elektronische Steuergeräte Rechnung zu tragen. Auf der anderen Seite fördert die Misra (Motor Industry Software Reliability Association) – eine Kooperation von Herstellern, Bauelemente-Zulieferern und Ingenieurbüros – die Anwendung optimaler Verfahrensweisen bei der Entwicklung softwareintensiver Applikationen. Obwohl also auch die Misra ihren Ursprung in der Automobilindustrie hat, werden ihre Richtlinien inzwischen in safety- und security-kritischen elektronischen Systemen im Aerospace- und Industriebereich, in der Medizintechnik und auf dem Verkehrssektor angewendet. Die Synergie findet ihren Ursprung: Im Dezember 2017 kündigte die Autosar-Organisation als Reaktion auf die Notwendigkeit, leistungsfähigere elektronische Steuergeräte zu berücksichtigen, die »Adaptive Plattform« als Ergänzung des traditionellen Angebots an, das später unter dem Namen »Classic Platform« bekannt wurde. Im Unterschied zur älteren, auf harte Echtzeitanforderungen fokussierten »Classic Platform« bietet die »Adaptive Plattform« Unterstützung für sicherheitsrelevante Fahrassistenzsysteme (Advanced Driving Assistance Systems, ADAS) und autonome Fahrzeug-Anwendungen mithilfe von C++- und Posix-konformen RTOS-Plattformen wie LynxOS und QNX. Hierfür benötigte die Autosar-Organisation eine Sprachteilmenge mit Unterstützung für C++ 14, jedoch stellte sich heraus, dass Misra C++:2008 lediglich die Sprachversionen bis einschließlich C++03 unterstützte. Autosar antwortete darauf mit der Ausarbeitung eines ergänzenden Richtliniensatzes. Aufsetzend auf Misra C++:2008 wurden damit die später eingeführten Sprach-Features unterstützt. Zwischenzeitlich hatte die Misra ohne Wissen von Autosar an einem eigenen Update für Misra C++:2008 gearbeitet. Eine anschließende Zusammenarbeit kam zu der Entscheidung, beide Vorhaben zu integrieren und die Misra-Konventionen für den zusammengeführten C++-Standard zu übernehmen. Den Entwicklern auf der Classic Platform – für die der Misra C:2012-Standard empfohlen wird – dürften diese Konventionen bekannt vorkommen.

Ein Labyrinth verschiedener Standards

Ungeachtet der verbesserten Anpassung der Sprachteilmengen zwischen den Autosar-Plattformen sehen sich die Entwickler von Autosar-Plattformen noch einigen Schwierigkeiten gegenüber. Zum Beispiel implizierte die Einhaltung der Anforderungen einer der Autosar-Plattformen nicht zwingend, dass auch die Vorgaben der Norm ISO 26262 (»Road Vehicles – Functional Safety«) eingehalten werden. Sowohl die neue Norm ISO 26262:2018 als auch die vertrautere Ausgabe 2011 fassen Hunderte von Themen in Dutzenden von Tabellen zusammen.

Diese sollen einen Prozess skizzieren, der sicherstellen soll, dass aus einer normkonformen Entwicklung funktional sichere Produkte hervorgehen. Für gegenwärtige vernetzte und zukünftige autonome Fahrzeuge ist funktionale Sicherheit jedoch nur die halbe Miete. Die Norm SAE J3061 kann insofern als Ergänzung zur ISO 26262 betrachtet werden, als sie Handreichungen für optimale Entwicklungspraktiken aus dem Blickwinkel der Cybersecurity bietet, ebenso wie die Norm ISO 26262 Handreichungen für Praktiken mit Blick auf die funktionale Sicherheit enthält. SAE J3061 verlangt einen ähnlich gut fundierten Entwicklungsprozess wie die Norm ISO 26262. Autosar-Classic-Applikationen dürften deshalb die Anforderungen der Sprachteilmenge Misra C:2012, des Functional-Safety-Standards ISO 26262, der Cybersecurity-Richtlinien SAE J3061, von Autosar OS und der vom Autosar-Standard selbst definierten Protokolle erfüllen müssen. Praktiker, die auf die Autosar Adaptive-Plattform wechseln, werden die Vertrautheit der neuen Sprachteilmenge begrüßen, sich aber dennoch an C++ und ein Posix-konformes RTOS gewöhnen müssen. Für alle Adaptive-Entwicklungsteams, welche die für heutige Entwicklungen auf dem Automobilsektor geltenden vielfältigen Anforderungen, Zielsetzungen und Restriktionen effizient miteinander vereinbaren möchten, ist das Erscheinen einer definitiven C++-Sprachteilmenge eindeutig hilfreich. Dennoch bleibt ein wahres Labyrinth aus Zielsetzungen und Anforderungen, die erfüllt werden müssen: Solche lassen sich vielleicht am besten mit einer integrierten Tool-Suite koordinieren. Diese präsentiert und steuert den allgemeinen Fortschritt des Entwicklungsteams auf logische, effiziente und kohärente Weise (Bild 2). Die Darstellung der vielfältigen Leitlinien als ein zusammenhängendes Ganzes würde die neu gewonnene Klarheit über die Anwendung der Programmiersprache, in jedem Fall bestens ergänzen.