5 Min. Lesezeit

Systemtest - Strategien, Methoden und Tools für den Softwaretest

Systemtest - Strategien, Methoden und Tools für den Softwaretest

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"

Definition Systemtest

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.

Gehört der Systemtest zu den Teststufen oder den Testarten?

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.

Testbasis

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.

Testfallerstellung für Systemtests

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:

  • Strukturierte Testfallerstellung: Mit systematischen Methoden wie Äquivalenzklassenbildung, Grenzwertanalyse, Entscheidungstabellen, etc. lassen sich Anforderungen strukturiert analysieren und Testfälle daraus ableiten. Dies stellt sicher, dass die nötige Breite und Testfalllabdeckung der Anforderungen gegeben ist.
  • Erfahrungsbasierte Testfallerstellung: Anforderungsdokumente können nie das System in seiner Gesamtheit komplett darstellen. Dafür gibt es zu viel Transferverlust von der Idee hin zur aufgeschriebenen Anforderung. D.h. hier ist es immer ratsam, Testfälle anhand der eigenen Erfahrung und auch der Erwartung der Anwender zu definieren.

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.

Testobjekt - Welche Komponente wird im Systemtest geprüft

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.

Testziele des Systemtests

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.

Testumgebung für Systemtests

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.

Testdaten

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:

  • Echte Daten: Wenn vorhanden, lassen sich z.B. aus produktiven Systemen Datenabzüge nutzen, um diese als Testdaten für die Systemprüfung zu nutzen. Gerade in der Wartungsphase wird das gerne genutzt. Wo nötig, werden diese ggf. anonymisiert. Aber immer in dem Bewusstsein, damit auch die Daten zu verändern. Der Vorteil bei echten Daten liegt natürlich in der Praxistauglichkeit, aber auch darin, dass manchmal Daten und Konstellationen vorkommen, die über Anforderungen und Testfälle nicht abgedeckt sind.
  • Synthetische Testdaten: Echte Daten decken bei Weitem nicht alle Möglichkeiten, Corner-Cases und Kombinationen ab. Daher ist es auch hier ratsam, konkrete synthetische Daten zu generieren, um besondere Fälle zu prüfen: Geburtstag am 29.2. oder Postleitzahlen mit 0 beginnend sind hier Klassiker.

Nicht nur manuell: Tests automatisieren im Systemtests

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.

Manuelle vs. automatisierte Systemtests

Systemtest in agilen Projekten

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.

Typische Probleme beim Testen

Wenn ich mir die Projekte der letzten Jahre ansehe, treten bei diesem Test immer wieder die gleichen Herausforderungen im Alltag auf:

  • Nicht-funktionale Anforderungen werden nicht bedacht. Zur Systemprüfung gehört nicht nur die Fachlichkeit. Nicht-funktionale Anforderungen müssen hier ebenfalls berücksichtigt werden, wie z.B. Usability-Tests, Performance- oder Zuverlässigkeits-Tests.
  • Der Systemtest ist der erste Testlevel, die komplett auf den Anforderungen beruht. Und von den Anforderungen zum Code und zu den Testfällen gibt es zwangsläufig einen Medienbruch. Aus natürlicher Sprache wird Technik. Während die Entwicklung die Lücken kreativ füllen kann, kann ein Tester das nicht, um Testfälle zu erstellen. Hier muss immer wieder am gleichen Zielbild gearbeitet werden.

Wenn ein Systemtest nicht mehr genügt: Systemintegrationstest

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.

Der Unterschied zwischen Systemtests und Integrationstests

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.

Beispiele für Systemtests in der Praxis

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.

Häufige Fragen

Was ist ein Systemtest?

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.

Warum sind Systemtests wichtig?

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.

Wie werden Systemtests durchgeführt?

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.

Was sind Beispiele für Systemtests?

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.

Was ist der Unterschied zwischen Systemtests und Integrationstests?

Der Hauptunterschied liegt darin, dass Integrationstests sich auf die Interaktion zwischen einzelnen Komponenten konzentrieren, während Systemtests das System als Ganzes betrachtet.

Software-Entwickler: Gestalter der Welt

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...

Weiterlesen
Integrationstest

Integrationstest

Der Integrationstest ist gar nicht so leicht zu fassen, denn vieles lässt sich integrieren. Module, Komponenten, Schichten, Services oder ganze...

Weiterlesen
Testentwurfsmethoden

Testentwurfsmethoden

Podcast Episode: Testentwurfsmethoden In dieser Folge spreche ich mit Rik Marselis über Testentwurfstechniken. Rik, der diese Techniken seit fast 25...

Weiterlesen