Wie kann ich Python-Code analysieren, um problematische Bereiche zu identifizieren?

99

Ich habe ein großes Quell-Repository, das auf mehrere Projekte aufgeteilt ist. Ich möchte einen Bericht über den Zustand des Quellcodes erstellen und Problembereiche identifizieren, die angegangen werden müssen.

Insbesondere möchte ich Routinen mit einer hohen zyklomatischen Komplexität aufrufen, Wiederholungen identifizieren und möglicherweise eine fusselartige statische Analyse durchführen, um verdächtige (und daher wahrscheinlich fehlerhafte) Konstrukte zu erkennen.

Wie kann ich einen solchen Bericht erstellen?

Jerub
quelle

Antworten:

36

Zur Messung der zyklomatischen Komplexität steht auf traceback.org ein nützliches Tool zur Verfügung . Die Seite gibt auch einen guten Überblick über die Interpretation der Ergebnisse.

+1 für Pylint . Es ist hervorragend geeignet, um die Einhaltung von Codierungsstandards (sei es PEP8 oder die Variante Ihrer eigenen Organisation) zu überprüfen , was letztendlich dazu beitragen kann, die zyklomatische Komplexität zu reduzieren.

Mike Griffith
quelle
4
traceback.org ist defekt link
denfromufa
Pylint ist großartig, aber langsam. Wir verwenden als Pre-Push-Hook, verwenden jedoch flake8 und eine Reihe von Plugins für regelmäßige Überprüfungen und Pre-Commit-Hooks. Ich würde https://flakehell.readthedocs.io/config.htmles heutzutage tatsächlich empfehlen , da das Ausführungsmodell viel robuster und konfigurierbarer ist.
DylanYoung
29

Für die zyklomatische Komplexität können Sie Folgendes verwenden radon: https://github.com/rubik/radon

(Verwenden Sie pipinstallieren es: pip install radon)

Zusätzlich hat es auch diese Funktionen:

  • Rohmetriken (dazu gehören SLOC, Kommentarzeilen, Leerzeilen usw.)
  • Halstead-Metriken (alle)
  • Wartbarkeitsindex (der in Visual Studio verwendete)
Dave Halter
quelle
Was ist der Schalter, um Halstead-Metriken zu erhalten?
Dima Tisnek
1
@qarma Wenn ich die Dokumente verstehe, glaube ich nicht, dass Sie die Befehlszeile verwenden können. Sie müssen die Python-API verwenden.
Dave Halter
18

Für die statische Analyse gibt es Pylint und Pychecker . Persönlich benutze ich Pylint, da es umfassender zu sein scheint als Pychecker.

Aus Gründen der zyklomatischen Komplexität können Sie dieses Perl-Programm oder diesen Artikel ausprobieren , in dem ein Python-Programm vorgestellt wird, um dasselbe zu tun

Freiraum
quelle
11

Pycana wirkt wie ein Zauber, wenn Sie ein neues Projekt verstehen müssen!

PyCAna (Python Code Analyzer) ist ein ausgefallener Name für einen einfachen Code Analyzer für Python, der nach der Ausführung Ihres Codes ein Klassendiagramm erstellt.

Sehen Sie, wie es funktioniert: http://pycana.sourceforge.net/

Ausgabe:

Alt-Text

msemelman
quelle
6

Verwenden Sie flake8 , das pep8, pyflakes und die zyklomatische Komplexitätsanalyse in einem Tool bereitstellt

Wes Kendall
quelle
4

Es gibt ein Tool namens CloneDigger , mit dem Sie ähnliche Codefragmente finden können.

Anonym
quelle
1
Es funktioniert nicht mit Python 3 und wurde nie gut gepflegt.
Acumenus
3

Zur Überprüfung der zyklomatischen Komplexität gibt es natürlich das mccabePaket.

Installation:

$ pip install --upgrade mccabe

Verwendung:

$ python -m mccabe --min=6 path/to/myfile.py

Beachten Sie den Schwellenwert von 6 oben. Gemäß dieser Antwort sollten Punktzahlen> 5 wahrscheinlich vereinfacht werden.

Beispielausgabe mit --min=3:

68:1: 'Fetcher.fetch' 3
48:1: 'Fetcher._read_dom_tag' 3
103:1: 'main' 3

Optional kann es auch über Pylint-McCabe oder Pytest-McCabe usw. verwendet werden.

Scharfsinn
quelle