Comment puis-je analyser le code Python pour identifier les zones problématiques?

99

J'ai un grand référentiel source divisé en plusieurs projets. Je voudrais produire un rapport sur la santé du code source, identifiant les domaines problématiques qui doivent être traités.

Plus précisément, j'aimerais appeler des routines avec une complexité cyclomatique élevée, identifier la répétition et peut-être exécuter une analyse statique de type peluche pour repérer les constructions suspectes (et donc probablement erronées).

Comment pourrais-je construire un tel rapport?

Jerub
la source

Réponses:

36

Pour mesurer la complexité cyclomatique, il existe un bel outil disponible sur traceback.org . La page donne également un bon aperçu de la façon d'interpréter les résultats.

+1 pour pylint . Il est excellent pour vérifier le respect des normes de codage (que ce soit PEP8 ou la variante de votre propre organisation), ce qui peut finalement aider à réduire la complexité cyclomatique.

Mike Griffith
la source
4
traceback.org est un lien cassé
denfromufa
Pylint est génial, mais lent. Nous utilisons comme hook pré-push, mais utilisons flake8 et un tas de plugins pour les vérifications régulières et le hook pré-commit. Je recommanderais en fait https://flakehell.readthedocs.io/config.htmlces jours-ci, car son modèle d'exécution est beaucoup plus robuste et configurable.
DylanYoung
29

Pour la complexité cyclomatique, vous pouvez utiliser radon: https://github.com/rubik/radon

(Utilisation pippour l' installer: pip install radon)

De plus, il possède également ces caractéristiques:

  • métriques brutes (il s'agit notamment du SLOC, des lignes de commentaires, des lignes vides, etc.)
  • Métriques Halstead (toutes)
  • Index de maintenabilité (celui utilisé dans Visual Studio)
Dave Halter
la source
Quel est le commutateur pour obtenir les métriques Halstead?
Dima Tisnek
1
@qarma Si je comprends la documentation, je ne pense pas que vous puissiez utiliser la ligne de commande. Vous devez utiliser l'API Python.
Dave Halter
18

Pour l'analyse statique, il y a pylint et pychecker . Personnellement, j'utilise pylint car il semble être plus complet que pychecker.

Pour la complexité cyclomatique, vous pouvez essayer ce programme perl , ou cet article qui présente un programme python pour faire de même

espace libre
la source
11

Pycana fonctionne à merveille lorsque vous avez besoin de comprendre un nouveau projet!

PyCAna (Python Code Analyzer) est un nom sophistiqué pour un analyseur de code simple pour python qui crée un diagramme de classes après l'exécution de votre code.

Voyez comment cela fonctionne: http://pycana.sourceforge.net/

production:

texte alternatif

msemelman
la source
6

Grâce à Pydev , vous pouvez intégrer très facilement pylint dans l' IDE Eclipse et obtenir un rapport de code à chaque fois que vous enregistrez un fichier modifié.

Pierre-Jean Coudert
la source
6

Utilisez flake8 , qui fournit des analyses de complexité pep8, pyflakes et cyclomatic dans un seul outil

Wes Kendall
la source
4

Il existe un outil appelé CloneDigger qui vous aide à trouver des extraits de code similaires.

Anonyme
la source
1
Cela ne fonctionne pas avec Python 3 et il n'a jamais été bien entretenu.
Acumenus
3

Pour vérifier la complexité cyclomatique, il y a bien sûr le mccabepackage.

Installation:

$ pip install --upgrade mccabe

Usage:

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

Notez le seuil de 6 ci-dessus. Selon cette réponse , les scores> 5 devraient probablement être simplifiés.

Exemple de sortie avec --min=3:

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

Il peut éventuellement également être utilisé via pylint-mccabe ou pytest-mccabe , etc.

Acumenus
la source