¿Cómo puedo analizar el código Python para identificar áreas problemáticas?


99

Tengo un gran repositorio de fuentes dividido en varios proyectos. Me gustaría producir un informe sobre la salud del código fuente, identificando áreas problemáticas que deben abordarse.

Específicamente, me gustaría mencionar rutinas con una alta complejidad ciclomática, identificar la repetición y tal vez ejecutar algún análisis estático similar a una pelusa para detectar construcciones sospechosas (y por lo tanto probablemente erróneas).

¿Cómo podría construir un informe de este tipo?

Respuestas:


36

Para medir la complejidad ciclomática, hay una buena herramienta disponible en traceback.org . La página también ofrece una buena descripción general de cómo interpretar los resultados.

+1 para pilotaje . Es excelente para verificar la adherencia a 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.


4
traceback.org tiene un enlace roto
denfromufa

Pylint es genial, pero lento. Usamos como un gancho pre-push, pero usamos flake8 y un montón de complementos para verificaciones regulares y pre-compromiso. Sin https://flakehell.readthedocs.io/config.htmlembargo, lo recomendaría estos días, ya que su modelo de ejecución es mucho más robusto y configurable.
DylanYoung

29

Para la complejidad ciclomática puede usar radon: https://github.com/rubik/radon

(Uso pippara instalarlo: pip install radon)

Además también tiene estas características:

  • métricas sin procesar (que incluyen SLOC, líneas de comentarios, líneas en blanco, etc.)
  • Métricas de Halstead (todas)
  • Índice de mantenibilidad (el que se usa en Visual Studio)

¿Cuál es el cambio para obtener métricas de Halstead?
Dima Tisnek

1
@qarma Si entiendo los documentos, no creo que puedas usar la línea de comando. Tienes que usar la API de Python.
Dave Halter


11

¡Pycana funciona de maravilla 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



6

Use flake8 , que proporciona pep8, pyflakes y análisis de complejidad ciclomática en una sola herramienta


4

Existe una herramienta llamada CloneDigger que le ayuda a encontrar fragmentos de código similares.


1
No funciona con Python 3 y nunca se mantuvo bien.
Acumenus

3

Para comprobar la complejidad ciclomática, por supuesto, existe el mccabepaquete.

Instalación:

$ pip install --upgrade mccabe

Uso:

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

Tenga en cuenta el umbral de 6 anterior. Según esta respuesta , las puntuaciones> 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.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.