Die Ausführung von Tests dominiert in vielen Fällen die Dauer von Software-Builds. Dazu tragen unter anderem die wachsende Anzahl von Integrationstests und funktionaler Tests sowie die sequentielle Ausführung von Tests und etwaige Abhängigkeiten auf externe Dienste bei. Dies führt häufig dazu, das Entwickler*innen Tests nur auf dem CI-Server ausführen und somit den Feedback-Zyklus zwischen Code-Änderung und Testergebnis wesentlich verlängern. Desweiteren stellt häufig sogar in diesem Fall die Ausführung aller Tests für jede Änderung eine Herausforderung in Bezug auf Kosten und Build-Dauer dar. Gradle Enterprise bietet zwei innovative Technologien, die es ermöglichen, Tests früher und häufiger auszuführen: Predictive Test Selection und Test Distribution.
Predictive Test Selection spart Testzeit, in dem es Tests identifiziert, priorisiert und ausführt, die mit hoher Wahrscheinlichkeit zu nützlichem Feedback führen. Dies wird durch Anwendung eines Machine Learning Models erreicht, das auf feingranuläre Code-Snapshots sowie umfassende Test Analytics und Daten über Test-Flakiness einbezieht.
Test Distribution erweitert die parallele Ausführung von Tests, in dem es zusätzlich Remote Agents verwendet und orchestriert. Dies funktioniert sowohl für lokale Builds als auch auf dem CI-Server. So können bestehende Test Suites verteilt und schneller ausgeführt werden.
Individuell oder in Kombination — diese beiden Technologien ermöglichen, Testzeiten dramatisch zu reduzieren, Tests früher im Entwicklungszyklus auszuführen und erreichen somit eine Verkürzung des Feedbackzyklus, die wiederum zu höherer Produktivität und Zufriedenheit der Entwickler*innen führt. In diesem Vortrag werden wir beide Features in Aktion sehen und anhand von öffentlich verfügbaren Gradle-Enterprise-Instanzen bekannter Open-Source-Projekte (Spring, JUnit, Micronaut, …) besprechen, wie sie im Detail funktionieren.