IT Application Evolution Software renovieren? Testing reduziert Kosten und Risiken

Anpassungen an laufender Software sind mit Kosten und Risiken verbunden und werden deshalb gerne vertagt. Doch irgendwann ist der Punkt erreicht, an dem sich ein Umbau nicht länger aufschieben lässt. Dies etwa dann, wenn Basiskomponenten abgekündigt werden oder sich neue Technologien nicht mehr integrieren lassen. In unserem Beitrag erfahren Sie, wie Sie mit automatisiertem Testing Kosten und Risiken reduzieren.

Applikationslandschaften in Unternehmen sind in der Regel über Jahre gewachsen. Neue Geschäftsanforderungen führen laufend zu Erweiterungen und Anpassungen an bestehenden Applikationen. Dadurch steigt der Aufwand für die Weiterentwicklung und die Wartung, bis eine Renovation der Applikationslandschaft schliesslich unumgänglich wird. Dabei werden Applikationen zum Beispiel durch neue Komponenten oder lizenzierte Services ersetzt. Parallel dazu werden unter Umständen Datenbanken auf separate Geräte verlegt, Business-Funktionen in Services gruppiert und Benutzerschnittstellen auf spezialisierte Komponenten verteilt. Oft interagiert die neue Applikation auch vermehrt mit externen Applikationen, Services und Komponenten.

 

Solche Renovationen bringen Risiken mit sich und werden deshalb gerade bei geschäftskritischen Systemen gerne hinausgezögert. Die Risiken werden dabei jedoch nicht kleiner. Richtig aufgesetzt hilft automatisiertes Testing, Risiken frühzeitig zu identifzieren und die Massnahmen und Funktionstauglichkeit des Systems während eines Umbaus kontinuierlich zu überprüfen.

Mehrdimensionaler Ansatz

Test-Setup mit Komponenten-, Integrations- und End-to-End-Tests
Zoom
Test-Setup mit Komponenten-, Integrations- und End-to-End-Tests

Geschäftsprozesse werden heute in der Regel durch mehrere Komponenten unterstützt, wobei der Output einer Komponente jeweils der nächsten als Input dient. Jeder Test, egal auf welcher Stufe oder für welchen Bereich, muss zeigen, dass ein bestimmter Input einen entsprechenden Output zur Folge hat und dass er die erwarteten Aktionen auslöst (z.B. Datenspeicherung). Hierfür werden in einem ersten Schritt so genannte Input-Output-Mappings aus einer Business-Perspektive definiert. Das Testing beweist dann, dass die Geschäftsanforderungen erfüllt werden. Werden ganze Komponenten abgelöst, so wird überprüft, dass das Testing der Applikation nach dem Umbau dieselben Resultate produziert wie davor.

Um eine gute Abdeckung zu erreichen, werden die Tests mehrstufig aufgebaut:

  • In Komponententests werden in einem ersten Schritt einzelne Komponenten isoliert und individuell getestet. Als Komponente wird z.B. eine Applikation in einem verteilten System behandelt. Das Isolieren einer Komponente kann schwierig sein. Dies zum Beispiel dann, wenn die Business-Logik als eine Komponente definiert ist und die Daten in einer separaten Komponente zusammen mit den Speichermechanismen gehalten werden. Komponententests liefern nur Teilantworten. Sie prüfen in erster Linie die Logik innerhalb einer Komponente. Weiter testen sie die Generierung von Requests und die Verarbeitung von Responses anderer Komponenten. Für die Prüfung der Request-Response-Zyklen werden meist Test Doubles verwendet. So entsteht keine Abhängigkeit von der Verfügbarkeit externer Komponenten.
  • Integrationstests fokussieren auf die Kommunikation. Sie testen die Beziehungen zwischen Komponenten. Dies ist vor allem dann wichtig, wenn externe Komponenten und Services ins Spiel kommen. Diese befinden sich womöglich ausserhalb des zu testenden Applikationssystems und damit ausserhalb des Verantwortungsbereichs des Applikationsteams. Externe Services, die Input für Geschäftsprozesse liefern, können durch Test Doubles simuliert werden. Auf diese Weise kann man auch die Konfiguration verschiedener Komponenten testen. So lässt sich zum Beispiel prüfen, ob die Business-Logik in einer Komponente mit der Datenbank aus einer anderen Komponente einwandfrei funktioniert. Ob es nun um Speichermechanismen oder um komplexere Integrationsmuster geht, die Tests sollen bestätigen, dass die Komponenten gut integriert sind.
  • End-to-End-Tests stellen sicher, dass das Applikationssystem als Ganzes einwandfrei funktioniert. Zum einen muss es die Geschäftsanforderungen erfüllen, d.h., den definierten Workflow unterstützen und die Information korrekt verarbeiten. Zum andern muss es sicherstellen, dass Firewalls, Load Balancers, Proxies und Registries richtig konfiguriert sind. End-to-End-Testing ist somit der letzte Schritt in einer Abfolge verschiedener Tests.

Um gerade auch während der Entwicklung schnell brauchbare Resultate zu erhalten, ist beim Aufsetzen des Testings darauf zu achten, die Tests sorgfältig abzustufen und End-to-End-Tests nur dort einzusetzen, wo es wirklich notwendig ist. Denn zu viele End-to-End-Tests machen das Testing aufwändig, teuer und vor allem auch ineffizient. Dies deshalb, weil für End-to-End-Tests immer alle beteiligten Anwendungen, Personen und Infrastrukturkomponenten verfügbar und die Testdaten über alle Anwendungen hinweg abgeglichen sein müssen. Weiter kann ein einzelner Testfall über mehrere Tage hinweg laufen und nach manueller Interaktion wie etwa Einscannen von Formularen verlangen. Noch aufwändiger wird es, wenn externe Partner involviert sind.

 

Deshalb beginnt gerade bei verteilten Applikationen oder Applikationssystemen mit hoher Komplexität die Definition einer wirksamen Test-Strategie mit einer Analyse der IT-Architektur. Die Analyse zeigt aus verschiedenen Perspektiven, welche Komponenten involviert sind, wie sie interagieren und welche weiteren Faktoren berücksichtigt werden müssen. Auf der Basis der Resultate aus der Analyse lassen sich dann Komponenten, Testmethoden, Testprozesse und Testfälle für ein Testing definieren, das die Renovation der Software wirkungsvoll unterstützt. Über automatisierte Tests wird während der Renovation laufend überprüft, ob die getroffenen Massnahmen die gewünschte Wirkung erzielen und wie sich das auf das System als Ganzes auswirkt. Dies hilft den Verantwortlichen, Risiken frühzeitig zu erkennen und die richtigen Entscheide zu treffen.