2 Min. Lesezeit
Software-Entwickler: Gestalter der Welt
"Uns ist die Verantwortung, die wir in der Software-Entwicklung tragen, gar nicht bewusst" - Richard Seidl Ich glaube, es ist an der Zeit, dass wir...
5 Min. Lesezeit
Richard Seidl
01.03.2021
Der Systemtest ist eine sehr wichtige Teststufe. Unittest und Integrationstest testen mehr die inneren Aspekte der Applikation. Im Systemtest geht es viel mehr um die Außensicht. Die Software wird zum ersten Mal als Blackbox betrachtet und gegen die fachlichen Anforderungen geprüft. Diese spielen jetzt eine viel größere Rolle als noch in den unteren Testebenen. Das führt dazu, dass auch fachliche Mitarbeiter, spätere Anwender oder Kunden hier schon aktiv testen können. Dieser Perspektivwechsel bringt aber auch ganz neue Herausforderungen mit sich. Aus diesem Grund habe ich dem Thema ein ganzes Buch gewidmet: "Der Systemtest – Von den Anforderungen zum Qualitätsnachweis"
Das ISTQB definiert Systemtest als "eine Teststufe mit dem Schwerpunkt zu verifizieren, dass ein System als Ganzes die spezifizierten Anforderungen erfüllt."
Der große Unterschied zu vorherigen Testebenen ist, dass hier das integrierte Gesamtsystem gegen die Anforderungen getestet wird. Das System wird wie eine Blackbox von außen betrachtet.
Er ist eine Teststufe und keine Testart. In der Praxis wird er aber häufig mit dem Prüfen der Funktionalität eines Systems gleich gesetzt, was aber nicht korrekt ist.
Als Testbasis für den Systemtest dienen meistens funktionale und nicht-funktionale Anforderungen. Auch User-Stories, Geschäftsprozesse oder Anwenderdokumentationen eignen sich. Fehlt diese Basis oder ist sie lückenhaft, können Anwender oder Fachabteilungen befragt werden. Auch das alte System kann als Testorakel dienen, z.B. bei Systemablösen oder Migrationen.
Fachliche Anforderungen liegen häufig in Textform vor. Wie kann man aus diesen Anforderungen nun Testfälle erstellen? In der Praxis hat sich dazu eine Kombination aus zwei Vorgehen bewährt:
Dieses Zusammenspiel bringt ein gutes Set an Testfällen für die Durchführung von Softwaretests im Systemtest. In der Praxis ist es häufig so, dass bei der Testfallerstellung für den Systemtest viele Fragen zum Testing auftauchen. Will ich einen konkreten Testfall erstellen, müssen die Sätze in den Dokumenten auch konkret für das Testing sein. Und das ist häufig nicht der Fall: "Das System muss performant sein", "Die Applikation sollte leicht zu bedienen sein", "Der Button sollte grün sein". Auch Lücken werden hier schnell deutlich. All diese Rückfragen müssen geklärt werden.
Die geklärten Punkte müssen natürlich auch dem Entwickler bekannt sein. Daher ist es umso wichtiger, frühzeitig mit der Testfallerstellung zu beginnen.
Das Testobjekt für diesen Test ist das integrierte Gesamtsystem. D.h. die Software oder Applikation wird über die Oberfläche oder die Schnittstellen geprüft. Für eine abschließende Bewertung muss das System daher auch vollständig sein.
Die Integration mit anderen Systemen ist nicht Teil des Systemtests, sondern wird häufig als Systemintegrationstest bezeichnet.
Das Ziel des Systemtests ist es, zu prüfen, ob die funktionalen und nicht-funktionalen Anforderungen an die Applikation erfüllt und ausreichend umgesetzt sind. In der Praxis lauern hier einige Herausforderungen, die frühzeitig bedacht werden müssen.
Hier existiert ebenfalls eine Schwierigkeit. Für eine valide Aussage ist es notwendig, dass die Testumgebung der Produktivumgebung entspricht. Oder dieser zumindest sehr ähnlich ist. Gerade wenn es um nicht-funktionale Testarten wie Performancetest oder Zuverlässigkeit geht. Und diese doppelte Infrastruktur kann teuer sein. Hier zeigt sich auch ein massiver Vorteil virtueller Maschinen und Cloud-Lösungen. Ist das spätere produktive System eine parametrisierte virtuelle Maschine, lässt sich diese für die Systemprüfung auch kostengünstig klonen.
Testdatenmanagement wird ab der Systemteststufe deutlich anspruchsvoller. Unit- und Integrationstests hantieren meist noch mit Testdaten im lokalen Umfeld des Testfalls. Beim Systemtest können aber deutlich umfangreichere Testdatensets vonnöten sein, z.B. angelegte Verträge, historische Daten, verknüpfte Datensätze, etc. Hier haben sich in der Praxis zwei Verfahren etabliert:
Lange Zeit war es um die Testautomatisierung beim Systemtest schlecht bestellt. Tests unter der Haube, wie Unit- und Integrationstests, waren allein schon durch die Entwicklungsnähe gut mit Tools versorgt. Gerade mit Aufkommen der agilen Projekte hat es hier aber auf Systemtestebene einen massiven Schub gegeben. Testautomatisierungslösungen für Oberflächentests, Webtests und auch Schnittstellentests helfen nun beim Durchführen der Tests. Hier gibt es heute ein Fülle an Möglichkeiten. Wie man Testautomatisierung hier konkret implementiert, habe ich im Buch "Basiswissen Testautomatisierung" zusammengefasst.
Das Modell der Teststufen kommt aus einer Zeit lange vor agilen Projekten. Es wird deswegen in Scrum und Co gerne ignoriert. Aber schauen wir mal genauer auf das Modell, dann sehen wir, wie wichtig die Ideen und Aspekte dieser Testebenen natürlich auch in agilen Kontexten sind. So wie beim System Testing: Das System von außen testen. Testdaten vorbereiten. Testfälle überlegen. Und natürlich Testautomatisierung aufsetzen.
In diesem Kontext taucht auch immer wieder das Modell der Testpyramide auf. Es liefert eine ähnliche Perspektive wie die Testebenen.
Daher lohnt sich der Blick durch die Test-Brille auch in agiler Softwareentwicklung. Die Intention des Systemtests lässt sich übertragen, und das Relevante davon im eigenen Projekt nutzen.
Wenn ich mir die Projekte der letzten Jahre ansehe, treten bei diesem Test immer wieder die gleichen Herausforderungen im Alltag auf:
Wenn ein Systemtest nicht mehr genügt, kommt der Systemintegrationstest ins Spiel! Das ist die Art von Test, die sicherstellt, dass alle Systeme zusammenarbeiten und die Gesamtanforderungen erfüllen. Bei der Durchführung von Systemtests müssen Tester sicherstellen, dass das System für sich die Testergebnisse liefert, die wir brauchen. Beim Systemintegrationstest ist dies deutlich schwieriger, weil hier verschiedene Systeme und Verantwortlichkeiten zusammenwirken.
Während ein Integrationstest immer das Zusammenspiel von verschiedenen Komponenten prüft, betrachtet der Systemtest das gesamte System aus Sicht der Benutzer. Der Begriff der Intergrationstests ist nicht so eindeutig, denn es muss immer geschaut werden, welche Integration gemeint ist, z.b. die Integration von Modulen, Komponenten oder Systemen.
In der Praxis ist der Systemtest oft der Testlevel, mit der das Testing begonnen wird. Das kommt daher, dass diese Testebene für Fachabteilungen, Tester und Management leichter greifbar ist. Man nehme die Anforderungen und prüfe das System dagegen. Das ist leichter verständlich als auf Codeebene irgendwelche kleinteiligen Unittests zu verargumentieren.
In dieser Situation zeigt der Systemtest dann aber leider auch oft die Lücken der anderen Testlevels. Instabilitäten und inkonsistentes Verhalten der Software deuten dann darauf hin, dass es im Unterbau an Robustheit fehlt. Durch die späte Testbarkeit bei der Systemprüfung kommen diese Erkenntnisse leider sehr spät.
Daher ist es besonders wichtig auch die anderen Testebenen zu etablieren. Nur ein Systemtest ist zu wenig.
Auch wenn die Durchführung des Systemtests erst recht spät möglich ist, lassen sich z.B. die Testfälle schon entwerfen, bevor die erste Zeile Code geschrieben ist. Fragen und Unklarheiten werden somit frühzeitig bereinigt.
Ein Systemtest ist eine wichtige Phase in der Softwareentwicklung, bei der das gesamte System auf seine Funktionalität und Leistung getestet wird. Dabei wird überprüft, ob alle Komponenten zusammenarbeiten und die anforderungen erfüllt werden. Das Ziel ist es, sicherzustellen, dass die Software als Ganzes funktioniert, bevor sie an die benutzer übergeben wird.
Systemtests sind entscheidend, weil sie helfen, die Qualität der Software zu sichern. Sie decken sowohl funktionale als auch nicht-funktionale Anforderungen ab und stellen sicher, dass das System unter realistischen Bedingungen funktioniert. Ohne gründliche Systemtests könnten schwerwiegende Fehler übersehen werden, die die Benutzererfahrung beeinträchtigen.
Die Durchführung von Systemtests kann auf verschiedene Arten erfolgen, einschließlich manuelle Tests und automatisierte Systemtests. Bei manuellen Tests führen Tester die Tests selbst durch, während bei automatisierten Systemtests spezielle Tools verwendet werden, um die Tests effizienter und konsistenter zu gestalten.
Beispiele für Systemtests sind der Abnahmetest, bei dem überprüft wird, ob das System die anforderungen entsprechen erfüllt, oder Regressionstests, die sicherstellen, dass neue Änderungen keine bestehenden Funktionen beeinträchtigen. Auch Integrationstests sind eine Art von Systemtest, bei denen die Interaktion zwischen verschiedenen Modulen getestet wird.
Der Hauptunterschied liegt darin, dass Integrationstests sich auf die Interaktion zwischen einzelnen Komponenten konzentrieren, während Systemtests das System als Ganzes betrachtet.
2 Min. Lesezeit
"Uns ist die Verantwortung, die wir in der Software-Entwicklung tragen, gar nicht bewusst" - Richard Seidl Ich glaube, es ist an der Zeit, dass wir...
Der Integrationstest ist gar nicht so leicht zu fassen, denn vieles lässt sich integrieren. Module, Komponenten, Schichten, Services oder ganze...
Podcast Episode: Testentwurfsmethoden In dieser Folge spreche ich mit Rik Marselis über Testentwurfstechniken. Rik, der diese Techniken seit fast 25...