Nehmen Sie am 19. September an unserem Webinar teil: KI-gestütztes API-Testing: Ein No-Code-Ansatz zum Testen | Registrierung
Einleitung
Die Herausforderungen beim Erstellen eingebetteter Softwareanwendungen nehmen immer weiter zu. Die Anforderungen, Kompetenzen in den Bereichen Netzwerkkonnektivität, künstliche Intelligenz (KI) und andere Leistungsverbesserungen zu integrieren, haben die Codekomplexität erhöht und damit das Risiko von Sicherheitslücken und Sicherheitsrisiken erhöht. Um diese Herausforderungen zu bewältigen, orientieren sich viele Organisationen an den Codierungsrichtlinien der Motor Industry Software Reliability Association (MISRA).
MISRA C 2023-Richtlinien für die Verwendung der Sprache C in kritischen Systemen ist eine Definition einer Teilmenge der Sprache C, die darauf ausgelegt ist, potenzielle Fehler, Sicherheitslücken und Irrtümer, die zu Programmfehlern oder schwerwiegenden Fehlern führen, zu minimieren. Obwohl die Richtlinien ursprünglich für Automobilsysteme erstellt wurden, wurden sie von vielen anderen Branchen für sicherheitskritische Anwendungen übernommen. In allen Fällen kann die Feststellung der Konformität, die in Lieferanten-/Kundenbeziehungen zunehmend erforderlich ist, komplex und zeitaufwändig sein, wenn sie nicht automatisiert erfolgt.
Auf dem Markt gibt es viele Tools, die Fehler melden und anzeigen, wenn Code gegen eine Richtlinie verstößt. Allerdings vereinfachen nur wenige Tools den Berichts- und Dokumentationsprozess, der zum Nachweis der Konformität erforderlich ist – ganz zu schweigen von der Implementierung der Richtlinien in Ihren Softwareentwicklungsprozess!
Testverifizierungs- und Validierungslösungen wie die von Parasoft Erreichen der MISRA-Konformität schneller und kostengünstiger. Die Lösung rationalisiert den gesamten Prozess des Erreichens, Dokumentierens und Aufrechterhaltens der MISRA-Konformität während des gesamten Produktlebenszyklus. Sie rationalisiert auch andere automatisierte Testmethoden wie Unit-, Regressions-, Integrations-, System-, Strukturcodeabdeckung und mehr.
Legacy und vorhandener Code
Die Wiederverwendung von Code ist eine Realität für jedes Projekt. Die Wiederverwendung von Legacy-Code in einem sicherheitskritischen Softwareprojekt und Erreichen der vollständigen MISRA C 2023-Konformität ist eine gewaltige Aufgabe.
Die ursprünglichen MISRA-Prinzipien wurden zur Anwendung bei der Entwicklung von Code entwickelt. Sogar der Standard selbst enthält eine Warnung.
„…ein Projekt, das die MISRA C-Konformität erst spät in seinem Zyklus überprüft, wird wahrscheinlich viel Zeit mit Neucodierung, erneuter Überprüfung und erneutem Testen verbringen. Es ist daher zu erwarten, dass der Softwareentwicklungsprozess die frühzeitige Anwendung der MISRA C-Prinzipien erfordert.“
Da viele Organisationen aus geschäftlichen Gründen ihre alten Codebasen wiederverwenden müssen, MISRA-Konformität: 2020 Als Reaktion auf diese Herausforderungen wurde ein Leitfaden erstellt. Darin wird klar zwischen dem neuen, nativen Code unterschieden, der im Rahmen eines aktuellen Projekts entwickelt wird, und dem übernommenen Code, der außerhalb des Projektumfangs entwickelt wird. Lassen Sie uns einen praktischen Ansatz für Legacy-Code und MISRA C-Konformität untersuchen.
Grautöne
Obwohl es eigentlich ganz einfach sein sollte, herauszufinden, mit welcher Art von Code Sie es zu tun haben, ist die Situation in vielen Fällen nicht eindeutig. Beispielsweise wird ein erster Prototyp, der ohne Einhaltung der MISRA-Richtlinien entwickelt wurde, in ein Produkt umgewandelt, und dann erkennt das Management, dass die Einhaltung der MISRA-Richtlinien eine Voraussetzung für den vorgesehenen Markt ist.
Normalerweise wurde die alte Codebasis nie unter Berücksichtigung von Codierungsrichtlinien entwickelt. Daher kann eine Codebasis nicht automatisch als übernommener Code klassifiziert werden, wenn im Rahmen eines neuen Projekts Aktualisierungen erforderlich sind, was die Komplexität der Situation noch weiter erhöht.
Allzu oft führen erste Scans einer großen Codebasis mit einem statischen Analysetool, bei dem alle MISRA C 2023-Regeln aktiviert sind, einschließlich der neuesten Änderungen am Standard, zu Zehntausenden von Verstößen. Nach dem ersten Schock beginnen die Teams, kreative Wege zu finden, um die Verstöße zu beheben. Es ist wichtig, dass sich die Entwicklungsteams nicht entmutigen lassen. Es gibt Licht am Ende des Tunnels.
Im Laufe der Zeit haben wir bewährte Methoden und Ansätze gesammelt und identifiziert, die Entwicklungsteams verwendet haben, um den Code konform zu machen, ohne die laufende Entwicklungsgeschwindigkeit zu beeinträchtigen. In diesem Dokument teilen wir einige praktische, ausgewogene Ansätze, um vorhandene Codebasen MISRA-konform zu machen.
Befolgen Sie die Anweisungen im MISRA Compliance: 2020 Framework
MISRA C 2023 ist ein Satz von Codierungsrichtlinien für die Programmiersprache C. Der Schwerpunkt des Standards liegt auf der Verbesserung der Softwaresicherheit, indem Programmierer präventiv daran gehindert werden, Codierungsfehler zu begehen, die zu Laufzeitfehlern und möglichen Sicherheitsbedenken führen können, indem bekannte Problemkonstrukte in der Sprache C vermieden werden. MISRA veröffentlicht jedoch weiterhin Änderungen an seinen neuesten Codierungsrichtlinien MISRA C 2023, um das wachsende Risiko von Schwachstellen in der Cybersicherheitscodierung zu verringern.
Im Laufe der Jahre beschwerten sich viele Entwickler eingebetteter Systeme – und tun dies auch heute noch – darüber, dass MISRA C ein zu strenger Standard sei und dass der Aufwand für das Schreiben vollständig konformen Codes kaum zu rechtfertigen sei.
Angesichts der Tatsache, dass MISRA C in sicherheitskritischer Software eingesetzt wird, hängt der Wert der Anwendung des Standards auf ein Projekt realistisch gesehen von Faktoren wie den folgenden ab.
- Risiko einer Systemstörung aufgrund eines Softwarefehlers.
- Risiko einer Systemschädigung aufgrund einer Software-Sicherheitslücke.
- Kosten eines Systemausfalls für das Unternehmen.
- Entwicklungstools und Zielplattform.
- Fachwissen des Entwicklers.
Programmierer müssen einen praktischen Mittelweg finden, der dem Geist des Standards entspricht und dennoch MISRA-Konformität beansprucht, ohne Aufwand für nicht wertschöpfende Aktivitäten zu verschwenden. Im Dokument MISRA Compliance: 2020 liefert das MISRA-Konsortium die von der Community benötigte Antwort mit einem einigermaßen klar definierten Rahmen dessen, was der Ausdruck „MISRA-konform“ wirklich bedeutet.
Um die MISRA-Konformität geltend zu machen, müssen folgende Nachweise erbracht werden:
- Einsatz eines disziplinierten Softwareentwicklungsprozesses.
- Welche Richtlinien genau angewendet werden.
- Die Wirksamkeit der Durchsetzungsmethoden.
- Das Ausmaß etwaiger Abweichungen von den Richtlinien.
- Der Status aller außerhalb des Projekts entwickelten Softwarekomponenten.
Konformitätsnachweis: Das Endziel
Ein Hauptproblem für Entwickler sicherheitskritischer Software besteht darin, die Einhaltung der Vorschriften am Ende des Projekts nachzuweisen. Es besteht die Tendenz, den Berichten mehr Informationen hinzuzufügen als erforderlich. Wenn die Bewertungskriterien auf subjektiven Meinungen der verschiedenen Beteiligten beruhen, kann dies zu einem Streitthema werden und zu Zeit- und Arbeitsverschwendung führen.
Ein empfohlener Ansatz zur Verbesserung der Bewertung der Compliance-Bereitschaft besteht darin, vorhandene Vorlagen sowohl für den endgültigen Compliance-Bericht als auch für den Tool-Qualifizierungsbericht zu verwenden. Wenn die Informationen nicht vom Standard verlangt werden, vermeiden Sie es, sie hinzuzufügen. Das Kombinieren zusätzlicher Informationen ist nicht nur Zeitverschwendung, sondern birgt auch das Risiko einer Verzögerung eines Auditprozesses. Die Dokumentation automatisch generieren zu lassen, wie es Parasoft tut, ist die ultimative Lösung.
Das Dokument „MISRA-Compliance: 2020“ unterstützt Unternehmen außerdem dabei, durch die Definition der folgenden Artefakte eine gemeinsame Sprache zur Formulierung der Compliance-Anforderungen zu verwenden.
- Zusammenfassung der Richtlinienkonformität
- Richtliniendurchsetzungsplan
- Abweichungsbericht
- Richtlinien-Neukategorisierungsplan
Die folgenden Screenshots zeigen automatisch generierte Berichte mit Links zu anderen Datensätzen und/oder erweiterten Informationen auf der Seite.
Die Zusammenfassung des Richtlinien-Konformitätsberichts von Parasoft ist die primäre Aufzeichnung der allgemeinen Projektkonformität.
Der Richtliniendurchsetzungsplan von Parasoft zeigt, wie jede MISRA-Richtlinie überprüft wird.
Der Abweichungsbericht von Parasoft dokumentiert alle genehmigten Abweichungsgenehmigungen.
Parasofts Plan zur Neukategorisierung der Richtlinien informiert darüber, wie die Richtlinien im Rahmen der Stakeholder-/Lieferantenbeziehung angewendet werden sollen.
Beginnen Sie mit der Festlegung der Endziele
Arbeiten Sie mit den Stakeholdern zusammen und erstellen Sie zu Beginn des Projekts den Richtlinien-Neukategorisierungsplan (GRP). Es ist möglich, dass es mehrere GRPs gibt.
Beachten Sie außerdem Folgendes.
- Ist bei jeder inkrementellen Änderung ersichtlich, wie viele Arbeitsschritte noch verbleiben, um die vollständige Konformität zu erreichen? Dies hilft dabei, die Arbeit entsprechend zu planen und die richtigen Erwartungen beim Management zu wecken.
- Wurden die Berichtsvorlagen für die Guidelines Compliance Summary (GPS) zu Beginn des Projekts mit dem Auftraggeber besprochen? Waren sie akzeptabel und vollständig?
Es gibt Vorlagen für diese Dokumente, die von kommerziellen Anbietern statischer Analysetools, darunter Parasoft, bereitgestellt werden, um Unternehmen dabei zu unterstützen, die Anforderungen des MISRA 2020-Compliance-Frameworks zu erfüllen.
Gehen Sie schrittweise vor: Teile und herrsche
Der erste Scan des vorhandenen Codes durch ein statisches Analysetool führt in der Regel zu Tausenden von Verstößen, insbesondere bei Verwendung eines Standardregelsatzes. Es ist unpraktisch, neue Entwicklungsbemühungen zu stoppen, um sich auf die Behebung all dieser festgestellten Verstöße zu konzentrieren. Tatsächlich haben wir Fälle gesehen, in denen Regressionen eingeführt wurden, als erhebliche Änderungen an der Codebasis vorgenommen wurden, um die Verstöße der statischen Analyse zu beheben. Daher ist es wichtig, einen Workflow einzurichten, um die Verstöße im Laufe der Zeit zu beheben, ohne den Entwicklungsprozess zu unterbrechen oder die Qualität der Software zu beeinträchtigen.
Hier finden Sie wichtige Empfehlungen für die erstmalige Verwendung statischer Analysetools in einem Projekt.
Baselining
Markieren Sie nach dem ersten Scan des Codes alle anfänglichen Verstöße als „später zu beheben“ und legen Sie sie als Basislinie fest. Befolgen Sie von diesem Zeitpunkt an beim Aktualisieren von vorhandenem Code und/oder beim Entwickeln von neuem Code die Richtlinie „keine neuen Verstöße zulässig“. Diese Richtlinie kann durch das statische Analysetool durchgesetzt werden, indem ein Codeüberprüfungsprozess oder ein Tool für kontinuierliche Integration (CI) wie GitHub, GitLab, Azure DevOps, Jenkins oder andere angewendet wird. Wenn Entwickler ein paar Stunden oder Tage Zeit haben, können sie verbleibende Verstöße beheben, die von der Basislinie markiert wurden.
Organisationen können diesen Ansatz wie folgt priorisieren.
Aktueller Code in Entwicklung
Ergebnisse der Codeüberprüfung
Sich auf Kennzahlen wie den Schweregrad verlassen, um den nächsten zu behebenden Verstoß vorzuschlagen
Linie im Sand
Die Entwicklung setzt ein Datum – die Grenze. Nach diesem Datum müssen alle Verstöße bei jeder geänderten Übersetzungseinheit (einzelne Quelldatei) behoben werden. Alle unveränderten Übersetzungseinheiten fallen automatisch unter die tatsächlich übernommene Codedefinition aus dem MISRA-Konformitätsdokument.
Priorisierung basierend auf Schweregrad
Der Entwickler behebt alle obligatorischen Feststellungen für das ihm zugewiesene Modul. Im Laufe der Zeit werden alle erforderlichen Verstöße behoben, sofern die Zeit dies zulässt, basierend auf einer vom Teamleiter ausgewählten Priorität. Parasoft verwendet KI und maschinelles Lernen, um aus diesem Priorisierungsprozess zu lernen, und kann diese Aufgabe basierend auf dem historischen Verhalten in der realen Welt übernehmen.
Bei allen oben beschriebenen Ansätzen ist es wichtig, dass die technischen Leiter und das Management den Fortschritt und den Compliance-Status des Projekts ständig über ein zentrales Dashboard überwachen. Beispielsweise bietet der Reporting Hub von Parasoft das folgende vorkonfigurierte Compliance-Status-Dashboard.
Parasoft DTP – Compliance-Dashboard für Berichte und Analysen
Kompetenz und Schulung des Personals
Heutzutage verwenden Entwicklungsteams Kodierungsstandards als Methode, um eine Gruppe von Kodierungspraktiken zu definieren, zu verwalten und zu nutzen. Dabei geht es vor allem um Konsistenz und die Gewährleistung einer Basis für die Codequalität. Das Hauptziel einer Kodierungsregel besteht darin, die Verwendung der Sprache einzuschränken, damit der Entwickler nicht Dinge tut, die „falsch“ und potenziell gefährlich sind. Entwickler können viele Softwarefehler vermeiden, indem sie sinnvolle Einschränkungen bei der Sprachverwendung übernehmen. Dies führt zu einem einheitlichen Stil, der als Disziplin in Softwareprojekten wertvoll ist.
Der Vielseitigkeitsaspekt des C++ und C-Sprachen ermöglicht es Entwicklern, Code zu schreiben, der unbeabsichtigt falsch und möglicherweise gefährlich sein kann. Es ist für sie oder ihn einfach, Code zu schreiben, der den Anforderungen des Sprachstandards entspricht, dies kann jedoch zu unerwünschtem Verhalten und Programmabstürzen führen. Dazu gehört beispielsweise Code, der auf Speicher über die Parameter eines arithmetischen Prozesses oder eines Arrays hinaus zugreift, was zu Speicher- oder Begrenzungsverletzungen führt.
Es ist natürlich wichtig, diese potenziellen Probleme zu identifizieren. Das Ziel von MISRA ist es jedoch, Probleme zu verhindern, nicht nur zu identifizieren. Ein Compiler kann einige davon erkennen, aber die Verwendung eines speziellen Analysetools ist effektiver.
Der MISRA-Standard betont, dass die Einhaltung von Codierregeln nur eine Komponente für die erfolgreiche Softwareentwicklung ist. Entwickler müssen jedes Programmierprojekt in eine disziplinierte technische Umgebung integrieren, die methodische Entwicklungsabläufe umfasst und bewährte Validierungstools verwendet.
Das Fachwissen und die Ausbildung des Entwicklungspersonals sind Schlüsselfaktoren, die von Softwareunternehmen oft übersehen werden und von Prüfern häufig als wichtigster Faktor bei der Bewertung der Einsatzbereitschaft eines Produkts angesehen werden.
Gemäß den MISRA-Richtlinien ist die Kompetenz der Mitarbeiter ein wichtiger Bestandteil der MISRA-Konformität. Am besten führen Sie die Schulung zu Beginn des Projekts durch und lassen einen Schulungstermin dokumentieren, an dem alle Entwickler bestätigen, dass sie an der Schulung teilgenommen haben. Am Ende des Projekts sollte das Entwicklungsteam Folgendes nachweisen können.
- Das Personal, das Abweichungen genehmigt, ist sich der mit dem Verstoß verbundenen Risiken bewusst und wurde darin geschult, diese zu erkennen.
- Das Personal wurde vor der Verwendung in der ordnungsgemäßen Konfiguration und Verwendung der statischen Analyse- und Entwicklungstools geschult.
In der Praxis ist die Schulung eines erfahrenen Teams relativ kurz. Ein paar Tage zu Beginn des Projekts ersparen Wochen der Nacharbeit, spätere Qualitätsprobleme und verpasste Projekttermine.
Werkzeugqualifikation
Ein weniger offensichtlicher Aspekt der MISRA-Konformität, der oft bis zum Ende des Projekts aufgeschoben wird, ist die Qualifizierung der im Produkt verwendeten Entwicklungstools und der Nachweis, dass sie gemäß der einschlägigen Sicherheitsnorm für den vorgesehenen Zweck geeignet sind. Wenn ein Tool qualifiziert werden muss, welche Validierungsstufe muss dann durchgeführt werden?
Die Tool-Qualifizierung muss mit der Tool-Auswahl beginnen. Stellen Sie sicher, dass Sie ein Entwicklungstool verwenden, das von einer Organisation wie TÜV SÜD zertifiziert ist. Dadurch wird der Aufwand für die Tool-Qualifizierung erheblich reduziert.
Parasoft C / C ++ test ist vom TÜV SÜD für funktionale Sicherheit gemäß den Normen IEC 61508, ISO 26262 und IEC 62304 sowohl für hostbasierte als auch für eingebettete Zielanwendungen zertifiziert und ebnet so den Weg für eine optimierte Qualifizierung der statischen Analyse, der Komponententests und der Abdeckungsanforderungen für die sicherheitskritischen Normen.
Während in vielen Fällen eine Werkzeugqualifizierung erforderlich ist, variiert die Methode zur Durchführung der Werkzeugqualifizierung je nach dem mit der Werkzeugfehlfunktion verbundenen Risiko und der Kritikalitätsstufe der Software. Parasoft bietet ein Qualifizierungskit und Zertifizierungen für bestimmte Sicherheitsstandards und deren Anforderungen.
In Ermangelung dieses effizienten Kits müssen Softwareteams bei der Bewertung kommerzieller, kostenloser und Open-Source-Tools die Kosten für die Tool-Qualifizierung berücksichtigen. Einige Standards wie DO-178C bieten angemessene Leitlinien für die Anforderungen an die Tool-Qualifizierung. Unabhängig von der Methode besteht das Ziel des Tool-Qualifizierungsprozesses darin, festzustellen, dass „das Tool für den vorgesehenen Verwendungszweck geeignet ist“, und einen Beweis und eine Begründung dafür zu liefern, wie das Team zu dieser Schlussfolgerung gelangt ist.
Zusammenfassung
Es gibt kein Patentrezept, mit dem sich die Einhaltung der MISRA-Vorschriften in sicherheitskritischen Projekten ganz einfach erreichen lässt. Durch die Einführung des MISRA Compliance 2020-Frameworks und einen praktischen, schrittweisen Ansatz mit einem klar definierten Endpunkt können Softwareentwicklungsteams jedoch die Einhaltung der Vorschriften erreichen, ohne ihren Entwicklungsprozess wesentlich zu unterbrechen. Unterm Strich ist noch immer eine Menge Arbeit erforderlich, um die Einhaltung der Vorschriften zu erreichen, aber die Automatisierung trägt wesentlich dazu bei, die mühsamen manuellen Prozesse zu reduzieren.
„MISRA“, „MISRA C“ und das Dreieckslogo sind eingetragene Marken von The MISRA Consortium Limited. ©The MISRA Consortium Limited, 2021. Alle Rechte vorbehalten.