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


Tengo un repositorio de código fuente grande dividido en varios proyectos. Me gustaría producir un informe sobre el estado del código fuente, identificando las áreas problemáticas que deben abordarse.

Específicamente, me gustaría llamar a las rutinas con una alta complejidad ciclomática, identificar la repetición, y tal vez ejecutar algunos análisis estáticos similares a pelusas para detectar construcciones sospechosas (y por lo tanto probablemente erróneas).

¿Cómo podría construir tal informe?

Author: Shog9, 2008-09-19

8 answers

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 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), que al final puede ayudar a reducir la complejidad ciclomática.

 36
Author: Mike Griffith,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-09-19 20:44:22

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

(Use pip para instalarlo: pip install radon)

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

  • métricas sin procesar (estas incluyen SLOC, líneas de comentario, líneas en blanco, &c.)
  • Métricas de Halstead (todas ellas)
  • Índice de mantenibilidad (el utilizado en Visual Studio)
 27
Author: Dave Halter,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-02-10 01:47:31

Para el análisis estático hay pylint y pychecker. Personalmente yo uso pylint, ya que parece ser más amplio que pychecker.

Para la complejidad ciclomática puede probar este programa perl , o este artículo que introduce un programa python para hacer lo mismo

 18
Author: freespace,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-09-19 08:05:48

Pycana funciona como un encanto cuando necesitas entender un nuevo proyecto!

PyCAna (Python Code Analyzer) es un nombre elegante para un código simple analizador para python que crea un diagrama de clases después de ejecutar su codificar.

Vea cómo funciona: http://pycana.sourceforge.net /

Salida:

Texto alternativo http://pycana.sourceforge.net/relations.png

 11
Author: msemelman,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-05-09 20:56:38

Gracias a Pydev, puede integrar pylint en el IDE de Eclipse muy fácilmente y obtener un informe de código cada vez que guarda un archivo modificado.

 6
Author: Pierre-Jean Coudert,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-11-12 21:18:08

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

 5
Author: Wes Kendall,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-03-26 01:08:02

Hay una herramienta llamada CloneDigger que te ayuda a encontrar fragmentos de código similares.

 4
Author: Anonymous,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-02-22 09:57:22

Para comprobar la complejidad ciclomática, hay por supuesto la mccabe paquete.

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

También se puede utilizar opcionalmente a través de pylint-mccabe o pytest-mccabe, etc.

 3
Author: A-B-B,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-04-15 23:32:41