KI kann die Anwendungsentwicklung revolutionieren, indem sie Code über den gesamten Softwareentwicklungszyklus hinweg generiert, optimiert und übersetzt. Der Einsatz von generativer KI kann zu einer konstanten Softwareentwicklung, einer optimalen Nutzung der Kreativität der Entwickler und einer Verbesserung ihrer Kompetenzen führen. Einige Beispiele:
Die Anwendung generativer KI in der Anwendungsentwicklung birgt potenziell erhebliche Vorteile:
Die Anwendung generativer KI zur Überprüfung, Umstrukturierung und Anwendung unternehmensweiter Codierungsstandards auf Software hat eine gesteigerte Konstanz der Software zur Folge, z. B. gemeinsame Ansätze zur Lösung wiederkehrender Probleme, eine einheitliche Codestruktur, selbstdokumentierenden Code usw., unabhängig davon, welcher Entwickler den Code geschrieben hat. Dies wiederum erleichtert die Fehlersuche und die Wartung der Anwendung, da die Wartungsmitarbeiter nicht erst die Struktur und die Eigenheiten der verschiedenen Codeabschnitte verstehen müssen.
Wie auch in anderen Bereichen hat die generative KI das Potenzial, Anwendungsentwickler von Aufgaben mit geringem Wert zu befreien, wie dem Schreiben von einfachem Code oder dem Identifizieren der Quelle eines problematischen Fehlers. Da Entwickler mehr Zeit für wichtige Aufgaben haben, können sie kürzere Entwicklungszyklen, mehr Funktionalität pro Softwareversion und kleinere, häufigere Änderungen realisieren.
Außerdem kann die Verwendung generativer KI bei der Anwendungsentwicklung die Fähigkeiten von Entwicklern erweitern, sodass unerfahrene Entwickler auf Fachkraft- oder sogar Expertenniveau arbeiten können. Erfahrene Entwickler können das Modelltraining in ihre Release-Zyklen einbauen und bei der Verbesserung des Codes führende Praktiken einbeziehen. Generative KI fungiert als fachkundiger Mentor für Nachwuchskräfte, wodurch leitende Entwickler sich auf andere Aufgaben konzentrieren können und das Qualifikationsniveau des gesamten Entwicklungsteams verbessert wird.
Generative KI kann bei der Anwendungsentwicklung in verschiedenen Anwendungsfällen eingesetzt werden. Viele allgemeine Modelle, wie zum Beispiel Llama 2, werden anhand von Anwendungen trainiert, die in mehreren modernen Programmiersprachen geschrieben sind. Zudem sind speziell für die Codegenerierung optimierte Modelle verfügbar.
Zu den Anwendungsfällen, die unserer Ansicht nach einen Nutzen aus generativer KI ziehen, gehören:
Die einzelnen Anwendungsfälle werden im Folgenden beschrieben.
Die native Textgenerierungsfunktion von Large Language Models (LLMs) kann genutzt werden, um aus Prompts in natürlicher Sprache neuen Code zu generieren. So können Entwickler beispielsweise den Prompt „Schreiben Sie eine SQL Query, um den Vor- und Nachnamen eines Kunden aus der Kundentabelle abzurufen“ eingeben und im Gegenzug eine SQL Query erhalten.
Der Einsatz von LLMs zur Codegenerierung kann die Fähigkeiten von unerfahrenen Entwicklern in der Anwendungsentwicklung erheblich verbessern, wobei der Punkt des abnehmenden Nutzens jedoch schnell erreicht ist, wenn die erforderlichen Ausgaben komplexer werden oder wenn der Detaillierungsgrad der Prompts dem zu generierenden Code nahekommt.
Die Optimierung und Überarbeitung von Code, also der Prozess der Verbesserung von Code hin zu mehr Leistung und besserer Strukturierung, kann als Kombination zweier LLM-Funktionen betrachtet werden: Textgenerierung und Textzusammenfassung. Mithilfe eines allgemeinen oder abgestimmten LLM können Entwickler einen Teil des Codes optimieren oder umstrukturieren, um ihn leistungsfähiger zu machen und/oder doppelten Code zu beseitigen.
LLMs eignen sich gut zur Optimierung und zum Überarbeiten kleinerer Codeabschnitte, die in den Kontextbereich der Modelle passen, erfordern aber größere Lösungen, die Metadaten über die gesamte Softwareanwendung verwalten, um akzeptable Ergebnisse bei größeren Codeabschnitten und/oder kompletten Softwaresystemen zu erzielen.
Ähnlich wie bei der Code-Optimierung können LLMs verwendet werden, um Coodierungsstandards von Unternehmen zu Themen wie Funktions- und Variablenbenennung, Codestruktur und internen Codierungskonventionen anzuwenden und durchzusetzen. LLMs werden in der Regel auf Repository-Ebene im Rahmen des Überprüfungs- und Einsatzprozesses des Codes angewandt und sind auf die Codierungsstandards des Unternehmens abgestimmt. Sie können den eingereichten Code so übersetzen, dass er den Unternehmensstandards entspricht. Diese Standards können auch strengere Konventionen beinhalten, die dem Unternehmen helfen, regulatorische Standards einzuhalten.
Da Programmiersprachen wie jede andere Sprache sind, kann die native Textübersetzung von LLMs Software, die in einer Programmiersprache geschrieben wurde, in eine andere übersetzen, zum Beispiel C# in Java konvertieren.
Wie bei der Code-Optimierung eignen sich LLMs allein gut dafür, kleine Codeabschnitte zu konvertieren, die in das Kontextfenster des Modells passen. Es sind jedoch umfassendere Lösungen nötig, die Metadaten und andere wichtige kontextuelle Informationen pflegen, um größere Codeabschnitte oder komplette Softwaresysteme zu konvertieren.
Mithilfe von Code-Konvertierungsfunktionen kann generative KI auch die Übersetzung von Code zwischen verschiedenen Programmiersprachen erleichtern, etwa durch die Übersetzung von COBOL-Code in Java. Dies hilft insbesondere in mehrsprachigen Umgebungen oder bei Systemmigrationen, da es den Entwicklern die Zeit und Mühe erspart, Code manuell neu zu schreiben.
Das Verständnis von Code ist das Äquivalent zur Codegenerierung. Anstatt Prompts in natürlicher Sprache in Code umzuwandeln, nimmt die Code-Erklärung einen Prompt als Eingabe und erzeugt eine Erklärung der Funktionalität des Codes in natürlicher Sprache. Beispielsweise kann ein Prompt wie „Erkläre die Funktion dieses Python-Codes“, gefolgt von einem Python-Abschnitt, eine zeilenweise und allgemeine Zusammenfassung des Zwecks des Codes generieren.
Diese Funktion kann auch zur Erkennung von Fehlern im Code, auch bekannt als Bug Hunting, genutzt werden, indem das Modell aufgefordert wird, „zu erkennen, warum dieser Codeabschnitt fehlschlägt“.
Die API- und Bibliotheksauswahl ist die Anwendung von Retrieval Augmented Generation (RAG) auf die Verwaltung von APIs und Softwarebibliotheken in Unternehmen. Ein Entwickler, der nach einer API sucht, die er mit einer Anwendung verwenden kann, könnte einen Prompt verfassen, der eine Unternehmensdatenbank mit API-Namen, Beschreibungen, Endpunkten usw. abfragt, um Fragen zu beantworten wie: „Haben wir eine API, die xyz macht?“ Soweit API- und Codebibliotheksbeschreibungen mit hoher Qualität und Schlüsselwörtern gepflegt werden, könnte eine solche Anwendung so optimiert werden, dass sie konstante Antworten liefert, die sowohl die Anwendungsentwicklung als auch das Onboarding der Entwickler beschleunigen.
Architekten müssen eine Reihe bedeutender Architekturentscheidungen treffen, wenn sie Lösungen für die Entwicklung von Anwendungen mit LLMs entwerfen.
Bietet das Modell Haftungsfreistellung/Urheberrechtsschutz und wie lässt sich feststellen, ob der generierte Code Lizenzbedingungen unterliegt? Selbst Modelle, die mit freizügigen Lizenzen trainiert wurden, können durch Lizenzklauseln wie die Nennung des ursprünglichen Urheberrechtsinhabers eingeschränkt sein.
Architekten, die Lösungen zur Durchsetzung und Anwendung von unternehmensweiten Codierungsstandards entwickeln, müssen den Aufwand berücksichtigen, der erforderlich ist, um ein LLM so abzustimmen, dass es die Unternehmensstandards „versteht“, und eine fundierte Entscheidung darüber treffen, ob andere Methoden wie Linting-Tools besser geeignet sind, um ähnliche Kompetenzen zu bieten.
Die automatische Vervollständigung von Code muss schnell reagieren, um den Gedankengang der Entwickler nicht zu stören. Architekten müssen die Platzierung und Vernetzung von Entwicklerunterstützungsmodellen berücksichtigen, um sicherzustellen, dass die Unterstützung der Entwickler nützlich und nicht aufdringlich ist.
Große Sprachmodelle garantieren keinen funktional korrekten Code, insbesondere wenn der generierte oder überarbeitete Code in ein größeres Softwaresystem passen muss. Es gibt zwar keine direkte Lösung für dieses Problem (was mit der Weiterentwicklung von LLMs auch immer unbedeutender wird), aber Architekten müssen sich darüber im Klaren sein, dass der von LLMs generierte Code denselben Qualitäts- und Sicherheitskontrollen unterzogen werden muss wie der von menschlichen Entwicklern produzierte Code.
Allgemein verfügbare LLMs werden in der Regel auf einer kleinen Anzahl aktueller Programmiersprachen wie Python, Javascript, C# und anderen trainiert. Lösungsarchitekten, die ältere oder Nischensprachen unterstützen müssen, haben möglicherweise nur wenige Auswahlmöglichkeiten für verfügbare Modelle oder müssen ein Gesamtmodell aggressiv auf ihre spezifischen Bedürfnisse abstimmen.