
Für Entwickler sicherheitskritischer Software kann es sinnvoll sein, sich an ein Partnerunternehmen zu wenden, etwa an einen Anbieter sicherheitsrelevanter Embedded-Prozessoren. (Bild: Siarhei - stock.adobe.com)
Der Compiler ist ein wichtiges Tool in der Softwareentwicklung, kann aber auch Rätsel aufgeben. Entwickler müssen großes Vertrauen in die Umwandlung von menschenlesbarem Quellcode in maschinenfertigen Objektcode setzen. Dabei kann der Compiler ein fehlerhaftes Verhalten in das Programm einbringen, das möglicherweise erst nach dem Einsatz der Software sichtbar wird.
Bei der Entwicklung sicherheitskritischer Software ist dieser Umstand nicht hinnehmbar. Standards zur funktionalen Sicherheit wie IEC 61508 für industrielle Anwendungen und ISO 26262 im Automotive-Bereich verlangen, dass der Compiler explizit für den Anwendungsfall (use case) der beabsichtigten Anwendung qualifiziert ist. Der Use Case ist wichtig, da der Compiler speziell konfiguriert werden muss – die angegebenen Optionen ändern den generierten Objektcode. Die Sicherheitsstandards erfordern, den Compiler mit derselben Konfiguration zu überprüfen wie die Anwendungsentwicklung. Es wird davon ausgegangen, dass alle Änderungen am Use Case das Compiler-Verhalten ändern und daher die Qualifikation ungültig machen.

Richtige Compiler-Konfiguration gleich am Anfang ermitteln
Die Compiler-Qualifizierung ist eine mühsame Aufgabe, die Liebe zum Detail erfordert und bei Fehlern Konsequenzen nach sich ziehen kann. Die wiederholte Neukonfiguration und zwangsweise Neuqualifizierung des Compilers verursachen unerwünschten Mehraufwand und mögliche Projektverzögerungen sowie höhere Kosten. Daher ist es wichtig, den Use Case genau zu beschreiben. Im Idealfall sollte gleich zu Beginn die richtige Konfiguration ermittelt werden, um Fehler zu vermeiden.
Der erste Schritt der Qualifizierung besteht darin, den Use Case zu analysieren und die Compiler-Anforderungen zu definieren. Als nächstes gilt es, Tests zur Überprüfung dieser Anforderungen auszuwählen, durchzuführen und die Ergebnisse zu analysieren. Der letzte Schritt besteht in der Vorbereitung der Dokumentation, die zum Erfüllen des Sicherheitsstandards erforderlich ist.
Diese Methodik und die anwendbaren Tools erfordern eine gewisse Einarbeitungszeit. Entwickler müssen zudem Gemeinkosten etwa für die Lizenzierung von Testsuiten, die Interaktion mit Zertifizierungsstellen und den Umgang mit etwaigen Testfehlern berücksichtigen.

Qualifizierungskits von Partnern einsetzen
Für Entwickler sicherheitskritischer Software kann es sinnvoll sein, sich an ein Partnerunternehmen zu wenden, etwa an einen Anbieter sicherheitsrelevanter Embedded-Prozessoren. Einige bieten ein Compiler-Qualifizierungskit an, das eine bewährte Methodik mit Ressourcen wie Testfällen, Tools zum Erstellen der Dokumentation und einem Framework zum Ausführen von Validierungstests bereitstellt. Solid Sands bietet mit SuperTest eine Compiler-Test- und Validierungssuite für C und C++ an, die den Compiler oder die Bibliothek auf Qualifizierung überprüft, wenn kein Qualifizierungskit vorhanden ist. So können die Compiler- und Bibliotheksqualifizierungsdienste von Solid Sands sowohl Ressourcen als auch Zeit sparen und eine unabhängige Qualitätskontrolle durchführen.
Die interne Qualifizierung eines Compilers für sicherheitskritische Anwendungen ist jetzt jedoch einfacher, da der Solid-Sands-Partner Bugseng ein neues Tool zur automatisierten Anwendungsfallanalyse namens CerTran eingeführt hat. Diese Phase ist ein entscheidender Teil der Compiler-Qualifizierung und durchaus komplex. Große Sorgfalt ist erforderlich, damit der Compiler dem erforderlichen Sicherheitsstandard entspricht und die erwartete Leistungsfähigkeit erbringt.
Verschiedene Parameter definieren die Compiler-Konfiguration. Zu den Grundeinstellungen gehören die Compiler-Version und die Programmiersprachenversion. Diese sind äußerst wichtig, da bereits eine kleine Änderung große Auswirkungen auf das Compiler-Verhalten haben kann. Es kann viele Hunderte von Optionseinstellungen geben, die Verhalten, Analyse, Optimierungen, Diagnosen und andere Auswirkungen ändern. Diagnose- und andere Einstellungen steuern die Verknüpfung, die Behandlung von Headern und die Behandlung von Ausgabedateien.

Kleine Änderungen mit großer Wirkung
Sobald diese Optionen ausgewählt sind und der Compiler qualifiziert ist, können Softwareentwickler nur den qualifizierten Use Case verwenden. Compiler reagieren bekanntermaßen empfindlich auf Konfigurationen. Die Auswirkungen einer kleinen Änderung in einer Einstellung können sich verstärken, wenn der Compiler die verschiedenen Stufen durchläuft, die bei der Generierung von Objektcode aus dem Eingabequellcode erforderlich sind. Selbst eine kleine Konfigurationsänderung kann große Auswirkungen auf den generierten Code haben und die Qualifikation ungültig machen. Ist eine Änderung erforderlich, muss der Compiler erneut getestet und neu qualifiziert werden.
Die Auswahl der richtigen Optionen zu Beginn des Projekts ist also entscheidend. Allerdings ist die manuelle Analyse des Compiler-Use-Case und die Festlegung der Optionseinstellungen schwierig, zeitaufwendig und birgt viele Risiken. Die Automatisierung dieses Teils des Qualifizierungsprozesses mit CerTran verringert nun diese Risiken und beschleunigt die Qualifizierung. Zu den weiteren Vorteilen gehören eine höhere Wiederholgenauigkeit und weniger manuelle Schritte.
Einmal korrekt eingerichtet, ist die automatisierte Use-Case-Analyse von CerTran einfach. Entwickler können ihre eigenen Use-Case-Analysen unabhängig durchführen. Darüber hinaus ermöglicht die Automatisierung jetzt, dass sich alle notwendigen Aktualisierungen der Compiler-Optionen, erneute Tests und Qualifizierungen mit den neuen Einstellungen in den routinemäßigen nächtlichen Build-Prozess einbeziehen lassen.