2016-07-13 3 views
2

J'ai un projet Python relativement important sur lequel je travaille, et nous n'avons aucun outil de complexité cyclomatique dans le cadre de notre processus de test et de déploiement automatisé.Pratiques métriques de complexité cyclomatique pour Python

Quelle est l'importance des outils de complexité cyclomatique dans Python? Est-ce que vous ou votre projet les utilisez et les trouvez efficaces? Je voudrais une belle histoire avant/après si quelqu'un en a une pour que nous puissions enlever un peu de subjectivité aux réponses (ie avant que nous n'ayons pas un outil de cyclo-comp non plus, et après nous l'avons présenté, bonne chose Un événement, une mauvaise chose B est arrivé, etc). Il y a beaucoup d'autres réponses générales à ce type de question, mais je n'en ai pas trouvé pour les projets Python en particulier. En fin de compte, j'essaie de décider si cela vaut la peine de l'ajouter à nos processus, et quelle métrique et outil/bibliothèque est le mieux adapté aux grands projets Python. L'un de nos principaux objectifs est la maintenance à long terme.

Répondre

4

Nous avons utilisé l'outil RADON dans l'un de nos projets en rapport avec Test Automation.

RADON

En fonction de nouvelles caractéristiques et exigences, nous devons ajouter/modifier/mettre à jour/supprimer des codes dans ce projet. En outre, près de 4-5 personnes travaillaient à ce sujet. Ainsi, dans le cadre du processus de révision, nous avons identifié et utilisé les outils RADON car nous souhaitons que notre code soit lisible et maintenable. En fonction de la sortie de l'outil RADON, nous avons plusieurs fois ré-factorisé notre code, ajouté d'autres méthodes et modifié la boucle.

S'il vous plaît laissez-moi savoir si cela vous est utile.

+1

J'ai tout à fait commencé à aimer le radon. Bien qu'il soit plus difficile d'inclure cela dans le processus de construction automatique, mais l'effort en vaut la peine. – iankit

3

Python n'est pas spécial quand il s'agit de complexité cyclomatique. CC mesure la quantité de logique de branchement dans un morceau de code. L'expérience montre que lorsque la ramification est «haute», ce code est plus difficile à comprendre et à modifier de façon fiable que le code dans lequel la ramification est inférieure.

Avec les métriques, ce ne sont généralement pas les valeurs absolues qui importent; ce sont des valeurs relatives telles que vécues par votre organisation. Ce que vous devriez faire est de mesurer diverses métriques (CC en est une) et de chercher un genou dans la courbe qui relie cette métrique à bugs-found-in-code. Une fois que vous savez où se trouve le genou, demandez aux codeurs d'écrire des modules dont la complexité est inférieure au genou. C'est la connexion à la maintenance à long terme.

Ce que vous ne mesurez pas, vous ne pouvez pas contrôler.

+0

Utilisez-vous un outil spécifique en python? Le radon est-il bon? Comment avez-vous calculé votre seuil de métrique? Était-ce simplement en suivant les problèmes sur JIRA et à la fin de chaque version/sprint, vous revenez en arrière et déterminez manuellement ce que vous avez corrigé/corrigé? – mwm314

+0

Nous construisons * des outils de mesure en utilisant des DSL de programmation inhabituels pour lesquels CC n'a pas autant de sens. (Nous sommes réellement intéressés par la productivité que nous obtenons en construisant de meilleurs DSL internes). La plupart des personnes essayant de comprendre des métriques combinent généralement des informations provenant de plusieurs sources: le système de contrôle de version (par exemple, le code source), utilisé pour calculer les métriques sur les modules et les informations sur le suivi des bogues. Vous exécutez toute cette collecte de données sur une base périodique pour suivre les tendances. (Pour les outils métriques, voir ma biographie et suivre les liens vers mon site). –