Je mehr KI-Methoden weiterentwickelt werden, umso mehr Anwendungsgebiete erschließen sich. Was liegt hier näher, als den notorischen Mangel an erfahrenen Programmierern mit KI-Diensten zu reduzieren.
Es klingt etwas paradox, da auch KI-Algorithmen von Ingenieuren programmiert und trainiert werden müssen, die selbst rar gesät sind. Andererseits existieren im Internet und auf Plattformen wie GitHub öffentlich und kostenlos riesige Codesammlungen, die nur darauf warten, analysiert zu werden. Bisher waren das nur Forschungsprojekte, die wenig Einfluss auf den Programmieralltag hatten.
Angefangen hat das Ganze mit Code-Vervollständigung und Code-Vorlagen in den Editoren. Diese waren jedoch eher Suchmaschinen, die zu eingegeben Schlüsselworten und Buchstaben Vorschläge zur Vervollständigung machten. Sie sind bis heute eine wichtige Hilfe für den Weg durch den Programmier-API-Dschungel. Trotzdem konnte es sein, dass man nicht die optimale Implementierung oder sogar eine veraltete verwendete.
Da z. B. die korrekte Verwendung der Verschlüsselungsalgorithmen gar nicht so einfach und immer auch abhängig vom aktuellen Wissensstand ist, gibt es z. B. die Erweiterung CogniCryptGEN für die Eclipse-IDE. Damit kann man sich in der Beantwortung von Fragen durch einen Wizard sich die jeweils passenden Codeblöcke generieren lassen.
Für den Eclipse-Editor gab es eine Editor-Erweiterung, die aus der Verwendung von anderen Java-Entwicklern die wahrscheinlichsten Vorschläge anzeigte, was jedoch mangels guter Datenspenden als Forschungsprojekt wieder eingeschlafen ist und sich nie so richtig durchsetzen konnte. Deswegen wurden als Ergänzung zur nachträglichen Codequalitätssicherung die ersten KI-basierten Werkzeuge wie AWS Code Guru und Profiler eingesetzt.
Damit lassen sich die teuersten Codezeilen einer Anwendung finden und sogar dessen Laufzeitverhalten in den Amazon Diensten EC2, ECS, Fargate, EKS oder Lambda verbessern, indem dessen Vorschläge manuell im AWS Review geprüft und umgesetzt werden. Gleiches gilt für die Verwendung von Sicherheits-Best-Practices für AWS-Dienste, wie KMs oder Verschlüsselung. Neben der kontinuierlichen Überwachung steht das proaktive Identifizieren von Code-Problemen, bevor sie die Produktion erreichen, im Vordergrund. Aber auch das Lernen wird gefördert. Dafür können mit AWS BugBust für Java und Python interne Codebugjäger-Events veranstaltet werden, bei denen Preise ausgelobt werden, die erworbenes Wissen testen.
Der vielversprechendste Ansatz kommt aktuell von GitHub. Mit über 200 Millionen Code Repositories ist es seit vielen Jahren der Platz für viele private Open Source aber auch Unternehmens Codeverwaltungen. Der neueste Dienst, der aktuell noch im Betatest ist, ist GitHub Copilot.
Dieses basiert auf dem OpenAI Codex Deep-Machine-Learning-Modell (DL/ML), was auf dem revolutionären Sprachmodell Generative Pre-trained Transformer 3 (GPT-3) aufsetzt und sich selbständig trainieren kann. Dieses kann natürliche Sprache in Programmiercode für unterschiedliche Programmiersprachen übersetzen. Copilot kann aktuell nur in Visual Code mit Python verwendet werden. Dabei hat Copilot verschieden Anwendungsfälle.
Das Problem mit Codeempfehlungen ist, dass es nicht nur auf Stack Overflow mindestens genauso viele falsche wie gute Empfehlungen gibt. Deswegen ist es für das trainierte Modell wichtig, dies zu berücksichtigen, um keine schlechten Empfehlungen zu machen. Anders als Stack Overflow werden hier keine fertigen Codeschnipsel gespeichert, sondern kontextabhängig für die jeweilige Programmiersprache erzeugt. Je mehr Informationen man dem Copilot gibt, je besser kann er z. B. aus strukturierten Programmspezifikationen im Kommentar fertige Coderümpfe generieren oder alternative Implementierungen anzeigen lassen.
Leider sind die Empfehlungen des Copilot, was die bekannten MITRE’s Top 25 Sicherheitslückenklassen betrifft, nicht auf der Höhe der Zeit. Da auf github selbst auch schlechte Codebeispiele liegen oder inzwischen unsicher gewordene Praktiken immer noch verwendet werden, gilt auch hier der alte Datenverarbeitungsgrundsatz von Garbage-In/out. Hier ist es notwendig, dass nur noch gute Codebeispiele als Trainingsdaten verwendet werden, um die Empfehlungen zu verbessern. https://arxiv.org/abs/2108.09293v2
Neben dem Code wird aber auch die soziale Codequalität immer wichtiger. Hier kann Copilot eingesetzt werden, das sowohl in den Kommentaren als auch in den Commit-Nachrichten nur politisch erlaubte Worte verwendet, was Streit und Klagen vermeidet.
Der GitHub Copilot vermeidet eine schlechte oder unsichere Codequalität. Er erleichtert es aber auch Einsteigern oder Gelegenheitsprogrammierern, von den Erfahrenen zu lernen. Wenn OpenAI Codex es schafft, die Spreu vom Weizen zu trennen und immer bessere Empfehlungen für immer mehr Programmiersprachen zu erzeugen. Damit können auch Neulinge früher produktiver in neue Projekte oder mit neuen Programmiersprachen eingesetzt werden, ohne dass aufwendige Codereviews und -Rafaktorings nötig werden. Copilot soll auch helfen, das passende Testcodegerüst zu erstellen, um eine höhere Testabdeckung zu erreichen.
Die Angst, dass Maschinen die besseren Programmierer werden, sollte hier nicht aufkommen. KI-Methoden können jedoch eine wichtige Rolle bei der unterstützenden Qualitätssicherung und dem Lernen guter Praktiken spielen. Willkommen (Programmier-)Kollege Computer!