KI-Programmieragenten können Softwareteams dabei unterstützen, architektonische Probleme zu bearbeiten, die über das bloße Schreiben von Code hinausgehen. Ihr Nutzen hängt jedoch davon ab, wie klar die Ziele und Einschränkungen sind, die das Team festlegt. Der auf InfoQ veröffentlichte Artikel von Pierre Pureur, Kurt Bittner und Todd Miller, der von Daniel Bryant geprüft wurde, warnt davor, dass die Bereitstellung ausschließlich funktionaler Anforderungen für den Agenten keine skalierbare, sichere oder leicht wartbare Architektur garantiert.
Der vorgeschlagene Ansatz stützt sich auf Qualitätsattributanforderungen (Quality Attribute Requirements oder QARs), etwa für Leistung, Sicherheit und Skalierbarkeit, sowie auf die Klärung der Abwägungen, die der Agent berücksichtigen sollte. Der Artikel betont außerdem, dass die Ergebnisse des Agenten anhand klarer Messgrößen geprüft werden müssen, statt sich auf eine Codeprüfung oder auf seine Empfehlungen zu beschränken.
1. Ältere Dienste dokumentieren, bevor man sich auf sie verlässt
Eine moderne Architektur kann auf einem älteren Dienst beruhen, der eine bestimmte Funktion erfüllt, etwa das Abrufen von Daten zu Versicherungsdokumenten aus einem alten System auf Basis einer IMS-Datenbank. Das Problem besteht darin, dass solche Dienste möglicherweise keine präzise Dokumentation besitzen. Dadurch wird es schwierig, Datenflüsse zu verstehen oder logische und sicherheitsbezogene Mängel zu erkennen, die in späteren Entwicklungsphasen oder nach dem Übergang in die Produktion auftreten können.
Der Agent kann den Entwurf des Dienstes darstellen und die Datenflüsse dokumentieren. Anschließend kann er den Code prüfen und Korrekturen oder eine Umstrukturierung vorschlagen, wenn der Dienst schwer verständlich und wartbar ist. Dieser Einsatz macht jedoch keine menschliche technische Entscheidung darüber überflüssig, ob der Dienst beibehalten werden kann oder ob seine Risiken einen Ersatz erforderlich machen.
2. Nach architektonischen Mängeln suchen
Der Agent kann angewiesen werden, Verstöße gegen Architekturstandards, verschlechterte Programmierpraktiken oder Teile zu finden, die eine Umstrukturierung benötigen. Zu den Prüfbeispielen gehören das Design von Programmierschnittstellen sowie komplexe, unsichere oder ineffiziente Schnittstellen und Verstöße gegen die Grenzen des Domain-Driven Design (DDD).
Der Artikel weist darauf hin, dass der Agent häufig zahlreiche Verbesserungen finden wird. Daher muss das Team zwischen wichtigen Problemen und Vorschlägen mit geringem Wert unterscheiden. Die Qualität der Ergebnisse steigt, wenn Ingenieure messbare Ziele, bekannte Alternativen und klare Abwägungen festlegen, statt sich auf die Beschreibung der gewünschten Funktionen zu beschränken.
3. Sicherheitsprüfung mit Isolation des Agenten
Der Agent kann verwendet werden, um Datenflüsse darzustellen, Dateien mit hohem Risiko zu identifizieren, komplexe logische Mängel zu prüfen, Tests oder Skripte zu erstellen, die Ausnutzungsversuche simulieren, und anschließend Korrekturen für die entdeckten Probleme vorzuschlagen. Der Artikel beschreibt ein Experiment mit npm-Paketen, die als Sicherheitsrisiko eingestuft worden waren. Dabei wurden zwei Pakete aktualisiert, ein Paket ersetzt und ein weiteres beibehalten, nachdem die Warnung als Fehlalarm bewertet worden war.
Dieser Einsatz erfordert jedoch ausdrückliche betriebliche Einschränkungen: Der Zugriff des Agenten muss auf freigegebene Dateien beschränkt werden, Datenbankpasswörter und Geheimnisse müssen verborgen bleiben, Tests müssen in einem isolierten Netzwerk ausgeführt werden, und vor der Zusammenführung jeder Änderung muss eine menschliche Prüfung erfolgen.
4. Eine architektonische Grundlage für Prototypen schaffen
Die Geschwindigkeit der Agenten ermöglicht den schnellen Aufbau eines Prototyps. Das daraus entstehende Modell kann jedoch vorläufig und ungeeignet sein, wenn keine architektonischen Ziele festgelegt wurden. Der Artikel schlägt vor, vorbereitete Gerüstanwendungen bereitzustellen, die den Codierungsstil, das Datenbankdesign, die Schnittstellen sowie die bevorzugten Plattformen und Frameworks enthalten, ergänzt durch in Markdown formulierte QARs.
GitHub-Vorlagen können ebenfalls verwendet werden, um die anfängliche Struktur von Anwendungen zu vereinheitlichen und die Standards des Teams von Anfang an einzubeziehen. Besser ist es, das Ziel, die Einschränkungen und die Methode zur Überprüfung ihrer Erfüllung zu beschreiben, statt dem Agenten im Voraus eine detaillierte Lösung vorzuschreiben.
5. Testbare erste Architekturen generieren
Der Artikel schlägt vor, den Agenten zur Erstellung von Minimum Viable Architectures oder MVAs einzusetzen. Diese sollten nicht nur Code enthalten, der die Funktionen nachweist, sondern auch die Tests, Testdaten und die erforderliche Laufzeitumgebung zur Überprüfung der QARs. Der Agent kann Testwerkzeuge und Containerkonfigurationen erzeugen. Das Team muss jedoch sicherstellen, dass die Tests die geforderten Attribute tatsächlich messen.
Außerdem sollte die Fähigkeit der MVA bewertet werden, architektonische Änderungsfälle aufzunehmen, da die Erweiterung einer automatisch generierten Architektur kostspielig werden kann, wenn sie nicht auf Weiterentwicklung ausgelegt ist.
Was ändert sich praktisch?
Die zentrale Botschaft des Artikels lautet, dass Programmieragenten die Codeproduktion beschleunigen, zugleich aber die Bedeutung der Formulierung von Anforderungen, Einschränkungen und Tests erhöhen. Die Fähigkeiten im Zusammenhang mit dem Schreiben von Code verschwinden nicht. Sensibler wird jedoch die Festlegung dessen, was gebaut werden soll, was als akzeptable Qualität gilt und wie diese gemessen wird. Daher sollte der Agent als Werkzeug unter architektonischer Aufsicht behandelt werden, nicht als Ersatz für technisches Urteilsvermögen.