Simple Science

Hochmoderne Wissenschaft einfach erklärt

# Computerwissenschaften# Software-Entwicklung# Künstliche Intelligenz# Maschinelles Lernen

Die Rolle von KI in der Softwareentwicklung

Eine Analyse von KI-Tools im Programmieren und ihren Einschränkungen.

― 8 min Lesedauer


KI-Tools im Code: LohntKI-Tools im Code: Lohntsich das?Programmieren bewerten.Die Rolle von KI im modernen
Inhaltsverzeichnis

KI-Tools für Programmierung, wie GitHub Copilot und andere, sind in den letzten Jahren echt wichtig geworden. Sie helfen Softwareentwicklern, indem sie Vorschläge für Code basierend auf dem, was sie gerade schreiben, geben. Diese Tools können sogar besser abschneiden als viele Menschen, wenn's um Programmierherausforderungen geht. Aber Software Engineering ist mehr als nur Code schreiben; es geht darum, Probleme zu verstehen, bewährte Methoden zu befolgen und Software gut zu gestalten.

In diesem Artikel schauen wir uns an, wie KI-Tools aktuell arbeiten, wo sie gut abschneiden und wo ihre Grenzen liegen. Wir werden untersuchen, wie Tools wie Copilot Code vorschlagen, wie sie sich mit verschiedenen Programmiersprachen schlagen und welche Herausforderungen sie haben, wenn die Softwareerstellung komplexer wird.

Was sind KI-Code-Vervollständigungstools?

Code-Vervollständigungstools sind dafür gemacht, Entwicklern zu helfen, indem sie vorhersagen, was sie als Nächstes schreiben möchten. Diese Tools können Vorschläge für Variablenamen, Methoden oder sogar ganze Codeblöcke machen. Sie verwenden grosse Sprachmodelle, die auf einer riesigen Menge an Quellcode trainiert wurden, um relevante Vorschläge zu generieren.

GitHub Copilot ist eines der bekanntesten Tools in diesem Bereich. Es nutzt ein neuronales Sprachmodell, das von OpenAI erstellt wurde. Dieses Modell ist trainiert, um den Kontext des geschriebenen Codes zu verstehen und kann Code vorschlagen, der in diesen Kontext passt. Wenn ein Entwickler zum Beispiel anfängt, eine Funktion zu schreiben, kann Copilot den Rest der Funktion basierend auf seinen Trainingsdaten vorschlagen.

Leistung von KI-Tools

Obwohl KI-Tools wie Copilot effektiv vorhersagen können, was ein Entwickler schreiben möchte, bieten sie nicht immer die besten oder passendsten Lösungen. Manchmal schlagen sie Code vor, der nicht den besten Praktiken oder gängigen Programmieridioden folgt, was zu Problemen führt, die als „Code Gerüche“ bekannt sind.

Code Gerüche sind Indikatoren für mögliche Probleme im Code. Sie sind keine Bugs, aber sie können Schwächen oder Bereiche anzeigen, die für eine bessere Wartbarkeit, Lesbarkeit und Leistung verbessert werden könnten.

Wenn Copilot zum Beispiel einen Weg vorschlägt, um eine Liste zu sortieren, der unnötige Schritte beinhaltet oder effizienter gemacht werden könnte, sieht man das als Mangel an qualitativ hochwertigen Vorschlägen.

Was sind Programmieridiome und bewährte Praktiken?

Programmieridiome sind etablierte Methoden, um häufige Probleme in der Softwareentwicklung zu lösen. Sie repräsentieren die bekanntesten Methoden, die erfahrene Entwickler nutzen, um sauberen, effizienten und lesbaren Code zu schreiben. Einige Idiome sind spezifisch für Programmiersprachen, während andere allgemeiner sind.

Bewährte Praktiken sind Richtlinien, die Entwicklern helfen, Code zu schreiben, der wartbar, sicher und effizient ist. Sie decken verschiedene Themen ab, wie z. B. wie man Code strukturiert, wie man Fehler behandelt und wie man die Leistung optimiert.

Beispielsweise ist es in Python idiomatischer, List Comprehensions zu verwenden, um eine Liste basierend auf einer anderen Liste zu erstellen, als eine for-Schleife zu nutzen. Wenn ein Tool den idiomatischen Ansatz nicht vorschlägt, hilft es dem Entwickler nicht, den bestmöglichen Code zu schreiben.

Untersuchung von Copilots Vorschlägen

Um zu bewerten, wie gut Copilot abschneidet, können wir uns anschauen, wie es mit Python und JavaScript umgeht. Wir konzentrieren uns darauf, wie gut es Programmieridiome befolgt und Code-Gerüche in seinen Codevorschlägen für diese beiden Sprachen vermeidet.

Leistung in Python

