Zum Hauptinhalt springen

Verbesserung 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:
Devin
In seiner Shell klont Devin zunächst unser Repository von GitHub, parst die README-Datei und installiert die Projektabhängigkeiten in seiner lokalen Umgebung.
Devin
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.
Devin

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.
Devin
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.
Devin

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
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

Code Review

Außerdem teilt Devin die neue Datei mit uns, sodass wir sie herunterladen und prüfen können. Alternativ hätten wir Devin auch bitten können, direkt auf GitHub einen Pull Request zu erstellen mit dieser neuen Datei, damit er im Rahmen unseres normalen Code-Review-Prozesses geprüft werden kann. Ich entscheide mich jedoch dafür, sie einfach in Devins integriertem Editor zu reviewen, damit ich die Datei nicht herunterladen muss.
Devin
Insgesamt sehen die Änderungen gut aus, aber wir wollen sicherstellen, dass es keine Laufzeitfehler gibt, die wir übersehen haben. Daher bitten wir Devin, die Test-Suite noch einmal auszuführen und uns das Ergebnis zu berichten.
Devin
Die Tests laufen wie erwartet, und wir haben unsere Testabdeckung von 28,57 % der Funktionen auf 57,14 % der Funktionen erhöht – genau das, was wir erreichen wollten. Der gesamte Prozess hat für Devin weniger als 10 Minuten Arbeitszeit in Anspruch genommen, obwohl wir zwischendurch eine Pause gemacht haben, bevor wir Devin die nächsten Anweisungen gegeben haben. Sie können die Testabdeckung erhöhen und eine mühsame Aufgabe aus dem Backlog Ihres Engineering-Teams entfernen, indem Sie sie einfach an Devin delegieren. Wenn Sie feststellen, dass Sie regelmäßig zu Devin zurückkehren, um die Testabdeckung zu erhöhen, können Sie diesen Prompt sogar in ein detailliertes Playbook verwandeln, sodass Sie leicht neue Runs für verschiedene Teile Ihrer Anwendung starten können. Wenn Sie mehr darüber erfahren möchten, für welche Arten von Prompts Devin besonders gut geeignet ist, lesen Sie einige unserer Beispiele in den Docs.