Integrationstest
R 2.0.0
Beschreibung
Das Ziel von Integrationstests besteht darin, Fehler aufzudecken, die ein Unit Test allein nicht finden kann. Das liegt vor allem daran, dass der Unit Test die einzelnen Programmeinheiten eines Softwareprojekts unabhängig von allen anderen betrachtet. Das reicht völlig aus, wenn es nur darum geht zu gewährleisten, dass der Code das tut, was man von ihm erwartet, ist aber unzureichend, wenn man sicherstellen will, dass die Kommunikation mit anderen Modulen reibungslos läuft.
-
Durch die Integrationstests werden frühzeitig Abweichungen bei den Schnittstellen, Komponenten oder Systeme festgestellt
-
Ziel ist die Integration der notwendigen Komponenten und Subsysteme zu einem lauf- und funktionsfähigem Gesamtsystem
-
Sie helfen, die Mängel (Funktionalität bzw. Design-Lücken) frühzeitig zu finden, was wiederum Aufwand und Kosten spart
Es gibt zwei mögliche Integrationsstufen:
-
Komponentenintegrationstest - liegt häufig in der Verantwortung der Entwickler.
-
Systemintegrationstest - wird i.d.R. von Testern und Entwicklern durchgeführt.
Wie beim Komponententest stärken auf die Integration spezialisierte Regressionstests das Vertrauen, dass bestehende Schnittstellen, Komponenten oder Systeme durch Änderungsanforderungen nicht beschädigt wurden.
Eine frühe Planung der Integrationsstrategien und des Integrationstests ermöglicht eine definierte Reihenfolge der zu entwickelnden Komponenten oder Systeme, die für das effizienteste Testen erforderlich ist.
-
Eine Risikoanalyse der komplexesten Schnittstellen kann dabei helfen, die Integrationstests zielgerichtet einzusetzen.
Je größer der Umfang der Integration, desto wichtiger wird eine eindeutige, leicht lesbare und nachvollziehbare Instrumentierung der Testobjekte und der Testfalltreiber, bzw. Mocks. Dadurch wird eine aufwändige Ursachenforschung vermieden und fehlerhafte Testobjekte können leichter identifiziert werden.
-
Geringeres Risiko und schnellere Fehlerbehebung.
Video: Erläuterung der Ziele und des Vorgehens beim Integrationstest (Länge: 24:58)
Komponentenintegrationstest
Der Komponentenintegrationstest ist der Test der Kommunikation zwischen den Komponenten. Wir gehen bei der Beschreibung sowie Reifegradermittlung von dieser Teststufe aus.
-
prüft Interaktionen und die Schnittstellen zwischen integrierten Komponenten.
-
wird nach dem Komponententest durchgeführt.
-
ist generell automatisiert.
-
bei der iterativen und inkrementellen Entwicklung sind Integrationstests in der Regel Teil des kontinuierlichen Integrationsprozesses (Continuous Integration)
Systemintegrationstest
Darüber hinaus gibt es den Systemintegrationstest, der die Kommunikation zwischen den getesteten Systemen prüft.
-
prüft das Zusammenspiel verschiedener Systeme
-
konzentriert sich auf die Interaktionen und Schnittstellen zwischen Systemen
-
kann nach dem Systemtest ausgeführt werden und betrachtet die Umgebung des entwickelten Systems
-
Herausforderung: Häufig hat das Entwicklungsteam nur eine Seite der Schnittstellen unter Kontrolle
Jede Teststufe hat individuelle Testziele, Testbasis, Testobjekte, Testvorgehensweisen, Verantwortlichkeiten sowie typische Fehlerzustände & -wirkungen.
Unterschied zwischen Komponententest und Integrationstest
Während Komponententests gut gekapselt sind und keine externen Ressourcen verwenden, verwenden Integrationstests zusätzliche Komponenten oder Infrastrukturen wie das Netzwerk, die Datenbank oder das Dateisystem.
Komponententests werden entworfen und ausgeführt, um zu prüfen, ob eine einzelne Softwarekomponente wie gewünscht arbeitet. Der Test zielt auf die Aspekte „interne Funktionalität“ der Komponente und „Robustheit“ gegen Fehlverwendung (z. B. Aufruf mit falschen Parameterwerten).
Integrationstestfälle werden entworfen und ausgeführt, um zu prüfen, ob zwei oder mehrere Softwarekomponenten wie gewünscht zusammenarbeiten. Der Test untersucht und prüft den Datenaustausch zwischen Komponenten.
Komponententest | Integrationstest |
---|---|
Beim Komponententest wird jedes Modul der Software separat getestet. |
Beim Integrationstest werden mehrere Module der Software kombiniert getestet. |
Beim Komponententest kennt der Tester das interne Design der Software. |
Beim Integrationstest ist das interne Design der Software nicht bekannt. |
Komponententests werden vor allen Testprozessen durchgeführt. |
Integrationstests werden nach dem Komponententest und vor dem Systemtest durchgeführt. |
Komponententests sind White-Box-Tests. |
Integrationstests sind Black-Box-Tests. |
Komponententests werden grundsätzlich vom Entwickler durchgeführt. |
Der Integrationstest wird vom Tester durchgeführt. |
Das Erkennen von Fehlern in Komponententests ist einfach. |
Das Erkennen von Fehlern beim Integrationstest ist schwierig. |
Er testet Teile des Projekts, ohne auf die Fertigstellung anderer zu warten. |
Er testet erst nach Fertigstellung aller Teile. |
Komponententests sind weniger kostspielig |
Integrationstests sind teurer. |
Integrationsteststrategien
Top-down
Der Test beginnt mit einer Komponente des Systems, die eine weitere Komponente aufruft, aber selbst (außer vom Betriebssystem) nicht aufgerufen wird. Die untergeordneten Komponenten werden dabei, wenn sie noch nicht vorhanden sind, durch Platzhalter (Mock- bzw. Dummy-Objekte) ersetzt. Sukzessive werden die Komponenten niedriger Systemschichten hinzuintegriert. Die getestete höhere Schicht dient dabei jeweils als Testreiber.
Bottom-up
Der Test beginnt mit den elementaren Komponenten des Systems, die keine weiteren Komponenten aufrufen (außer Funktionen vom Betriebssystem). Größere Teilsysteme werden sukzessive aus getesteten Komponenten zusammengesetzt, mit anschließendem Test dieser Integration. Auf Platzhalter kann zwar komplett verzichtet werden, das bedeutet aber gleichzeitig, dass man hier in der Regel mit vielen Testtreibern arbeiten muss.
Backbone
Es wird ein Programmskelett oder „Backbone“ erstellt (das kann zum Beispiel ein Durchstich oder der "kritische Pfad" eines Prozesses sein), in das schrittweise die zu integrierenden Komponenten eingehängt werden.
Big Bang
Es wird gewartet, bis alle Softwarekomponenten entwickelt sind. Dann wird alles auf einmal zusammengeworfen und getestet.
Diese Strategie ist besser zu vermeiden. Alle Fehlerwirkungen treten geballt auf, es wird schwierig bzw. unmöglich sein, das System überhaupt zum Laufen zu bringen. Die Lokalisierung und Behebung von Fehlerzuständen gestalten sich ebenfalls schwierig und zeitraubend.
Der Auswahl einer Teststrategie findet anhand verfügbarer Ressourcen und Zeitfenster statt.
Top-down- und Bottom-Up-Strategien in Reinform setzen eine vollständig baumartige Architektur voraus. Je netzartiger die Architektur ist, umso stärker muss von diesen Basisstrategien abgewichen werden. Hinzu kommt, dass auch in Projekten nach V-Modell selten vorkommt, dass alle Komponente „fertig implementiert und Unit-getestet vorliegen“. Auch hier wird in der Praxis mit der Integration begonnen, obwohl einzelne Komponente noch in der Implementierungsphase stecken. Dies führt dann zwangsläufig zu einer Ad-hoc-Integrationsstrategie.
Über Vorteile und Nachteile von Integrationsteststrategien lesen Sie die Quelle [2].
Randbedingungen für die Integration
Welche Strategie optimal ist, hängt von Randbedingungen ab, die in jedem Projekt analysiert werden müssen:
-
Die Systemarchitektur bestimmt, aus welchen und wie vielen Komponenten das Gesamtsystem besteht und wann diese voreinander abhängen.
-
Der Projektplan legt fest, zu welchem Zeitpunkt im Projekt einzelne Systemteile entwickelt werden und wann diese integrations- und testbereit sein sollen.
-
Das Testkonzept legt fest, welche Systemaspekte wie intensiv getestet werden müssen und auf welcher Teststufe das jeweils geschehen soll.
Continuous Integration
Im agilen Projektvorgehen und damit auch in Scrum entstehen kontinuierlich geänderte oder neue Codebausteine. Während des Sprints werden alle Änderungen aller Programmierer in die Testumgebung überspielt und die Integrationstests durchgeführt.
In der Praxis entsteht häufig ein phasenorientiertes, wasserfallartiges Vorgehen innerhalb der Sprints.
-
Feedback von Integrationstest zurück an den Programmierer wird unnötig verzögert. Im ungünstigsten Fall erhält ein Programmierer, der am ersten Tag des Sprints einen Codebaustein ändert, erst am letzten Tag des Sprints das Integrationstestergebnis zurück.
-
Da die Integrationstests Fehler aufdecken können und auch aufdecken werden, muss Zeit für Fehlerkorrekturen eingeplant werden. Der Sprint wird dadurch zwangsweise serialisiert, in die Phasen Codierung, Unit Test, Integration/Integrationstest und Fehlerkorrektur.
Um Verzögerungen zu vermeiden, benötigt das Team eine gute Integrationsstrategie: "Continuous Integration".
Continuous Integration ist die konsequente Weiterentwicklung inkrementeller Integrationsstrategien. Dabei kommen agile Testmethoden ins Spiel, da der Test im laufenden Sprint stattfinden muss [vgl. Kortendick/Mester "Hermeneutische und situative Wissensvermittlung in der agilen Softwareentwicklung", 2024]. Inkrementelle Integration bedeutet, dass jeder Codebaustein nach seiner Fertigstellung in die Integrationsumgebung überspielt und dort integriert wird. Neue Bausteine werden also nicht mit anderen, ebenfalls neuen noch nicht integrierten Bausteinen zusammengeworfen, sondern jeder geänderte oder neue Baustein wird einzeln gegen einen bereits integrierten Versionsstand (Build) in der zentralen Integrationsumgebung integriert.
Reifegradbestimmung & Entscheidungshilfen
Bestimmung des Reifegrades und Entscheidungshilfen sind unter folgenden Seiten zu finden:
-
Beschreibung des Reifegrades → zum Reifegrad des Integrationstests
-
Bestimmung des Reifegrades und Entscheidungshilfen sind unter folgender Seite zu finden → Reifegradbestimmung & Entscheidungshilfen → Integrationstest
Quellen
-
Abbildungen Anwendungsbeispiel: FLATICON, Freepik Company S.L. Autor*in: juicy_fish, abgerufen am 27.11.2024
-
A. Spillner, T. Linz - Basiswissen Softwaretest, 7. Auflage, 2024
-
ISTQB Glossary Integrationstest, abgerufen am 19.08.2024
-
YouTube Patrick Harms UX Video 1 - Erläuterung der Ziele und des Vorgehens beim Integrationstest (24:58), abgerufen am 01.02.2024
-
Softwaretesten nach ISTQB® für dummies, 1. Auflage; M. Schlich; 2019; S.82-89
-
Testen in Scrum-Projekten, 1. Auflage; T. Linz; 2013; S.102
-
Schulungsunterlagen "ISTQB® Certified Tester, Foundation Level", Imbus AG, v3.3.1, 2021
-
Seibert Medien GmbH, Integrationstests: Strategien und Herausforderungen, abgerufen am 01.02.2024
-
Acervo Lima, Unterschied zwischen Unit-Tests und Integrationstests, abgerufen am 01.02.2024