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?
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.
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:
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
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:
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é.
Utilisez flake8 , qui fournit pep8, pyflakes et analyse de complexité cyclomatique dans un seul outil
Il existe un outil appelé CloneDigger qui vous aide à trouver des extraits de code similaires.
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.