Integrationstests überprüfen die Zusammenarbeit mehrerer Systemteile zunehmender Komplexität von einzelnen Modulen über Teilsysteme bis zum Gesamtsystem.
Zielsetzung
Ziel des Integrationstests ist die Überprüfung des Zusammenspiels verschiedener Teile eines Systems. Dabei muss sowohl die korrekte Interaktion, wie z.B. der Austausch von Daten durch Nachrichten oder gemeinsam benutzten Speicher, der Zugriff auf Datenbanken oder die Nutzung von Funktionalität durch Aufrufe von Schnittstellenfunktionen über einzelne Teile hinaus, überprüft werden als auch das Nicht-Auftreten unerwünschter Effekte. Typischerweise erkannte Fehler betreffen die falsche Nutzung von Schnittstellen, unerlaubte Parameterwerte, aber auch Blockierungen durch gemeinsam genutzte Ressourcen oder ‚
Race-Conditions‘ durch das ungeordnete Ändern gemeinsam genutzter Daten bis hin zu inkonsistenten Datenzuständen. Integrationstests werden wegen des vornehmlich System-internen Fokus beim Ersteller der Software durchgeführt.
Einordnung in den Entwicklungsprozess
Um die Organisation von Integrationstests zu vereinfachen und um Fehler besser lokalisieren zu können, geht dem Integrationstest der isolierte Test der zu integrierenden Teile – soweit sinnvoll möglich – voraus. In der Regel werden die einzelnen Teile schon als isoliert korrekt angenommen, was bei notwendigen Änderungen zur Fehlerbehebung den Rückschritt auf die Ebene des Modultests erforderlich macht. Überprüft werden mit zunehmender Komplexität neben funktionalen Eigenschaften auch nicht-funktionale Eigenschaften.
Vorgehensweisen
Wegen der Komplexität heutiger Systeme werden Integrationstests in top-down oder bottom-up Vorgehensweise, häufig auch gemischt, durchgeführt.
-
Bei bottom-up Vorgehensweise wird schrittweise von der Kombination einzelner Module oder Klassen über logisch eng gekoppelte Teilsysteme bis hin zum Gesamtsystem getestet. Um die Aufrufe in den zu testenden Teilen möglichst gut zu überdecken, werden häufig Testtreiber benutzt, die dann schrittweise durch Teile des Zielsystems ersetzt werden.
-
Ein top-down Ansatz beginnt mit den höchsten Abstraktionsschichten in Kombination mit Teststubs, die dann schrittweise durch reale Teilsysteme ersetzt werden. Durch dieses kumulierende Vorgehen wird die Identifikation der Ursache auftretender Problemen erleichtert.
Integrationstests werden durch klar strukturierte Softwarearchitekturen, die Interaktion auf spezifizierte Schnittstellen beschränkt und Abhängigkeiten zwischen Datenbeständen explizit macht, wesentlich erleichtert. An dieser Information kann sich sowohl der Testvorgang orientieren als auch die Festlegung, was in den einzelnen Schritten zu überprüfen ist.
Literatur
Sneed, Harry M.; Baumgartner, Manfred; Seidl, Richard: Der Systemtest. 2. Auflage. Spektrum Carl Hanser Verlag : München, 2008.