Produziert dein KI-Code nur MÜLL? (So behebst du es)

BBetter Stack
컴퓨터/소프트웨어경영/리더십AI/미래기술

Transcript

00:00:00Heute möchte ich über CRAP sprechen. Und nein, nicht diese Art von CRAP. Ich spreche über die
00:00:05Abkürzung, die für Change Risk Anti-Patterns Index steht. Und er wurde entwickelt, um
00:00:12riskante Funktionen in deinem Code zu finden, die hochkomplex, aber schlecht getestet sind. Es ist kein besonders
00:00:18neues Konzept, aber eines, das in letzter Zeit meine Aufmerksamkeit erregt hat, dank eines Pakets,
00:00:24das von Alexander Prokhoranko veröffentlicht wurde und Cargo CRAP heißt und diese Schlüsselfunktionen in Rust-Code identifiziert.
00:00:31Die ursprüngliche Idee für die CRAP-Metrik stammt von Alberto Savoia und Bob Evans, die die
00:00:37Metrik bereits 2007 bei Experimenten mit automatisierten Entwickler-Testtools erfanden. Aber Alexander
00:00:44hat kürzlich die Aufmerksamkeit auf diese vergessene Metrik gelenkt, indem er diesen aufschlussreichen Blogbeitrag darüber
00:00:49schrieb und darüber, wie heutzutage, wo fast der gesamte Code von KI-Agenten geschrieben wird, es wichtiger denn je ist,
00:00:55deine Codebasis auf diese verborgenen Probleme zu scannen. Es ist ein sehr cooles Konzept und wir werden es
00:01:01im heutigen Video genauer untersuchen. Also lass uns eintauchen. Um zu verstehen, warum das wichtig ist, schauen wir uns
00:01:11diese Funktion auf meinem Bildschirm an. Sie verarbeitet eine mehrstufige Datentransformation mit tief verschachtelten Match-
00:01:16Anweisungen, einigen Schleifen und vielen Fehlerbehandlungspfaden. Die zyklomatische Komplexität ist also recht hoch, etwa 15.
00:01:24Wenn du mit dem Begriff zyklomatische Komplexität nicht vertraut bist: Es ist im Grunde eine schicke Art, zu messen,
00:01:30wie viele verschiedene Wege ein Datensatz durch deinen Code nehmen kann. Jedes Mal, wenn du eine if-Anweisung
00:01:36oder ein Match oder eine while-Schleife oder einen catch-Block schreibst, erzeugst du eine Abzweigung, und je mehr Abzweigungen du hast,
00:01:43desto höher steigt der Komplexitätswert. Und desto schwieriger wird es für ein menschliches Gehirn, jedes einzelne mögliche Ergebnis
00:01:51in einer Funktion nachzuvollziehen. Deshalb versuchen wir, Funktionen nach Möglichkeit in kleinere Aufgaben aufzuteilen.
00:01:57Und bei dieser Funktion auf meinem Bildschirm bedeutet eine Komplexität von 15, dass es 15 völlig getrennte Pfade gibt,
00:02:04die diese Logik von Anfang bis Ende ausführen kann. Wenn diese Funktion nun vollständig durch Unit-Tests abgedeckt ist,
00:02:09bleibt ihr Crap-Score bei 15. Sie ist komplex, aber sicher, weil wir ihr Verhalten validieren.
00:02:16Und das sollten wir erwarten, wenn wir Alexanders Tool, CargoCrap, ausführen. Und hier sehen wir, dass der Score 13 ist,
00:02:23nicht 15. Das liegt wahrscheinlich daran, dass die Bibliothek die Fehlerbehandlungen nicht berücksichtigt hat.
00:02:27Aber wie dem auch sei, 15 und 13 liegen ziemlich nah beieinander. Dieses Tool tut also im Grunde, was wir erwarten.
00:02:33Aber schauen wir uns an, was passiert, wenn jemand diese Tests löscht oder wenn ein KI-Agent diese Funktion
00:02:39von Grund auf neu generiert und das Schreiben von Tests komplett überspringt. In diesem Beispiel kommentiere ich also einfach meine Tests aus.
00:02:45Und wenn wir CargoCrap erneut ausführen, schießt dieser Score plötzlich über 100.
00:02:51Er verwendet also eine einfache Formel, um das Risiko zu berechnen, wobei die zyklomatische Komplexität,
00:02:57die Anzahl der linearen Ausführungspfade durch deinen Code, gegen die Testabdeckung abgewogen wird.
00:03:03Wenn wir uns also diese Funktion ansehen, ist C die zyklomatische Komplexität der Funktion und COV die Testabdeckung,
00:03:10ausgedrückt als Bruch zwischen null und eins. Und die mathematische Formel bestraft komplexen Code, dem Tests fehlen, massiv.
00:03:17Wenn deine Abdeckung also hundert Prozent beträgt, fällt der gesamte erste Teil der Gleichung auf null
00:03:23und dein CRAP-Score entspricht einfach deiner zyklomatischen Komplexität.
00:03:26Aber wenn deine Abdeckung sinkt, führt der kubische Exponent auf der linken Seite dazu, dass der Risikowert in die Höhe schießt.
00:03:33Und eine Funktion mit einer Komplexität von 10 und null Abdeckung ergibt einen CRAP-Score von 110.
00:03:39Und das ist gut, denn wenn du eine Codebasis willst, in der beispielsweise
00:03:43keine Funktion eine zyklomatische Komplexität von fünf überschreitet, dann ist dies dein grundlegender Maßstab.
00:03:49Und wenn eine Funktion höher als fünf ist, weißt du, dass dies der Bereich ist, auf den du achten musst.
00:03:55Normalerweise würdest du eine höhere Komplexität zulassen. CargoCrap hat einen Standardwert von 30.
00:04:00Aber ich sage nur, dass du diesen Wert selbst festlegen kannst, wie du möchtest.
00:04:05Das ist also im Grunde eine gute Metrik für die Mitte, die man im Auge behalten sollte.
00:04:09Und das wird im Zeitalter von KI-generiertem Code kritisch.
00:04:13Denn KI-Agenten sind unglaublich gut darin, diese hochkomplexen, syntaktisch korrekten Codeblöcke
00:04:20auszuspucken, die Randfälle behandeln, an die du nicht einmal gedacht hast, aber sie sind notorisch schlecht darin, aussagekräftige,
00:04:25robuste Integrationstests zu schreiben, sofern sie nicht explizit dazu gezwungen werden.
00:04:30Tools wie CargoCrap sollen also als zweite Prüfung nach dem Ausführen aller Unit-Tests eingesetzt werden,
00:04:37um die allgemeine Codequalität zu bewerten.
00:04:39Es fungiert also im Grunde wie eine Heatmap für deine technischen Schulden und zeigt dir direkt den Code,
00:04:44der bei einem Refactoring am ehesten kaputtgehen könnte.
00:04:47Und das ist auch besonders hilfreich, wenn du deine Codebasis gut strukturiert halten willst,
00:04:52für den Fall, dass du einen neuen Ingenieur in dein Team aufnehmen musst.
00:04:56Und wir wissen aus anekdotischen Berichten, wie wahnsinnig aus dem Ruder Codebasen laufen können mit all diesem
00:05:02KI-generierten Code heutzutage, wenn wir nicht darauf achten.
00:05:06Und manchmal neigen diese KI-Agenten auch dazu, dieselbe Funktion in mehreren Dateien zu duplizieren.
00:05:13Ich denke also, dass Tools wie diese und vor allem Methoden wie diese wichtig sind, um sich ihrer bewusst zu sein
00:05:19und sie in unserer modernen Coding-Landschaft nicht zu vergessen, um unsere Codequalität hochzuhalten.
00:05:24Die gleichen Autoren, die diese Methode entwickelt haben, veröffentlichten auch ein CRAP-Metrik-Tool für Java.
00:05:30Und ehrlich gesagt, war ich mir dieser Metrik bis zum kürzlichen Lesen von Alexanders Blogbeitrag gar nicht bewusst.
00:05:34Ich bin also dankbar, dass sein Tool mich auf diese längst vergessene Ingenieurspraxis aufmerksam gemacht hat.
00:05:40Und ich bin sicher, dass auch andere Programmiersprachen von einem solchen Tool profitieren würden.
00:05:44Wenn du also an ein lustiges Projekt denkst, das du in deiner Freizeit bauen kannst,
00:05:48lies Alberto Savoias ursprünglichen Beitrag und baue eines für eine andere Programmiersprache,
00:05:53denn es könnte ein sehr nützliches Hilfsmittel für viele Entwickler sein.
00:05:57Also, da habt ihr es, Leute.
00:05:58Das ist CRAP in aller Kürze.
00:06:01Das klang lustig.
00:06:02Wie dem auch sei, was sind einige andere längst vergessene Ingenieurspraktiken oder Metriken, die du kennst,
00:06:08denen wir in diesem neuen Zeitalter des agentenbasierten Codings mehr Aufmerksamkeit schenken sollten?
00:06:13Lass es uns unten in den Kommentaren wissen.
00:06:15Und Leute, wenn ihr diese Art von technischen Analysen mögt,
00:06:18lasst es mich wissen, indem ihr diesen Like-Button unter dem Video zerschmettert.
00:06:21Und vergesst auch nicht, unseren Kanal zu abonnieren.
00:06:24Das war Andrus von BetterStack und wir sehen uns in den nächsten Videos.
00:06:28Wir sehen uns in den nächsten Videos.

