Softwarentwicklung in der „neuen Normalität“ API-Tests und Covid-19: Auswirkungen auf die traditionelle Art der Softwarebereitstellung

Autor / Redakteur: Christopher Colosimo * / Sebastian Gerstl

Die anhaltende Pandemie hat die Fähigkeit von Unternehmen, Software zu testen und auszuliefern, in mehrfacher Hinsicht beeinträchtigt. Während sie weiterhin mit den Auswirkungen von COVID-19 zu tun haben, arbeiten sie daran, ihre Testpraktiken für die „neue Realität“ festzulegen. Können API-Tests auch in Situationen wie der aktuellen Pandemie Effizienzsteigerungen bewirken?

Firmen zum Thema

Die Covid-19-Pandemie hat eine "neue Realität" verursacht, die sich auch auf die Softwareentwicklung auswirkt: Teams müssen noch flexibler werden, durch Home Office noch verteilter arbeiten. Wie lässt sich unter solchen Bedingungen eine effiziente Teststrategie aufbauen?
Die Covid-19-Pandemie hat eine "neue Realität" verursacht, die sich auch auf die Softwareentwicklung auswirkt: Teams müssen noch flexibler werden, durch Home Office noch verteilter arbeiten. Wie lässt sich unter solchen Bedingungen eine effiziente Teststrategie aufbauen?
(Bild: Clipdealer)

Die aktuelle Pandemielage setzt Unternehmen, die Software entwickeln, zusätzlich unter Druck. Erstens, und das ist das Wichtigste, nehmen die Ressourcenbeschränkungen weiter zu, da viele Mitarbeiter im Home Office einfach nicht mit der gleichen Leistung wie im Büro arbeiten können. Zudem nutzen viele Unternehmen Ressourcen von globalen Systemintegratoren, wobei verschiedene Regionen spezifische Regeln für die Arbeitsbedingungen aufgestellt haben. Weil viele Unternehmen Probleme mit den Auswirkungen haben, suchen die Verantwortlichen nach Lösungen, um dieselben Anforderungen an das Testen mit weniger Aufwand zu erfüllen.

Als Nächstes ist es notwendig, dass Unternehmen über die Art und Weise nachdenken, wie eingeschränkte und verteilte Teams zusammenarbeiten. Die anhaltende Isolation hat ein Gefühl des Unwohlseins geschaffen, das sich enorm auf Teams auswirkt, die remote arbeiten. Zuvor konnten diejenigen von uns, die in einem Büro arbeiteten, einfach in das Zimmer von jemand anderem gehen und ein Gespräch über die neueste Version beginnen. Dieses Maß an sozialer Interaktion ermöglichte es, die täglichen Aufgaben zu besprechen und Bedenken über Qualität und Prozesse zu äußern. Die Arbeit in einer reinen Remote-Funktion schränkt diese Aktivitäten ein und schafft entweder einen Zustand der totalen Isolation oder, im Falle der meisten Unternehmen, der totalen Ablenkung. Es ist eine Herausforderung, die richtigen Wege für die Zusammenarbeit mit Remote-Teams zu finden, um die Balance zwischen zu wenig Kommunikation und einem Kommunikations-Overkill zu finden. Hilfreich sind die richtige Collaboration-Software, Führung und Best Practices, um in der neuen Realität zu bestehen.

Mechanismen der Softwarebereitstellung

IT-Unternehmen müssen ihre Mechanismen zur Softwarebereitstellung radikal überdenken. „Mobile-first" wird allmählich hyperkritisch für Firmen, die ihren Kunden digitale Erlebnisse liefern. Dies ist besonders wichtig, da man nicht physisch mit den Kunden in einem Geschäft interagieren kann – das hat schwerwiegende Auswirkungen auf Call Center. Und die eigene Marke wird nun weitgehend über die digitale Präsenz repräsentiert. Alles hat sich in einen rein digitalen Bereich verlagert: die Essensbestellung über eine App, das Online-Banking, die Bestellung und Lieferung von wichtigen Medikamenten bis hin zum Kauf von Kleidung. Damit sie die Verbindung zu ihren Kunden nicht verlieren, müssen Firmen in der Lage sein, diese Erlebnisse in dieser sich verändernden Welt schnell zu entwickeln und bereitzustellen.

