Seien Sie am 30. April dabei: Vorstellung von Parasoft C/C++test CT für kontinuierliche Tests und Compliance-Exzellenz | Registrierung

Robustheitstests: Was ist das und wie liefert man zuverlässige Softwaresysteme mit Testautomatisierung

Kopfbild von Ricardo Camacho, Director of Safety & Security Compliance
26. August 2021
6 min lesen

Das Testen der Robustheit von Software ist eine Möglichkeit, die Qualitätssicherung zu verbessern. Lesen Sie, um zu verstehen, welche Arten von Testmethoden die Robustheit von Softwaresystemen verbessern können.

Wenn die meisten Leute sich hinter das Steuer eines Autos setzen, machen sie sich keine Sorgen, dass die Bremsen versagen. Sie machen sich auch keine Sorgen über Verletzungen durch eine Fehlfunktion, wenn ihr Kind ein neues Spielzeug bekommt. Tatsächlich machen sich die meisten Menschen im Alltag überhaupt keine Sorgen über Systemstörungen.

Das liegt daran, dass ein Softwareentwickler oder ein Qualitätskontrollingenieur wie Sie sich mit Qualitätsproblemen befasst hat. Wenn das Ziel darin besteht, qualitativ hochwertige Produkte zu liefern, zuverlässige Softwaresysteme, dann müssen Tests durchgeführt werden. Qualitätsprobleme werden ohne Tests nicht verschwinden, denn je zuverlässiger das Produkt ist, desto sicherer ist es.

Einer der Prozesse, die wir zum Testen von Qualität und Zuverlässigkeit verwenden, wird als Robustheitsprüfung bezeichnet. Dabei handelt es sich um den Grad, in dem ein System bei außergewöhnlichen Eingaben oder stressigen Umgebungsbedingungen korrekt funktioniert. Wenn Sie neu in dieser Art von Tests sind, schnallen Sie sich an.

Was ist Robustheit beim Testen der Softwarequalität?

Qualitätssicherungsingenieure werden bei einem Systemfehler oder schlimmer noch, wenn dieser Fehler zu einer Verletzung führt, hinfallen. Aber das lässt Entwickler nicht vom Haken. Entwickler sollten zusammen mit den anderen Tests, die sie während des Validierungsprozesses durchführen, z. B. Benchmark-Tests, erstellen und auf Robustheit testen.

Eingebettete Software sicherheitskritische Systeme erfordern in jeder Phase des Softwareentwicklungslebenszyklus gründliche Tests, vom System- und High-Level-Design bis hin zu Unit-Tests und Integrationstests.

Was bedeutet das Testen auf Robustheit in der realen Welt?

Wenn beim Softwaretest Robustheit aufkommt, bedeutet dies im Allgemeinen, dass das bereitgestellte oder sich noch in der Entwicklung befindliche System unter normalen oder normalen Bedingungen gut funktioniert. Bei robusten Tests geht es darum, die Zuverlässigkeit zu verbessern und diese Eckfälle zu finden, indem Daten eingegeben werden, die extreme Umgebungsbedingungen nachahmen, um festzustellen, ob das System robust genug ist, um zu liefern.

Das Testen der Robustheit ist fokussierter als das Zuverlässigkeits-Benchmarking. Bei robusten Tests geht es darum, ob wir die Software umgehen können und ob sie in der Lage ist, mit dem Missbrauch umzugehen und richtig zu funktionieren. Es geht nicht um diese sonnigen Tagesszenarien, bei denen alles perfekt läuft. Wir führen Robustheitstests durch, um herauszufinden, was den anderen Tests fehlt. Unser Ziel ist es, Testumgebungen zu schaffen, die die Robustheit eines Softwaresystems beurteilen können. Es ist wichtig, Softwaretestmetriken zu verfolgen, um die Effektivität Ihrer Tests zu messen.

In der Informatik sind Programmierer daran gewöhnt, Algorithmen zu erstellen, die Computersysteme zum Laufen bringen. Wir sind es nicht gewohnt, Algorithmen zu erstellen, um Dinge zu zerstören, daher mögen Robustheitstests für einige kontraintuitiv erscheinen. Es ist notwendig, um die Robustheit der von uns gebauten Computersysteme zu überprüfen, unabhängig von der Semantik der Programmiersprache. Dies gilt insbesondere dann, wenn mehrere Abhängigkeiten vorliegen.

Wenn wir Robustheitstests durchführen, suchen wir nach den Szenarien, die zu einem Ausfall der Software führen können. Robustheitstests sind eine End-to-End-Testlösung für eingebettete Systeme. Es wird durchgeführt, indem gültige Eingaben und ungültige Eingaben übergeben werden, um die Zuverlässigkeit der Software zu überprüfen. Die Software kann aus vielen Gründen ausfallen, daher testen wir auch auf Änderungen, die sich auf die Hardware, Änderungen in der Umgebung oder externe und unabhängige Software auswirken.