Key Takeaway

Der CRAP-Score dient als essenzielles Diagnose-Tool für KI-generierten Code, indem er riskante, hochkomplexe Funktionen ohne ausreichende Testabdeckung mathematisch identifiziert und so technische Schulden quantifizierbar macht.

Highlights

  • Der Change Risk Anti-Patterns Index (CRAP) bewertet das Risiko von Code anhand der zyklomatischen Komplexität im Verhältnis zur Testabdeckung.

  • Die zyklomatische Komplexität misst die Anzahl linearer Ausführungspfade, wobei komplexe logische Strukturen wie verschachtelte Match-Anweisungen den Wert erhöhen.

  • Die mathematische Formel für den CRAP-Score bestraft mangelnde Testabdeckung bei komplexem Code überproportional durch einen kubischen Exponenten.

  • Eine Funktion mit einer zyklomatischen Komplexität von 10 und einer Testabdeckung von 0 Prozent erzielt einen CRAP-Score von 110.

  • CargoCrap identifiziert kritische, schlecht getestete Funktionen im Rust-Code und fungiert als Heatmap für technische Schulden.

  • KI-Agenten generieren häufig komplexen Code, vernachlässigen dabei jedoch regelmäßig die Erstellung robuster Integrationstests.

Timeline

Grundlagen des CRAP-Index

  • Der CRAP-Index steht für Change Risk Anti-Patterns Index.
  • Das Tool CargoCrap wurde entwickelt, um riskante Funktionen in Rust-Code zu identifizieren.
  • Die Metrik wurde 2007 von Alberto Savoia und Bob Evans zur Bewertung automatisierter Tests entwickelt.