Verbunden mit dieser Herausforderung sind Überlegungen zu den tatsächlichen Bereitstellungsmechanismen. Während Unternehmen die digitalen Erlebnisse für ihre Kunden radikal überdenken und gestalten, müssen sie darüber nachdenken, wie sie digitale Inhalte durch die DevOps-Pipeline entwickeln, testen und bereitstellen.

Verlagerung auf Cloud-Ökosysteme und Low-Code-Entwicklungsplattformen

Wegen der COVID-19-Pandemie mussten viele Unternehmen ihre Bereitstellungsmechanismen modernisieren, indem sie ihre Software in Cloud-Ökosysteme und Low-Code-Entwicklungsplattformen verlagerten, um die Zusammenarbeit von geografisch verteilten Entwicklern und Testern für bestmögliche Ergebnisse sicherzustellen.

Wir beobachten einen Anstieg der Migrationen auf Plattformen wie Salesforce, Guidewire, Mendix und andere. Nicht nur, um eine schnelle Bereitstellung zu ermöglichen, sondern auch, um die Vorteile all der Funktionen zu nutzen, die diese Plattformen für ein ressourcenbeschränktes Unternehmen bieten. Mit der Modernisierung der Softwareentwicklung und -bereitstellung durch die CI-Pipeline stellen wir zudem eine Migration zu Cloud-Plattformen wie Azure DevOps, Pivotal Cloud und Amazon Web Services (AWS) fest.

Software-IT-Unternehmen müssen durchhalten. Sie müssen ihren Kunden hochgradig interaktive digitale Erlebnisse in einem schnelleren Tempo liefern - trotz begrenzter Ressourcen. Aber es muss einen Kompromiss geben.

Oft bleibt bei diesen konkurrierenden Kräften die Qualität auf der Strecke. Obwohl die Qualität wichtiger denn je ist, damit Kunden, die direkt über digitale Erfahrungen mit Unternehmen interagieren, nicht darunter leiden. Der beste Weg, um in einer eingeschränkten Welt weiterhin qualitativ hochwertige Erlebnisse zu bieten, ist die Suche nach „Effizienzmodifikatoren" für die Testpraxis.

Effizienz-Modifikatoren sparen Zeit

Was sind diese „Effizienz-Modifikatoren"? Es gibt sie in verschiedenen Formen:

  • Intelligente Testentwicklung und -optimierung;
  • Umfassende Anforderung an die Code-Abdeckung; und
  • Smarte Testausführung

Intelligente Testentwicklung und -optimierung

In einer modernen Anwendung sind viele Dinge zu testen, darunter die Frontend-Benutzeroberfläche, Middleware-Dienste einschließlich Datenbanken, Backend-Systeme und Abhängigkeiten von Drittanbietern. Jede dieser Schichten erhöht die Komplexität des gesamten Testprozesses. Viele Anbieter von Softwaretest-Tools bieten Lösungen an, um Teile dieser Architektur zu testen. Wichtig ist jedoch, dass man jede Komponente in ihrer Gesamtheit genau testen kann, und zwar vom Schreiben der ersten Codezeile bis hin zum intelligenten UI-Test in der fertigen Anwendung.

Mithilfe von künstlicher Intelligenz lässt sich das Entwerfen und Optimieren dieser notwendigen Tests verkürzen. Um den Prozess der Testerstellung zu verbessern, sind intelligente Lösungen gefragt, die künstliche Intelligenz beinhalten. Dies kann in Form von intelligentem Code-Scanning geschehen, um schlechte Praktiken im Code bereits beim Schreiben zu identifizieren, automatisch Unit-Tests zu generieren, Muster und Beziehungen in API-Sequenzen zu identifizieren, um umfassende Testszenarien zu erstellen. Und schließlich die Nutzung von KI-gestützter Selbstheilung auf der UI-Schicht, um sich von veränderten Anwendungsschnittstellen zu befreien.

Umfassende Anforderung an die Codeabdeckung

Risiken, die Unternehmen mit unvollständigen Softwaretests eingehen. Auch in einer extremen Situation wie der andauernden Corona-Pandemie sollte Software solide und umfassend getestet werden.
Risiken, die Unternehmen mit unvollständigen Softwaretests eingehen. Auch in einer extremen Situation wie der andauernden Corona-Pandemie sollte Software solide und umfassend getestet werden.
(Bild: Parasoft)

