Kleine Freude # 4: Radon - Codequalität gemessen in Zahlen

Ingenieure lieben Messungen und Zahlen sehr. Daher ist es nicht verwunderlich, dass sie versuchen, eine nicht triviale Sache wie die Qualität des Codes in numerischer Form zu messen.



Metriken zur Bewertung der Programmtexte wurden viel erfunden - von der banalen Anzahl von Codezeilen im Projekt bis zum nicht so offensichtlichen "Maintainability Index". Details zu allen vorhandenen Methoden zum Beschichten des Codes mit allen Arten von Metriken finden Sie in diesem Artikel .


Die Python-Welt hat natürlich ihre eigene Sache zur Bewertung der Codequalität. Es heißt Radon . Es ist in demselben Python geschrieben und funktioniert ausschließlich mit kleinen Dateien.


Wir stellen es uns


pip install radon 

Wir gehen mit Ihrem Code in den Ordner und beginnen zu messen.


Rohstatistik


Banale Anzahl der Zeilen in der Quelle. Und auch die Anzahl der Zeilen, die direkt den Code enthalten, und die Anzahl der Kommentarzeilen. Keine sehr informative Metrik, aber für weitere Berechnungen erforderlich.


 radon raw ./ 

Als Antwort fallen eine Liste der Dateien im Projekt und Statistiken für jede Datei heraus.


Zyklomatische Komplexität


Je mehr Übergänge (if-else), Schleifen, Generatoren, Ausnahmebehandlungsroutinen und logische Operatoren im Code enthalten sind, desto mehr Optionen hat das Programm und desto schwieriger ist es, verschiedene Systemzustände im Auge zu behalten. Eine Metrik, die die Komplexität eines Codes basierend auf der Anzahl dieser Operationen misst, wird als zyklomatische Komplexität eines Programms bezeichnet .


Es wird als Team betrachtet.


 radon cc ./ 

Als Antwort erhalten Sie eine Liste der Dateien, Klassen, Methoden und Funktionen in Ihrem Projekt und deren Komplexitätsindex, von sehr einfach bis sehr komplex. Der Index zeigt logisch überladene Stellen an, die in kleinere Teile zerlegt, vereinfacht oder neu geschrieben werden können (wenn möglich, kann der Algorithmus an sich sehr komplex sein und Versuche, ihn in Teile zu zerlegen, können die Lesbarkeit des Codes nur verschlechtern).


Halstead-Metriken


Hier betrachten wir die Anzahl der eindeutigen Operatoren und Operanden im Code und ihre Gesamtzahl. Die erhaltenen Werte werden in die Formeln eingesetzt, und es wird eine Reihe von Zahlen erhalten, die die Komplexität des Programms und den Aufwand beschreiben, der angeblich für das Schreiben und Verstehen des Codes aufgewendet wird.


 radon hal ./ 

Code Support Index


Dieser Index gibt an, wie schwierig es sein wird, einen Teil des Programms zu warten oder zu bearbeiten. Dieser Parameter wird basierend auf den Zahlen berechnet, die aus den oben berechneten Metriken erhalten wurden.


 radon mi ./ 

Als Antwort erhalten wir eine Liste der Dateien im Projekt und deren Unterstützungsindex, von leicht bis sehr schwer.


Detaillierte Algorithmen zur Berechnung von Metriken und deren Dokumentation finden Sie hier .


Wo ist das alles?


Natürlich ist es unmöglich, Rückschlüsse auf die Qualität des Codes zu ziehen, wenn man sich ausschließlich auf numerische Metriken stützt. In einigen Fällen kann jedoch eine schnelle Beurteilung mit Radon hilfreich sein.


  • Sie müssen eine große Menge Code überprüfen, und es bleibt keine Zeit, jeder Datei einzeln viel Aufmerksamkeit zu widmen. Durch Ausführen der Tests können Sie die Funktion sehen, in der der Neuling 40 verschachtelte Bedingungen heruntergespült hat.
  • Sie müssen die Entwicklung einer großen Anzahl von Mikrodiensten steuern, die in kleine Projekte unterteilt sind. Eine schnelle Beurteilung (möglicherweise sogar im automatischen Modus) ermöglicht es Ihnen, potenziell problematische Orte zu finden und manuell zu überprüfen.
  • Führen Sie natürlich Tests für Open Source-Bibliotheken durch (insbesondere für einige weniger beliebte Lösungen mit einer kleinen Community).

Kognitiv? Ja Nützlich und notwendig? Vielleicht manchmal, vielleicht in bestimmten Fällen.


Um ein paar Ihrer Projekte zu setzen, zu spielen, eine Metrik durchzugehen, ein kleines Skript zu schreiben und es an Commits zu binden? Vielleicht ein gutes Projekt für den Abend.

Source: https://habr.com/ru/post/de456150/


All Articles