# Outside-In-Integrationstest

Der Outside-In-Integrationstest ist eine Strategie zur Durchführung eines Integrationstests. Dabei können die äußeren Softwareteile (i. d. R. mit der Systemumgebung interagierend, „Outside“) und die inneren, aufzurufenden Einheiten („In“) durch Verwendung von Hilfsroutinen unabhängig voneinander getestet werden.

## Testen nach dem Outside-In-Ansatz

Grundsätzlich besteht der Integrationstest aus einer Reihe von Einzeltests, durch die das Zusammenspiel unabhängig voneinander entwickelter Komponenten einer Software getestet wird. Dafür wird eine Integrationsstrategie benötigt, die festlegt, in welcher Reihenfolge die Tests stattfinden. Ziel ist es, eine fehlerfreie Interaktion zwischen allen beteiligten Modulen des Softwaresystems zu prüfen und sicherzustellen. Je nach angewendetem Vorgehensmodell kann dem Integrationstest das Testen isolierter Softwarebausteine als eigene Teststufe ‚Modultest‘ vorausgehen.
Nach dem Outside-In-Ansatz benötigt der Integrationstest ersatzweise Treiber anstelle von fehlenden (noch ungetesteten) aufrufenden Komponenten und Dummies (Stubs) anstelle von noch fehlenden ‚unterlagerten‘ Modulen. Erfolgreich getestete Komponenten ersetzen in nachfolgenden Tests sukzessive ihre Stellvertreter, sodass zuletzt das vollständige System abschließenden Einzeltests unterworfen werden kann. Die Reihenfolge im Integrationstest wird also durch die Aufrufstruktur der zu testenden Komponenten (Testobjekte) bestimmt.
Outside-In- und auch Inside-Out-Softwaretests gehören zu den verfahrensorientierten inkrementellen Strategien für Integrationstests. Sie sind Varianten der Sandwich-Strategie, die eine Mischung aus der Bottom-Up- und der Top-Down-Strategie ist und die Vorteile der Top-Down- und der Bottom-Up-Strategie vereint.

## Funktionsweise der Outside-In-Strategie

Bei der Outside-In-Strategie arbeiten sich zwei Teams unabhängig voneinander bis zur Mitte vor. Das erste Team beginnt bei der untersten Hierarchieebene, welche die dienstanbietenden Module beinhaltet und geht weiter zu den dienstnutzenden, welche die obersten Module sind. Sie verwenden also die Bottom-Up Methode. Das zweite Team arbeitet genau umgekehrt, sie beginnen bei den dienstnutzenden Modulen, gehen nach unten zu den dienstanbietenden Modulen. Dieses Vorgehen ist die Top-Down-Methode. So treffen sich beide Teams dann in der Mitte der Hierarchie und setzten so das Gesamtsystem zusammen. Das heißt die Outside-In-Methode modelliert [testet] zuerst die Umwelt eines Systems, bevor sie sich mit dem Systeminneren befasst. Dieser Integrationstest ist, neben dem Inside-out-Test, die einzige Strategie, die den Einsatz mehrerer [getrennt voneinander arbeitender] Testteams unterstützt.

## Vor- und Nachteile
### Vorteile

Die Vorteile der Outside-In-Methode sind:
* Das Äußere einer Software ist im Prinzip alles was mit Menschen oder mit anderen Systemen (der Umwelt) in Kontakt steht. Durch die Fokussierung auf die äußeren Komponenten wird sichergestellt, dass das System mit seiner Umwelt harmoniert.
* Zu Beginn wird ein Produkt entwickelt, welches die groben Abläufe des Systems erkennen lässt.
* Um ein funktionsfähiges System zu entwickeln, wird schon von Anfang an das System immer wieder geprüft.
* Dummies welche in unterlagerte Module eingebaut werden, ermöglichen eine präzise Prüfung der Fehlerbehandlung, indem sie die Manipulation von Rückgabewerten ermöglichen.
* Falls es zu Schnittstellenproblemen kommen sollte, wird die Zusammenarbeit der Hardware, Software und der Systemsoftware so früh wie möglich überprüft, um genug Zeit für die Fehlerbehebung zu haben.
* In den Schichten, die nach dem Bottom-Up Verfahren eingefügt werden, ist es möglich absichtliche Fehleingaben zur Überprüfung von Fehlerbehandlungen einzusetzen.
* Dazu kommt, dass der Outside-In-Test eine kürzere Zeitspanne in Anspruch nimmt und auch weniger Personalbedarf hat.

### Nachteile

Die Nachteile des Outside-In-Tests sind:
* Es werden Treiber und Dummies benötigt.
* Es ist schwerer einen Fehler in den inneren Komponenten zu finden, wenn diese von außen aufgerufen werden. Das liegt daran, dass zu viele Schichten dazwischen liegen, die den Aufruf bestimmen.
* Bei der Outside-In-Methode werden nur die Einflüsse des vorhandenen Kontexts betrachtet, verändert sich jedoch der Kontext ist es möglich, dass das System unbrauchbar wird. Die Wiederverwendbarkeit ist dadurch nicht gesichert.
* Die Tests sind teuer, da mehrere Teile des Systems benötigt werden, um den Test auszuführen.

## Inside-Out-Integrationstest

Im Gegensatz zur Outside-In Methode wird bei der Inside-Out-Methode zuerst das Systeminnere modelliert, bevor sie sich mit der Umwelt des Systems befasst. Bei der Inside-Out-Methode stehen die Strukturüberlegungen im Mittelpunkt. Das birgt die Gefahr, dass Notwendigkeiten der Umwelt übersehen oder zu spät entdeckt werden. Die Inside-Out-Integration wird sehr selten eingesetzt, da sie nicht die Vorteile von Top-Down und Bottom-Up vereint, sondern eher ihre Nachteile.

### Methode der Inside-Out-Integration

Begonnen wird in der Mitte der Hierarchie und von dort aus werden sowohl nach oben als auch nach unten Komponenten integriert, bis das System vollständig integriert wurde.