In Tests wurde festgestellt, dass Copilot nur in 8 % der Fälle den idiomatischen Ansatz für die untersuchten Python-Ideome vorgeschlagen hat. Das zeigt, dass es Schwierigkeiten hat, die gängigsten und akzeptierten Methoden in Python zu präsentieren. Tatsächlich tauchten 15 von 25 getesteten Idiomen überhaupt nicht in den Top-Vorschlägen auf.

Wenn zum Beispiel das Idiom für List Comprehension getestet wurde, schlug Copilot stattdessen eine for-Schleife vor. Das ist ein weniger effizienter Ansatz als die prägnantere Art, List Comprehensions zu verwenden. Auch wenn es vielleicht funktioniert, ist es nicht die bevorzugte Methode in Python.

Copilot hat bei bestimmten Idiomen, die in den Trainingsdaten häufiger vorkommen, besser abgeschnitten. Wenn die idiomatische Lösung unter den am häufigsten verwendeten Snippets ist, ist Copilot eher geneigt, sie bereitzustellen.

Leistung in JavaScript

Bei Tests mit bewährten JavaScript-Praktiken aus einem bekannten Coding-Style-Guide fiel Copilot erneut zurück. Es empfahl nur in 3 von 25 Fällen die beste Praxis, die im Leitfaden vorgeschlagen wurde. Das zeigt eine signifikante Unfähigkeit, Ansätze vorzuschlagen, die mit den etablierten Kodierungsstandards übereinstimmen.

Wenn man beispielsweise gefragt hat, wie man die Inhalte eines Arrays kopiert, schlug Copilot eine ineffiziente Methode vor, die eine Schleife zur Iteration durch jedes Element beinhaltete. Die empfohlene Methode, die den Spread-Operator nutzt, ist viel schneller und sauberer. Diese Lücke zeigt, dass, obwohl Copilot korrekte Syntax anbieten kann, es oft die Gelegenheit verpasst, bessere Praktiken vorzuschlagen.

Verständnis der Einschränkungen

KI-Tools glänzen darin, Code zu erzeugen, der kompiliert und korrekt ausgeführt wird, haben aber Schwierigkeiten mit komplexeren Konzepten wie Codequalität, Designmustern und bewährten Praktiken. Die Komplexität der Softwareentwicklung erfordert ein tieferes Verständnis als nur Syntax.

Wenn Entwickler an komplexeren Projekten arbeiten, brauchen sie Tools, die ihnen sowohl bei architektonischen Entscheidungen als auch bei einzelnen Code-Snippets helfen. Copilot kann diese höheren Anforderungen momentan nicht effektiv erfüllen.

Herausforderungen bei der Vorschlagqualität

Eine grosse Herausforderung für Copilot ist die Trainingsdaten. Viele KI-Tools lernen aus bestehenden Code-Repositories, die nicht immer den besten Praktiken folgen. Das führt zu Vorschlägen, die die Qualität der Trainingsdaten widerspiegeln, statt die Qualität der Kodierungsstandards.

Ausserdem gibt es aufgrund der Closed-Source-Natur von Copilot keinen Weg zu sehen, wie es trainiert wurde oder um die Anwesenheit bestimmter Idiome oder Praktiken in seinen Trainingsmaterialien zu überprüfen. Das schränkt unsere Fähigkeit ein, zu verstehen, warum bestimmte Vorschläge gemacht werden und wie sie verbessert werden können.

Bedarf an Multi-Datei-Kontext

Eine weitere Einschränkung ist die fehlende Fähigkeit, den breiteren Kontext eines Projekts zu berücksichtigen. Copilot analysiert derzeit einzelne Dateien oder Codeblöcke, kann aber nicht sehen, wie sie in das grössere System passen. Das bedeutet, dass es keine Designmuster vorschlagen kann, die Eingaben aus mehreren Dateien erfordern.

Beispielsweise sollte im typischen Model-View-Controller (MVC)-Architektur das Modell nicht direkt mit der Ansicht kommunizieren. Wenn Copilot den breiteren Projektkontext nicht versteht, könnte es Code vorschlagen, der dieses Prinzip verletzt.

Verbesserungsbedarf

Um komplexere Software-Design-Aufgaben zu unterstützen, müssen KI-Tools über einfache Codevorschläge hinausgehen. Sie müssen die Softwarearchitektur verstehen und in der Lage sein, relevante Vorschläge basierend auf der Gesamtstruktur des Projekts zu machen.

Verbesserung der Trainingsdaten

Eine Möglichkeit, KI-Tools zu verbessern, besteht darin, sich auf die Sammlung qualitativ hochwertiger Trainingsdaten zu konzentrieren. Das könnte beinhalten, schlecht geschriebenen Code aus den Datensätzen auszuschliessen oder Repositories, die guten Praktiken folgen, Priorität einzuräumen. Eine starke Basis guter Beispiele wird der KI helfen, bessere Vorschläge zu produzieren.

