{"id":133,"date":"2012-01-05T18:12:27","date_gmt":"2012-01-05T17:12:27","guid":{"rendered":"http:\/\/dev.qualilogy.com\/fr\/?p=133"},"modified":"2013-01-04T18:12:49","modified_gmt":"2013-01-04T17:12:49","slug":"city-model","status":"publish","type":"post","link":"http:\/\/qualilogy.com\/fr\/city-model\/","title":{"rendered":"City Model"},"content":{"rendered":"<p><a href=\"http:\/\/qualilogy.com\/wp-content\/uploads\/2011\/12\/City1.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignright size-full wp-image-796\" title=\"City1\" src=\"http:\/\/qualilogy.com\/wp-content\/uploads\/2011\/12\/City1.jpg\" alt=\"\" width=\"339\" height=\"224\" \/><\/a>J&rsquo;ai eu un beau cadeau de No\u00ebl.<\/p>\n<p>C&rsquo;est un plugin Sonar, d\u00e9velopp\u00e9 par <a title=\"eXcentia\" href=\"http:\/\/www.excentia.es\/\" target=\"_blank\">eXcentia<\/a>, un partenaire espagnol de la belle cit\u00e9 de Valencia, que vous connaissez probablement si vous vous int\u00e9ressez \u00e0 des \u00e9v\u00e9nements sportifs telle que la Coupe de l&rsquo;Am\u00e9rica, les grands prix de Formule 1 et de Moto GP, mais qui est aussi renomm\u00e9e pour sa sp\u00e9cialit\u00e9 gastronomique \u2026 <a title=\"Paella\" href=\"http:\/\/fr.wikipedia.org\/wiki\/Paella\" target=\"_blank\">la paella<\/a>. <!--more--><\/p>\n<p>Cet add-on pour Sonar s&rsquo;appuie sur la librairie WebGL et constitue l&rsquo;une des briques du framework QAlitaX d&rsquo;eXcentia. Il propose une repr\u00e9sentation 3D d&rsquo;une application sous la forme d&rsquo;une cit\u00e9 mod\u00e9lis\u00e9e \u00e0 partir des m\u00e9triques de Sonar. Vous trouverez ce plugin <a title=\"eXcentia City Model\" href=\"https:\/\/servicios.excentia.es\/confluence\/display\/QAX\/QAlitaX+City+Model\" target=\"_blank\">ici<\/a> sur le site d&rsquo;eXcentia, disponible pour Java.<\/p>\n<p><a href=\"http:\/\/qualilogy.com\/wp-content\/uploads\/2011\/12\/city11.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignright size-full wp-image-830\" title=\"city1\" src=\"http:\/\/qualilogy.com\/wp-content\/uploads\/2011\/12\/city11.png\" alt=\"\" width=\"373\" height=\"268\" \/><\/a>Voici un exemple tir\u00e9 de cette m\u00eame page, qui d\u00e9crit parfaitement comment cela fonctionne:<\/p>\n<ul>\n<li>Les packages Java sont repr\u00e9sent\u00e9s sous forme de quartiers.<\/li>\n<li>Les classes sont repr\u00e9sent\u00e9es sous forme d&rsquo;\u00e9difices.<\/li>\n<\/ul>\n<p>Pour chaque classe:<\/p>\n<ul>\n<li>La hauteur de l&rsquo;\u00e9difice repr\u00e9sente le nombre de lignes de code.<\/li>\n<li>La largeur de l&rsquo;\u00e9difice repr\u00e9sente le nombre de m\u00e9thodes de la classe.<\/li>\n<li>La couleur repr\u00e9sente la complexit\u00e9, du vert tr\u00e8s peu complexe au rouge tr\u00e8s complexe.<\/li>\n<\/ul>\n<p>Bien. Amusant allez-vous dire. Non seulement c&rsquo;est assez ludique mais c&rsquo;est surtout tr\u00e8s utile.<\/p>\n<p>Habituellement, lorsque vous r\u00e9alisez un audit de la qualit\u00e9 d&rsquo;une application, vous ne disposez pas de beaucoup d&rsquo;informations. Non pas que l&rsquo;on ne veuille pas vous la donner, mais simplement parce qu&rsquo;elle est rare voire inexistante. Pourquoi croyez-vous que l&rsquo;on vous demande un assessment ?<\/p>\n<p>Or la premi\u00e8re chose que vous souhaitez conna\u00eetre, c&rsquo;est : de quelle type d&rsquo;applications s&rsquo;agit-il ? Avant de vous lancer \u00e0 l&rsquo;abordage, il faut qualifier s&rsquo;il s&rsquo;agit d&rsquo;un monstre \u00e9norme qui va prendre plusieurs heures d&rsquo;analyse, ou d&rsquo;un sac de noeuds avec plein de bouts de code tr\u00e8s compliqu\u00e9s et des appels dynamiques.<\/p>\n<p>Auparavant, je prenais le temps d&rsquo;examiner le code livr\u00e9 et de noter :<\/p>\n<ul>\n<li>Combien de r\u00e9pertoires, pour me faire une id\u00e9e du nombre de packages et de leur organisation ?<\/li>\n<li>Combien de fichiers et quels r\u00e9pertoires contiennent le plus de fichiers, afin d&rsquo;identifier au plus t\u00f4t les packages avec le plus grand nombre de classes, et donc de fonctionnalit\u00e9s.<\/li>\n<\/ul>\n<p>Maintenant, gr\u00e2ce \u00e0 Sonar et ce plugin, je peux obtenir facilement cette information et plus, sans cette phase d&rsquo;investigation pr\u00e9-analyse.<\/p>\n<p>Prenons une application avec 3 r\u00e9pertoires principaux: common, client et server. J&rsquo;analyse d&rsquo;abord le premier et, au lieu de naviguer au sein de diff\u00e9rents r\u00e9pertoires, je pointe sur chaque &lsquo;quartier&rsquo; afin de me faire une id\u00e9e du nombre de packages et de classes dans chaque package. Dans l&rsquo;exemple suivant, nous pouvons voir un package avec une unique classe, de taille r\u00e9duite et peu complexe. Ce que nous confirme Sonar : seulement 5 m\u00e9thodes dans quelques lignes de code et pratiquement aucune complexit\u00e9. <a href=\"http:\/\/qualilogy.com\/wp-content\/uploads\/2011\/12\/CitySmallDistrict1.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-799\" title=\"CitySmallDistrict\" src=\"http:\/\/qualilogy.com\/wp-content\/uploads\/2011\/12\/CitySmallDistrict1.jpg\" alt=\"\" width=\"568\" height=\"534\" \/><\/a>Je peux aussi rep\u00e9rer un composant inhabituel comme celui-ci, avec un nombre \u00e9lev\u00e9 de getters et de setters repr\u00e9sentant plusieurs centaines de lignes de code, mais aucune complexit\u00e9. Donc un composant constitutif d&rsquo;une structure de donn\u00e9es importante, mais sans traitement particulier, facile \u00e0 comprendre et \u00e0 faire \u00e9voluer. A noter pour l&rsquo;\u00e9quipe de QA : tests uniquement sur les valeurs. <a href=\"http:\/\/qualilogy.com\/wp-content\/uploads\/2011\/12\/Citysmallclass1Metrics.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-800\" title=\"Citysmallclass1Metrics\" src=\"http:\/\/qualilogy.com\/wp-content\/uploads\/2011\/12\/Citysmallclass1Metrics.jpg\" alt=\"\" width=\"630\" height=\"448\" \/><\/a>La grosse tour derri\u00e8re : nombre de lignes de codes \u00e9lev\u00e9, encore une structure de donn\u00e9es importante avec un grand nombre d&rsquo;accesseurs, mais aussi complexe et&#8230; quelques d\u00e9fauts critiques ou majeurs. Cette classe ira directement dans le plan de rem\u00e9diation : 2 d\u00e9fauts critiques susceptibles d&rsquo;impacter la s\u00e9curit\u00e9 de l&rsquo;application, un grand nombre d&rsquo;attributs &lsquo;private&rsquo; \u00e0 remplacer par des constantes et plusieurs m\u00e9thodes \u00e0 d\u00e9couper afin de r\u00e9duire leur complexit\u00e9 et ainsi am\u00e9liorer la lisibilit\u00e9 du code et sa capacit\u00e9 d&rsquo;\u00e9volution.<\/p>\n<p><a href=\"http:\/\/qualilogy.com\/wp-content\/uploads\/2011\/12\/CityBiglClass1Metrics.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-801\" title=\"CityBiglClass1Metrics\" src=\"http:\/\/qualilogy.com\/wp-content\/uploads\/2011\/12\/CityBiglClass1Metrics.jpg\" alt=\"\" width=\"566\" height=\"202\" \/><\/a><\/p>\n<p><a href=\"http:\/\/qualilogy.com\/wp-content\/uploads\/2011\/12\/City2.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignleft size-full wp-image-804\" title=\"City2\" src=\"http:\/\/qualilogy.com\/wp-content\/uploads\/2011\/12\/City2.jpg\" alt=\"\" width=\"352\" height=\"254\" \/><\/a>Vous pensiez que cette classe \u00e9tait \u00e9norme? Jetez donc un coup d&rsquo;oeil l\u00e0-dessus. J&rsquo;ai ajout\u00e9 le dossier &lsquo;client&rsquo; \u00e0 mon analyse Sonar (en fait, Jenkins, cf. notre <a title=\"Analyse Sonar avec Jenkins\" href=\"http:\/\/qualilogy.com\/fr\/analyse-de-code-cobol-avec-sonar-et-jenkins\" target=\"_blank\">post ant\u00e9rieur<\/a> sur ce sujet) et ce n&rsquo;est pas juste un petit arrondissement.<\/p>\n<p>Regarder le &lsquo;quartier&rsquo; \u00e0 gauche, notre package &lsquo;common&rsquo;, comment il a l&rsquo;air tout petit maintenant.<\/p>\n<p><a href=\"http:\/\/qualilogy.com\/wp-content\/uploads\/2011\/12\/City2Up1.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignright size-full wp-image-806\" title=\"City2Up\" src=\"http:\/\/qualilogy.com\/wp-content\/uploads\/2011\/12\/City2Up1.jpg\" alt=\"\" width=\"333\" height=\"247\" \/><\/a><\/p>\n<p>&nbsp;<\/p>\n<p>Une vue plongeante me permet de visualiser la structure interne de ce package &lsquo;client&rsquo;, le nombre et la taille de ses classes, et de lister quelques composants \u00e0 investiguer par la suite.<\/p>\n<p>Ai-je oubli\u00e9 de mentionner que vous pouvez faire pivoter cette repr\u00e9sentation dans n&rsquo;importe quelle direction ?<\/p>\n<p>&nbsp;<\/p>\n<p><a href=\"http:\/\/qualilogy.com\/wp-content\/uploads\/2011\/12\/CityWE30.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignleft size-full wp-image-807\" title=\"CityWE30\" src=\"http:\/\/qualilogy.com\/wp-content\/uploads\/2011\/12\/CityWE30.jpg\" alt=\"\" width=\"317\" height=\"252\" \/><\/a><\/p>\n<p>&nbsp;<\/p>\n<p>Et maintenant, l&rsquo;application compl\u00e8te.<\/p>\n<p>J&rsquo;ai ajout\u00e9 la partie &lsquo;server&rsquo; \u00e1 l&rsquo;analyse afin de b\u00e9n\u00e9ficier d&rsquo;une vue compl\u00e8te.<\/p>\n<p>Vous pouvez imaginer dans quelle direction investiguer, non ?<\/p>\n<p>Ce dernier quartier, plus grand, plus gros, plus haut.<br \/>\n<a href=\"http:\/\/qualilogy.com\/wp-content\/uploads\/2011\/12\/CityBig3.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignright size-full wp-image-809\" title=\"CityBig3\" src=\"http:\/\/qualilogy.com\/wp-content\/uploads\/2011\/12\/CityBig3.jpg\" alt=\"\" width=\"415\" height=\"269\" \/><\/a><\/p>\n<p>&nbsp;<\/p>\n<p>Et nous pouvons rep\u00e9rer imm\u00e9diatement quelques classes int\u00e9ressantes.<\/p>\n<p>Cette grande tour rouge est le composant logique de cette fine fl\u00eache verte qui est sa classe &lsquo;Form&rsquo;.<\/p>\n<p>Je suis curieux de voir quelle entit\u00e9 logique se cache derri\u00e8re.<\/p>\n<p>Un coup d&rsquo;oeil au code source : ce composant permet de g\u00e9rer toutes les donn\u00e9es et les traitements pour l&rsquo;utilisateur final. Environ 8 000 lignes de code. Et regardez ceci:<a href=\"http:\/\/qualilogy.com\/wp-content\/uploads\/2011\/12\/ClassBig1.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-816\" title=\"ClassBig1\" src=\"http:\/\/qualilogy.com\/wp-content\/uploads\/2011\/12\/ClassBig1.jpg\" alt=\"\" width=\"408\" height=\"169\" \/><\/a><\/p>\n<ul>\n<li>En t\u00eate du top 5 de la complexit\u00e9 : plus de 1 200 points de CC.<\/li>\n<li>Avec le plus de code Copi\u00e9-Coll\u00e9.<\/li>\n<li>Et le plus de violations, dont 4 bloquantes.<\/li>\n<\/ul>\n<p>Nous avons notre champion.<\/p>\n<p>Le plugin City Model n&rsquo;est pas seulement tr\u00e8s ludique, il est \u00e9galement extr\u00eamement utile. Sonar analyse les 150 000 lignes de code de cette application en moins de 10 minutes. Vraiment rapide.<\/p>\n<p>Plut\u00f4t que de passer une paire d&rsquo;heures \u00e0 naviguer dans diff\u00e9rents r\u00e9pertoires et \u00e0 prendre des notes, je vais directement r\u00e9aliser une analyse incr\u00e9mentale et explorer une repr\u00e9sentation 3D du code source.<\/p>\n<p>Je peux rep\u00e9rer imm\u00e9diatement les diff\u00e9rentes parties \u00e1 investiguer, la densit\u00e9 de chaque package, la granularit\u00e9 des composants, ceux plus particuli\u00e8rement int\u00e9ressant pour notre audit. Bien s\u00fbr, je regarderai ensuite la liste des d\u00e9fauts et leur type afin d&rsquo;effectuer une \u00e9valuation plus pr\u00e9cise.<\/p>\n<p>Le plugin City Model me donne un aper\u00e7u tr\u00e8s utile de l&rsquo;application et me permet de gagner en temps et en pr\u00e9cision dans cette phase pr\u00e9-assessment.<\/p>\n<p>Bon travail eXcentia. Un beau cadeau.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>J&rsquo;ai eu un beau cadeau de No\u00ebl. C&rsquo;est un plugin Sonar, d\u00e9velopp\u00e9 par eXcentia, un partenaire espagnol de la belle cit\u00e9 de Valencia, que vous connaissez probablement si vous vous int\u00e9ressez \u00e0 des \u00e9v\u00e9nements sportifs telle que la Coupe de l&rsquo;Am\u00e9rica, les grands prix de Formule 1 et de Moto GP, mais qui est aussi [&hellip;]<\/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-133","post","type-post","status-publish","format-standard","hentry","category-sonar-360"],"_links":{"self":[{"href":"http:\/\/qualilogy.com\/fr\/wp-json\/wp\/v2\/posts\/133"}],"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=133"}],"version-history":[{"count":1,"href":"http:\/\/qualilogy.com\/fr\/wp-json\/wp\/v2\/posts\/133\/revisions"}],"predecessor-version":[{"id":134,"href":"http:\/\/qualilogy.com\/fr\/wp-json\/wp\/v2\/posts\/133\/revisions\/134"}],"wp:attachment":[{"href":"http:\/\/qualilogy.com\/fr\/wp-json\/wp\/v2\/media?parent=133"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/qualilogy.com\/fr\/wp-json\/wp\/v2\/categories?post=133"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/qualilogy.com\/fr\/wp-json\/wp\/v2\/tags?post=133"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}