Zum Hauptinhalt springenVerbesserung der Codeabdeckung mit Devin
Die meisten Anwendungen in Produktion haben keine 100 % Codeabdeckung. Engineering-Teams müssen hart priorisieren und konzentrieren sich in der Regel darauf, Tests für kritische Pfade zu schreiben, um den größtmöglichen Nutzen aus ihrer investierten Zeit zu ziehen. Devin kann diese Lücke schließen, indem es den Stil der bestehenden Testsuite eines Codebases analysiert und die Abdeckung weniger kritischer, aber dennoch wichtiger Funktionen erhöht.
Für dieses Beispiel verwenden wir eine Open-Source-Typescript-Beispielanwendung auf Basis der RealWorld-Spezifikation, die bereits einige Tests, aber keine vollständige Abdeckung hat: https://github.com/SeuRonao/realworld-express-prisma
Sie können den vollständigen Run hier nachverfolgen oder den Rest dieses Beitrags lesen, in dem die einzelnen Schritte von Devins Prozess erläutert werden. Dabei heben wir verschiedene Bereiche von Devins Workspace wie den Editor oder die Shell hervor.
Erste Eingabeaufforderung
Wir starten unseren Run mit einem einfachen Prompt, in dem wir Devin anweisen, unsere Entwicklungsumgebung einzurichten und die bestehende Testabdeckung unserer Anwendung zu ermitteln:
In seiner Shell klont Devin zunächst unser Repository von GitHub, parst die README-Datei und installiert die Projektabhängigkeiten in seiner lokalen Umgebung.
Anschließend nutzt Devin seinen integrierten Editor, um unsere .env-Datei zu erstellen, damit die Anwendung lokal ausgeführt werden kann. Wenn Sie mit Devin arbeiten, können Sie außerdem VS Code selbst öffnen, um manuelle Änderungen vorzunehmen oder die Dateien zu überprüfen, an denen Devin arbeitet.
Festlegen einer Baseline für die Testabdeckung
Devin führt dann die Test-Suite in seiner Shell aus. Einer der größten Vorteile von Devin ist, dass er nicht nur Code für Ihr Team ändern oder erstellen kann, sondern auch direkt in seinem Browser und Terminal arbeiten kann, um Interaktionen auf höherer Ebene mit Ihrer Codebasis, der Entwicklungsumgebung oder sogar Ihrer laufenden Anwendung durchzuführen.
Im Folgenden sehen wir, wie Devin die Ergebnisse aus seiner Shell interpretiert und in unseren Chat überführt hat, sodass sie leichter verständlich und auf das Wesentliche verdichtet sind.
Einen Verbesserungsplan erstellen
Jetzt können wir uns der eigentlichen Aufgabe widmen, nämlich die Code Coverage zu erhöhen. Es sieht so aus, als wäre profileViewer.ts ein guter Ausgangspunkt für uns, da die Testabdeckung standardmäßig praktisch nicht vorhanden ist. Wir bitten Devin um die nächsten Schritte, und es berichtet uns während des gesamten Prozesses, was vor sich geht.
Devin kann die bestehende Datei lesen, bestimmen, welche Testfälle wir basierend auf der vorhandenen Funktionalität implementieren sollten, und dann tatsächlich die neuen Tests für uns schreiben – ganz ohne Eingriff unsererseits. Nachdem es die neuen Testfälle implementiert hat, gibt Devin uns eine abschließende Zusammenfassung seiner Änderungen:
Devin stellt uns die neue Datei außerdem zur Verfügung, sodass wir sie herunterladen und überprüfen können. Alternativ hätten wir Devin auch bitten können, direkt auf GitHub einen Pull Request mit dieser neuen Datei zu erstellen, damit sie im Rahmen unseres regulären Code-Review-Prozesses geprüft werden kann. Ich entscheide mich dafür, sie einfach in Devins integriertem Editor zu prüfen, sodass ich die Datei nicht herunterladen muss.
Insgesamt sehen die Änderungen gut aus, aber wir wollen sicherstellen, dass es keine Laufzeitfehler gibt, die wir übersehen haben. Daher bitten wir Devin, die Testsuite erneut auszuführen und uns die Ergebnisse zurückzumelden.
Die Tests laufen wie erwartet, und wir haben unsere Gesamt-Coverage von 28,57 % der Funktionen auf 57,14 % der Funktionen erhöht, was genau unserem Ziel entspricht. Der gesamte Prozess hat für Devin weniger als 10 Minuten Arbeitszeit in Anspruch genommen, obwohl wir zwischendurch eine Pause eingelegt haben, bevor wir Devin unsere nächsten Anweisungen gegeben haben. Du kannst die Testabdeckung erhöhen und eine mühsame Aufgabe aus dem Backlog deines Engineering-Teams entfernen, indem du sie einfach an Devin delegierst.
Wenn du Devin regelmäßig nutzt, um die Testabdeckung zu erhöhen, könntest du diesen Prompt sogar in ein detailliertes Playbook verwandeln, damit du leicht neue Runs für verschiedene Teile deiner Anwendung starten kannst. Wenn du mehr darüber erfahren möchtest, für welche Arten von Prompts Devin besonders gut geeignet ist, lies dir einige unserer Beispiele in der Dokumentation durch.