Was ist eine Code-Review?
Anfangs handelte es sich bei einer Code-Review um ein Treffen von zwei oder mehr Programmierern, die gemeinsam Code überprüften und Verbesserungen vorschlugen.
Code-Reviews dieser Art finden immer noch statt. Heute wird jedoch davon ausgegangen, dass der Code vor einer manuellen Code-Review bereits andere Tools durchlaufen hat.
Meetings für manuelle Code-Reviews können hilfreich sein, um Fehler in Bezug auf Stil oder Codeeffizienz festzustellen, sie haben jedoch auch Nachteile:
Codeänderungen werden oft abgestempelt, ohne verstanden zu werden.
Die Meinung von Vorgesetzten hat manchmal Vorrang, auch wenn sie unzutreffend sein könnte.
Junior-Entwickler zögern vielleicht, sich zu äußern.
Der Begriff Code-Review bezieht sich auch heutzutage noch auf Codeüberprüfungen von Kollegen, die einen Code auf Fehler oder Stilinkonsistenzen überprüfen.
Doch das geschieht nicht länger bei einem persönlichen Treffen, sondern oft anonym im Internet im Rahmen von Open-Source-Projekten oder bei Versionskontrollsystems. Das Feedback wird in Form von Kommentaren hinterlegt.
Dieses System verkürzt lange und häufige Meetings, ist aber immer noch weitläufig, wenn viele Reviews anstehen. Mit KI hingegen lassen sich manuelle Code-Reviews schneller durchführen oder bei einfachen Änderungen ganz überspringen.
Welche Vorteile bietet der Einsatz von KI für Code-Reviews?
KI-Code-Review-Tools analysieren in der Regel Millionen von Codezeilen, um zu „lernen“, was „gute“ Programmiermethoden ausmacht. Sie geben Programmierern anschließend entsprechende Empfehlungen.
Im Gegensatz zu von Menschen durchgeführten Code-Reviews, bei denen Persönlichkeitskonflikte, Dienstgrad und persönliche Meinungen im Weg stehen können, basieren KI-Code-Reviews ausschließlich auf Daten.
KI-Tools für Code-Reviews können beispielsweise ...
Fehler im Code erkennen, die dazu führen würden, dass er nicht korrekt kompiliert wird.
Stil- oder Best Practice-Fehler feststellen. Der Code erfüllt dabei womöglich seine Funktion aus technischer Sicht, ist aber so codiert, dass er zukünftig vielleicht Probleme verursachen könnte.
Kommentare zu möglichen Veränderungsvorschlägen in den Code einfügen.
Weitere Vorteile von KI-gestützten Code-Reviews
KI kann auch beim eigentlichen Programmieren helfen. Der einzelne Entwickler hat so eine bessere Chance, fehlerfreien Code zu schreiben.
Beispielsweise kann ChatGPT beim Arbeiten an einem Codeblock zu kleineren Code-Reviews und -Verbesserungen verwendet werden.
Codex ist ein weiteres Tool von OpenAI, dem Unternehmen hinter ChatGPT, das explizit bei der Computerprogrammierung helfen soll. Der Zugriff auf das Sprachmodell erfolgt in der Regel über eine API. Zum Beispiel verwendet der KI-Programmierassistent CoPilot von GitHub die Codex-API. Leistungsprobleme lassen sich nur schwer debuggen, da sie auf mehreren Faktoren beruhen könnten. Optimierungen der Anwendungsleistung erfordern in der Regel auch umfassende Code- und Hardware-Reviews, um ein ordnungsgemäßes Debugging zu ermöglichen.
Hinzu kommt heute noch die verteilte Softwarearchitektur. Microservice-Architektur und serverlose Funktionen, die auf verschiedenen Cloud-Plattformen ausgeführt werden, machen Anwendungen zu komplexen Geschöpfen, die ein Debugging aus der Vogelperspektive erfordern. Die Hardware, die diese einzelnen Codesegmente hostet, wirkt sich ebenfalls auf die Debugging-Leistung aus.
Code-Reviews mit KI würden idealerweise Daten aus Beobachtbarkeitsprozessen einbeziehen, die in diese Systeme integriert sind.
New Relic, eine bekannte Beobachtungsplattform, nutzt bereits angewandte Intelligenz – eine Form des maschinellen Lernens –, um Warngeräusche für Kunden zu reduzieren. CodeGuru, der KI-Code-Prüfer von Amazon, analysiert mithilfe von KI riesige Codevolumen. Das Schwesterprodukt CodeGuru Profiler analysiert Anwendungen, die sich bereits in der Produktion befinden. Wir konnten auf den Hilfeseiten von Amazon keine speziellen Angaben dazu finden, ob CodeGuru Profiler KI verwendet, aber es hieß, dass er „intelligente“ Entscheidungen über die Performance einer Anwendung trifft.
Die 5 besten Anwendungsfälle für Code-Reviews mit KI
Code-Reviews können an kleinen Codeabschnitten durchgeführt werden, indem etwas Code in ChatGPT kopiert wird, oder auch an ganzen Codebasen, indem du CodeGuru von Amazon mit deinem Repo verbindest.
Jedes dieser Tools eignet sich für einen anderen Zeitpunkt des Softwareentwicklungszyklus.
Nachfolgend beleuchten wir, welche KI-Code-Review-Tools sich für die folgenden 5 Zeitpunkte eines typischen Softwareentwicklungszyklus am besten eignen:
Pair Programming und KI-unterstütztes Programmieren
Codeanalyse oder „Linting“
Überprüfung von Pull-Requests
Codetests
Codeanalyse, Leistungsüberwachung, Beobachtbarkeit
1. Pair Programming und KI-unterstütztes Programmieren
Pair Programming ist das Programmieren mit einem KI-Tool, das Code vorschlägt, während du programmierst. Solche Tools lassen sich in der Regel in deine IDE (Integrated Development Environment) integrieren.
Ein beauftragter Programmierer kann seine Arbeit mithilfe von KI-unterstützten Programmiertools erheblich schneller und effizienter erledigen. Finde einen Programmierer
IntelliCode
IntelliCode von Microsoft unterstützt Softwareentwickler mithilfe von KI, indem es GitHub nach realen Beispielen für die Verwendung einer bestimmten Funktion in anderen Codeprojekten durchsucht. Das kann für neue Programmierer hilfreich sein, die nach Best Practices für eine bestimmte Funktion suchen.
Es werden jedoch nur integrierte Funktionen durchsucht, nicht deine benutzerdefinierten. Derzeit werden Python, JavaScript/TypeScript und Java unterstützt.
IntelliCode in Aktion.
GitHub CoPilot
Der CoPilot von GitHub ist ein weiteres Tool, mit dem du direkt aus der IDE programmieren kannst. CoPilot wurde in Zusammenarbeit mit OpenAI, den Entwicklern von ChatGPT und Codex, entwickelt.
CoPilot generiert Code aus Kommentaren.
CoPilot hat einen Code richtig debuggt.
Gib die Eingabeaufforderung ein und drücke auf Strg + Eingabetaste an einem PC, und CoPilot macht sich mit Codex an die Arbeit.
ChatGPT
Obwohl sich ChatGPT nicht direkt in die IDE integrieren lässt, ist es ein hervorragendes Hilfsmittel, mit dem du Code ... für dich schreiben,
debuggen und
überprüfen lassen kannst.
Hier sind 3 Beispiele dafür, was ChatGPT in dieser Entwicklungsphase leisten kann:
1. Code neu schreiben
Wir gaben ChatGPT den folgenden Prompt, um ein einfaches Zahlenratespiel in Python zu schreiben (deutsche Übersetzung in Klammern):
„Write a game in Python where the user must guess a number between 1 and 10. The user gets three guesses. If the user wins, the script writes, ‚Well done, you won!‘ After each failed guess, the user sees the message, ‚Sorry, that wasn‘t correct,“ then tell the user if they must type in a higher number or lower number to guess the correct number.“
(Schreibe ein Spiel in Python, bei dem der Benutzer eine Zahl zwischen 1 und 10 erraten muss. Der Benutzer hat drei Versuche. Wenn der Benutzer gewinnt, gibt das Skript die Nachricht „Hurra, du hast gewonnen!“ aus. Nach jedem fehlgeschlagenen Versuch sieht der Benutzer die Meldung „Hoppla, das ging schief!“ und erhält dann eine Information, ob er eine höhere oder niedrigere Zahl eingeben muss, um die richtige Zahl zu erraten.)
ChatGPT programmierte ein einfaches Spiel in Python
Das Spiel funktionierte perfekt!
2. Code debuggen
ChatGPT kann auch Codefehler finden. Wir haben den Code oben geändert und einen schwer zu findenden Fehler eingefügt. Der Programmierer gab die falsche Meldung an den Benutzer ein und wies ihn an, eine höhere, statt einer niedrigeren Zahl zu raten.
Das Aufspüren dieser Arten von Bugs erweist sich in der Regel als ein Albtraum. Sehen wir uns an, wie ChatGPT sich anstellt. Wir gaben den folgenden Prompt ein:
„The following code doesn‘t work. I try and guess the number but I never get it right. What is the bug?“ (Der folgende Code funktioniert nicht. Ich versuche, die Zahl zu erraten, aber ich bekomme sie nie richtig. Was ist der Fehler?)
Und Tada: ChatGPT fand tatsächlich den Fehler!
Manuell eingefügter Bug.
Umwerfende Debugging-Funktionalität von ChatGPT.
3. Code dokumentieren
Programmierer sind schrecklich darin, ihren Code zu kommentieren, ganz zu schweigen davon, ihn zu dokumentieren. Wir haben ChatGPT aufgefordert, den obigen Code zu dokumentieren.
Hervorragende Codedokumentation mit ChatGPT.
In PHP kannst du Dokumentation mit PHPDoc generieren. Wir baten ChatGPT, den Code in PHP zu konvertieren und Kommentare im PHPDoc-Stil einzufügen, die später in Dokumentation konvertiert werden können.
ChatGPT konvertiert Python-Code in PHP und fügt Kommentare im PHPDoc-Stil ein.
Diese Funktionen erleichtern das Lesen und Überprüfen von Code. Sie sorgen auch dafür, dass sich während der Entwicklung weniger Fehler einschleichen. So hat der Programmierer mehr Zeit und kann sich effektiver auf die wichtigen Aufgaben konzentrieren, anstatt nach schwer zu findenden Bugs zu suchen.
Es gibt eine häufige Fehlannahme im Zusammenhang mit generativen KI-Tools, egal ob in den Bereichen Texterstellung, Bildgenerierung oder Programmierung: nämlich, dass KI die Lösung für alle Probleme ist.
Das ist sie nicht! Aber sie kann den Prozess sicherlich beschleunigen.
Sobald die KI ihre Arbeit erledigt hat, sollte das Ergebnis von einem Profi, wie einem KI-Lektor oder einem Programmierer, geprüft werden. Finde einen Programmierer
2. Codeanalyse oder „Linting“
„Linting“ bezeichnet die Analyse statischer Quellcodedateien und die Suche nach Fehlern. Linting existierte bereits lange vor der Integration von KI, aber mit KI wird dieses Code-Review-Tool auf ein ganz neues Niveau gebracht.
Vor KI war Linting auf das Auffinden von Syntaxfehlern, fehlenden Codereferenzen und -importen sowie anderen sprachspezifischen Fehlern begrenzt. Mit KI kann Linting Code jetzt mit Millionen von Quellcodezeilen in seinen Datenbanken vergleichen.
Mit einer „Idealcode“-Library in ihren Speicherbänken kann die KI Änderungen auf Basis von Best Practices vorschlagen.
Linting-/statische Analysetools sind unter anderem:
Snyk (vormals DeepCode)
Amazon CodeGuru
ChatGPT und Codex
Snyk (DeepCode) schöpft aus mehr als 200.000 Open-Sourcecode-Repositories und lernt aus ihnen. Es verwendet sowohl symbolische KI – also KI, die sich auf die Ermittlung von Korrelationen zwischen mathematischen Symbolen konzentriert – als auch maschinelles Lernen (ML), um seine Aufgabe zu erfüllen.
Snyk (DeepCode) wird mit GitHub synchronisiert.
Snyk hat keine Schwachstellen in dem Code entdeckt, den wir ihm gesendet haben, also haben wir etwas wirklich schlechte PHP-Programmierung hinzugefügt. Snyk hat die Datei sofort geflaggt, nachdem sie zum Repository hinzugefügt wurde.
Snyk hat ein sehr gefährliches Stück Code in unserer PHP-Datei gefunden!
Amazon CodeGuru
CodeGuru von Amazon ist ein leistungsstarkes Tool, das Einzelpersonen und kleinen Unternehmen die gleiche Leistung bietet wie Großunternehmen. Nach der Registrierung verbindest du dein Code-Repository mit CodeGuru und das Tool beginnt sofort, jeden Aspekt davon zu analysieren.
Amazon CodeGuru analysiert ein Repository.
CodeGuru analysiert deine gesamte Codebasis und gibt Empfehlungen.
Wir haben unser Testprojekt-Repository analysiert und CodeGuru hat Verbesserungen empfohlen. Du kannst auch eine Code-Review an einer bestimmten Fork (einer eigenständigen Kopie des Projekts) durchführen.
CodeGuru-Codeanalyse.
CodeGuru ist zweifellos eines der leistungsfähigsten KI-Code-Review-Tools auf dem Markt.
Idealerweise würde vor der endgültigen Freigabe auch eine Prüfung durch einen Menschen stattfinden. Diese abschließende Prüfung würde auch viel schneller gehen, da die KI die mühsamen Aufgaben bereit erledigt hat. Bei Fiverr findest du viele fachkundige Codeprüfer, die dich bei einer abschließenden Prüfung deines Codes unterstützen können. 3. Überprüfung von Pull-Requests
Dies ist der Punkt, an dem eine „Code-Review“ im eigentlichen Sinn des Begriffs angebracht wäre. Um die Wahrscheinlichkeit zu verringern, dass fehlerhafter Code im Haupt-Branch committet wird, wurden Versionskontrollsysteme in den Softwareentwicklungszyklus eingefügt.
Es gibt Tools, die den Code in dieser anfänglichen Phase der Code-Review automatisch überprüfen und so den Entwicklern viel wertvolle Zeit sparen wie beispielsweise:
Codeball: ist zur Review von Pull-Requests direkt in GitHub integrierbar und generiert auch automatisch Code anhand der Kommentare anderer Prüfer.
WhatTheDiff: stellt KI-generierte Zusammenfassungen von Pull-Request-Änderungen bereit, sodass du sie nicht selbst erstellen musst. Das Tool arbeitet den Code außerdem entsprechend den menschlichen Anweisungen um.
ChatGPT und Codex: manuelle Code-Reviews (obwohl Codex wahrscheinlich über ein API verwendet würde und die Möglichkeiten hier endlos sind).
Amazon CodeGuru: für umfassende Prüfungen, nicht notwendigerweise pro Pull-Request.
WhatTheDiff erkennt Änderungen automatisch und kommentiert sie dann in einem GitHub Pull-Request.
Wir forderten ChatGPT auf, zwei Codedateien zu vergleichen, und die Antwort war leider etwas zu wortreich. Das liegt daran, dass ChatGPT nicht speziell für Programmieraufgaben, sondern für das Generieren menschlicher Sprache geschult ist.
Wortreiche Antwort von ChatGPT auf die Aufforderung, zwei Codedateien zu vergleichen.
4. Codetests
Egal, wie gut dein Code aussieht, jeder Code muss getestet werden. Unter anderem die folgenden automatisierten Testplattformen nutzen KI zum Testen von Anwendungen:
Da es sich hier nicht um Code-Review-Tools an sich handelt, werden wir sie nicht eingehender betrachten. Sie sind aber erwähnenswert, weil sie den gesamten Softwareentwicklungszyklus beschleunigen und verbessern.
Nach Abschluss der automatisierten Tests musst du die Software manuell testen und Benutzerfeedback erhalten. Ziehe in Betracht, Experten für Usability-Tests mit diesen manuellen Prüfverfahren zu beauftragen. 5. Codeanalyse, Leistungsüberwachung, Beobachtbarkeit
Abschließend noch etwas zur Beobachtbarkeit, das heißt, das Begreifen der internen Zustände eines Systems anhand der Untersuchung seiner externen Ausgaben.
Amazon CodeGuru Profiling passt in diese Rubrik. Wir sind uns jedoch nicht ganz sicher, welchen Grad an KI das Tool derzeit verwendet.
Bei Beobachtbarkeit geht es aber vor allem um Daten. Ein betriebseigenes Datenanalysetool könnte diese Ausgaben im Vergleich mit vordefinierten Maßstäben analysieren, um Anomalien und verbesserungsfähige Bereiche zu ermitteln. Betriebseigene KI-Tools könnten diese Ausgaben überwachen.
Vermeide diese Fehler bei der Verwendung von KI für Code-Reviews
Es ist falsch zu glauben, dass KI alle Probleme lösen kann.
„Ich sehe KI ähnlich wie Jarvis in Iron Man“, sagt Erol Toker von truly.co, einem Unternehmen, das mit KI-gestützten Bots für die Automatisierung von Umsätzen sorgt. „Sie ist intelligent, um das Was zu finden, aber nicht das Warum. Ich nutze KI deshalb sowohl zum Schreiben von Code als auch für Code-Reviews, um Dinge zu verstehen wie ‚Was macht der Code?‘, und ‚welche Best Practices wurden nicht befolgt?‘. Wenn ich das einmal weiß, kann ich mich mehr auf abstrakte Logik konzentrieren. Was sind die Extremfälle? Ist der Ansatz oder die Codestruktur richtig?“
Egal, welche Branche, das größte Problem von KI besteht darin, zu viel Vertrauen in sie zu setzen. Diese Technologie steckt noch tief in den Kinderschuhen. ChatGPT hat große Begeisterung hervorgerufen, aber wir sind weit von den Fähigkeiten entfernt, die wir von KI erwarten.
Experten haben wiederholt vor der Neigung von Sprachmodellen zu Halluzinationen gewarnt. Manchmal generieren diese KI-Systeme Antworten, die nicht auf Daten basieren, mit denen sie gefüttert wurden.
KI-Programmiertools basieren auf ähnlichen Sprachmodellen wie diese „halluzinatorischen“. Das bedeutet nicht, dass KI-Programmiertools nicht verwendet werden sollten. Meistens machen sie es richtig.
Ihr Code sollte aber immer von einem Menschen überprüft werden.
Best Practices für eine KI-gestützte Code-Review
Für eine KI-gestützte Code-Review sollten die folgenden Best Practices befolgt werden:
KI ist ein Werkzeug: Also nutze es als solches. Sie soll die menschlichen Fähigkeiten erweitern, nicht ersetzen.
Verstehe jede Veränderung und jeden Vorschlag der KI: Übernimm keine Änderungen, die du nicht selbst nachvollziehen kannst. So wirst du auch ein besserer Programmierer.
Nutze den „pessimistischen“ Modus: Sollte dein Tool darüber verfügen, verwende lieber diesen Modus, anstatt automatisierte Änderungen bei der KI-Code-Review zu optimistisch zu betrachten.
Code zu kommentieren ist für viele Programmierer ein Schwachpunkt: Verwende KI-Code-Review-Tools, um beim Kommentieren zu helfen.
Verzichte nicht auf manuelle und automatisierte Tests am Code: Die mit KI-Code eingesparte Zeit solltest du für eingehendere Tests verwenden.
Beauftrage einen Freiberufler für KI oder Softwareentwicklung auf Fiverr
Möchtest du dieses Jahr eine App oder Software entwickeln? Dann reduziere deine Arbeitsabläufe durch die Zusammenarbeit mit einem erfahrenen KI- und ML-Experten auf Fiverr. So sparst du Zeit, um dich auf wichtigere Dinge zu konzentrieren, zum Beispiel auf die Entwicklung deiner tollen neuen Plattform.
Fiverr ist ein professioneller Marktplatz von Experten, wie freiberuflichen Programmierern. Unsere KI-Spezialisten sind außergewöhnlich gut darin, KI-Modelle zu verstehen und wie sie sich am besten für KI-Code-Reviews und KI-unterstützte Entwicklung nutzen lassen. 