Es reicht nicht aus, einfach eine ganze Reihe von Tests zu erstellen. Um die Anwendung schnell zu validieren, muss man verstehen, wie jeder der Tests mit den Geschäftsanforderungen korreliert. Nur so kann man die Priorität nachvollziehen und wie sie mit dem zugrunde liegenden Code korreliert – und eine Vorstellung von der Vollständigkeit der Tests bekommen.

Eine leistungsstarke Effizienzsteigerung für ein eingeschränktes Testteam besteht also darin, eine Testpraxis aufzubauen, bei der die Testfälle eng mit den Geschäftsanforderungen und dem Entwicklungscode gekoppelt sind, um eine umfassende und ganzheitliche Sicht auf die Qualität zu schaffen.

Smarte Testausführung

Liegt nun eine ganze Reihe von Tests vor und versteht man, wie die Testergebnisse aus einer Prioritätsperspektive bedient werden können, indem man sie mit den Anforderungen verknüpft, müsste man in der Lage sein, diese Tests auf die effektivste Weise auszuführen. Die meisten Unternehmen lassen ihre gesamte Testreihe über Nacht laufen. Dann verbringen sie den halben nächsten Tag damit, die Ergebnisse durchzugehen, um herauszufinden, ob tatsächlich etwas schief gelaufen ist oder ob es nur ein „Automatisierungsrauschen" gab.

Die beste Möglichkeit, die Effizienz der Testausführung zu steigern, ist eine intelligente Testausführung. Dabei werden nur die Testfälle ausgeführt, die man benötigt, um die an der Anwendung vorgenommenen Änderungen zu validieren. Technologien wie die intelligente Testausführung ermöglichen:

  • die schnelle Identifizierung von Testfällen, die Änderungen betreffen, und
  • eine Verknüpfung dieser mit den zugehörigen Anforderungen.
  • Das Verstehen der Priorität.
  • Genaue Arbeitsanweisungen für das eingeschränkte Testteam.

Es gibt viele Teile in diesem Qualitätspuzzle, wie oben aufgeführt. Viele dieser Testverfahren sind weitgehend bekannt, wie z. B. das Testen von Datenbanken oder die Fähigkeit, eine Benutzeroberfläche zu testen. Aber eine Disziplin, die oft übersehen und den späteren Phasen des Anwendungstestens überlassen wird, ist das Testen von APIs.

Gezielte Betrachtung der API-Tests

API-Tests sind die Praxis der Validierung von Schnittstellen in der Anwendung auf der Ebene von Diensten oder Komponenten. Diese APIs sind die Mechanismen, über die Maschinen miteinander kommunizieren und dienen oft als Sollbruchstelle für Anwendungen, sobald sie zusammengeführt werden. Besonders in der heutigen Welt der serviceorientierten oder Microservice-Architekturen ist dieser kritische Integrationspunkt von größter Bedeutung, wenn es darum geht, ein digitales Erlebnis zu schaffen. Typischerweise ist die mobile Anwendung nur ein Frontend für eine ganze Reihe von Diensten - und diese Dienste sind es, die den kritischen Geschäftswert liefern. Genau darum müssen Unternehmen eine umfassende API-Testpraxis parallel zu den übrigen Testtechniken entwickeln.

Leichter gesagt als getan! Denn die meisten API-Schnittstellen sind schlecht dokumentiert oder enthalten eine Reihe von versteckten und undokumentierten APIs. Das macht es für die Testteams wirklich schwierig zu verstehen, wie sie alle APIs in welcher Reihenfolge testen sollen und wie sie sicherstellen können, dass sie die richtige Anzahl von Anwendungsfällen genau abgedeckt haben.

Einbinden der API-Tests in die Testpraxis

