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?

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.


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)

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


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



6

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


4

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


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.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.