python static-analysis cyclomatic-complexity

¿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?




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)