Wenn sich ein Unternehmen für API-Tests als Mittel zur Effizienzsteigerung entschließt, ist ein sinnvoller Einstieg das A und O. Der beste Weg, diesen Prozess zu beginnen, ist eine Bestandsaufnahme der verfügbaren APIs in Ihrer Anwendungsarchitektur. Mit dem intelligenten API-Testgenerator von Parasoft SOAtest lassen sich APIs entdecken, indem man Interaktionen zwischen der Anwendung und den API-Diensten aufzeichnet. Mithilfe von künstlicher Intelligenz (KI) ermöglicht die Technologie das Erstellen von aussagekräftigen API-Tests, indem sie Muster und Beziehungen in den API-Sequenzen versteht. Auf dieser Grundlage werden dann automatisierte API-Tests erstellt, die über die kontinuierliche Ausführung die Interaktionen zwischen den verschiedenen Systemkomponenten validieren.

Gleichzeitig ermöglicht Parasoft Selenic es, reine Selenium-Tests auf UI-Ebene zu erstellen. UI-Tests sind ein wichtiger Bestandteil der gesamten Testpraxis, aber bei einer rein UI-fokussierten Teststrategie können Probleme mit der Wartbarkeit auftreten. Parasoft Selenic nutzt KI, um Stabilitätsprobleme in Testskripten zu erkennen und kann Tests zur Laufzeit selbst heilen.

Auch wenn dies nicht im Mittelpunkt dieses Gesprächs steht, sichert die Kombination der beiden Komponenten eine breite Abdeckung der Anwendung und hilft, das Vertrauen zu gewinnen, dass die Anwendungsschnittstellen nicht gefährdet sind.

Gibt es bereits bestehende Selenium-basierte UI-Tests, lassen sich mit Parasoft Selenic die relevanten API-Aufrufe extrahieren und in die API-Test-Engine einspeisen. Eine Bestandsaufnahme der verfügbaren Schnittstellen und die Erstellung von automatisierten Tests für diese Schnittstellen sind der Startschuss für den Aufbau einer API-Testpraxis.

Woher weiß ich, wann ich mit dem API-Test fertig bin?

Dies ist ein sehr komplexes Problem. Woher weiß man, wann man genug getestet hat? Es gibt viele Debatten zu diesem Thema, aber meiner Meinung nach lässt es sich auf drei Metriken reduzieren:

  • Code-Abdeckung
  • API-Abdeckung
  • Abdeckung der Anforderungen

Erzielen von Code-Abdeckung

Code Coverage ist weitgehend einfach zu erlangen. Man instrumentiert die Anwendung mit einem Code Level Monitor und testet sie über die APIs. Der Code-Level-Monitor identifiziert Klassen und Methoden, mit denen interagiert wird, und liefert diese Informationen zurück in die Berichts- und Analyse-Engine.

Es liegt in der Natur der Sache, dass APIs nicht die gesamte verfügbare Codefunktionalität über die API offenlegen, sodass das Unternehmen identifizieren muss, welcher Code über die APIs erreichbar ist. Sobald diese Informationen vorliegen, kann man einen Schwellenwert für den Grad der Codeabdeckung festlegen, den die API-Tests erzielen sollen. Im Allgemeinen sind 80% ein guter Wert, der erreicht werden sollte.

Erzielen von API-Abdeckung

Allerdings ist die Codeabdeckung nur ein Teil der Geschichte. Es empfiehlt sich, auch die API-Abdeckung zu betrachten. Denn diese Metrik gibt an, wie viele der insgesamt verfügbaren und zugänglichen APIs mit den automatisierten API-Tests getestet werden. Es kann viele Fälle geben, in denen man zwar eine hohe Codeabdeckung erreicht, aber dennoch ein Risiko in der Anwendung besteht, weil bestimmte wichtige APIs nicht validiert wurden. Vielleicht berühren diese wichtigen APIs nur einen kleinen Teil des Codes, so dass sie in der Gesamtcodeabdeckung untergehen. Weil sie jedoch eine kritische Komponente betreffen, stellen sie ein erhebliches Risiko dar, wenn sie sich falsch verhalten oder absichtlich missbraucht werden.

Die API-Abdeckung lässt sich durch die automatisierte Testlösung erzielen, indem man das Delta zwischen den in den Dienstdefinitionen verfügbaren Diensten, wie Swagger, Open API und anderen, und den Endpunkten, auf die in den API-Tests zugegriffen wird, ableitet. Diese Kennzahl liefert einen Überblick über die Gesamtzahl der abgedeckten Dienste im Vergleich zur Gesamtzahl der verfügbaren Dienste. Im Allgemeinen sind 90% ein guter Wert, der je nach Größe der APIs zu erreichen ist.

