Come posso analizzare il codice Python per identificare le aree problematiche?
https://stackoverflow.com/questions/100298
Full question
DOMANDA
Ho un repository di grandi dimensioni suddiviso su più progetti. Vorrei presentare una relazione sulla salute del codice sorgente, identificando le aree problematiche che devono essere affrontate.
In particolare, vorrei richiamare le routine con un'elevata complessità ciclomatica, identificare la ripetizione e forse eseguire analisi statiche simili a lanugine per individuare costrutti sospetti (e quindi probabilmente errati).
Come potrei fare per costruire un simile rapporto?
SOLUZIONE
Per misurare la complessità ciclomatica, è disponibile uno strumento utile in traceback.org . La pagina offre anche una buona panoramica di come interpretare i risultati.
+1 per pylint . È ottimo per verificare l'adesione agli standard di codifica (sia PEP8 o il tuo variante dell'organizzazione), che alla fine può aiutare a ridurre la complessità ciclomatica.
ALTRI SUGGERIMENTI
Per la complessità ciclomatica puoi usare radon
: https://github.com/rubik / radon
(Usa pip
per installarlo: pip install radon
)
Inoltre ha anche queste caratteristiche:
- metriche non elaborate (tra cui SLOC, righe di commento, righe vuote e & amp; c.)
- Metriche di Halstead (tutte)
- Indice di manutenibilità (quello usato in Visual Studio)
Per l'analisi statica c'è pylint e pychecker . Personalmente uso il pylint in quanto sembra essere più completo di pychecker.
Per la complessità ciclomatica puoi provare questo programma perl o questo articolo che introduce un programma Python per fare lo stesso
Pycana funziona come un incantesimo quando devi capire un nuovo progetto!
PyCAna (Python Code Analyzer) è un nome di fantasia per un semplice codice analizzatore per Python che crea un diagramma di classe dopo aver eseguito il tuo codice.
Guarda come funziona: http://pycana.sourceforge.net/
uscita:
Grazie a Pydev , puoi integra il pilastro nella Eclipse IDE in modo molto semplice e ottieni un rapporto codice ogni volta che salvi un file modificato.
Usa flake8 , che fornisce pep8, pyflakes e analisi della complessità ciclomatica in un unico strumento
C'è uno strumento chiamato CloneDigger che ti aiuta a trovare frammenti di codice simili.
Per verificare la complessità ciclomatica, c'è ovviamente il mccabe
pacchetto.
Installazione:
$ pip install --upgrade mccabe
Utilizzo:
$ python -m mccabe --min=6 path/to/myfile.py
Nota la soglia di 6 sopra. Per questa risposta , i punteggi & probabilmente 5 dovrebbero essere semplificati.
Output di esempio con --min = 3
:
68:1: 'Fetcher.fetch' 3
48:1: 'Fetcher._read_dom_tag' 3
103:1: 'main' 3
Può facoltativamente essere utilizzato anche tramite pylint-mccabe o pytest-mccabe , ecc.