J’ai eu un beau cadeau de Noël.
C’est un plugin Sonar, développé par eXcentia, un partenaire espagnol de la belle cité de Valencia, que vous connaissez probablement si vous vous intéressez à des événements sportifs telle que la Coupe de l’América, les grands prix de Formule 1 et de Moto GP, mais qui est aussi renommée pour sa spécialité gastronomique … la paella.
Cet add-on pour Sonar s’appuie sur la librairie WebGL et constitue l’une des briques du framework QAlitaX d’eXcentia. Il propose une représentation 3D d’une application sous la forme d’une cité modélisée à partir des métriques de Sonar. Vous trouverez ce plugin ici sur le site d’eXcentia, disponible pour Java.
Voici un exemple tiré de cette même page, qui décrit parfaitement comment cela fonctionne:
- Les packages Java sont représentés sous forme de quartiers.
- Les classes sont représentées sous forme d’édifices.
Pour chaque classe:
- La hauteur de l’édifice représente le nombre de lignes de code.
- La largeur de l’édifice représente le nombre de méthodes de la classe.
- La couleur représente la complexité, du vert très peu complexe au rouge très complexe.
Bien. Amusant allez-vous dire. Non seulement c’est assez ludique mais c’est surtout très utile.
Habituellement, lorsque vous réalisez un audit de la qualité d’une application, vous ne disposez pas de beaucoup d’informations. Non pas que l’on ne veuille pas vous la donner, mais simplement parce qu’elle est rare voire inexistante. Pourquoi croyez-vous que l’on vous demande un assessment ?
Or la première chose que vous souhaitez connaître, c’est : de quelle type d’applications s’agit-il ? Avant de vous lancer à l’abordage, il faut qualifier s’il s’agit d’un monstre énorme qui va prendre plusieurs heures d’analyse, ou d’un sac de noeuds avec plein de bouts de code très compliqués et des appels dynamiques.
Auparavant, je prenais le temps d’examiner le code livré et de noter :
- Combien de répertoires, pour me faire une idée du nombre de packages et de leur organisation ?
- Combien de fichiers et quels répertoires contiennent le plus de fichiers, afin d’identifier au plus tôt les packages avec le plus grand nombre de classes, et donc de fonctionnalités.
Maintenant, grâce à Sonar et ce plugin, je peux obtenir facilement cette information et plus, sans cette phase d’investigation pré-analyse.
Prenons une application avec 3 répertoires principaux: common, client et server. J’analyse d’abord le premier et, au lieu de naviguer au sein de différents répertoires, je pointe sur chaque ‘quartier’ afin de me faire une idée du nombre de packages et de classes dans chaque package. Dans l’exemple suivant, nous pouvons voir un package avec une unique classe, de taille réduite et peu complexe. Ce que nous confirme Sonar : seulement 5 méthodes dans quelques lignes de code et pratiquement aucune complexité. Je peux aussi repérer un composant inhabituel comme celui-ci, avec un nombre élevé de getters et de setters représentant plusieurs centaines de lignes de code, mais aucune complexité. Donc un composant constitutif d’une structure de données importante, mais sans traitement particulier, facile à comprendre et à faire évoluer. A noter pour l’équipe de QA : tests uniquement sur les valeurs. La grosse tour derrière : nombre de lignes de codes élevé, encore une structure de données importante avec un grand nombre d’accesseurs, mais aussi complexe et… quelques défauts critiques ou majeurs. Cette classe ira directement dans le plan de remédiation : 2 défauts critiques susceptibles d’impacter la sécurité de l’application, un grand nombre d’attributs ‘private’ à remplacer par des constantes et plusieurs méthodes à découper afin de réduire leur complexité et ainsi améliorer la lisibilité du code et sa capacité d’évolution.
Vous pensiez que cette classe était énorme? Jetez donc un coup d’oeil là-dessus. J’ai ajouté le dossier ‘client’ à mon analyse Sonar (en fait, Jenkins, cf. notre post antérieur sur ce sujet) et ce n’est pas juste un petit arrondissement.
Regarder le ‘quartier’ à gauche, notre package ‘common’, comment il a l’air tout petit maintenant.
Une vue plongeante me permet de visualiser la structure interne de ce package ‘client’, le nombre et la taille de ses classes, et de lister quelques composants à investiguer par la suite.
Ai-je oublié de mentionner que vous pouvez faire pivoter cette représentation dans n’importe quelle direction ?
Et maintenant, l’application complète.
J’ai ajouté la partie ‘server’ á l’analyse afin de bénéficier d’une vue complète.
Vous pouvez imaginer dans quelle direction investiguer, non ?
Ce dernier quartier, plus grand, plus gros, plus haut.
Et nous pouvons repérer immédiatement quelques classes intéressantes.
Cette grande tour rouge est le composant logique de cette fine flêche verte qui est sa classe ‘Form’.
Je suis curieux de voir quelle entité logique se cache derrière.
Un coup d’oeil au code source : ce composant permet de gérer toutes les données et les traitements pour l’utilisateur final. Environ 8 000 lignes de code. Et regardez ceci:
- En tête du top 5 de la complexité : plus de 1 200 points de CC.
- Avec le plus de code Copié-Collé.
- Et le plus de violations, dont 4 bloquantes.
Nous avons notre champion.
Le plugin City Model n’est pas seulement très ludique, il est également extrêmement utile. Sonar analyse les 150 000 lignes de code de cette application en moins de 10 minutes. Vraiment rapide.
Plutôt que de passer une paire d’heures à naviguer dans différents répertoires et à prendre des notes, je vais directement réaliser une analyse incrémentale et explorer une représentation 3D du code source.
Je peux repérer immédiatement les différentes parties á investiguer, la densité de chaque package, la granularité des composants, ceux plus particulièrement intéressant pour notre audit. Bien sûr, je regarderai ensuite la liste des défauts et leur type afin d’effectuer une évaluation plus précise.
Le plugin City Model me donne un aperçu très utile de l’application et me permet de gagner en temps et en précision dans cette phase pré-assessment.
Bon travail eXcentia. Un beau cadeau.
Cette publication est également disponible en Leer este articulo en castellano : liste des langues séparées par une virgule, Read that post in english : dernière langue.