Stabilitätstests Mit Robutstheitsstests und Testautomatisierung zu zuverlässigen Softwaresystemen
Anbieter zum Thema
Zur Erfüllung bestimmter IEEE-Normen sind mittlerweile Stabilitäts- oder Robustheits-Tests zum Standard geworden. Aber was genau sind Stabilitätstests, und wie können diese zusammen mit Testautomatisierung dafür sorgen, dass ein zuverlässiges Softwaresystem entsteht?

Wenn sich die meisten Menschen hinter das Steuer eines Autos setzen, machen sie sich keine Sorgen, dass die Bremsen versagen könnten. Sie machen sich auch keine Sorgen über Verletzungen aufgrund einer Fehlfunktion, wenn ihr Kind ein neues Spielzeug bekommt. Tatsächlich denken die meisten Menschen im Alltag an irgendwelche Systemstörungen. Das liegt daran, dass sich ein Softwareentwickler oder ein Qualitätsprüfer mit Qualitätsfragen beschäftigt hat.
Besteht das Ziel darin, hochwertige und zuverlässige Softwaresysteme zu liefern, dann müssen Tests durchgeführt werden. Je zuverlässiger das Produkt ist, desto sicherer ist es. Eines der Verfahren zum Testen von Qualität und Zuverlässigkeit sind die sogenannten Stabilitätstests. Dabei wird geprüft, inwieweit ein System auch bei außergewöhnlichen Eingaben oder stressigen Umgebungsbedingungen korrekt funktioniert. Wenn Sie mit dieser Art von Tests noch nicht vertraut sind, sollten Sie sich anschnallen.
Was bedeutet Stabilität bei Software-Qualitätstests?
Für die Qualitätssicherung zuständige Entwickler haften für einen Systemfehler, oder schlimmer noch, wenn dieser Fehler eine Verletzung oder Schaden verursacht. Neben anderen während des Validierungsprozesses durchzuführenden Tests, wie z. B. Benchmark-Testing, sollten die Entwickler das System auch auf seine Stabilität überprüfen.
Die Zuverlässigkeit von embedded Software und sicherheitskritischen Systemen erfordern gründliche Tests in jeder Phase des Lebenszyklus der Softwareentwicklung, vom System- und High-Level-Design bis hin zu Unit-Tests und Integrationstests.
Welche Bedeutung hat die Prüfung auf Stabilität in der realen Welt?
Ist im Zusammenhang mit Softwaretests von Robustheit die Rede, bedeutet dies im Allgemeinen, dass das eingesetzte oder noch in der Entwicklung befindliche System unter normalen oder gewöhnlichen Bedingungen gut funktioniert. Bei Stabilitätstests geht es um die Verbesserung der Zuverlässigkeit und das Aufspüren von Eckfällen durch die Eingabe von Daten, die extreme Umgebungsbedingungen nachahmen, um festzustellen, ob das System belastbar genug ist, um die Anforderungen zu erfüllen oder nicht.
Das Prüfen der Stabilität ist gezielter als das Benchmarking der Abhängigkeit. Denn beim Testen der Stabilität geht es darum, ob Software in der Lage ist, einem Missbrauch standzuhalten und korrekt zu funktionieren. Es geht nicht um diese ‚sonnigen‘ Tagesszenarien, in denen alles perfekt läuft. Sondern mithilfe von Stabilitätstests wird herausgefunden, was bei den anderen Tests versäumt wurde. Das Ziel ist es, Testumgebungen zu schaffen, mit denen die Robustheit eines Softwaresystems beurteilt werden kann. Um die Wirksamkeit der Tests zu messen, ist es wichtig, die Metriken von Softwaretests zu verfolgen.
In der Informatik sind Programmierer daran gewöhnt, Algorithmen zu erstellen, die Computersysteme zum Laufen bringen. Man ist nicht daran gewöhnt, Algorithmen zu entwickeln, die Dinge kaputt machen, so dass Stabilitätstests für einige vielleicht kontraintuitiv erscheinen. Dennoch ist das Überprüfen der Belastbarkeit der von uns erstellten Computersysteme notwendig, unabhängig von der Semantik der Programmiersprache. Dies gilt insbesondere dann, wenn es mehrere Abhängigkeiten gibt.
Beim Durchführen von Stabilitätstests wird nach den Szenarien gesucht, die zu einem Ausfall der Software führen können. Stabilitätstests sind eine End-to-End-Testlösung für embedded Systeme. Dabei wird die Zuverlässigkeit der Software im Zuge von gültigen und ungültigen Eingaben geprüft. Weil die Software aus vielen Gründen versagen kann, wird ebenso auf Änderungen geprüft, die sich auf die Hardware auswirken, auf Änderungen in der Umgebung oder auf externe und unabhängige Software.
Warum sind Robustheitstests in Softwaresystemen wichtig?
Sicherheit und Zuverlässigkeit sind eindeutige Vorteile von Stabilitätstests. Sie retten Leben und senken das Risiko von Verletzungen oder kostspieligen Gerichtsverfahren. Manche Branchen müssen strenge gesetzliche Vorschriften und Konformitätsstandards strenger einhalten als andere. Ein ausgezeichnetes Beispiel für die Bedeutung von Sicherheit und Zuverlässigkeit ist die Luftfahrtindustrie mit ihren vielen embedded Systemen. Hier stehen Menschenleben auf dem Spiel – darum wird bei den Tests auch an den Ernstfall gedacht.
Anzahl der Flüge 1/2004 - 6/2021 | Anzahl der Abstürze von Verkehrsflugzeugen seit 1945 |
---|---|
16,9 Millionen | 3346 |
Angesichts der hohen Anzahl von Flügen in den letzten sechzehn Jahren und der relativ niedrigen Zahl an Abstürzen von Verkehrsflugzeugen seit 1945 hat die Luftfahrtindustrie eine extrem hohe Erfolgsquote. Trotzdem gibt es leider Tote, Verletzte und Gerichtsverfahren - letztendlich ein gutes Argument für die Zweckmäßigkeit von Stabilitätstests.
Die automatisierte Testgenerierung ist wichtig, um die Tests zu beschleunigen. Einige Stabilitätstests bieten eine automatisierte Generierung von Testfällen, die die Qualität verbessern und dabei helfen, Softwarekomponenten direkt auf der Zielhardware zu verifizieren und zu validieren. Dies ist eine Anforderung innerhalb der strengsten Sicherheitsintegritätsstufen, wie z. B. DAL A im Prozessstandard DO-178C.
Sicherheit ist ein weiteres Beispiel, bei dem sich Entwickler und Ingenieure keinen Fehler leisten können. Finanzinstitute, Kreditkartenunternehmen und die Verteidigungsindustrie sind nur einige der Branchen, die sehr strenge Konformitätsanforderungen erfüllen müssen. Es ist möglich, die Konformität in bestehende Entwicklungsprozesse und Ökosysteme zu integrieren, vom Anforderungsmanagement und der Quellcodekontrolle bis hin zu IDEs und CI/CD. Durch das automatisierte Einhalten funktionaler und sicherheitskritischer Standards können Unternehmen Zeit und Geld sparen.
Unabhängig von der Branche oder der Anwendung unterstützen Stabilitätstests Unternehmen beim Erreichen und Automatisieren der Konformität und bei der Bereitstellung hochwertiger Software. Dass zudem ein guter ROI erzielt wird, was die Kosten für die Bereitstellung von embedded Software senkt, ist ein weiteres zugkräftiges Argument.
Welche Testarten oder -methoden stellen die Stabilität von Testsuiten sicher?
Unter den vielen Techniken und Werkzeugen ist das seit Jahrzenten eingesetzte Fuzz wahrscheinlich die am weitesten verbreitete Testmethode. Fuzz-Tests haben sich als sehr effektiv erwiesen. Bei dieser relativ einfachen Methode, erstellt man Testfälle mit mehreren Variationen von unerwarteten Eingaben und überwacht sie auf Ausnahmen. Wenn die Software nach ausführlichen Tests nicht abstürzt, keine eingebaute Codebestätigungen versagt oder potenzielle Speicherlecks aufweist, hat man ein hohes Maß an Software-Stabilität erzielt.
Eine weitere Technik für Stabilitätstests ist das Blackbox-Testing bzw. das Testen auf menschlicher oder Benutzerebene auf Funktionalität und Zuverlässigkeit. Dabei tun die QS-Tester oder das Softwareentwicklungsteam so, als wollten sie als Endnutzer oder Interessensgruppen des Produkts oder der Anwendung reale Szenarien testen und interessieren sich nur dafür, ob das Softwaresystem wie vorgesehen funktioniert oder nicht. Wenn das System unter stressigen Umgebungsbedingungen die korrekte Ausgabe oder das korrekte Verhalten erzeugt und ordnungsgemäß funktioniert oder so arbeitet, wie es konzipiert wurde, ist es stabil.
Was ist mit Testtechniken wie Fault Injection und Mutationstests?
Dabei handelt es sich um weitere Arten von Stabilitätstests. Das Ziel der klassischen Fehlerinjektionstests besteht darin, die Stabilität des Systemcodes während der Laufzeit zu ermitteln. Indem fehlerhafte Datentypen oder Hardwarefehler injiziert werden, stellt man fest, ob das System abstürzt oder unsicher ist. Wenn es die Fehler verkraftet, ist es stabil. Mutationstests haben das Ziel, die Effektivität des Testfalls zu bewerten, um einen Fehler zu entdecken. Bei diesem Test fügt man einen Fehler in den Code ein, um zu sehen, ob er gefunden wird. Ist dies der Fall, ist der Test gründlich.
Tipp! Arbeitet man als Entwickler mit Java, ist die Testmethode der Ausnahmebehandlung eine Möglichkeit, mit Laufzeitfehlern umzugehen, so dass der normale Ablauf der Anwendung aufrechterhalten werden kann.
Automatisierte Testtools & Stabilitätstests und Softwarequalität
Automatisierungstests dienen der Automatisierung von sich wiederholenden Aufgaben und anderen manuell nur schwer durchführbaren Testaufgaben. Es erfolgt ein Vergleich des tatsächlichen mit dem erwarteten Ergebnis. Testfälle werden erstellt, um ein bestimmtes Testziel zu erreichen. Stabilitätstests können bei der Durchführung von Regressionstests - einem anderen Ansatz - automatisiert werden. Regressionstests prüfen die gesamte Anwendung, um festzustellen, ob in einem Modul oder in der Funktionalität der Software Änderungen vorgenommen wurden, die sich negativ auswirken. Beim Durchführen von Regressionstests ist die Automatisierung notwendig, da es fast unmöglich ist, Systemtests manuell durchzuführen, außerdem schmälert sie den für stabile Tests benötigten Arbeits- und Zeitaufwand.
Mit automatisierten Testtools lassen sich auch automatisch Testfälle zur Unterstützung von Fuzz-Tests oder von symbolischer Ausführung erstellen, die Minimal-, Mittel-, Maximal- und andere Wertebereichstests durchführen. Indem einige Testfälle außerhalb der Wertgrenzen testen, stellen sie fest, ob die Software-Komponenten auch diese Werte verarbeiten.
Automatisierte Testwerkzeuge mit benutzerfreundlichen grafischen Oberflächen können das Testen von Einheiten noch vereinfachen, indem sie den Code in eine visuelle Tabelle abstrahieren, in der Anwender Felder, wie Eingabewerte und erwartete Ergebnisse, ausfüllen können. Anschließend wird der Testfall aus der Tabelle generiert. Wenn andere Softwarefunktionen nicht zur Verfügung stehen, bietet sich auch Stubbing zum Testen an. Zudem besteht die 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. Noch besser ist, dass QA-Teams Testsuiten mit all den Tausenden von erstellten Testfällen verwalten können.
Was sind die Grenzen von Stabilitätstests?
Für Unternehmen, die die IEEE-Normen erfüllen müssen, sind Stabilitätstests obligatorisch, aber für nicht-sicherheitskritische Anwendungen können sie übertrieben sein, so dass sie für manche Unternehmen nicht gerechtfertigt sind. Einige Tests, wie z. B. Mutationstests, erfordern einen bestehenden Testfall und das Einfügen realistischer Fehler, was schwierig zu bewerkstelligen sein kann.
Leider ist die Zeit nicht immer ein Freund von Stabilitätstests, weil diese zusätzlichen Aufwand bedeuten. Wenn sie aber dem Unternehmen helfen, um eine höhere Softwarequalität und eine sichere Software mit gutem ROI zu liefern und die Kosten für die Bereitstellung zu senken, dann sollte man Automatisierungstools in Betracht ziehen, welche die notwendige Geschwindigkeit und die Fähigkeiten zum Durchführen von Stabilitätstests bieten.
Wichtig ist, ein gutes Verständnis von Stabilitätstests zu haben. Dies geht so weit, dass das International Symposium on On-Line Testing and Robust System Design (IOLTS) Daten für die IEEE vorgelegt hat. Die IEEE hat auch eine Reihe von Standards für die Aufrechterhaltung der Kompatibilität spezifiziert. Zusätzlich hat die Association for Computing Machinery (ACM) in der Zeitschrift ACM Fallstudien über Robustheitstests vorgestellt.
:quality(80)/images.vogel.de/vogelonline/bdb/1564700/1564700/original.jpg)
Zufällige Hard- und Softwarefehler in sicherheitskritischen Systemen
:quality(80)/images.vogel.de/vogelonline/bdb/1531100/1531182/original.jpg)
Automatisierung von anforderungsbasiertem Testen
* Ricardo Camacho ist Senior Technical Marketing Manager bei Parasoft.
(ID:48392672)