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