Warum ist Robustheitsprüfung in Softwaresystemen wichtig?

Sicherheit und Zuverlässigkeit sind klare Vorteile der Robustheitsprüfung. Es rettet Leben und verringert das Risiko von Verletzungen oder kostspieligen Gerichtsverfahren. Einige Branchen müssen mehr als andere nach strengen regulatorischen und Compliance-Standards testen.

Die Luftfahrtindustrie mit ihren vielen eingebetteten Luftfahrtsystemen ist ein hervorragendes Beispiel für die Bedeutung von Sicherheit und Zuverlässigkeit. Das Leben der Menschen steht auf dem Spiel. Sie glauben besser, dass sie beim Testen an das Eckgehäuse denken.

Anzahl der Flüge 1/2004 - 6/2021
Anzahl der Unfälle von Zivilflugzeugen seit 1945
16.9 Millionen
3,346

Mit einer so hohen Anzahl von Flügen in den letzten sechzehn Jahren und der relativ geringen Zahl von Abstürzen ziviler Fluggesellschaften seit 1945 hat die Luftfahrtindustrie eine extrem hohe Erfolgsquote. Auch bei dieser Art von Erfolg gibt es leider Todesfälle, Verletzungen und Klagen, aber es dient als wirksames Argument für die Wirksamkeit von Robustheitstests.

Die automatisierte Testgenerierung ist wichtig, um das Testen zu beschleunigen. Einige Lösungen für Robustheitstests bieten die automatische Generierung von Testfällen, die die Qualität verbessern und helfen, Softwarekomponenten direkt auf der Zielhardware zu verifizieren und zu validieren, was eine Anforderung innerhalb der strengsten Sicherheitsintegritätsstufen wie DAL A in der DO-178C Prozessstandard.

Sicherheit ist ein weiteres Beispiel, bei dem Entwickler und Ingenieure es sich nicht leisten können, Fehler zu machen. Finanzinstitute, Kreditkartenunternehmen und die Verteidigungsindustrie sind nur einige, die sehr strenge Compliance-Anforderungen erfüllen müssen. Es ist möglich, Compliance in bestehende Entwicklungsprozesse und Ökosysteme zu integrieren, von Anforderungsmanagement und Quellcodeverwaltung bis hin zu IDEs und CI/CD. Durch die Automatisierung der Einhaltung der funktionalen Sicherheit und sicherheitskritischer Standards können Unternehmen Zeit und Geld sparen.

Kontinuierliche Integration und kontinuierliche Bereitstellung für eingebettete Systeme

Unabhängig von der Branche oder der Anwendung helfen Robustheitstests Unternehmen dabei, Compliance zu erreichen und zu automatisieren und qualitativ hochwertige Software bereitzustellen. Außerdem wird ein guter ROI erreicht, was die Bereitstellungskosten für eingebettete Software reduziert.

Welche Testarten oder Testmethoden gewährleisten die Robustheit von Testsuiten?

Obwohl es viele Robustheitstesttechniken und -tools gibt, ist Fuzz wahrscheinlich die am weitesten verbreitete Testmethode, da es sie seit Jahrzehnten gibt. Fuzz-Tests haben sich als sehr effektiv erwiesen und sind eine relativ einfache Methode, bei der Sie Testfälle mit mehreren Variationen unerwarteter Eingaben erstellen und diese auf Ausnahmen überwachen. Wenn es nach ausführlichen Tests nicht abstürzt, keine integrierten Code-Assertionen fehlschlägt oder potenzielle Speicherlecks auftreten, haben Sie ein hohes Maß an Software-Robustheit erreicht.

Eine weitere Robustheitstesttechnik ist der Black-Box-Test. Hier geben die QS-Tester oder das Software-Engineering-Team vor, die Endbenutzer oder Stakeholder des Produkts oder der Anwendung zu sein, um reale Szenarien zu testen. Der Benutzer kümmert sich nur darum, ob das Softwaresystem wie vorgesehen funktioniert. Es ist das Testen auf menschlicher oder Benutzerebene für Funktionalität und Zuverlässigkeit. Wenn das System unter stressigen Umgebungsbedingungen die richtige Leistung oder das richtige Verhalten erzeugt und das System ordnungsgemäß funktioniert oder funktioniert, wie es entworfen wurde, ist es robust.

Was ist mit Robustheitstesttechniken wie Fehlerinjektions- und Mutationstests?