Darüber hinaus könnte die Einführung verifizierter Quellen wie renommierter Codierungsdokumentationen oder -richtlinien ebenfalls die Qualität der Vorschläge verbessern, indem sichergestellt wird, dass sie mit anerkannten bewährten Praktiken übereinstimmen.

Zusammenarbeit mit anderen Tools

KI-Tools könnten auch mit bestehenden Code-Analysetools zusammenarbeiten, die Code-Gerüche identifizieren oder Verbesserungen vorschlagen. Durch die Integration dieser Tools könnte die KI den Nutzern Vorschläge machen, die nicht nur kompiliert werden, sondern auch Qualitätsstandards erfüllen.

Wenn man Copilot mit Tools wie SonarQube kombiniert, könnte das bedeuten, dass Vorschläge für Qualität gefiltert werden, bevor sie dem Entwickler präsentiert werden, was potenziell zu besseren Programmierergebnissen führen könnte.

Mögliche zukünftige Richtungen

Die Zukunft der KI-unterstützten Programmierung könnte dazu führen, dass Codierung für alle zugänglicher wird, einschliesslich für diejenigen, die neu in der Programmierung sind. Diese Tools könnten Vorschläge machen, die gute Programmiergewohnheiten fördern und Entwicklern helfen, ihre Fähigkeiten zu verbessern.

Es besteht jedoch auch ein Bedarf an Vorsicht. Wenn diese Modelle besser werden, könnten sie unbeabsichtigt schlechte Gewohnheiten verstärken, wenn sie nicht richtig trainiert werden. Automatisierungs-Bias, bei dem Entwickler blind den Vorschlägen einer KI vertrauen, könnte dazu führen, dass Software nicht den Qualitätsstandards entspricht.

Es gibt auch Möglichkeiten, wie sich diese Modelle von der Erstellung einfacher Code-Snippets weiterentwickeln könnten, um Einblicke in komplexere Softwarearchitekturen zu bieten. Vielleicht schlagen sie eines Tages Designmuster und bewährte Praktiken basierend auf den spezifischen Bedürfnissen eines Projekts vor und verbessern so den gesamten Softwareentwicklungsprozess.

Fazit

KI-Tools wie GitHub Copilot machen Fortschritte, um die Softwareentwicklung zu unterstützen, indem sie Codevorschläge bieten. Es gibt jedoch erhebliche Einschränkungen in ihrem aktuellen Zustand, insbesondere hinsichtlich der Codequalität, der bewährten Praktiken und des Verständnisses komplexer Projektstrukturen.

Während diese Tools sich weiterentwickeln, gibt es einen klaren Bedarf, ihre Trainingsmethoden zu verbessern, bessere Vorschläge zu bieten und sich den Komplexitäten des Softwaredesigns anzupassen. Das Ziel ist es, Entwicklern zu helfen, qualitativ hochwertige Software zu erstellen und gleichzeitig das Risiko schlechter Programmierpraktiken zu minimieren.

Originalquelle

Titel: From Copilot to Pilot: Towards AI Supported Software Development

Zusammenfassung: AI-supported programming has arrived, as shown by the introduction and successes of large language models for code, such as Copilot/Codex (Github/OpenAI) and AlphaCode (DeepMind). Above human average performance on programming challenges is now possible. However, software engineering is much more than solving programming contests. Moving beyond code completion to AI-supported software engineering will require an AI system that can, among other things, understand how to avoid code smells, to follow language idioms, and eventually (maybe!) propose rational software designs. In this study, we explore the current limitations of AI-supported code completion tools like Copilot and offer a simple taxonomy for understanding the classification of AI-supported code completion tools in this space. We first perform an exploratory study on Copilot's code suggestions for language idioms and code smells. Copilot does not follow language idioms and avoid code smells in most of our test scenarios. We then conduct additional investigation to determine the current boundaries of AI-supported code completion tools like Copilot by introducing a taxonomy of software abstraction hierarchies where 'basic programming functionality' such as code compilation and syntax checking is at the least abstract level, software architecture analysis and design are at the most abstract level. We conclude by providing a discussion on challenges for future development of AI-supported code completion tools to reach the design level of abstraction in our taxonomy.

Autoren: Rohith Pudari, Neil A. Ernst

Letzte Aktualisierung: 2023-03-07 00:00:00

Sprache: English

Quell-URL: https://arxiv.org/abs/2303.04142

Quell-PDF: https://arxiv.org/pdf/2303.04142

Lizenz: https://creativecommons.org/licenses/by/4.0/

Änderungen: Diese Zusammenfassung wurde mit Unterstützung von AI erstellt und kann Ungenauigkeiten enthalten. Genaue Informationen entnehmen Sie bitte den hier verlinkten Originaldokumenten.

Vielen Dank an arxiv für die Nutzung seiner Open-Access-Interoperabilität.

Mehr von den Autoren

Ähnliche Artikel