Come posso analizzare il codice Python per identificare le aree problematiche?
-
01-07-2019 - |
Domanda
Ho un grande repository di origine suddiviso tra più progetti.Vorrei produrre un rapporto sulla salute del codice sorgente, per identificare aree problematiche che devono essere affrontate.
In particolare, vorrei richiamare la routine con una elevata complessità ciclomatica, identificare la ripetizione, e correre, forse alcuni di lanuggine come analisi statica al posto di sospetto (e quindi probabilmente errata) costruisce.
Come potrei andare sulla costruzione di un rapporto di questo tipo?
Soluzione
Per la misurazione della complessità ciclomatica, c'è un bel strumento disponibile traceback.org.La pagina fornisce una buona panoramica di come interpretare i risultati.
+1 per pylint.È grande la verifica dell'aderenza agli standard di codifica (che può essere PEP8 o della propria organizzazione variante), che può alla fine contribuire a ridurre la complessità ciclomatica.
Altri suggerimenti
Per la complessità ciclomatica è possibile utilizzare radon
: https://github.com/rubik/radon
(Utilizzare pip
per installarlo: pip install radon
)
Inoltre, ha queste caratteristiche:
- valori assoluti (questi includono SLOC, righe di commento, le righe vuote, &c.)
- Halstead metriche (tutti)
- Manutenibilità Indice, utilizzato in Visual Studio)
Per l'analisi statica non c'è pylint e pychecker.Personalmente io uso pylint, come sembra essere, più completa di pychecker.
Per la complessità ciclomatica si può provare questo programma perl, o questo articolo che introduce un programma in python per fare lo stesso
Pycana funziona come un fascino quando è necessario capire un nuovo progetto!!!
PyCAna (Codice Python Analyzer) è un nome di fantasia per un semplice codice analizzatore per python che crea un diagramma di classe dopo l'esecuzione di codice.
Vedere come funziona:http://pycana.sourceforge.net/
output:
Grazie a Pydev, è possibile integrare pylint nel Eclipse IDE davvero semplice e ottenere un codice di report ogni volta che si salva un file modificato.
Utilizzare flake8, che fornisce pep8, pyflakes e complessità ciclomatica di analisi in un unico strumento
C'è uno strumento chiamato CloneDigger che ti aiuta a trovare simili frammenti di codice.
Per il controllo della complessità ciclomatica, c'è, naturalmente, il mccabe
pacchetto.
Installazione:
$ pip install --upgrade mccabe
Utilizzo:
$ python -m mccabe --min=6 path/to/myfile.py
Nota la soglia di 6 di cui sopra.Per questa risposta, spartiti >5 probabilmente dovrebbe essere semplificata.
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 via pylint-mccabe o pytest-mccabe, etc.