Die Metrik dient dazu, hochkomplexe Funktionen zu finden, die nur unzureichend getestet sind. Obwohl das Konzept bereits 2007 entstand, ist es im Zeitalter von KI-generiertem Code wieder hochaktuell. CargoCrap dient dabei als spezifische Implementierung für die Rust-Programmiersprache.

Mathematische Bewertung der Code-Komplexität

  • Die zyklomatische Komplexität quantifiziert die Anzahl möglicher Pfade, die Daten durch eine Funktion nehmen können.
  • Kontrollstrukturen wie if-Anweisungen, Match-Statements und Schleifen erhöhen den Komplexitätswert.
  • Die CRAP-Formel gewichtet hohe Komplexität bei niedriger Testabdeckung durch einen kubischen Exponenten besonders stark.

Eine Funktion mit einer zyklomatischen Komplexität von 15 besitzt 15 getrennte Ausführungspfade. Bei voller Testabdeckung entspricht der CRAP-Score dem Wert der zyklomatischen Komplexität. Fehlen hingegen Tests, steigt der Score durch die mathematische Gewichtung drastisch an, was Bereiche mit hohem Refactoring-Risiko markiert.

Bedeutung für KI-generierten Code

  • KI-Agenten erzeugen oft fehlerfrei funktionierenden, aber komplexen Code ohne ausreichende Testabdeckung.
  • CargoCrap dient als notwendige zweite Prüfung nach dem Ausführen der Unit-Tests.
  • Die Metrik fungiert als Heatmap für technische Schulden bei der Integration neuer Entwickler.

KI-Agenten produzieren häufig syntaktisch korrekten Code, der Randfälle abdeckt, ohne dabei robuste Integrationstests zu schreiben. Dies führt zu unüberschaubaren Codebasen. Der Einsatz von Metriken wie CRAP hilft dabei, die Qualität trotz hoher Automatisierung durch KI-Agenten zu sichern und Duplikate oder ungetestete Logikpfade zu finden.

Community Posts

No posts yet. Be the first to write about this video!

Write about this video