{"id":137,"date":"2012-01-16T18:18:47","date_gmt":"2012-01-16T17:18:47","guid":{"rendered":"http:\/\/dev.qualilogy.com\/fr\/?p=137"},"modified":"2013-01-04T18:26:08","modified_gmt":"2013-01-04T17:26:08","slug":"8-criteres-de-choix-dun-outil-danalyse-de-code-12","status":"publish","type":"post","link":"http:\/\/qualilogy.com\/fr\/8-criteres-de-choix-dun-outil-danalyse-de-code-12\/","title":{"rendered":"8 crit\u00e8res de choix d\u2019un outil d\u2019analyse de code (1\/2)"},"content":{"rendered":"<p><a href=\"http:\/\/vicken.deviantart.com\/\" target=\"_blank\"><img loading=\"lazy\" decoding=\"async\" class=\"alignright size-full wp-image-948\" title=\"Qual8Criteria1\" src=\"http:\/\/qualilogy.com\/wp-content\/uploads\/2012\/01\/Qual8Criteria1.jpg\" alt=\"\" width=\"244\" height=\"339\" \/><\/a>Je suis toujours surpris par les comparatifs d\u2019outils d\u2019analyse de la qualit\u00e9 d\u2019une application qui pr\u00e9tendent d\u00e9finir les crit\u00e8res d&rsquo;un tel choix, alors que la seule r\u00e9ponse exacte \u00e1 cette question est que \u2018cela d\u00e9pend\u2019.<\/p>\n<p>Si vous souhaitez acheter une voiture, vous allez bien s\u00fbr effectuer votre choix selon un certain nombre de crit\u00e8res qui vont d\u00e9pendre de l\u2019usage auquel vous destinez votre v\u00e9hicule. Un coup\u00e9 d\u00e9capotable ou une voiture de sport sont des objets certes s\u00e9duisants mais peu pratiques s\u2019il s\u2019agit de transporter votre famille nombreuse, faire vos courses chez Carrefour, naviguer dans les dunes avec votre planche \u00e0 voile ou d\u00e9m\u00e9nager votre vieille tante.<\/p>\n<p>Il en va de m\u00eame en mati\u00e8re de s\u00e9lection d\u2019une plateforme d\u2019analyse de la qualit\u00e9 des applications. <!--more--><br \/>\nCe post n\u2019a donc pas pour but de d\u00e9finir les 8 crit\u00e8res ultimes de choix d\u2019un tel logiciel, sinon de lister 4 crit\u00e8res souvent rencontr\u00e9s et (dans le prochain post) 3 crit\u00e8res auxquels on ne pense pas assez. Oui, je sais, le compte n\u2019est pas bon. En fait, le dernier crit\u00e8re, le co\u00fbt logiciel, sera trait\u00e9 \u00e0 part.<\/p>\n<h3><span style=\"text-decoration: underline\">Nombre de technologies analys\u00e9es<\/span><\/h3>\n<p>C\u2019est pratiquement toujours le premier crit\u00e8re de la grille de s\u00e9lection. Je ne comprends pas pourquoi un outil capable de couvrir 20 langages serait sup\u00e9rieur \u00e0 celui qui n\u2019en analyse que 5, d\u00e8s lors que l\u2019un comme l\u2019autre sait analyser le code de vos applications. Aujourd\u2019hui, 50% des applications sont en J2EE et 25% de type Legacy (Mainframe Cobol \/ SAP). Cela varie plus ou moins selon les pays : certains continents sont plus Microsoft que d\u2019autres, avec un taux de C++ et de .Net plus \u00e9lev\u00e9. Cela varie \u00e9galement selon les secteurs : les banques et les assurances arr\u00eatent de fonctionner demain si Cobol dispara\u00eet.<\/p>\n<p>Les \u00e9diteurs logiciels le savent bien : ils vont donc centrer leurs efforts sur les technologies les plus rencontr\u00e9es chez leurs clients et ne vont pas investir sur Powerbuilder ou Delphi.<br \/>\nA moins que vous ne soyez parmi les plus grandes et\/ou les plus anciennes entreprises de votre secteur, que vous ayez accumul\u00e9 les strates technologiques au fil des ann\u00e9es, que vous ayez fusionn\u00e9 avec d\u2019autres soci\u00e9t\u00e9s, ou que vous ayez souvent chang\u00e9 de strat\u00e9gies de d\u00e9veloppement, il est probable que vous ayez plus de 75% de votre portefeuille applicatif sur 2 ou 3 technologies diff\u00e9rentes. Et fort probablement J2EE \/ Cobol \/ SAP. Et tr\u00e8s certainement la partie la plus critique, le c\u0153ur de m\u00e9tier de votre entreprise.<\/p>\n<p>Sortez de votre liste de s\u00e9lection les outils qui ne couvrent pas vos applications. Pour les outils restants, v\u00e9rifiez dans le d\u00e9tail \u2013 \u00e1 l\u2019aide d\u2019un pilote par exemple &#8211; la qualit\u00e9 des analyses r\u00e9alis\u00e9es. Vous n\u2019avez que faire des autres langages : cela constitue une simple information, pas un r\u00e9el crit\u00e8re de choix.<\/p>\n<h3><span style=\"text-decoration: underline\">Nombre de m\u00e9triques<\/span><\/h3>\n<p>Comme pour le point pr\u00e9c\u00e9dent, centrez vous sur la qualit\u00e9 et la valeur des m\u00e9triques propos\u00e9es plut\u00f4t que sur leur nombre. C\u2019est bien d\u2019avoir 20 r\u00e8gles de nommage pour tous les types d\u2019objets que comptent vos applications, mais cela ne vaut pas une m\u00e9trique qui va couvrir un d\u00e9faut grave de programmation avec un risque important de voir l\u2019application s\u2019arr\u00eater ou provoquer une corruption de donn\u00e9es.<\/p>\n<p>Identifiez les 10 \u00e0 20 m\u00e9triques sur lesquelles vous :<\/p>\n<ul>\n<li>Validez la livraison d\u2019une application (Quality Gate).<\/li>\n<li>V\u00e9rifiez les SLAs de vos providers.<\/li>\n<li>Faites reposer les process de Continuous Integration \/ Improvement de vos \u00e9quipes de d\u00e9veloppement.<\/li>\n<\/ul>\n<p>Dans mon exp\u00e9rience, le nombre de m\u00e9triques ne jouera un r\u00f4le que dans deux cas bien pr\u00e9cis :<\/p>\n<ol>\n<li>Le calcul de la dette technique (nous aurons l\u2019occasion d\u2019y revenir).<\/li>\n<li>L\u2019audit de la qualit\u00e9 d\u2019une application que l\u2019on va \u2018acqu\u00e9rir\u2019 (reprise de maintenance par exemple) ou afin d\u2019identifier un probl\u00e8me particulier (souci de performance par exemple).<\/li>\n<\/ol>\n<p>Mais m\u00eame dans ce dernier cas, il est bien rare de d\u00e9couvrir exactement le bug en question ou un d\u00e9faut sp\u00e9cifique \u00e1 l\u2019aide d\u2019une m\u00e9trique particuli\u00e8re. De plus, ce cas correspond \u00e0 un contexte de consulting et non pas d\u2019acquisition d\u2019un outil logiciel.<\/p>\n<p>Construisez la liste des bonnes pratiques indispensables pour vos applications : ce sont des standards disponibles sur le march\u00e9 et normalement la plupart des outils devraient les int\u00e9grer. Dans le cas contraire, c\u2019est que le produit est probablement encore un peu jeune sur cette technologie.<\/p>\n<p>Recensez ensuite les m\u00e9triques int\u00e9ressantes mais non indispensables, en fonction des cas d\u2019utilisation que vous souhaitez mettre en place. Le reste est du \u2018nice to have\u2019.<\/p>\n<h3><span style=\"text-decoration: underline\">Possibilit\u00e9 de cr\u00e9er de nouvelles m\u00e9triques<\/span><\/h3>\n<p>Alerte : crit\u00e8re dangereux.<br \/>\nUn principe de base en informatique : si c\u2019est disponible, vous allez l\u2019utiliser. S\u2019il est possible de le faire, vous allez le faire. M\u00eame si vous n\u2019en avez pas besoin.<\/p>\n<p>Vous vous rappelez cette bo\u00eete de \u2018petit chimiste\u2019 qu\u2019on vous avait offert \u00e1 No\u00ebl, sous pr\u00e9texte de ce qu\u2019il s\u2019agissait d\u2019un jouet \u00e9ducatif destin\u00e9 \u00e1 \u00e9veiller vos instincts scientifiques ? Qui aurait devin\u00e9 que vous alliez finalement jouer au savant fou \u00e1 la recherche du m\u00e9lange le plus d\u00e9tonant de substances diversement color\u00e9es.<\/p>\n<p>Le m\u00eame syndrome se rencontre parfois, chez certains architectes ou responsables Qualit\u00e9 qui reconstruisent ISO 9216 avec leur propre mod\u00e8le et leurs propres m\u00e9triques. J\u2019ai souvent vu de telles tentatives abandonn\u00e9es au bout de 2 ou 3 ans, tout simplement parce que le b\u00e9n\u00e9fice de telles customisations est inf\u00e9rieur aux co\u00fbts de d\u00e9veloppement et de maintenance. Dans le monde Open Source, il est possible que vos nouvelles m\u00e9triques soient incorpor\u00e9es au sein de l\u2019outil par la communaut\u00e9. Dans le monde propri\u00e9taire, oubliez \u00e7\u00e0. Il vous faudra porter votre propre mod\u00e8le tout seul, \u00e0 chaque upgrade logiciel.<\/p>\n<p>Il existe peu de cas o\u00f9 la n\u00e9cessit\u00e9 de cr\u00e9er de nouvelles m\u00e9triques se justifie, principalement lorsqu\u2019il n\u2019existe pas de standards bien d\u00e9finis sur le march\u00e9. Cela peut arriver pour quelques rares technologies. Sinon, c\u2019est que l\u2019\u00e9diteur logiciel n\u2019a pas int\u00e9gr\u00e9 les r\u00e8gles correspondant aux bonnes pratiques. Soit vous l\u2019\u00e9cartez de la liste, soit vous travaillez avec lui pour qu\u2019il incorpore ces r\u00e8gles dans une prochaine version.<\/p>\n<p>Dans tous les cas, mesurez bien le co\u00fbt que repr\u00e9sente le d\u00e9veloppement de nouvelles m\u00e9triques et v\u00e9rifiez bien le besoin. Keep It Simple, ne jouez pas les alchimistes.<\/p>\n<h3><span style=\"text-decoration: underline\">Liens entre composants<\/span><\/h3>\n<p>Certains acheteurs d\u2019un outil d\u2019analyse de code pr\u00e9sentent une attitude bien curieuse : ils cherchent \u00e0 pi\u00e9ger ceux qui leur proposent une solution. \u00ab Voyons voir s\u2019ils savent trouver les appels dynamiques entre les couches de mon framework propri\u00e9taire \u00bb. \u00ab Ne disons rien : seront-ils capables d\u2019identifier les liens entre ces composants ?\u00bb.<\/p>\n<p>Si vous avez un besoin particulier, si vos applications utilisent un m\u00e9canisme sp\u00e9cifique, exposez le clairement. Bon nombre de soci\u00e9t\u00e9s de service ont cr\u00e9\u00e9 leur propre version de frameworks Struts ou Hibernate et leurs clients sont maintenant pieds et poings li\u00e9s avec des composants absolument pas standards. Dans certaines applications Cobol, les programmes, les JCLs et m\u00eame parfois les transactions CICS ne sont pas appel\u00e9es directement, mais \u00e1 travers une table de codification de ces liens.<\/p>\n<p>La plupart des m\u00e9triques identifient des violations de bonnes pratiques de programmation. En d\u2019autres termes, elles rep\u00e8rent les syntaxes incorrectes ou incompl\u00e8tes ou la structuration incorrecte de diverses instructions. Les bonnes pratiques d\u2019architecture ne s\u2019appuient pas sur une syntaxe particuli\u00e8re mais sur les liens entre diff\u00e9rents composants au sein de diff\u00e9rentes couches de l\u2019application.<\/p>\n<p>Je vois principalement deux int\u00e9r\u00eats \u00e1 un outil d\u2019analyse de code qui sait d\u00e9celer ces liens :<\/p>\n<ul>\n<li>R\u00e9aliser des analyses d\u2019impact : on sort l\u00e0 du domaine de la qualit\u00e9 de code pour rentrer dans celui des outils de r\u00e9tro-documentation ou d\u2019aide \u00e1 la migration.<\/li>\n<li>V\u00e9rifier le respect des r\u00e8gles d\u2019utilisation de frameworks, propri\u00e9taires ou non.<\/li>\n<\/ul>\n<p>Je pense que ce second point pr\u00e9sente un int\u00e9r\u00eat v\u00e9ritable. Par exemple, lorsque que vous centralisez l\u2019acc\u00e8s \u00e0 la couche de donn\u00e9es sur quelques composants, ou lorsque tous les objets de la couche de pr\u00e9sentation passe par un unique composant pour acc\u00e9der \u00e1 la couche de logique m\u00e9tier, vous appr\u00e9ciez de pouvoir recenser les objets qui ne respectent pas cette r\u00e8gle. Parce que la prochaine modification sur l\u2019une de ces couches risque de ne pas \u00eatre r\u00e9percut\u00e9e sur ces objets.<\/p>\n<p>Par contre, cette fonctionnalit\u00e9 n\u2019est v\u00e9ritablement n\u00e9cessaire que pour les architectures 3-tiers, donc J2EE et .Net principalement. De plus, en cas de frameworks et de bonnes pratiques propri\u00e9taires, il vous faudra compter sur un co\u00fbt de customisation.<\/p>\n<p>Aussi, ces m\u00e9triques sont celles qui pr\u00e9sentent le plus grand nombre de false-positives et n\u00e9cessite le plus de validations. Il est (relativement) facile de v\u00e9rifier qu\u2019une syntaxe particuli\u00e8re est respect\u00e9e ou non, donc les m\u00e9triques correspondant aux  bonnes pratiques de programmation sont g\u00e9n\u00e9ralement fiables. Une m\u00e9trique qui v\u00e9rifie les appels entre certains types ou certaines nomenclatures de composants sera beaucoup plus sensible au contexte applicatif et peut n\u00e9cessiter une v\u00e9rification syst\u00e9matique des liens apr\u00e8s chaque analyse. Pour un co\u00fbt de mise en \u0153uvre plus important donc.<\/p>\n<p>Enfin, vous rencontrerez probablement une proportion de 1 \u00e1 10 entre ces diff\u00e9rents types de r\u00e8gles, c\u2019est \u00e1 dire que les m\u00e9triques de bonnes pratique d\u2019architecture ne repr\u00e9senteront pas plus de 10% de l\u2019ensemble des r\u00e8gles propos\u00e9es par l\u2019outil. Et toutes ne seront pas critiques.<\/p>\n<p>Donc encore une fois, v\u00e9rifiez bien l\u2019ad\u00e9quation, et le co\u00fbt, \u00e0 votre besoin. L\u2019outil le plus complet n\u2019est pas forc\u00e9ment celui qui vous conviendra le mieux.<\/p>\n<p>Inutile d\u2019acheter un Hummer pour faire vos courses en ville : quand vous vous rendrez compte des efforts pour le man\u0153uvrer et le temps perdu \u00e1 chercher \u00e0 vous garer, vous risquez vite de le laisser au garage.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Je suis toujours surpris par les comparatifs d\u2019outils d\u2019analyse de la qualit\u00e9 d\u2019une application qui pr\u00e9tendent d\u00e9finir les crit\u00e8res d&rsquo;un tel choix, alors que la seule r\u00e9ponse exacte \u00e1 cette question est que \u2018cela d\u00e9pend\u2019. Si vous souhaitez acheter une voiture, vous allez bien s\u00fbr effectuer votre choix selon un certain nombre de crit\u00e8res qui [&hellip;]<\/p>\n","protected":false},"author":3,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[10],"tags":[],"class_list":["post-137","post","type-post","status-publish","format-standard","hentry","category-analyse-de-code"],"_links":{"self":[{"href":"http:\/\/qualilogy.com\/fr\/wp-json\/wp\/v2\/posts\/137"}],"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=137"}],"version-history":[{"count":3,"href":"http:\/\/qualilogy.com\/fr\/wp-json\/wp\/v2\/posts\/137\/revisions"}],"predecessor-version":[{"id":142,"href":"http:\/\/qualilogy.com\/fr\/wp-json\/wp\/v2\/posts\/137\/revisions\/142"}],"wp:attachment":[{"href":"http:\/\/qualilogy.com\/fr\/wp-json\/wp\/v2\/media?parent=137"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/qualilogy.com\/fr\/wp-json\/wp\/v2\/categories?post=137"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/qualilogy.com\/fr\/wp-json\/wp\/v2\/tags?post=137"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}