Petite petite joie # 4: Radon - la qualité du code mesurée en chiffres

Les ingénieurs aiment beaucoup les mesures et les nombres. Par conséquent, il n'est pas surprenant qu'ils essaient de mesurer sous une forme numérique une chose non triviale comme la qualité du code.



Les métriques pour évaluer les textes des programmes ont été beaucoup inventées - du nombre banal de lignes de code dans le projet à "l'indice de maintenabilité" pas si évident. Des détails sur toutes les méthodes existantes de revêtement du code avec toutes sortes de mesures peuvent être trouvés dans cet article .


Le monde Python, bien sûr, a sa propre chose pour évaluer la qualité du code. Cela s'appelle le radon . Il est écrit dans le même Python et fonctionne exclusivement avec de petits fichiers.


On se le met


pip install radon 

Nous allons dans le dossier avec votre code et commençons à mesurer.


Statistiques brutes


Compte banal du nombre de lignes dans la source. Et aussi le nombre de lignes contenant directement le code et le nombre de lignes de commentaires. Métrique peu informative, mais nécessaire pour d'autres calculs.


 radon raw ./ 

En réponse, une liste de fichiers dans le projet et des statistiques pour chaque fichier vont sortir.


Complexité cyclomatique


Plus il y a de transitions (if-else), de boucles, de générateurs, de gestionnaires d'exceptions et d'opérateurs logiques dans le code, plus le programme a d'options et plus il est difficile de garder à l'esprit divers états du système. Une métrique qui mesure la complexité d'un code en fonction du nombre de ces opérations est appelée la complexité cyclomatique d'un programme .


Il est considéré comme une équipe.


 radon cc ./ 

En réponse, vous recevrez une liste des fichiers, classes, méthodes et fonctions de votre projet et leur indice de complexité, de très simple à très complexe. L'index indiquera les emplacements logiques surchargés qui peuvent être décomposés en petits morceaux, simplifiés ou réécrits (si possible, l'algorithme peut être très complexe en soi et les tentatives de le décomposer en morceaux ne peuvent qu'aggraver la lisibilité du code).


Métriques Halstead


Ici, nous considérons le nombre d'opérateurs et d'opérandes uniques dans le code et leur nombre total. Les valeurs obtenues sont substituées dans les formules et un ensemble de nombres est obtenu qui décrit la complexité du programme et la quantité d'effort qui est censé être dépensé pour écrire et comprendre le code.


 radon hal ./ 

Index de prise en charge du code


Cet index nous indique à quel point il sera difficile de maintenir ou de modifier une partie du programme. Ce paramètre est calculé sur la base des nombres obtenus à partir des métriques calculées ci-dessus.


 radon mi ./ 

En réponse, nous obtenons une liste des fichiers du projet et leur index de support, de légers à très lourds.


Des algorithmes détaillés pour calculer les métriques et leur documentation peuvent être trouvés ici .


Où est tout ça?


Bien sûr, il est impossible de tirer des conclusions sur la qualité du code, en se fondant uniquement sur des métriques numériques. Mais dans certains cas, une évaluation rapide avec du radon peut être utile.


  • Vous devez revoir une grande quantité de code et vous n'avez pas le temps de consacrer beaucoup d'attention à chaque fichier individuellement. L'exécution des tests vous permettra de voir la fonction dans laquelle le nouveau venu junior a lavé 40 conditions imbriquées.
  • Il faut piloter le développement d'un grand nombre de microservices, répartis en petits projets. Une évaluation rapide (éventuellement même en mode automatique) vous permettra de trouver des lieux potentiellement problématiques et de les revoir manuellement.
  • Bien sûr, exécutez des tests sur les bibliothèques open source (en particulier certaines solutions peu populaires avec une petite communauté).

Cognitivement? Oui Utile et nécessaire? Peut-être parfois, peut-être dans certains cas.


Pour mettre, jouer, exécuter quelques-uns de vos projets à travers des métriques, écrire un petit script et l'accrocher aux commits? Peut-être un bon projet pour la soirée.

Source: https://habr.com/ru/post/fr456150/


All Articles