Es ist deine Aufgabe, Code zu liefern, dessen Funktionsfähigkeit nachgewiesen ist
(simonwillison.net)- In KI-gestützten Entwicklungsumgebungen häufen sich Fälle, in denen unerfahrene Engineers ungeprüfte, sehr große PRs einreichen
- Die Kernaufgabe von Entwickler:innen besteht nicht einfach im Schreiben von Code, sondern darin, Code zu liefern, dessen Funktion nachgewiesen ist
- Dafür müssen zwingend zwei Schritte durchgeführt werden: manuelle Tests und automatisierte Tests
- Auch Coding Agents sollten so konfiguriert werden, dass sie die von ihnen vorgenommenen Änderungen selbst verifizieren
- Letztlich liegt die Verantwortung beim menschlichen Entwickler, und nur Code mit Nachweisen der Verifikation hat echten Wert
Das Problem beim Einreichen ungeprüften Codes
- Es wird auf Fälle verwiesen, in denen Junior Engineers mit LLM-Tools riesige, ungeprüfte PRs einreichen und sich auf das Code Review verlassen
- Das wird als unhöflich und ineffizient bezeichnet und als Vernachlässigung der Verantwortung eines Entwicklers kritisiert
- Die Rolle von Software Engineers besteht nicht in der bloßen Produktion von Code, sondern darin, Code zu liefern, dessen Funktion nachgewiesen ist
- Ungeprüfter Code wird als Abwälzen der Last auf die Reviewer betrachtet
Zwei Schritte, um nachzuweisen, dass der Code funktioniert
- Der erste Schritt ist der manuelle Test: Man muss selbst überprüfen, dass der Code korrekt funktioniert
- Dazu gehört, das System in einen Ausgangszustand zu versetzen, die Änderung anzuwenden und anschließend das Ergebnis zu verifizieren
- Terminal-Befehle und Ausgaben können als Kommentar im Code Review beigefügt oder durch eine Bildschirmaufnahme nachgewiesen werden
- Nach der Bestätigung des Normalfalls sollten durch Tests von Edge Cases mögliche Probleme gesucht werden
- Der zweite Schritt ist der automatisierte Test, der dank der Fortschritte bei LLM-Tools als unverzichtbarer Prozess hervorgehoben wird
- Zusammen mit der Änderung sollten automatisierte Tests enthalten sein, und wenn man die Implementierung zurücknimmt, müssen diese Tests fehlschlagen
- Das Schreiben von Tests folgt demselben Verfahren wie der manuelle Test, und die Fähigkeit zur Integration in eine Test Harness ist dabei wichtig
- Es wird darauf hingewiesen, dass es ein falscher Ansatz ist, manuelle Tests wegzulassen, nur weil automatisierte Tests allein für ausreichend gehalten werden
Rolle und Verifikation von Coding Agents
- Ein wichtiger Trend im LLM-Bereich im Jahr 2025 ist das rasante Wachstum von Coding Agents; repräsentative Beispiele sind Claude Code und Codex CLI
- Sie können Code ausführen und Probleme selbstständig beheben
- Auch Coding Agents müssen ihre eigenen Änderungen nachweisen und sowohl manuelle als auch automatisierte Tests durchführen
- Bei CLI-Tools kann man den Agenten darauf trainieren, diese selbst auszuführen, oder dies mit Systemen wie Clicks CLIRunner automatisieren
- Bei CSS-Änderungen kann man sie so einrichten, dass sie das Ergebnis per Screenshot-Erfassung prüfen
- Wenn in einem Projekt bereits Tests vorhanden sind, kann der Agent diese erweitern oder bestehende Muster wiederverwenden
- Struktur und Qualität des Testcodes beeinflussen direkt die Qualität der vom Agenten erzeugten Tests
- Ein ästhetisches Gespür für Testcode wird als zentrale Fähigkeit genannt, die Senior Engineers auszeichnet
Die Verantwortung des Menschen und der Wert von Code
- Computer können keine Verantwortung übernehmen; diese Rolle muss der Mensch übernehmen
- Dass LLMs große Patches erzeugen, ist inzwischen nichts mehr, das an sich Wert stiftet
- Der eigentliche Wert liegt darin, Code zu liefern, dessen Funktionsfähigkeit nachgewiesen ist
- Beim Einreichen eines PRs sollte man unbedingt Belege dafür beifügen, dass der Code korrekt funktioniert
4 Kommentare
Dem stimme ich sehr zu. Derzeit ist die Verantwortung für Code im PR-Verfahren strukturell auf Maintainer und Reviewer abgewälzt. Für jemanden, der nicht überprüften LLM-Code einreicht, gibt es keine Nachteile.
Wenn man einmal zur Google-Codebasis beigetragen hat, sieht man, dass dort so etwas wie der Credit von Contributorn gemessen wird; ich denke, dass andere Open-Source-Projekte und Unternehmen so etwas ebenfalls einführen werden. Vertrauen dürfte noch stärker zu einem wichtigen Gut werden.
Oh, ihr verwendet also so ein Konzept bei Google.
Hacker-News-Kommentare
In letzter Zeit sieht man häufig eine deprimierende Anekdote: Ein Junior Engineer, ausgestattet mit LLM-Tools, wirft einen riesigen, ungetesteten PR Kollegen oder Open-Source-Maintainern hin und erwartet, dass der Code-Review den Rest erledigt. Noch schlimmer ist, dass dieses Verhalten nicht nur von Juniors kommt, sondern auch von Senior-Entwicklern
Wie man einen guten PR schreibt, gilt nicht nur für AI-generierten Code, sondern immer. Wenn ich eine PR-Beschreibung schreibe, ordne ich sie meist in der Reihenfolge: aktuelles Verhalten, Grund für die Änderung, Inhalt der Änderung. Ich füge Testanweisungen, Screenshots und sogar E2E-Testbefehle hinzu, um die Last für Reviewer zu senken. Das hilft auch bei asynchroner Zusammenarbeit oder Teams über Zeitzonen hinweg
Das Wesen des Engineerings besteht darin, Anforderungen zu verstehen, sie in logische Abläufe zu übersetzen, Trade-offs auszubalancieren und Verantwortung für das Ergebnis zu übernehmen. Code generieren zu lassen oder zufällige PRs einzureichen, ist ein Symptom dafür, dass diese Grundlagen fehlen. Coding-Agenten sind eher ein Anlass, uns wieder an das Wesen von Engineering zu erinnern
Tests sind notwendig, aber nicht hinreichend. Man muss Code auch logisch verifizieren. Tests demonstrieren korrektes Verhalten nur für bestimmte Eingaben und Umgebungen
Ich teste nicht, weil es Pflicht ist. Ich teste einfach, weil ich sehen will, dass der Code wirklich funktioniert. Wenn es einen nicht begeistert, den laufenden Code zu sehen, ist dieser Beruf vielleicht nichts für einen
Ich habe gehört, dass Juniors dank LLMs riesige PRs einreichen, aber in unserer Organisation gibt es das bisher nicht
main. In der Explorationsphase mag das noch gehen, aber in der Stabilisierungsphase ist es ein fürchterliches RisikoIch stimme der Aussage „Dein Job ist es, Code in nachgewiesen funktionierendem Zustand zu übergeben“ nicht zu. Der eigentliche Job ist es, Business-Probleme zu lösen. Natürlich führt das in den meisten Fällen zu Code, aber die Unterscheidung ist wichtig
In einem früheren Job arbeitete ich bei einem japanischen Hersteller hochwertiger Hardware, und wenn die QA-Abteilung einen Bug fand, wurde der Produkt-Release gestoppt. Deshalb richteten die einzelnen Entwicklungsabteilungen eigene QC-Teams ein, um die Vorabtests zu verstärken. Dadurch wurde die Software sehr gründlich verifiziert
Heutzutage hat sich das Wesen der Arbeit zu Tickets schließen verändert. Codequalität taucht in den Kennzahlen nicht auf und wird deshalb unwichtig. Ich mache bei so einem System nicht mit. Handwerksstolz verschwindet, und alle wollen nur noch billiges Sperrholz und Leim
Das Problem ist, was mit „nachgewiesen funktionierendem Code“ gemeint ist. Es gibt auch Fälle, in denen jemand einen riesigen PR mit von LLMs erzeugten Tests einreicht. Ich selbst mache bei privaten Projekten zwar vibe coding, aber im Team ist das eine schlechte Gewohnheit. Man stellt Engineers ein, um für ihre Expertise zu bezahlen