{"id":166,"date":"2012-03-19T20:58:36","date_gmt":"2012-03-19T19:58:36","guid":{"rendered":"http:\/\/dev.qualilogy.com\/fr\/?p=166"},"modified":"2013-01-04T21:00:30","modified_gmt":"2013-01-04T20:00:30","slug":"la-metrique-abc-2","status":"publish","type":"post","link":"http:\/\/qualilogy.com\/fr\/la-metrique-abc-2\/","title":{"rendered":"La m\u00e9trique ABC"},"content":{"rendered":"<p>J&rsquo;ai particip\u00e9 r\u00e9cemment \u00e0 certaines discussions sur l&rsquo;utilit\u00e9 de la m\u00e9trique LOC (Lines Of Code). Comme expliqu\u00e9 dans certains posts pr\u00e9c\u00e9dents, c&rsquo;est la premi\u00e8re m\u00e9trique que je regarde lorsque j&rsquo;effectue un audit de la qualit\u00e9 d&rsquo;une application. Et j&rsquo;utilise cette m\u00e9trique uniquement dans le but de me faire une id\u00e9e de la taille de l&rsquo;application.<\/p>\n<p><!--more--><\/p>\n<p>Ensuite, j&rsquo;examinerai d&rsquo;autres m\u00e9trique, comme la Complexit\u00e9 Cyclomatique (CC) afin de me faire une id\u00e9e de son poids fonctionnel. Il est toujours int\u00e9ressant de recouper ces mesures, par exemple en calculant le nombre de LOC et la CC moyenne par m\u00e9thode ou par classe. Ceci permet de rep\u00e9rer des classes ou des m\u00e9thodes qui sont difficilement compr\u00e9hensibles, soit parce que le d\u00e9veloppeur devra parcourir sur son \u00e9cran un fichier important de haut en bas afin de suivre le flux d&rsquo;instructions, soit parce qu&rsquo;un nombre important de conditions et\/ou de boucles rendra ce flux et la logique applicative plus complexe \u00e0 comprendre. De telle sorte que le risque est plus \u00e9lev\u00e9 de cr\u00e9er un d\u00e9faut lorsqu&rsquo;une modification est effectu\u00e9e dans le code.<\/p>\n<p>Si vous parlez de LOC dans une discussion, vous rencontrerez probablement quelques personnes qui vous diront que cette m\u00e9trique ne devrait pas \u00eatre utilis\u00e9e pour mesurer la productivit\u00e9 ou l&rsquo;effort. Je suis d&rsquo;accord pour dire que c&rsquo;est incorrect, l&rsquo;utilisation de cette m\u00e9trique doit se limiter \u00e0 mesurer la taille.<\/p>\n<p>Les points de fonction (PF) sont souvent consid\u00e9r\u00e9s comme la meilleure m\u00e9trique pour mesurer la productivit\u00e9. Ils pr\u00e9sentent certainement des avantages, notamment de pouvoir \u00eatre utilis\u00e9 avec des sp\u00e9cifications fonctionnelles, avant m\u00eame de commencer le d\u00e9veloppement, de sorte que les PF permettent d&rsquo;\u00e9valuer l&rsquo;effort n\u00e9cessaire pour mettre en \u0153uvre ces sp\u00e9cifications dans le code et d&rsquo;estimer la charge n\u00e9cessaire en jours\/homme. Toutefois, cette m\u00e9trique pr\u00e9sente, \u00e0 mon avis, un inconv\u00e9nient majeur : il n&rsquo;est pas facile d&rsquo;automatiser son calcul avec un outil d&rsquo;analyse de code et un expert en Points de Fonction sera tr\u00e8s prudent, pour ne pas dire suspicieux, d\u00e8s lors qu&rsquo;il devra utiliser des points de fonction calcul\u00e9s automatiquement.<\/p>\n<p>En travaillant sur les posts pr\u00e9c\u00e9dents avec le plugin City Model pour Sonar, j&rsquo;ai d\u00e9couvert que eXcentia, la soci\u00e9t\u00e9 espagnole \u00e0 l&rsquo;origine de ce plugin, en a \u00e9galement cr\u00e9\u00e9 un pour calculer une m\u00e9trique ABC.<\/p>\n<p>Je vous laisse d\u00e9couvrir la description de cette m\u00e9trique, \u00e0 partir d&rsquo;un document de son auteur Jerry Fitzpatrick, <a title=\"ABC Metric\" href=\"http:\/\/www.softwarerenovation.com\/ABCMetric.pdf\" target=\"_blank\">ici<\/a>.<\/p>\n<p>Cette m\u00e9trique est bas\u00e9e sur :<\/p>\n<ul>\n<li>A: Assignation d&rsquo;une valeur \u00e0 une variable.<\/li>\n<li>B: Branche, appel d&rsquo;une function ou d&rsquo;un nouvel objet.<\/li>\n<li>C: Condition, un test.<\/li>\n<\/ul>\n<p>J&rsquo;ai t\u00e9l\u00e9charg\u00e9 le plugin ABC depuis cette <a title=\"eXcentia ABC\" href=\"https:\/\/servicios.excentia.es\/confluence\/display\/QAX\/SONAR+ABC+Metric+Plugin\" target=\"_blank\">page<\/a> sur le site d&rsquo;eXcentia, et l&rsquo;ai install\u00e9 dans mon environnement Sonar.<\/p>\n<p>Ensuite, j&rsquo;ai cr\u00e9\u00e9 une classe \u2018TestAssignment.java\u2019 compos\u00e9 de 50 assignations comme celles-ci:<\/p>\n<address>int var1=0;<\/address>\n<address>int var2=0;<\/address>\n<address>\u2026<\/address>\n<p>J&rsquo;ai lanc\u00e9 une analyse Sonar depuis Jenkins (si vous souhaitez tenter par vous-m\u00eames, vous pouvez vous r\u00e9f\u00e9rer \u00e0 certains posts ant\u00e9rieurs tels que <a title=\"Sonar analysis\" href=\"http:\/\/qualilogy.com\/fr\/analyse-de-code-cobol-avec-sonar-et-jenkins\" target=\"_blank\">celui-ci<\/a>).<\/p>\n<p><a href=\"http:\/\/qualilogy.com\/wp-content\/uploads\/2012\/03\/ABC1Class.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignright size-medium wp-image-1311\" title=\"ABC1Class\" src=\"http:\/\/qualilogy.com\/wp-content\/uploads\/2012\/03\/ABC1Class-300x165.jpg\" alt=\"\" width=\"246\" height=\"135\" \/><\/a> Voici le r\u00e9sultat : un unique \u00e9difice pour une classe unique. Et voici les valeurs obtenues :<\/p>\n<ul>\n<li>ABC = 50, correspondant aux 50 assignations que nous avons cr\u00e9\u00e9es.<\/li>\n<li>LOC = 55, correspondant aux 50 assignations et quelques lignes suppl\u00e9mentaires afin de d\u00e9clarer la classe et son unique m\u00e9thode.<\/li>\n<li>Complexity = 1, le minimum possible puisqu&rsquo;il n&rsquo;y a aucune complexit\u00e9.<\/li>\n<\/ul>\n<p><a href=\"http:\/\/qualilogy.com\/wp-content\/uploads\/2012\/03\/ABC1Measure.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-1313\" title=\"ABC1Measure\" src=\"http:\/\/qualilogy.com\/wp-content\/uploads\/2012\/03\/ABC1Measure.jpg\" alt=\"\" width=\"582\" height=\"200\" \/><\/a><\/p>\n<p>Ensuite, j&rsquo;ai cr\u00e9\u00e9 une nouvelle classe \u2018TestCondition.java\u2019 avec le code suivant:<\/p>\n<address>public class TestCondition {<\/address>\n<address>    int var1=0;<\/address>\n<address>    public TestCondition() {<\/address>\n<address>        if (this.var1 = 0){<\/address>\n<address>            this.var1 = 1;<\/address>\n<address>        }<\/address>\n<address>        else{<\/address>\n<address>            this.var1 = 2;<\/address>\n<address>        }<\/address>\n<address>&#8230;<\/address>\n<p>et le test dans ce code dupliqu\u00e9 8 fois, afin d&rsquo;obtenir aproximativement le m\u00eame nombre de lignes de code que la classe pr\u00e9c\u00e9dente TestAssignment. A noter que nous aurons \u00e9galement 25 assignations: 3 dans chaque test x 8 duplications du test = 24 + 1 correspondant \u00e0 la d\u00e9claration initiale de la variable var1.<\/p>\n<p><a href=\"http:\/\/qualilogy.com\/wp-content\/uploads\/2012\/03\/ABC2Class.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignright size-medium wp-image-1328\" title=\"ABC2Class\" src=\"http:\/\/qualilogy.com\/wp-content\/uploads\/2012\/03\/ABC2Class-300x135.jpg\" alt=\"\" width=\"300\" height=\"135\" \/><\/a>J&rsquo;obtiens maintenant deux \u00e9difices, de la m\u00eame taille puisque ces deux classes ont (presque) le m\u00eame nombre de LOC mais l&rsquo;une est en rouge puisque son niveau de CC par m\u00e9thode est \u00e9lev\u00e9.<\/p>\n<p>Cependant, la m\u00e9trique ABC pour cette nouvelle classe n&rsquo;est que tr\u00e8s l\u00e9g\u00e8rement sup\u00e9rieure aux 25 assignations dans son code, ce qui montre que la complexit\u00e9 ne p\u00e8se pas beaucoup dans le r\u00e9sultat.<\/p>\n<p><a href=\"http:\/\/qualilogy.com\/wp-content\/uploads\/2012\/03\/ABC2Measure.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-1330\" title=\"ABC2Measure\" src=\"http:\/\/qualilogy.com\/wp-content\/uploads\/2012\/03\/ABC2Measure.jpg\" alt=\"\" width=\"584\" height=\"248\" \/><\/a><\/p>\n<p>Comme vous pouvez l&rsquo;imaginer, j&rsquo;ai ensuite cr\u00e9\u00e9 une troisi\u00e8me classe \u2018TestBranch.java\u2019 avec 50 instructions &lsquo;new&rsquo; :<\/p>\n<address>TestCondition myCondition1 = new TestCondition();<\/address>\n<address>TestCondition myCondition2 = new TestCondition();<\/address>\n<address>&#8230;<\/address>\n<address>TestCondition myCondition50 = new TestCondition();<\/address>\n<address> <\/address>\n<p><a href=\"http:\/\/qualilogy.com\/wp-content\/uploads\/2012\/03\/ABC3Class.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignright size-medium wp-image-1333\" title=\"ABC3Class\" src=\"http:\/\/qualilogy.com\/wp-content\/uploads\/2012\/03\/ABC3Class-300x149.jpg\" alt=\"\" width=\"300\" height=\"149\" \/><\/a>La hauteur reste la m\u00eame, mais maitenant la valeur ABC est la plus importante puisque nous avons 50 assignations qui accompagnent les 50 traitements de type &lsquo;Branch&rsquo;.<\/p>\n<p>Cependant, la m\u00e9trique ABC n&rsquo;a pas doubl\u00e9 para rapport \u00e0 la classe TestAssignement. Cette derni\u00e8re comporte 50 assignations pour une valeur ABC de 50, alors que la classe TestBranch a 50 assignations ET 50 &lsquo;branches&rsquo;, mais une valeur ABC l\u00e9g\u00e8rement au-dessus de 70.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-1334\" title=\"ABC3Measure\" src=\"http:\/\/qualilogy.com\/wp-content\/uploads\/2012\/03\/ABC3Measure.jpg\" alt=\"\" width=\"583\" height=\"298\" \/><\/p>\n<p>Donc, que pouvons nous dire au sujet de cette m\u00e9trique ABC?<\/p>\n<p>Tout d&rsquo;abord, nous pouvons voir diff\u00e9rentes valeurs pour ces trois classes comportant un m\u00eame nombre de LOC. Donc la m\u00e9trique ABC est bien ind\u00e9pendante du nombre de lignes de code.<\/p>\n<p>Cela dit, je ne suis pas certain qu&rsquo;on puisse l&rsquo;utiliser comme une mesure de la productivit\u00e9 ou de l&rsquo;effort de maintenance puisque que nous pouvons constater que le A de Assignment p\u00e8se beaucoup dans son calcul. Le C de Condition est clairement sous-\u00e9valu\u00e9. Or il est \u00e9vident que l&rsquo;effort n\u00e9cessaire pour effectuer une modification dans une structure de 8 &lsquo;if-else&rsquo; est plus \u00e9lev\u00e9 que pour introduire une modification dans une s\u00e9quence de 50 assignations. D&rsquo;autant que les conditions seront le plus souvent imbriqu\u00e9es (un if dans un if dans un autre if, etc.)<\/p>\n<p>Et la plupart du temps, un branchement occasionnera de nouvelles assignations. Et nous pouvons voir \u00e9galement que ajouter 50 branches \u00e0 50 assignations ne double pas le r\u00e9sultat par rapport \u00e0 50 assignations sans aucun branchement. Ceci est d\u00fb \u00e0 la formule de calcul de la m\u00e9trique ABC. Alors qu&rsquo;en fait, je pense que l&rsquo;effort du programmeur sera multipli\u00e9 par bien plus de deux.<\/p>\n<p>Aussi, quel usage pouvons nous faire de la m\u00e9trique ABC ? A cause de la pr\u00e9dominance du A de Assignment et de la sous-\u00e9valuation du C de Condition et, dans une moindre mesure, du B de Branch, je pense que cette m\u00e9trique est plus orient\u00e9e &lsquo;donn\u00e9es&rsquo; que &lsquo;logique&rsquo;. Ce qui n&rsquo;est pas un probl\u00e8me, puisque nous b\u00e9n\u00e9ficions d\u00e9j\u00e0 de la Complexit\u00e9 Cyclomatique pour \u00e9valuer la complexit\u00e9 fonctionnelle.<\/p>\n<p>Donc j&rsquo;ai cr\u00e9\u00e9 une nouvelle mod\u00e9lisation d&rsquo;une City avec:<\/p>\n<ul>\n<li>La hauteur toujours bas\u00e9e sur le nombre de LOC.<\/li>\n<li>La largeur bas\u00e9e sur le nombre d&rsquo;assignations, le A de la m\u00e9trique ABC.<\/li>\n<li>La couleur bas\u00e9e sur la valeur globale de la m\u00e9trique, de 1 (vert) \u00e0 100 (rouge).<\/li>\n<\/ul>\n<p>Voici ce que j&rsquo;obtiens pour les trois classes de mon test :<\/p>\n<p><a href=\"http:\/\/qualilogy.com\/wp-content\/uploads\/2012\/03\/ABCCity.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-1347\" title=\"ABCCity\" src=\"http:\/\/qualilogy.com\/wp-content\/uploads\/2012\/03\/ABCCity.jpg\" alt=\"\" width=\"583\" height=\"447\" \/><\/a><\/p>\n<p>Les trois \u00e9difices ont toujours la m\u00eame hauteur.<\/p>\n<p>Le plus petit en vert est la classe TestCondition avec une largeur de 25 correspondant \u00e0 ses 25 assignations et une couleur correspondant \u00e0 sa valeur ABC de 26.2, donc sous-\u00e9valuant le C de Condition.<\/p>\n<p>Les deux autres blocks correspondent aux classes TestAssignment et TestBranch avec une m\u00eame largeur de 50 correspondant au nombre d&rsquo;assignations mais le building TestBranch est plus rouge que celui pour TestAssignment \u00e0 cause des traitements de branchement.<\/p>\n<p>Cette repr\u00e9sentation visuelle permet de mieux comprendre comment utiliser la m\u00e9trique ABC. Je ne l&rsquo;utiliserais pas pour mesurer l&rsquo;effort de maintenance mais plut\u00f4t l&rsquo;orientation ou le poids des donn\u00e9es dans un objet, en prenant en compte la largeur de chaque \u00e9difice, et une mesure globale du risque pour ce composant, bas\u00e9e sur sa couleur. Un composant sera risqu\u00e9 soit parce qu&rsquo;il pr\u00e9sente une certaine complexit\u00e9 ou plus probablement un couplage important en plus de son poids en structures de donn\u00e9es.<\/p>\n<p>Le plugin ABC de eXcentia vient avec son propre widget (nous avons vu dans notre <a href=\"http:\/\/qualilogy.com\/fr\/city-model-nouvelle-version\" target=\"_blank\">post pr\u00e9c\u00e9dent<\/a> comment l&rsquo;ajouter dans notre dashboard Sonar afin de le personnaliser) :<\/p>\n<p><a href=\"http:\/\/qualilogy.com\/wp-content\/uploads\/2012\/03\/ABCWidget1.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-1350\" title=\"ABCWidget\" src=\"http:\/\/qualilogy.com\/wp-content\/uploads\/2012\/03\/ABCWidget1.jpg\" alt=\"\" width=\"582\" height=\"152\" \/><\/a><\/p>\n<p>Nous pouvons voir diff\u00e9rents nombres pour la m\u00e9trique ABC:<\/p>\n<ul>\n<li>Un total de 134.9 sur l&rsquo;ensemble de l&rsquo;application.<\/li>\n<li>Une moyenne de 45 par classe, ce qui repr\u00e9sente un risque mod\u00e9r\u00e9 au niveau d&rsquo;une classe.<\/li>\n<li>Une moyenne de 45 par m\u00e9thode, ce qui repr\u00e9sente un risque plus \u00e9lev\u00e9 et un refactoring devrait \u00eatre envisag\u00e9 pour les 2 m\u00e9thodes avec une valeur ABC sup\u00e9rieure \u00e0 45.<\/li>\n<\/ul>\n<p>Donc ce widget est en ligne avec l&rsquo;utilisation que nous recommandons pour la m\u00e9trique ABC, bas\u00e9e sur le risque d&rsquo;introduire un d\u00e9faut lorsqu&rsquo;une modification est effectu\u00e9e sur un composant.<\/p>\n<p>Et si je souhaite une meilleure appr\u00e9ciation de ce risque, le plugin ABC me permet d&rsquo;effectuer un drill-down.<\/p>\n<p><a href=\"http:\/\/qualilogy.com\/wp-content\/uploads\/2012\/03\/ABC4Class.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignleft size-full wp-image-1351\" title=\"ABC4Class\" src=\"http:\/\/qualilogy.com\/wp-content\/uploads\/2012\/03\/ABC4Class.jpg\" alt=\"\" width=\"450\" height=\"307\" \/><\/a>Ici, j&rsquo;ai s\u00e9lectionn\u00e9 l&rsquo;\u00e9difice le plus \u00e0 risque dans ma mod\u00e9lisation de City, correspondant \u00e0 la classe TestBranch, avec ses diff\u00e9rentes valeurs.<\/p>\n<p>Il me suffit de cliquer sur son nom pour descendre jusqu&rsquo;\u00e0 un onglet sp\u00e9cifique \u00e0 la m\u00e9trique et aux mesures ABC pour cet objet.<\/p>\n<p><a href=\"http:\/\/qualilogy.com\/wp-content\/uploads\/2012\/03\/ABCOnglet.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-1353\" title=\"ABCOnglet\" src=\"http:\/\/qualilogy.com\/wp-content\/uploads\/2012\/03\/ABCOnglet.jpg\" alt=\"\" width=\"539\" height=\"113\" \/><\/a><\/p>\n<p>Le mix des deux plugins eXcentia pour Sonar, City Model et ABC permet une \u00e9valuation visuelle du niveau de risque et du besoin de refactoring pour une application.<\/p>\n<p>Voici un exemple r\u00e9el: ici, j&rsquo;ai analys\u00e9 un package dont je sais qu&rsquo;il contient quelques classes dangereuses:<\/p>\n<p><a href=\"http:\/\/qualilogy.com\/wp-content\/uploads\/2012\/03\/ABCSessionUsuario.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-1355\" title=\"ABCSessionUsuario\" src=\"http:\/\/qualilogy.com\/wp-content\/uploads\/2012\/03\/ABCSessionUsuario.jpg\" alt=\"\" width=\"584\" height=\"448\" \/><\/a><\/p>\n<p>Nous pouvons voir sur la droite le quartier &lsquo;TestABC&rsquo; correspondant \u00e0 ce package avec les trois classes que nous avons cr\u00e9\u00e9es pour nos tests. Maintenant, dans cette repr\u00e9sentation, j&rsquo;ai modifi\u00e9 l&rsquo;expression pour calculer la largeur de chaque \u00e9difice afin de prendre en compte le nombre moyen d&rsquo;assignations par m\u00e9thode, et non plus le nombre total pour la classe comme pr\u00e9c\u00e9demment.<\/p>\n<p>Dans la figure ci-dessus, je pointe la tour rouge tr\u00e8s \u00e9lev\u00e9e, sur la gauche, une classe &lsquo;SesionUsuario&rsquo; qui g\u00e8re toutes les donn\u00e9es de la session d&rsquo;un utilisateur dans l&rsquo;application. Nous pouvons constater:<\/p>\n<ul>\n<li>Un mombre de lignes de code de 2 700 LOC, ce qui explique la hauteur de la tour.<\/li>\n<li>Une valeur ABC globale de 538.6, ce qui explique la couleur rouge de la tour.<\/li>\n<li>Que cette valeur globale est bas\u00e9e sur 522 Assignments.<\/li>\n<li>Un nombre important de m\u00e9thodes: 67, ce qui explique la largeur de la tour (522 Assignments \/ 67 m\u00e9thodes).<\/li>\n<\/ul>\n<p><a href=\"http:\/\/qualilogy.com\/wp-content\/uploads\/2012\/03\/ABCSessionUsuarioMeasure1.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignright size-full wp-image-1359\" title=\"ABCSessionUsuarioMeasure\" src=\"http:\/\/qualilogy.com\/wp-content\/uploads\/2012\/03\/ABCSessionUsuarioMeasure1.jpg\" alt=\"\" width=\"262\" height=\"20\" \/><\/a>Un drill-down sur cette classe montre la pr\u00e9sence de 71 Branchs et 112 Conditions dans son code. Cela confirme la sur\u00e9valuation des Assignments dans la valeur globale de la m\u00e9trique ABC.<\/p>\n<p>Avec les param\u00e8tres initiaux du plugin City Model, cette classe appara\u00eetrait aussi haute, avec une base plus importante bas\u00e9e sur le nombre de ses m\u00e9thodes, mais compl\u00e8tement verte parce que sa Complexit\u00e9 Cyclomatiquue par m\u00e9thode serait assez basse. Donc elle nous semblerait un composant important mais pas n\u00e9cessairement en premi\u00e8re position pour un refactoring.<\/p>\n<p>En utilisant les mesures ABC, la largeur est beaucoup moins importante, puisque la valeur ABC par m\u00e9thode est assez peu \u00e9lev\u00e9, mais elle appara\u00eet compl\u00e8tement rouge, ce qui attire imm\u00e9diatement notre attention sur le risque d&rsquo;introducire un d\u00e9faut lors d&rsquo;une modification sur cette classe. Donc maintenant ce composant constitue un bon candidat pour une op\u00e9ration de refactoring.<\/p>\n<p>Il faut bien s\u00fbr prendre en compte d&rsquo;autres facteurs tels que la qualit\u00e9 du code sur la base du non-respect des bonnes pratiques de programmation. N\u00e9anmoins, cet exemple nous permet de voir que :<\/p>\n<ul>\n<li>LOC est une mesure de la taille technique d&rsquo;une application, qui ne convient pas pour \u00e9valuer le poids fonctionnel, la productivit\u00e9 d&rsquo;une \u00e9quipe de projet ou estimer un effort de maintenance.<\/li>\n<li>CC est une bonne mesure du poids fonctionnel bas\u00e9 sur le nombre de chemins logiques mais ce n&rsquo;est pas forc\u00e9ment un bon indicateur en mati\u00e8re de priorit\u00e9s de refactoring.<\/li>\n<li>Je pense que la m\u00e9trique ABC est une bonne mesure du &lsquo;data weight&rsquo; ou poids des donn\u00e9es d&rsquo;un composant, sur la base de la sur\u00e9valuation des &lsquo;assignments&rsquo; et de sa formule, donc \u00e0 ce titre un bon compl\u00e8ment de la CC, plus orient\u00e9e &lsquo;logique&rsquo;.<\/li>\n<li>Nous avons pu mod\u00e9lis\u00e9 une City sur la base des plugins de eXcentia pour Sonar, qui nous aide \u00e0 identifier rapidement quels sont les &lsquo;risky components&rsquo; et \u00e0 pointer les candidats prioritaires pour un plan de refactoring.<\/li>\n<\/ul>\n<p>Il est probable que l&rsquo;on peut imaginer toutes sortes de repr\u00e9sentations bas\u00e9es sur le City Model, afin d&rsquo;adresser diff\u00e9rentes questions. Encore d&rsquo;autres opportunit\u00e9s d&rsquo;exp\u00e9rimenter ce beau jouet dans le futur.<\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>J&rsquo;ai particip\u00e9 r\u00e9cemment \u00e0 certaines discussions sur l&rsquo;utilit\u00e9 de la m\u00e9trique LOC (Lines Of Code). Comme expliqu\u00e9 dans certains posts pr\u00e9c\u00e9dents, c&rsquo;est la premi\u00e8re m\u00e9trique que je regarde lorsque j&rsquo;effectue un audit de la qualit\u00e9 d&rsquo;une application. Et j&rsquo;utilise cette m\u00e9trique uniquement dans le but de me faire une id\u00e9e de la taille de l&rsquo;application.<\/p>\n","protected":false},"author":3,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[9],"tags":[],"class_list":["post-166","post","type-post","status-publish","format-standard","hentry","category-sonar-360"],"_links":{"self":[{"href":"http:\/\/qualilogy.com\/fr\/wp-json\/wp\/v2\/posts\/166"}],"collection":[{"href":"http:\/\/qualilogy.com\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/qualilogy.com\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/qualilogy.com\/fr\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"http:\/\/qualilogy.com\/fr\/wp-json\/wp\/v2\/comments?post=166"}],"version-history":[{"count":2,"href":"http:\/\/qualilogy.com\/fr\/wp-json\/wp\/v2\/posts\/166\/revisions"}],"predecessor-version":[{"id":168,"href":"http:\/\/qualilogy.com\/fr\/wp-json\/wp\/v2\/posts\/166\/revisions\/168"}],"wp:attachment":[{"href":"http:\/\/qualilogy.com\/fr\/wp-json\/wp\/v2\/media?parent=166"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/qualilogy.com\/fr\/wp-json\/wp\/v2\/categories?post=166"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/qualilogy.com\/fr\/wp-json\/wp\/v2\/tags?post=166"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}