¿Cómo puedo analizar el código de Python para identificar áreas problemáticas?
static-analysis cyclomatic-complexity (8)
Tengo un gran repositorio fuente dividido en varios proyectos. Me gustaría presentar un informe sobre el estado del código fuente, identificando las áreas problemáticas que deben abordarse.
Específicamente, me gustaría llamar rutinas con una alta complejidad ciclomática, identificar la repetición, y quizás ejecutar algunos análisis estáticos similares a pelusa para detectar construcciones sospechosas (y por lo tanto, probablemente erróneas).
¿Cómo puedo construir un informe de este tipo?
¡Pycana funciona como un encanto cuando necesitas entender un nuevo proyecto!
PyCAna (Python Code Analyzer) es un nombre elegante para un analizador de código simple para python que crea un diagrama de clases después de ejecutar su código.
Vea cómo funciona: http://pycana.sourceforge.net/
salida:
texto alternativo http://pycana.sourceforge.net/relations.png
Gracias a Pydev , puede integrar pylint en el IDE de Eclipse con mucha facilidad y obtener un informe de código cada vez que guarde un archivo modificado.
Hay una herramienta llamada CloneDigger que te ayuda a encontrar fragmentos de código similares.
Para el análisis estático, hay pylint y pychecker . Personalmente utilizo pylint ya que parece ser más completo que pychecker.
Para la complejidad ciclomática puedes probar este programa perl , o este traceback.org que presenta un programa python para hacer lo mismo
Para medir la complejidad ciclomática, hay una buena herramienta disponible en traceback.org . La página también ofrece una buena visión general de cómo interpretar los resultados.
+1 para la pylint . Es excelente para verificar el cumplimiento de los estándares de codificación (ya sea PEP8 o la variante de su propia organización), lo que al final puede ayudar a reducir la complejidad ciclomática.
Para verificar la complejidad ciclomática, existe, por supuesto, el paquete mccabe
.
Instalación:
$ pip install --upgrade mccabe
Uso:
$ python -m mccabe --min=6 path/to/myfile.py
Tenga en cuenta el umbral de 6 arriba. Según esta respuesta , los puntajes> 5 probablemente deberían simplificarse.
Salida de muestra con --min=3
:
68:1: ''Fetcher.fetch'' 3
48:1: ''Fetcher._read_dom_tag'' 3
103:1: ''main'' 3
Opcionalmente también se puede utilizar a través de pylint-mccabe o pytest-mccabe , etc.
Utilice flake8 , que proporciona pep8, pyflakes y el análisis de complejidad ciclomática en una herramienta
Para la complejidad ciclomática, puede usar el radon
: https://github.com/rubik/radon
(Use pip
para instalarlo: pip install radon
)
Además, también tiene estas características:
- métricas en bruto (estas incluyen SLOC, líneas de comentarios, líneas en blanco, etc.)
- Métrica de Halstead (todas)
- Índice de mantenimiento (el utilizado en Visual Studio)