Ermitteln der Bedarfsdeckung

Schließlich müssen wir noch über die Anforderungsabdeckung sprechen. Obwohl die Codeabdeckung und die API-Abdeckung angeben, wie viel Prozent der Anwendung berührt werden, zeigen sie nicht an, ob die Anwendung das für die Kunden gesteckte Ziel erreicht.

Die Anforderungsabdeckung ist der Prozess der Zuordnung von Anforderungen zu Testszenarien. Sie müssen feststellen, dass das automatisierte Testszenario den Anwendungsfall auf technischer Ebene validiert. Durch die Ausführung lässt sich dann nachvollziehen, ob alle Anforderungen abgedeckt sind. Wenn nicht, welche Anforderungen bleiben ungedeckt? Und welche geschäftliche Priorität haben diese?

Man könnte argumentieren, dass die Anforderungsabdeckung die wichtigste der drei Techniken ist - im Idealfall 100% Abdeckung. Aber in Wirklichkeit braucht es die Kombination aller drei Metriken, um vollständig zu verstehen, wann das Risiko für die Freigabe akzeptabel ist.

Verkürzte Zeitspanne zwischen Fehleridentifikation und -behebung?

Kontinuierliches Feedback ist in einer Remote-Arbeitsumgebung unerlässlich. Wir müssen in der Lage sein, auf Qualitätsprobleme, die sich in unseren digitalen Erfahrungen zeigen, auf sinnvolle Weise und so schnell wie möglich zu reagieren. Da APIs dem Code am nächsten kommen, ohne dass man sich die Quellen ansehen muss, stellen sie eine gute erste Verteidigungslinie für das Quality Engineering dar, um zu erkennen, wann Fehler in die Anwendung eingebracht wurden, die sich potenziell auf die Benutzer ausbreiten könnten. Automatisierte API-Tests erlauben die laufende Validierung der APIs, gegebenenfalls als ein Build-Schritt in der CI/CD-Pipeline. Ein Schlüssel zur Skalierbarkeit dieses Prozesses ist die intelligente Testausführung.

Wie bereits erwähnt, ist „Smart Test Execution" ein Sammelbegriff, der sich auf den Prozess bezieht, nur die zur Validierung der Änderungen erforderlichen Tests auszuführen. Diese Änderungen können aus dem Code oder aus der Anforderung stammen. Die Implementierung einer intelligenten Testausführung in den CI/CD- oder DevOps-Prozess ermöglicht die Ausführung der geeigneten API-Tests zur Validierung der sich ändernden Architektur. Indem nicht bei jedem Build die gesamte Testsuite ausgeführt wird, lässt sich die Zeitspanne zwischen Fehlererkennung und -behebung erheblich verkürzen. Diese schnellen Feedback-Zyklen sind in einer ressourcenbeschränkten Welt unerlässlich.

Fazit

Christopher Colosimo, Product Manager bei Parasoft.
Christopher Colosimo, Product Manager bei Parasoft.
(Bild: Parasoft)

Die Welt hat sich verändert. Sehen wir den Tatsachen ins Auge: Das wird auch in absehbarer Zukunft so bleiben. Anstatt sich darüber zu ärgern, können wir dies als Chance für die digitale Transformation nutzen. Indem wir unsere Qualitätsprozesse unter die Lupe nehmen und Bereiche identifizieren, in denen wir die Effizienz steigern können, werden wir diese Pandemie in einer viel günstigeren Position überstehen. API-Tests sind eine von vielen Praktiken für ein Unternehmen, um wertvolle Erkenntnisse über die Zuverlässigkeit und Skalierbarkeit seiner Anwendungen zu gewinnen.

Der Autor

* Chris Colosimo ist Product Manager für funktionale Testlösungen bei Parasoft in Los Angeles. Seine Expertise in der SDLC-Beschleunigung durch Automatisierung hat ihn zu Implementierungen in großen Unternehmens geführt, wie bei Capital One und CareFirst.

* Christopher Colosimo ist Product Manager bei Parasoft

(ID:47107422)