Systemtests sind leistungsbasierte, durchgängige Softwaretests eines gesamten Systems. Diese End-to-End-Tests umfassen Aspekte des Functional Testing, der nicht-funktionalen Prüfung, der Schnittstellenprüfung, der Belastungsprüfung und der Wiederherstellungstests.
Stellen Sie sich vor, Sie betrachten ein Softwaresystem unter einem Mikroskop, beginnend mit der höchsten Vergrößerungsstufe, der Einheit. Dies ist der grundlegende Baustein des Softwaresystems. Anschließend erweitert sich die Ansicht auf die nächste Vergrößerungsstufe – die Module, die aus diesen einzelnen Einheiten bestehen. Wenn Sie schließlich vollständig herauszoomen, gelangen Sie zur Systemebene. Bei dieser Vergrößerungsstufe können Sie alles innerhalb des Systems sehen und wie alle von diesen Modulen erstellten Komponenten zusammenarbeiten.
In gewisser Weise ähnelt das Testen von Systemen dieser mikroskopischen Betrachtung – allerdings mit einem entscheidenden Unterschied. Systemtests sind eine Form des Black-Box-Testens. Das bedeutet, dass die Tester weniger an den einzelnen Komponenten interessiert sind, aus denen das System besteht, sondern vielmehr an der Gesamtfunktionalität des Systems. Aus dieser Perspektive des „Bestehen/Nichtbestehen“ ist das Systemverhalten in diesem Zusammenhang nur insofern von Bedeutung, als es sich auf die Systemleistung bezieht. (White-Box-Tests ermöglichen einen besseren Einblick in die Beschaffenheit der Komponenten innerhalb eines Systems.)
Systemtests umfassen häufig die Analyse mehrerer separater Softwaresysteme, die innerhalb eines bestimmten Softwaresystems möglicherweise zusammenarbeiten oder auch nicht.
Branchen-Newsletter
Bleiben Sie mit dem Think-Newsletter über die wichtigsten – und faszinierendsten – Branchentrends in den Bereichen KI, Automatisierung, Daten und mehr auf dem Laufenden. Weitere Informationen finden Sie in der IBM Datenschutzerklärung.
Ihr Abonnement wird auf Englisch geliefert. In jedem Newsletter finden Sie einen Abmeldelink. Hier können Sie Ihre Abonnements verwalten oder sich abmelden. Weitere Informationen finden Sie in unserer IBM Datenschutzerklärung.
Denken Sie an den Countdown, der einem Raketenstart vorausgeht. Während sich alle an den dramatischen 10-Sekunden-Countdown vor der Zündung und dem Start erinnern, erinnern sich nur wenige an die zahlreichen Abteilungschecks, die vom Flugleiter angefordert und mit „Go“ bestätigt werden. Bei einem typischen Weltraumstart werden die Abteilungsleiter zu geplanten Operationen, Missionssicherheit, Fahrzeugsystemen und erwarteten Wetterbedingungen sowie zu zahlreichen anderen Themen konsultiert. Jede Abteilung wird abgefragt, und jeder Abteilungsleiter antwortet der Reihe nach.
Ebenso können Systemtests als abschließende Checkliste betrachtet werden, die der Einführung eines neuen Softwaresystems vorausgeht. Die letzte Runde der Beseitigung bekannter Softwarefehler ist abgeschlossen. Und genau wie bei den historischen Checklisten, die die frühen Pioniere der Raumfahrt eingeführt haben, kommt es nun auf die endgültige Freigabe durch jede „Abteilung“ an, die am Systemtesten beteiligt ist.
Jede Abfrage wird hinsichtlich der Funktionalität des Systems schattiert dargestellt:
Bei der Erörterung von Systemtests werden wir zwangsläufig auf das Thema Abhängigkeiten stoßen, also Beziehungen, die innerhalb von Testfällen bestehen. In solchen Situationen kann das Ergebnis eines Testfalls teilweise oder vollständig von den Ergebnissen anderer Testfälle abhängen. Abhängigkeiten können auch Funktionalität, Testumgebungen oder Sicherheitsrichtlinien betreffen und sich sogar auf den gesamten Testprozess eines Unternehmens auswirken.
Bei Systemtestmethoden wird kein tiefer Einblick in die Funktionsweise der Systeme gewährt (denken Sie daran, es handelt sich um eine Form des Blackbox-Tests), sondern es wird lediglich festgestellt, ob eine bestimmte Anwendung funktioniert. Der Zweck von Systemtests besteht darin, Lücken, Fehler oder fehlende Anforderungen zu identifizieren, da sie die Gesamtfunktionalität der Softwareanwendung bestimmen.
Systemtests werden in der Regel nach dem Integration Testing, jedoch vor den Abnahmetests durchgeführt, um sicherzustellen, dass alle Komponenten ordnungsgemäß zusammenarbeiten. Wie wir sehen werden, umfassen sie häufig sowohl die funktionalen als auch die nicht-funktionalen Aspekte des Systems. Da sie sowohl auf den rein funktionalen als auch auf den weitgehend nicht-funktionalen Bereichen basieren, befassen sie sich mit Aspekten wie Benutzerfreundlichkeit, Sicherheit und Leistung.
Einer der Hauptzwecke von Systemtests ist die Überprüfung, ob die Programmiersprache einer Software in ein funktionsfähiges Programm übersetzt werden kann. Das übergeordnete Ziel von Systemtests ist jedoch sicherzustellen, dass die zu bewertende Software die geschäftlichen Anforderungen der Nutzer, die sich darauf verlassen werden, angemessen unterstützt.
Der Testprozess soll die gleiche Produktionsumgebung widerspiegeln, die auch verwendet wird, um sicherzustellen, dass die Software trotz sich ändernder realer Bedingungen wie erforderlich funktioniert. Ebenso werden Testdaten erstellt, um reale Daten und Situationen nachzubilden. Nach Durchführung der Testfälle können Fehler in der Software lokalisiert und behoben werden.
Systemtests können in drei Hauptgruppen unterteilt werden. Die erste Gruppe, Functional Testing, befasst sich mit der Systemleistung, zielt jedoch nicht darauf ab, tiefergehende Erkenntnisse zu gewinnen, sondern lediglich festzustellen, ob die Software wie versprochen funktioniert. Nachfolgend sind einige der wichtigsten Arten von Functional Testing:
Functional Testing liefert zwar äußerst wichtige Informationen, jedoch beschränken sich diese Daten im Wesentlichen auf eine positive oder negative Bewertung, die ausschließlich darauf basiert, ob das System wie vorgesehen funktioniert. Dabei werden zahlreiche relevante Variablen außer Acht gelassen, wie beispielsweise die Systemsicherheit, die Benutzererfahrung und Leistungsaspekte.
Nicht-funktionale Systemtests bieten eine Möglichkeit, die Funktionsweise des Systems zu beurteilen. Der wesentliche Unterschied zwischen Functional Testing und nicht-funktionalen Tests lässt sich anhand des folgenden einfachen Vergleichs verdeutlichen:
In diesem Zusammenhang sind hier einige der wichtigsten Formen des nicht-funktionalen Systemtestens aufgeführt:
Es gibt noch weitere Typen von Systemtests, die nützlich sind, obwohl sie nicht in die Kategorien Funktionstests oder Nicht-Funktionstests fallen. Hier sind einige der bemerkenswertesten dieser Methoden:
Obwohl der Systemtestprozess die umfassendsten Blackbox-Leistungstests bietet, die derzeit verfügbar sind, ist die Durchführung von Systemtests nicht ohne potenzielle Probleme:
Die Anforderungen, die Systemtests erfüllen müssen, sind vielfältig – seien es geschäftliche Anforderungen, die für das jeweilige Unternehmen spezifisch sind, funktionale Anforderungen, die für die jeweilige Software einzigartig sind, oder festgelegte Anforderungen, die für deren Betrieb gelten können. Tatsächlich scheint es an Systemanforderungen, die Betriebssysteme erfüllen müssen, nie zu mangeln. Häufig wechselnde Anforderungen können ein System beeinträchtigen und zu unvollständigen Testfällen führen.
Es sollte keine Überraschung sein, dass Fristen in einem geschäftlichen Umfeld erhebliche Probleme verursachen können. Fristen sind dafür bekannt, erhebliche Auswirkungen zu haben, da Arbeitspläne mit kalenderbasierten Erwartungen kollidieren. Der Termindruck in der Softwareentwicklung äußert sich darin, dass angemessene und umfassende Systemtests häufig vernachlässigt werden und entweder unvollständig durchgeführt oder ganz ignoriert werden. Dies erfordert häufig eine erneute Prüfung zu einem späteren Zeitpunkt im Softwareentwicklungszyklus.
Systemtests werden nicht isoliert oder ohne Aufwand durchgeführt. Sie erfordern die kompetente Arbeit von Testteams, Tools zur Unterstützung dieser Maßnahmen und ein angemessenes Budget, um sie überhaupt erst zu ermöglichen. Ohne diese Komponenten kann es leicht zu Shortcuts kommen, die unvollständige Tests verursachen. Wenn auch nur ein Teil dieser Gleichung verändert oder außer Kraft gesetzt wird, kann sich dies negativ auf die Testabdeckung auswirken, die sich aus den Systemtests dieser Softwareanwendung oder dieses Softwareprodukts ergibt.
Während des Testprozesses können viele potenzielle Schwachstellen bewertet werden, jedoch können Softwareentwickler diese Bewertungen nur vornehmen, wenn sie unterstützt werden und die Kontrolle über die Testumgebung haben, in der sie arbeiten. Wenn Tester nicht in stabilen Umgebungen arbeiten, kann es leichter passieren, dass sie potenzielle Softwarefehler übersehen. Und wenn Tester in instabilen Umgebungen Softwarefehler finden, die behoben werden müssen, ist es für sie oft schwieriger, diese Fehler später zu reproduzieren.
Wenn Ihre Aufgabe die Qualitätssicherung von Software umfasst, ist die Überprüfung von Computercode eine mühsame Arbeit, die langwierig und zeitaufwendig sein kann. Kommunikationslücken zwischen Testern, Entwicklern und anderen Stakeholdern können diese Arbeit noch unangenehmer machen. Wie bei jedem geschäftlichen Vorhaben führen Kommunikationsprobleme zu Missverständnissen und schaffen eine Produktionsumgebung, in der Fehler unentdeckt bleiben und sich in Betriebssystemen festsetzen können.
Die Testverfahren variieren, und die Testergebnisse sind sehr unterschiedlich – von leicht verständlichen Testdaten bis hin zu umfangreichen und komplexen Datensätzen, die während und nach der Testphase eine sorgfältigere Verwaltung erfordern. Die Komplexität des Projekts wird weiter erhöht, wenn die Testumgebungen nicht vollständig mit ihren Produktionspendants übereinstimmen. Die Teststrategie, die während des Softwareentwicklungsprozesses umgesetzt wird, muss berücksichtigen, wie diese Probleme am besten bewältigt werden können.
Ein vollständig verwalteter, mandantenfähiger Service für die Entwicklung und Bereitstellung von Java-Anwendungen.
Verwenden Sie DevOps-Software und -Tools, um cloudnative Anwendungen für mehrere Geräte und Umgebungen zu erstellen, bereitzustellen und zu verwalten.
Die Entwicklung von Cloud-Anwendungen bedeutet: einmal erstellen, schnell iterieren und überall bereitstellen.