Empfohlenes Webinar: Vereinfachen Sie Compliance-Workflows mit dem neuen C/C++test 2024.2 und KI-gesteuerter Automatisierung Zum Video
Zum Abschnitt springen
Verschieben Sie Ihre sicherheitskritischen Softwaretests mit Testautomatisierung nach links
Die Entwicklung sicherheitskritischer Software ist mit hohen Kosten verbunden. Dies kann jedoch durch Automatisierung und Shift-Left-Tests von Software reduziert werden, um die Fehlerquote zu senken. Lesen Sie weiter, um mehr zu erfahren.
Zum Abschnitt springen
Zum Abschnitt springen
Wir befinden uns bei sicherheitskritischer Software in einer Kostenkrise, was bedeutet, dass die erforderliche erhöhte Funktionalität über die Fähigkeit hinausgeht, ihre Entwicklung zu finanzieren. Das Boeing 787-Programm erforderte beispielsweise 6.5 Millionen Codezeilen, deren Entwurf, Entwicklung und Tests 4 Milliarden US-Dollar kosteten. Die Kostenzahlen für Boeing 777X Programm wurden nicht öffentlich bekannt gegeben und Boeings 737 MAX wurde ursprünglich auf 3.6 Milliarden US-Dollar geschätzt, stieg aber auf 6.3 Milliarden US-Dollar, wobei die milliardenschweren Ausfallkosten nicht berücksichtigt sind.
Der Trend bei großen sicherheitskritischen Projekten zeigt ein exponentielles Wachstum der Gesamtkosten, wobei Software von Jahr zu Jahr einen größeren Anteil des gesamten Entwicklungsbudgets ausmacht. Das nächste große Luft- und Raumfahrtprogramm wird wahrscheinlich unerschwinglich sein, wenn man dieselben Techniken verwendet, die in früheren Programmen verwendet wurden. Also was können wir tun?
Sicherheitszertifizierung und die erforderliche Prüfung und Verifizierung Es wird ein großer Teil des Softwareentwicklungsbudgets benötigt. Shift-Left-Test von Software – früheres Testen im SDLC – bei gleichzeitiger Nutzung der Automatisierung zahlt sich in Bezug auf Kosten, Risiko und Zeitplan deutlich aus. Das Bild unten zeigt die Kosten in Millionen Dollar pro tausend Zeilen Code für die Softwareentwicklung für kommerzielle Fluggesellschaften, was den exponentiellen Anstieg deutlich zeigt.
Verstehen, wann Fehler auftreten und erkannt werden
Nicht überraschend, Die meisten Mängel werden zu Beginn in ein Projekt eingebracht, noch bevor die erste Codezeile geschrieben ist. Die meisten Fehler werden beim Testen gefunden und behoben. Aber ein guter Prozentsatz, bis zu 20 %, wird während des Betriebs entdeckt, nachdem das Produkt verkauft und versendet wurde.
In zertifizierten Systemen bedeutet dies entweder einen extrem teuren Fix-Test-Rezertifizierungszyklus oder Betreiber-Workarounds für das Problem. Die nächste Grafik zeigt den relativen Prozentsatz der eingeführten und erkannten Fehler in jeder Phase des Softwareentwicklungslebenszyklus.
Mängel lassen sich am günstigsten zu Beginn des Lebenszyklus beheben. Im Laufe der Projektdauer wird es exponentiell teurer, sie zu finden und zu reparieren. Im Betrieb ist die Reparatur eines Produkts am teuersten, nachdem es in die Hände des Kunden gelangt ist. Die Kosten für die Fehlerbehebung nach der Bereitstellung sind konservativ und beinhalten keine Schäden an Ihrer Marke und keine Haftung durch Sicherheitsvorfälle vor Ort.
Die folgende Grafik zeigt die relativen Kosten für die Behebung eines Defekts in jeder Phase des Lebenszyklus. Das Ziel besteht eindeutig darin, die erkannten und behobenen Mängel zu einem früheren Zeitpunkt im Lebenszyklus zu verschieben. Mit anderen Worten, nach links verschieben. Darüber hinaus ist es wünschenswert, die Anzahl der Mängel, die zum Kunden gelangen, zu reduzieren, was in jedem Bereich Realität ist.
Shift-Left-Testen durch Testautomatisierung
Die sicherheitskritische Softwareindustrie erkennt die Notwendigkeit an, die Art und Weise zu ändern, wie Dinge getan werden. Zu viele Projekte erfinden das Rad neu und die Zertifizierung brandneuer Software ist zeitaufwändig und teuer. Das Wachstum der Konnektivität und Funktionalität neuer Produkte bedeutet, dass sich die Methoden ändern müssen. In diesem Beitrag werden wir nicht alle vorgeschlagenen Techniken behandeln, sondern uns auf die Rolle konzentrieren, die die Testautomatisierung bei der Verlagerung, Erkennung und Behebung von Fehlern und Sicherheitslücken nach links spielt.
Vorteile der Testautomatisierung
Ein großer Teil jedes sicherheitskritischen Projekts ist das Testen. Automatisierung ist unbedingt erforderlich, um Sicherheits- und Qualitätsziele zu erreichen. Im Folgenden finden Sie Beispiele für die Art und Weise, wie Testautomatisierungstools unterstützen moderne Softwareentwicklung Methoden und steigern die Test- und Dokumentationsproduktivität.
Unterstützung von Agile- und CI/CD-Pipelines
Die Probleme mit der Wasserfallmethode sind bekannt und viele Teams nutzen modernere Entwicklungsmethoden, um Qualität und Sicherheit zu verbessern. Die Testautomatisierung ist ein wichtiger Bestandteil jeder iterativen Entwicklungsmethode, da Testsuiten bei jeder neuen Iteration eines Moduls, einer Komponente usw. ausgeführt werden.
Die Testautomatisierung unterstützt diese Methoden durch Wiederholbarkeit automatisierte Tests, Bereitstellung von Berichten auf verschiedenen Ebenen für jeden Test, aber auch kumulativer Ergebnisse im Laufe der Zeit. Diese Tools sind auch für die Arbeit mit CI-Prozessen konzipiert, indem sie in die Arbeitsaufgabenverfolgung, das Anforderungsmanagement, Build-Systeme und Quell-Repository-Dienste integriert werden. Dynamische Analysetools sind entscheidend für die Erkennung schwer erkennbarer Laufzeitfehler. Die statische Analyse spielt eine wichtige Rolle bei der Fehlererkennung vor Testbeginn.
Unterstützende Softwareinspektionen
Eine der besten Methoden zur Beseitigung von Fehlern zu Beginn des Entwicklungslebenszyklus sind Inspektionen. Inspektionen bedeuten, alles zu überprüfen, nicht nur den Quellcode. Beispielsweise ist die Überprüfung der Anforderungen und des Designs von entscheidender Bedeutung, um die Hauptfehlerquelle im System zu verhindern. Siehe Abbildung 2. Viele Fehler sind buchstäblich in das System eingebaut. Tools spielen in dieser Phase eine untergeordnete Rolle, erhöhen jedoch die Effektivität von Codeüberprüfungen.
Automatisierte Unit-Tests, dynamische Fehlererkennung und statische Analyse sorgen für eine deutlich verbesserte Fehlererkennung in den frühen Codierungsphasen eines Projekts. Die Ergebnisse automatisierter Tests können in Codeüberprüfungen präsentiert werden, wodurch die Abhängigkeit von der manuellen Fehlererkennung verringert wird und mehr Zeit für die Erkennung falscher Anforderungen und Designentscheidungen bleibt.
Steigerung der Testproduktivität
Manuelle Tests sind mühsam und weniger wiederholbar. Die Ergebniserfassung kann ad hoc erfolgen und ein Fehler kann trotz „richtiger“ Ergebnisse übersehen werden. Das Erreichen der erforderlichen Codeabdeckung, die je nach Sicherheitsstandards und der Kritikalität des Projekts variiert, ist schwer nachzuverfolgen.
Die Testautomatisierung macht das Testen nicht nur viel weniger mühsam und wiederholbar, sondern die Berichtsfunktionen fortschrittlicher Testtools liefern auch wichtige Managementinformationen über den Status des Projekts. Durch das Hinzufügen einer dynamischen Analyse, die den Code während der Ausführung analysiert, um knifflige Laufzeitfehler zu erkennen, und einer statischen Analyse, die den Code vor seiner Ausführung analysiert, wird die Fehlererkennungsfähigkeit von Testtools erheblich erhöht.
Automatisierung der Einhaltung von Codierungsstandards
Viele sicherheitskritische Projekte erfordern Quellcode-Standards. MISRA beispielsweise ist in der Automobilsoftware weit verbreitet, hat sich aber auch in anderen Branchen durchgesetzt. Einige Standards erfordern, dass der Code einem Unternehmensstandard entspricht, der bestimmte Ziele erfüllt. In jedem Fall ist die manuelle Durchsetzung der Codierungskonformität mühsam und fehleranfällig. Statische Analysetools sind ideal für die Durchsetzung von Compliance und erweiterte Tools gehen noch einen Schritt weiter, indem sie Fehler erkennen, die über Formatverstöße hinausgehen.
Automatisierung der Zertifizierungsdokumentation
Ein großer Teil des Arbeitsaufwands beim Erreichen von Software-Sicherheitszertifizierungen besteht in der Dokumentation von Prozessen, der Validierung und Verifizierung. Durch die Testautomatisierung werden die Kosten für die Dokumentation der Testergebnisse und die Abdeckungsanalyse erheblich gesenkt.
Beschleunigte Wiederverwendung von Legacy-Software
Eine Schlüsselstrategie zur Steigerung der Produktivität ist die Wiederverwendung von Software. Idealerweise können bereits zertifizierte Komponenten verwendet werden, um die Entwicklungskosten für diese Teileinheiten zu reduzieren. Die Automatisierung der Bewertung von Legacy-Software mit statischen und dynamischen Analysetools verringert das Risiko der Verwendung dieser Komponenten.
Verbesserung von Qualität, Sicherheit und Schutz
Selbst strenge Testverfahren können kritische Fehler übersehen. Die Codeabdeckung allein reicht nicht aus, um beispielsweise bei Sicherheitsangriffen oder Multithread-Code ein ordnungsgemäßes Verhalten sicherzustellen. Statische Analysetools können Fehler im Quellcode erkennen, ohne einen spezifischen Test durchzuführen, und können Fehler wie Sicherheitslücken finden, die bei Unit- oder Systemtests schwer zu entdecken sind.
Dynamische Analysetools können Fehler beim Ausführen von Code während Tests erkennen, die sich möglicherweise in Testergebnissen widerspiegeln, z. B. ein langsamer Speicherverlust. Durch Fuzzing und Penetrationstests während des Systemtests können Fehler gefunden werden, die unter normalen Betriebsbedingungen übersehen wurden. Insgesamt tragen die zusätzlichen Fehler und Sicherheitslücken, die moderne Tools finden, dazu bei, Kosten, Risiken und viele der etwa 20 % Fehler, die in die Produktion gelangen, zu reduzieren.
Welche Auswirkungen hat das Shift-Left-Testen?
Es ist klar, dass etwas getan werden muss, um die in Abbildung 2 deutlich dargestellten Probleme zu lösen. Zu viele Fehler werden eingeführt und bleiben zu Beginn des Lebenszyklus unentdeckt. Und zu viele verbleiben im Produkt, wenn es hergestellt wird und in den Händen der Kunden bzw. in Flugzeugen oder Autos. Die Einführung moderner Entwicklungsmethoden, die Wiederverwendung von Komponenten, die Nutzung von COTS und Open Source sowie die Automatisierung von Werkzeugen sind wichtige Schritte zur Verbesserung der Entwicklungsproduktivität.
Geht man von einem Entwicklungsprozess mit modernsten Tools aus, bei dem das Testen nach links verlagert wird und mehr Fehler früher im Lebenszyklus erkannt und behoben werden, sind Unit-Tests äußerst effektiv und tragen dazu bei, dass weniger Fehler in die Produktion gelangen. In Abbildung 4 zeigt ein hypothetisches Beispiel die Veränderung der Fehlererkennung im Laufe des Lebenszyklus, wobei der Großteil der Fehlererkennung und -behebung früher im Lebenszyklus nach links verschoben wird.
Aus Abbildung 3 oben wissen wir, dass die Kosten in jeder Entwicklungsphase erheblich steigen. Abbildung 5 unten zeigt den Vergleich der Kosten für die Behebung von Fehlern bei der herkömmlichen Methode mit der modernen Methode in Abbildung 4. Wenn die Suche und Behebung von Fehlern nach links verlagert wird, sind die Kosten geringer als bei der späteren Behebung. In der hier dargestellten Situation beträgt der Gesamtkostenunterschied etwa 40 % zugunsten des Shift-Left-Ansatzes.
Die Bedeutung zertifizierter Werkzeugketten und Qualifizierungsunterstützung
Der Einsatz automatisierter Tools in sicherheitskritischen Projekten erfordert Vertrauen in die Tools selbst. Es liegt in der Verantwortung des Herstellers des Produkts, darauf vertrauen zu können, dass die zur Erstellung der Software verwendeten Prozesse und Tools den Anforderungen des Standards entsprechen. Werkzeugverkäufer können dabei helfen, indem sie Werkzeuge vor dem Verkauf an die Hersteller von Sicherheitsnormen zertifizieren lassen oder, in Fällen, in denen eine solche Vorzertifizierung nicht möglich ist, Unterstützung bei der Qualifizierung leisten. Sie können dann den Zertifizierungsnachweis des Tool-Anbieters in ihrem eigenen Zertifizierungsantrag verwenden und so den erforderlichen Aufwand reduzieren. Zum Beispiel, Parasoft C / C ++ test wurde vom TÜV SÜD als qualifiziert für sicherheitsrelevante Softwareentwicklung gemäß den Normen IEC 61508 und ISO 26262 zertifiziert.
In einigen Softwaresicherheitsstandards wie DO-178C erfolgt die Zertifizierung auf Systemebene und einzelne Tools und Software werden nicht unabhängig voneinander zertifiziert. In diesen Fällen stellt der Anbieter des Tools Qualifizierungskits und Unterstützung in Form von Dokumentation und professionellen Dienstleistungen zur Verfügung, wodurch die Kosten und der Aufwand für die Qualifizierung der Tools für den Einsatz im Projekt erheblich reduziert werden.
Mit einer Shift-Left-Strategie bei sicherheitskritischen Softwarekosten navigieren
Sicherlich steckt sicherheitskritische Software in einer Kostenkrise. Die Entwicklung neuer, großer sicherheitskritischer Projekte wird zu teuer, sodass sie möglicherweise nicht mehr rentabel sind. Zur Entwicklung sicherheitskritischer Software sind moderne Methoden erforderlich, und dieser Aufwand muss die Anzahl der Fehler reduzieren, die spät im Softwareentwicklungslebenszyklus gefunden werden. Ganz nach links reduziert die Erkennung und Behebung von Mängeln und Sicherheitslücken so früh wie möglich im Lebenszyklus die Kosten erheblich. Die Testautomatisierung spielt eine Schlüsselrolle bei der Verbesserung der Testeffizienz und -ergebnisse. Es ist ein wichtiger Teil des modernen Ansatzes für die Entwicklung sicherheitskritischer Software.
Leitfaden zu Softwaretestmethoden: Maximieren Sie Qualität, Compliance, Sicherheit und Schutz
„MISRA“, „MISRA C“ und das Dreieckslogo sind eingetragene Marken von The MISRA Consortium Limited. ©The MISRA Consortium Limited, 2021. Alle Rechte vorbehalten.