Comment interpréter les métriques?

Les métriques de codes, c'est beau, mais on en fait quoi?

L'auteur de ce sujet a trouvé une solution à son problème.
Staff
Auteur du sujet

Salut. Quand, je code, j'aime bien faire en sorte que mon code soit maintenable, testable, tout ça. J'aime aussi coder avec des IDE. Et les deux ensembles, ça fait qu'on peut facilement utiliser des outils qui proposent des métriques de code. Par exemple, quand je code en C#, sous VS 2013, je peux aller calculer les métriques suivantes : - indice de maintenabilité - complexité cyclomatique - profondeur de l'héritage - couplage de classe - lignes de code

VS vous dit par exemple que pour l'indice de maintenabilité, plus c'est haut, mieux c'est et que c'est l'inverse pour son voisin du dessous.

Seulement, quand mon projet avance, ma solution possède pas mal de classes etc et je n'ai aps le temps de faire du refactoring pour mener toutes mes classes à un indice de maintenabilité >80 par exemple. Et encore, je ne vois pas trop le vrai gain entre un indice à 80 et un autre à 70.

exemple de métriques

La métrique d'un projet ASP.NET et de son test unitaire

Conaîtriez-vous une recette pour interpréter ces métriques afin que je puisse savoir quels modules de mon code redévelopper/refactoriser/laisser tel que? Comment analyser réellement les chiffres donnés?

+0 -0

Cette réponse a aidé l'auteur du sujet

Salut

Il faut savoir que les valeurs sont purement théorique, tu ne pourras avoir les 4 valeurs bonnes, a moins d'avoir aucun code :P . Ca ne veut pas dire que ton code est maintenable. Aprés il faut plus regarder au niveaux des class / méthode pour la complexité cyclomatique

Pour la différente entre 70 - 80 d'indice, elle n'est pas importe sur le projet, il faut voir sur les fichiers eux même. Ce qui est important, il faut que ca reste vert (>20).

Pour info, Maintainability Index = MAX(0,(171 - 5.2 * ln(Halstead Volume) - 0.23 * (Cyclomatic Complexity) - 16.2 * ln(Lines of Code))*100 / 171)

Ce que je pourrait dire sinon (attention la suite c'est mon avis, je ne suis pas totalement sur non plus)

-> Profondeur d'héritage : Tu as 4, mh 3-4 doit être le maximum, tu commences à avoir un arbre d'héritage sympa, je ne sais pas quelles sont tes objects mais hérité 4 fois c'est beaucoup (non?)

-> Complexité cyclomatique : Pour une méthode -> Si + 30 noeuds (cas possible, if/switch/etc…) refacto -> < 30 acceptables mais faut un bon taux de couverture (ce qui veut dire que ton test unitaire sera compliqué) VS peut te dire la couverture de tes tests unitaires.

-> Couplage de classe : On entend souvent une classe/méthode doit faire une seule chose, en gros c'est ça. (si je ne me trompe pas)

Édité par zyhou

+1 -0
Staff
Auteur du sujet

Profondeur d'héritage : Tu as 4, mh 3-4 doit être le maximum, tu commences à avoir un arbre d'héritage sympa, je ne sais pas quelles sont tes objects mais hérité 4 fois c'est beaucoup (non?)

j'ai rien codé, j'ai juste créé un projet MVC5, sur le coup, je dirais que le fait que le dbcontext a pris un héritage en passant de mvc4 à 5 doit aider ^^.

Sinon, merci pour ta réponse complète \o/

Édité par artragis

+0 -0

Ah je vois, si tu as crée le projet avec identification il va te créer plein de chose (mais alors la plein comme tu le vois), si en plus tu rajoutes Web/API je te dit pas…

Bon j'ai regardé sur un projet, en effet il en met 4. (même pas sur contexte) L'héritage est mal fait je trouve, il prend les objects du Framework et les perso. Il faudrait regarder la valeur que pour ta couche Model (ou dossier model) qui contient que ses class perso.

Le AccountController (crée de base), il me met 72 en complexité, il y a moyen de le "nettoyer" mais est ce que le code sera plus claire je ne pense pas.

Je demande autour de moi pour voir, je te tient au courant. ;)

Édité par zyhou

+0 -0
Vous devez être connecté pour pouvoir poster un message.
Connexion

Pas encore inscrit ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte