Como posso analisar o código Python para identificar áreas problemáticas?

99

Eu tenho um grande repositório de origem dividido em vários projetos. Eu gostaria de produzir um relatório sobre o funcionamento do código-fonte, identificando áreas problemáticas que precisam ser abordadas.

Especificamente, gostaria de chamar rotinas com alta complexidade ciclomática, identificar a repetição e talvez executar alguma análise estática semelhante a um lint para detectar construções suspeitas (e, portanto, provavelmente errôneas).

Como posso construir esse relatório?

Jerub
fonte

Respostas:

36

Para medir a complexidade ciclomática, há uma boa ferramenta disponível em traceback.org . A página também oferece uma boa visão geral de como interpretar os resultados.

+1 para pylint . É ótimo para verificar a aderência aos padrões de codificação (seja PEP8 ou a variante de sua própria organização), o que pode, no final, ajudar a reduzir a complexidade ciclomática.

Mike Griffith
fonte
4
traceback.org está com link quebrado
denfromufa
Pylint é ótimo, mas lento. Usamos como um pré-push hook, mas usamos flake8 e um monte de plugins para verificações regulares e pre-commit hook. Eu realmente recomendo https://flakehell.readthedocs.io/config.htmlhoje em dia, já que seu modelo de execução é muito mais robusto e configurável.
DylanYoung
29

Para complexidade ciclomática, você pode usar radon: https://github.com/rubik/radon

(Use pippara instalá-lo: pip install radon)

Além disso, também possui estes recursos:

  • métricas brutas (incluem SLOC, linhas de comentários, linhas em branco, etc.)
  • Medidas Halstead (todas elas)
  • Índice de manutenção (aquele usado no Visual Studio)
Dave Halter
fonte
Qual é a chave para obter as métricas Halstead?
Dima Tisnek
1
@qarma Se eu entendi a documentação, não acho que você possa usar a linha de comando. Você tem que usar a API Python.
Dave Halter
18

Para análise estática, há pylint e pychecker . Pessoalmente, eu uso o pylint porque parece ser mais abrangente do que o pychecker.

Para a complexidade ciclomática, você pode tentar este programa perl ou este artigo que apresenta um programa python para fazer o mesmo

espaço livre
fonte
11

Pycana funciona muito bem quando você precisa entender um novo projeto!

PyCAna (Python Code Analyzer) é um nome sofisticado para um analisador de código simples para python que cria um diagrama de classes após a execução de seu código.

Veja como funciona: http://pycana.sourceforge.net/

resultado:

texto alternativo

msemelman
fonte
6

Use flake8 , que fornece pep8, pyflakes e análise de complexidade ciclomática em uma ferramenta

Wes Kendall
fonte
4

Existe uma ferramenta chamada CloneDigger que ajuda a encontrar trechos de código semelhantes.

Anônimo
fonte
1
Não funciona com Python 3 e nunca teve uma boa manutenção.
Acumenus,
3

Para verificar a complexidade ciclomática, existe, é claro, o mccabepacote.

Instalação:

$ pip install --upgrade mccabe

Uso:

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

Observe o limite de 6 acima. Por essa resposta , pontuações> 5 provavelmente devem ser simplificadas.

Saída de amostra com --min=3:

68:1: 'Fetcher.fetch' 3
48:1: 'Fetcher._read_dom_tag' 3
103:1: 'main' 3

Opcionalmente, também pode ser usado via pylint-mccabe ou pytest-mccabe , etc.

Acumenus
fonte