Come posso analizzare il codice Python per identificare le aree problematiche?


99

Ho un ampio repository di sorgenti suddiviso in più progetti. Vorrei produrre una relazione sullo stato di salute del codice sorgente, identificando le aree problematiche che devono essere affrontate.

In particolare, vorrei richiamare routine con un'elevata complessità ciclomatica, identificare la ripetizione e forse eseguire alcune analisi statiche simili a lanugine per individuare costrutti sospetti (e quindi probabilmente errati).

Come potrei fare per costruire un tale rapporto?

Risposte:


36

Per misurare la complessità ciclomatica, c'è un simpatico strumento disponibile su traceback.org . La pagina fornisce anche una buona panoramica su come interpretare i risultati.

+1 per pilastro . È ottimo per verificare l'aderenza agli standard di codifica (sia esso PEP8 o la variante della propria organizzazione), che alla fine può aiutare a ridurre la complessità ciclomatica.


4
traceback.org è un link interrotto
denfromufa

Pylint è fantastico, ma lento. Usiamo un hook pre-push, ma usiamo flake8 e un mucchio di plugin per controlli regolari e hook pre-commit. In realtà lo consiglierei in https://flakehell.readthedocs.io/config.htmlquesti giorni, poiché il suo modello di esecuzione è molto più robusto e configurabile.
DylanYoung

29

Per la complessità ciclomatica puoi usare radon: https://github.com/rubik/radon

(Usa pipper installarlo: pip install radon)

Inoltre ha anche queste caratteristiche:

  • metriche non elaborate (queste includono SLOC, righe di commento, righe vuote, ecc.)
  • Metriche di Halstead (tutte)
  • Indice di manutenibilità (quello utilizzato in Visual Studio)

Qual è il passaggio per ottenere le metriche di Halstead?
Dima Tisnek

1
@qarma Se capisco i documenti, non penso che tu possa usare la riga di comando. Devi usare l'API Python.
Dave Halter


11

Pycana funziona come un fascino quando hai bisogno di capire un nuovo progetto!

PyCAna (Python Code Analyzer) è un nome di fantasia per un semplice analizzatore di codice per python che crea un diagramma di classe dopo aver eseguito il codice.

Guarda come funziona: http://pycana.sourceforge.net/

produzione:

testo alternativo



6

Usa flake8 , che fornisce pep8, pyflakes e analisi della complessità ciclomatica in un unico strumento


4

C'è uno strumento chiamato CloneDigger che ti aiuta a trovare frammenti di codice simili.


1
Non funziona con Python 3 e non è mai stato ben mantenuto.
Acumenus

3

Per controllare la complessità ciclomatica, c'è ovviamente il mccabepacchetto.

Installazione:

$ pip install --upgrade mccabe

Utilizzo:

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

Notare la soglia di 6 sopra. Per questa risposta , i punteggi> 5 probabilmente dovrebbero essere semplificati.

Esempio di output con --min=3:

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

Opzionalmente può essere utilizzato anche tramite pylint-mccabe o pytest-mccabe , ecc.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.