Integrationstests: Muster, Probleme, Lösungsansätze

Einführung

Tests bei der Entwicklung von Software lassen sich in drei Gruppen einteilen, Modultests, Integrationstests und Systemtests. Die einfachen Modultests testen dabei das Verhalten von einzelnen Modulen und Funktionen, komplexe Systemtests prüfen das Verhalten des gesamten Systems, meist einschließlich der GUI. Dazwischen liegen die sogenannten Integrationstests. Diese testen das Zusammenspiel von mehreren Modulen oder die Funktion von Schnittstellen.

Im Rahmen dieser Arbeit wird die Bedeutung des Begriffs Integrationstest und die Verwendung solcher in realen Projekten untersucht. Dabei werden zu häufigen Problemen bei der Implementierung verschiedene Lösungsstrategien vorgestellt.

Forschungsfragen

Vorgehensweise

Für die Beantwortung der Forschungsfragen wurden verschiedene Herangehensweisen genutzt. Zunächst wurde in verschiedener Literatur nach Begriffsdefinitionen und Anwendungen von Integrationstests gesucht. Die Unterschiede in der Bedeutung und Verwendung des Begriffs Integrationstests liegen hierbei in der Abgrenzung zu anderen Testarten. Gemein ist ihnen allen, dass es bei Integrationstests um die Zusammenarbeit von mehreren Modulen geht. Jedes Projekt oder auch jeder Entwickler setzt andere Grenzen zwischen den Testarten. Es gibt strenge Trennungen, fließende Übergänge oder in manchen Fällen auch gar keine begriffliche Trennung von Testfällen.

Es wurden verschiedene Open Source Projekte in ihrer Codebasis und ihrer Testsuite untersucht, wobei der Fokus auf Anwendungsentwicklung lag. Mit den Testsuiten konnte der Aufbau und die Struktur von Integrationstests bei verschiedenen Projekten untersucht und verglichen werden. Betrachtet wurden die folgenden Projekte:

Schwierigkeiten hierbei waren vor allem das Einarbeiten in die umfangreichen Projekte, das suchen nach Dokumentation und dass ein persönlicher Kontakt zu den Entwicklern schwer oder gar nicht herzustellen war.

Da die Entwickler von Open Source Projekten schwer zu erreichen sind um Fragen stellen zu können wurden zusätzlich Meetups besucht, privat organisierte öffentliche Treffen. Nach Vorträgen und Diskussionen zu Testentwicklung und ähnlichen Themen bleibt Raum für weitere Gespräche. So konnte die persönliche Einschätzung von Integrationstests durch verschiedene Entwickler erfragt werden. Die Aussagen blieben zumeist allgemein, da auch aufgrund von Geheimhaltung keine Beispieltests durchgegangen werden konnten.

Ergebnisse

Die Bedeutung und Nutzung des Begriffs Integrationstest schwankt zwischen verschiedenen Projekten stark, besonders in der Abgrenzung zu anderen Testarten. In wenigen Fällen hat der Begriff auch eine komplett andere Bedeutung.

Von speziellen Schwierigkeiten bei Integrationstests konnten die befragten Entwickler wenig berichten. Sie empfanden die Tests nicht wesentlich komplizierter als Modultests und eventueller Mehraufwand wird durch den höheren Nutzen ausgeglichen.

Der grundlegende Aufbau von Integrationstests ist sehr konsistent, es gibt jedoch Unterschiede bei der Art der Initialisierung oder ob gleichartige Tests zusammengefasst werden. Zu den häufigen Problemen zählt die Komplexität des Systems, welche mit Mocking verringert werden kann. Dabei ist Mocking ein stark diskutiertes Thema. Für manche externen Systeme werden während bestimmter Tests Stellvertreter verwendet. Für Tests über die Grenzen von Programmiersprachen hinweg werden eigene Interfaces geschrieben.

Abgesehen von Begrifflichkeiten können auch eigene Stile von Entwicklern unterschieden werden. Dabei wird bei größeren Projekten auch auf bestehenden Tests aufgebaut und diese weiterverwendet. Hierbei ergibt sich ein einheitlicher Aufbau.

Offene Punkte

Die letzte Forschungsfrage nach Arten von Integrationstests konnte nicht beantwortet werden, da die untersuchten Testfälle sich im Aufbau zu ähnlich waren, so dass keine sinnvollen Unterscheidungen getroffen werden konnten.

Interessant wäre auch noch die anteilsmäßige Verteilung zwischen den Testarten und damit verbunden die jeweilige Verantwortung für verschiedene Fehlerfälle. Ein nützliches Werkzeug hierbei wäre eine automatisierte Unterscheidung der Testarten.

Comments