Die Schwierigkeiten, die sich aus dem Reproduzieren realistischer Testumgebungen und der Verwendung realer Daten und Traffic-Muster in Tests ergeben, veranlasst Teams außerdem häufig dazu, Produktionsumgebungen zum Überwachen und Prüfen ihrer Applikationen heranzuziehen. Ein Vorgehen, das durchaus Vorteile hat: So können zum Beispiel Applikationen mit realem Produktions-Traffic getestet und damit die Fehlertoleranz und die Leistungsfähigkeit verbessert werden.
Ein gängiger Anwendungsfall ist das sogenannte »Canary Release«: Dabei wird eine neue Software-Version zunächst nur einer kleinen Kundengruppe zur Verfügung gestellt. Erst nachdem Bugs gemeldet und behoben wurden, wird die Applikation dann sukzessive an immer mehr Kunden ausgeliefert. Auf dieses Vorgehen setzt unter anderem Roku, ein Hersteller von Multimedia-Spielen, beim Aktualisieren seiner Geräte-Firmware.
Eine solche »Rechtsverschiebung« der Tests ist allerdings auf eine Entwicklungsinfrastruktur angewiesen, die ein Release zurücknehmen kann, wenn kritische Defekte auftreten. Wird beispielsweise in einem Canary Release eine ernste Sicherheitslücke festgestellt, muss es zurückgenommen werden, bis ein neues, aktualisiertes Release bereitsteht (Bild 3).
Die Verwendung von Produktionsumgebungen zum Überwachen und Prüfen von Software hat jedoch ihre Tücken. Auch steht hinter dem Shift Right Testing nicht die Absicht, Modul-, API- und UI-Tests vor dem Deployment zu ersetzen. Vielmehr soll es eine Ergänzung sein und die Continuous-Testing-Philosophie bis in die Produktion hinein ausdehnen. Trotzdem können Unternehmen dieses Konzept auch leicht missbräuchlich als Rechtfertigung dafür nutzen, während der Entwicklung weniger Modul- und API-Tests durchzuführen. Um das zu verhindern, muss das Testen während der Entwicklungsphasen einfacher und produktiver werden – und qualitativ hochwertigere Software hervorbringen.
Der Großteil der Software wird nicht vollständig getestet. Was getestet wird, hängt meist davon ab, welche der Funktionen der Entwickler als kritisch betrachtet. Eine Entscheidung, die sich jedoch während eines SCRUM-Sprints oder einer Iteration in anderen Prozessen als äußerst schwierig erweisen kann.
Andererseits ist es aber auch keine Option, immer alles zu testen. Wegen knapper Zeitpläne werden daher oft nur die Teile der Software getestet, die aktualisiert wurden – obwohl in der Regel nicht bekannt ist, welcher Code genau betroffen ist. Zwar hilft in solchen Fällen die Testautomation, aber ohne genaue Kenntnis, wo und was getestet werden muss, bleibt die Testabdeckung auch hier immer noch unzureichend.
Abhilfe kann die Test Impact Analysis schaffen, eine multivariate Analyse von Testabdeckung, Codeänderungen und Abhängigkeiten, die genau aufzeigt, welcher Code getestet werden muss. Zusätzlich können diese Tests dann automatisch geplant und ausgeführt werden.
Die TIA arbeitet auf der Entwickler-Ebene innerhalb der IDE und sammelt Informationen darüber, welcher Code von welchen Tests ausgeführt wird. Diese Informationen werden dann in der IDE des Entwicklers beim Ändern von Code angewandt. Auf diese Weise kann der Entwickler die Tests identifizieren und ausführen, die nötig sind, um zu verifizieren, dass der geänderte Code bei keinen Tests durchfällt. Indem genau registriert wird, welche Tests durchgeführt und welche bestanden beziehungsweise nicht bestanden wurden, kann der Entwickler außerdem feststellen, welche noch durchzuführen sind oder welche fehlgeschlagen sind. Sind alle Tests ausgeführt und bestanden, hat der Entwickler die Gewissheit, dass der Code übergeben und dass weitergearbeitet werden kann.
Die TIA funktioniert im Rahmen eines CI/CD-Prozesses durch die nahtlose Integration in das Build-System eines Projekts (zum Beispiel Maven oder Gradle), sodass es bei Änderungen umgehend Rückmeldungen gibt. Sie stellt fest, welcher Code seit dem letzten Baseline Build, also dem letzten Nightly Build, geändert wurde, ermittelt die für den betreffenden Code nötigen Tests und führt diese anschließend aus. Dieser Workflow ermöglicht es den Teams, CI-Jobs einzurichten, die die Tests ausschließlich aufgrund der letzten Codeänderungen ausführen. So reduziert sich der Zeitaufwand zum Abarbeiten eines CI-Jobs von Stunden auf Minuten. Im Einzelnen bietet die Test Impact Analysis die folgenden Vorteile:
Test-Engpässe während der Entwicklung sind also weit verbreitet, müssen aber nicht sein. Die Test Impact Analysis erlaubt es Entwicklerteams dank Testautomation, die Testmaßnahmen auf die in den einzelnen Iterationen vorgenommenen Modifikationen zu konzentrieren. So wird also nur das Notwendige getestet. Zudem verringert sich der Testaufwand für die Teams im Entwicklungsprozess. Denn sie erhalten umgehend Rückmeldung, was getan werden muss, welcher Code die Tests nicht bestanden hat und welcher Code von neuen Änderungen betroffen ist.
Mark Lambert, Vice President of Products bei Parasoft, zeichnet verantwortlich dafür, dass Parasoft-Lösungen echten Mehrwert für die Unternehmen bieten. Sein Team unterstützt Kunden bei der Optimierung ihres Software-Entwicklungsprozesses, indem die spezifischen Entwicklungsanforderungen eingeschätzt und die angewendeten Technologien, Prozesse und Methodiken darauf abgestimmt werden.