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.
Community Posts
No posts yet. Be the first to write about this video!
Write about this video