Andere Arten von Robustheitstestansätzen umfassen klassische Fehlerinjektionstests und Mutationstests. Das Ziel des klassischen Fehlerinjektionstests besteht darin, die Robustheit des Systemcodes während der Laufzeit zu bestimmen, indem beschädigte Datentypen oder Hardwarefehler eingeschleust werden, um festzustellen, ob das System abstürzt oder unsicher ist. Wenn es die Fehler toleriert, ist es robust. Das Ziel des Mutationstests besteht darin, die Effektivität des Testfalls zu bewerten, um einen Fehler zu finden. In diesem Test fügen Sie einen Fehler in den Code ein, um zu sehen, ob er erkannt wird. Wenn ja, ist Ihr Testfall gründlich.

Tipp! Wenn Sie ein Entwickler sind, der mit . arbeitet Javac, ist die Ausnahmebehandlung eine Testmethode, die Sie bereitstellen können, um Laufzeitfehler zu behandeln, damit der normale Ablauf der Anwendung aufrechterhalten werden kann.

Automatisierte Testtools & Robustheitstests und Softwarequalität

Automatisierungstests werden verwendet, um sich wiederholende Aufgaben und andere Testaufgaben zu automatisieren, die manuell schwer durchzuführen sind. Es vergleicht das tatsächliche Ergebnis mit dem erwarteten Ergebnis. Testfälle werden erstellt, um ein bestimmtes Testziel zu erreichen. Robustheitstests können automatisiert werden, wenn Regressionstests durchgeführt werden, ein weiterer Ansatz für Robustheitstests.

Der Regressionstest ist ein Test der gesamten Anwendung, um festzustellen, ob Änderungen in einem Modul oder der Funktionalität der Software nachteilige Auswirkungen haben. Bei der Durchführung von Regressionstests ist eine Automatisierung erforderlich, da es fast unmöglich ist, Systemtests manuell durchzuführen. Die Automatisierung reduziert den Arbeitsaufwand und die Laufzeit, welche Testmethodik für robuste Tests verwendet wird.

Regressionstests eingebetteter Systeme

Mit automatisierten Testtools können Sie auch Testfälle automatisch generieren, um Fuzz-Tests oder symbolische Ausführung zu unterstützen, die Min-, Mid-, Max- und andere Wertebereichstests durchführt. Einige Testfälle testen auch außerhalb der Wertegrenzen, um festzustellen, ob Ihre Softwarekomponenten auch diese Werte verarbeiten können.

Automatisierte Testwerkzeuge mit benutzerfreundlichen grafischen Oberflächen können die Dinge ausgleichen einfacher mit Unit-Tests indem der Code in eine visuelle Tabelle abstrahiert wird, die es dem Benutzer ermöglicht, Felder wie Eingabewerte und erwartete Ergebnisse auszufüllen. Anschließend kann die Generierung des Testfalls aus der Tabelle erfolgen. Stubbing kann auch zu Testzwecken angewendet werden, obwohl andere Softwarefunktionen möglicherweise nicht verfügbar sind. Es gibt auch die vereinfachte Möglichkeit, Testfälle zu ändern oder zu aktualisieren und zu verfolgen, welche Testfälle geändert werden müssen, wenn sich der Code ändert. Besser noch, QA-Teams können Testsuiten mit all den Tausenden von erstellten Testfällen verwalten.

Was sind die Grenzen von Robustheitstests?

Für Organisationen, die sich erfüllen müssen IEEE-Standards, Robustheitstests sind obligatorisch, können jedoch für nicht sicherheitskritische Anwendungen übermäßig sein, sodass sie für einige Organisationen möglicherweise nicht gerechtfertigt sind. Einige Tests, wie Mutationstests, erfordern einen vorhandenen Testfall und das Einfügen realistischer Fehler, was schwierig sein kann.

Leider ist die Zeit aufgrund des zusätzlichen Zeit- und Arbeitsaufwands nicht immer ein Freund von Robustheitstests. Aber wenn Robustheits-Softwaretests Ihrem Unternehmen helfen, sein Ziel zu erreichen, eine höhere Softwarequalität und sichere Software mit gutem ROI bereitzustellen und die Bereitstellungskosten zu senken, dann müssen Sie möglicherweise Automatisierungstools in Betracht ziehen, die die Geschwindigkeit und die Fähigkeiten bieten Sie müssen Robustheitstests durchführen.

Es ist wichtig, ein gutes Verständnis von Robustheitstests zu haben. So sehr, dass das International Symposium on Online Testing and Robust System Design (IOLTS) Daten dazu für das IEEE vorgelegt hat. Das IEEE hat auch eine Familie von Standards zur Aufrechterhaltung der Kompatibilität festgelegt

Darüber hinaus hat die Association for Computing Machinery (ACM) im ACM-Journal Fallstudien zu Robustheitstests vorgestellt.

Möchten Sie mehr über Robustheitstests für eingebettete Systeme erfahren?