Ça faisait longtemps que je cherchais un outil capable de me fournir un aperçu, très général et visuel, de la maintenabilité d'un projet. Ne trouvant finalement que peu de chose sur le net, je me suis décidé à en coder un rapidement.
Pour illustrer le fonctionnement de cet outil, voici les rapport pour les sources de différents projets PHP :
Symfony2 Component :
Zend Framework 2 :
Drupal 7 :
CakePHP 2 :
WordPress 3 2 :
Chaque cercle représente un fichier. En schématisant, plus le cercle est gros, plus le code est complexe ; la couleur, elle, est représentative de l'indice de maintenabilité.
Pour les plus pressés, l'outil en question est disponible sur Github.
Pour les autres, voici quelques explications.
Avant de commencer, il faut être conscient que la notion de maintenabilité applicative est bien plus complexe que ne sait le résoudre un tel outil. Elle dépend de facteurs humains (équipe en charge du projet), environnementaux (contexte de l'entreprise, contraintes de délais), du code source (clarté, simplicité), du choix des outils (présence d'un support, possibilité d'obtenir des formations), etc.
Cet outil ne prétend en aucun cas fournir des chiffres précis sur l'ensemble de ces critères. Non, l'objet de cet outil est de fournir des indicateurs à partir d'une analyse statique du code source.
Je n'ai rien inventé : les algorithmes utilisés pour calculer ce type d'indicateurs existent depuis la fin des années 70, et de nombreux IDE (Visual Studio par exemple) intègrent nativement des modules de supervision du code basés sur ces mêmes algoritmes pour différents langages de programmation.
L'outil commence d'abord par convertir le code source en tokens, pour calculer le premier indicateur utilisé : les métriques d'Ahlstead. Cet indicateur fourni des informations à partir d'un ratio entre le volume du code, la variété et le type de structures manipulées dans un code source. Il fournit :
La seconde étape consiste à calculer la complexité cyclomatique du code source. De ce côté, je n'ai pas cherché à réinventer la route : j'utilise l'excellent phploc.
À partir de ces informations, nous pouvons calculer l'Indice de maintenabilité. Cet indicateur fourni une note, de 0 à 171, où 0 représente un code très difficilement maintenable, et 171 un code maintenable.
Le code source est disponible sur Github: Halleck45/PhpMetrics. Cet outil reste à affiner ; n'hésitez donc surtout pas à proposer des améliorations ou à signaler des anomalies.
© Jean-François Lépine, 2013 - 2024