web-dev-qa-db-fra.com

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

J'ai un grand référentiel source réparti sur plusieurs projets. Je voudrais produire un rapport sur la santé du code source, identifiant les problèmes qui doivent être résolus.

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

Comment pourrais-je procéder pour construire un tel rapport?

98
Jerub

Pour mesurer la complexité cyclomatique, un bel outil est 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 l'adhésion aux normes de codage (que ce soit PEP8 ou la variante de votre propre organisation), ce qui peut finalement aider à réduire la complexité cyclomatique.

36
Mike Griffith

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

(Utilisez pip pour l'installer: pip install radon)

De plus, il possède également ces fonctionnalités:

  • métriques brutes (notamment SLOC, lignes de commentaires, lignes vides, etc.)
  • Métriques Halstead (toutes)
  • Index de maintenabilité (celui utilisé dans Visual Studio)
28
Dave Halter

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 ce article qui introduit un programme python pour faire de même

18
freespace

Pycana fonctionne comme un charme lorsque vous avez besoin de comprendre un nouveau projet!

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

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

sortie:

alt text

11
msemelman

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

6
Pierre-Jean Coudert

Utilisez flake8 , qui fournit pep8, pyflakes et analyse de complexité cyclomatique dans un seul outil

5
Wes Kendall

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

4
Anonymous

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

Installation:

$ pip install --upgrade mccabe

Usage:

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

Notez le seuil de 6 ci-dessus. Par 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 être également utilisé via pylint-mccabe ou pytest-mccabe , etc.

3
Acumenus