Designing Digital Future

API-Testing: Integration ins DevOps-Modell

Mit der stärkeren Einbindung operativer Elemente in den Entwicklungsprozess moderner, serviceorientierter Software steht die Qualitätssicherung vor neuen Herausforderungen.


Neue Testkonzepte müssen erarbeitet und ins agile Projektmanagement integriert werden. Dadurch werden neue Rollen innerhalb einer Unternehmung notwendig. Wo früher bei monolithischen, nach dem Wasserfall-Prinzip programmierten Lösungen eine klare Trennlinie zwischen Entwickler und Tester bestand, ist heute eine Integration von Personen mit Kenntnissen in der Qualitätssicherung in Engineering-Teams unumgänglich. Ebenso findet eine Verlagerung in der Gewichtung einzelner Testarten statt. Microservice-Architekturen erhöhen die Modularität einer Software und erfordern eine höhere Testabdeckung auf Schnittstellen-Ebene.

Testing als Teil agiler Entwicklungsteams

Um Fehler in einer Software frühestmöglich beheben zu können, ist die Eingliederung von Testern in einzelne Feature-Teams von grossem Vorteil. Tester befinden sich dadurch direkt «an der Quelle» und können schnell auf Änderungen einzelner Services reagieren. Der notwendige Transfer von Know-How zwischen Engineers und Qualitätssicherung wird minimiert. Viel Funktionalität kann bereits getestet werden, bevor ein Release-Train gestartet wird. Ein Testing-Team wird dadurch zwar nicht obsolet, kann aber seinen Fokus stärker auf Management-, Support- und Koordinationsaufgaben legen.

Das Testing-Team regelt die Zusammenarbeit zwischen den einzelnen Testern innerhalb der Feature-Teams und dem Release-Management.

Das Testing-Team regelt dabei die Zusammenarbeit zwischen den einzelnen Testern innerhalb der Feature-Teams und dem Release-Management. Es erarbeitet und unterhält die teamübergreifende Test-Architektur, stellt die nötigen Tools zur Verfügung und generiert Test-Reports. Die Tester wiederum arbeiten Hand in Hand mit den Software-Engineers zusammen. Während Unit- und Component-Tests noch im Verantwortungsbereich der Entwickler selbst liegen, kümmern sich die Tester um Integrations- und Systemtests. Optimalerweise sind sie ausserdem in Testing-Gilden organisiert, wo sie neue Erkenntnisse austauschen und Probleme diskutieren.

Von UI-Tests zu API-Tests

Durch die Symbiose von Qualitätssicherung und Feature-Entwicklung gewinnt das Testing einzelner Schnittstellen an Bedeutung. Die Tester der Feature-Teams müssen mittels automatisierter Tests der exponierten Interfaces die problemlose Verwendung «ihrer» Module durch Dritte sicherstellen. Es ist nötig, einzelne APIs unabhängig vom UI zu testen, um auf Änderungen in der Programmlogik schnell reagieren zu können. Eine hohe Testabdeckung auf Schnittstellen-Ebene ermöglicht dann eine Reduktion der Anzahl der Testfälle für die Benutzeroberfläche. Eine Fokusverlagerung von UI-Tests hin zu API-Tests bringt also folgende Vorteile:

  • Die frühere Implementierung von Tests ist möglich, da diese unabhängig vom UI geschrieben werden können
  • Tests können schnell an Änderungen in der API angepasst werden
  • Tests können sowohl auf Integrations- wie auch auf Systemtest-Ebene erfolgen
  • Tests können oftmals auf existierende Client-Libraries einzelner Module zurückgreifen
  • API-Tests sind einfacher automatisierbar als UI-Tests, welche oft «flaky» sind
  • Die Abhängigkeiten von Software von Drittanbietern (z. B. Selenium) wird verringert

UI Tests werden zwar noch immer benötigt, es reicht jedoch aus, diese für Standardabläufe durchzuführen. Somit werden mehr Ressourcen für Usability- und nicht funktionale Tests frei.

Die Integration ins DevOps-Modell

Durch den Shift von manuellen UI-Tests hin zu automatisierten API-Tests wird eine stärkere Einbindung der Testprozesse in die kontinuierliche Weiterentwicklung einer Software («continuous development») möglich. Änderungen an Schnittstellen triggern dabei automatisch sowohl Integrations- als auch Systemtests und Inkompatibilitäten sowie Versionskonflikte können frühzeitig erkannt und behoben werden. Die Auslieferung neuer Features wird beschleunigt und die Reaktion auf mögliche Fehler erfolgt ohne Verzögerung (z. B. mit Hotfixes). Bugs werden automatisch erfasst und z. B. entsprechenden Product Ownern zugewiesen.
Eine Vollautomatisierte Testumgebung lässt sich zudem in den Monitoring-Prozess eines DevOps-Teams einbinden. Statistiken über erfolgreiche sowie fehlgeschlagene Tests und die Testabdeckung einzelner Features werden transparent und jederzeit einsehbar. Automatische Alarm- und Notifikations-Systeme führen zu kurzen Reaktionszeiten. Unterbrechungen im Release-Train werden vermieden.
Die Flexibilität in der Feature-Entwicklung und Fehlerbehebung ermöglicht ausserdem kürzere Releasezyklen und eine schnelle Reaktion auf Kundenwünsche.

Testing-Skills: Ein Ausblick

Die genannten Punkte stellen Tester vor neue Herausforderungen. Da diese nun integraler Bestandteil eines Feature-Teams sind, muss technisches Know-How zwingend vorhanden sein. Neben den Fähigkeiten, Testfälle zu erstellen, auszuführen und Bugs zu erfassen, müssen Tester zukünftig auch programmieren können sowie mit dem Aufbau und Unterhalt einer CI / CD – Pipeline vertraut sein. Interdisziplinäres Arbeiten und grundlegende Kenntnisse in der Koordination und Planung von Tätigkeiten verschiedener Teams (Entwicklung, Testing, DevOps, Relese) werden für Tester in naher Zukunft unabdingbar.