{"id":208,"date":"2012-07-09T10:31:21","date_gmt":"2012-07-09T09:31:21","guid":{"rendered":"http:\/\/dev.qualilogy.com\/fr\/?p=208"},"modified":"2013-01-05T10:40:09","modified_gmt":"2013-01-05T09:40:09","slug":"evaluation-de-la-qualite-du-code-cobol-avec-sonar-22","status":"publish","type":"post","link":"http:\/\/qualilogy.com\/fr\/evaluation-de-la-qualite-du-code-cobol-avec-sonar-22\/","title":{"rendered":"Evaluation de la qualit\u00e9 du code Cobol avec Sonar (2\/2)"},"content":{"rendered":"<p>Nous poursuivons aujourd&rsquo;hui notre \u00e9valuation de la qualit\u00e9 du code Cobol analys\u00e9 avec Sonar.<\/p>\n<p>Dans <a href=\"http:\/\/qualilogy.com\/fr\/evaluation-de-la-qualite-du-code-cobol-avec-sonar-12\" target=\"_blank\">le post pr\u00e9c\u00e9dent<\/a>, nous avons \u00e9tudi\u00e9 les m\u00e9triques mesurant la taille du code, sa complexit\u00e9, le niveau de documentation et de duplication, ce qui nous a permis de formuler quelques premi\u00e8res pr\u00e9conisations aux responsables de cette application.<!--more--><\/p>\n<h3><strong>Blockers et Critical<\/strong><\/h3>\n<p>Un coup d\u2019oeil aux violations maintenant. Rappelez vous que nous avons orient\u00e9 <a href=\"http:\/\/qualilogy.com\/fr\/votre-propre-modele-qualite\" target=\"_blank\">notre mod\u00e8le Qualit\u00e9<\/a> vers l\u2019identification de d\u00e9fauts de robustesse et de performance, impactant les utilisateurs.<\/p>\n<p><a href=\"http:\/\/qualilogy.com\/wp-content\/uploads\/2012\/07\/QualCobolAssesV1.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-2043\" title=\"QualCobolAssesV1\" src=\"http:\/\/qualilogy.com\/wp-content\/uploads\/2012\/07\/QualCobolAssesV1.jpg\" alt=\"\" width=\"576\" height=\"154\" \/><\/a><\/p>\n<p>Le nombre de d\u00e9fauts bloquants est peu \u00e9lev\u00e9. On retrouve le \u2018SORT\u2019 dont nous avons parl\u00e9 pr\u00e9c\u00e9demment, et 5 \u2018OPEN\u2019 de fichiers dans une boucle. Ce traitement co\u00fbteux pour le syst\u00e8me d\u2019exploitation doit bien s\u00fbr \u00eatre r\u00e9alis\u00e9 avant la boucle. Ces violations pr\u00e9sentent un risque \u00e9lev\u00e9 pour la performance mais sont faciles \u00e0 corriger.<\/p>\n<p>Les d\u00e9fauts critiques portent sur la robustesse :<\/p>\n<ul>\n<li>Un code de &lsquo;status&rsquo; d\u00e9clar\u00e9 pour un fichier n\u2019est pas test\u00e9 lors d\u2019une op\u00e9ration sur celui-ci (OPEN, READ, WRITE, \u2026). Une tentative d\u2019\u00e9crire dans un fichier non ouvert, de lire dans un fichier en \u00e9criture (Output file), une taille d\u2019enregistrement (RECORD) incorrecte sont des erreurs qui passeront inaper\u00e7ues.<\/li>\n<li>Un GOTO qui aiguille le traitement hors du module courant rompt la logique d\u2019ex\u00e9cution de celui-ci.<\/li>\n<li>Le EVALUATE sans WHEN OTHER est classique : si aucune des conditions du EVALUATE n\u2019est v\u00e9rifi\u00e9e, la logique du programme devient impr\u00e9visible.<\/li>\n<li>La derni\u00e8re r\u00e8gle concernant la taille de fichier ne s\u2019applique qu\u2019au Cobol Microfocus, pas z\/OS ou autre.<\/li>\n<\/ul>\n<p>Il est tr\u00e8s vraisemblable qu&rsquo;il existe une norme Qualit\u00e9 imposant la d\u00e9claration et donc la gestion du code &lsquo;status&rsquo; du fichier, mais que cette &lsquo;best practice&rsquo; est parfois oubli\u00e9e. En l&rsquo;absence de test sur ce code, une op\u00e9ration incorrecte peut conduite \u00e0 une incoh\u00e9rence de donn\u00e9es sans que celle-ci soit d\u00e9tect\u00e9e. La recherche de la cause de l&rsquo;erreur sera \u00e9galement plus difficile. De m\u00eame pour le EVALUATE sans WHEN OTHER.<\/p>\n<p>Toute violation \u00e0 ces r\u00e8gles de gestion des erreurs impacte non seulement les utilisateurs mais \u00e9galement les co\u00fbts de maintenance. Ici, leur nombre suffisamment \u00e9lev\u00e9 nous am\u00e8ne \u00e0 penser que ces bonnes pratiques doivent \u00eatre rappel\u00e9es aux d\u00e9veloppeurs.<strong><\/strong><\/p>\n<p><strong>Co\u00fbts de rem\u00e9diation<\/strong><\/p>\n<p>Vous vous rappelez du widget employ\u00e9 dans notre dernier post, qui listait les d\u00e9fauts les plus fr\u00e9quemment rencontr\u00e9es ?<\/p>\n<p><a href=\"http:\/\/qualilogy.com\/wp-content\/uploads\/2012\/07\/QualCobolAssesV2.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-2045\" title=\"QualCobolAssesV2\" src=\"http:\/\/qualilogy.com\/wp-content\/uploads\/2012\/07\/QualCobolAssesV2.jpg\" alt=\"\" width=\"583\" height=\"177\" \/><\/a><\/p>\n<p>Nous retrouvons le IF sans END-IF dont nous avons d\u00e9j\u00e0 parl\u00e9, des GOTOs intempestifs, plus de 4 500 paragraphes non document\u00e9s et du code copi\u00e9-coll\u00e9. Ces r\u00e8gles impactent la maintenabilit\u00e9 de l\u2019application, comme on peut le voir sur ce diagramme:<\/p>\n<p><a href=\"http:\/\/qualilogy.com\/wp-content\/uploads\/2012\/07\/QualCobolAssesV21.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-2046\" title=\"QualCobolAssesV21\" src=\"http:\/\/qualilogy.com\/wp-content\/uploads\/2012\/07\/QualCobolAssesV21.jpg\" alt=\"\" width=\"582\" height=\"171\" \/><\/a><\/p>\n<p>Nous n\u2019allons pas rentrer dans le d\u00e9tail de ces d\u00e9fauts puisque notre objectif est d\u2019identifier ceux qui impactent les utilisateurs. Or les 45 violations de type \u2018Blockers\u2019 et les 292 \u2018Critical\u2019 repr\u00e9sentent respectivement 5.6 jours et 50.5 jours de correction.<\/p>\n<p><a href=\"http:\/\/qualilogy.com\/wp-content\/uploads\/2012\/07\/QualCobolAssesV22.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-2047\" title=\"QualCobolAssesV22\" src=\"http:\/\/qualilogy.com\/wp-content\/uploads\/2012\/07\/QualCobolAssesV22.jpg\" alt=\"\" width=\"584\" height=\"180\" \/><\/a><\/p>\n<p>Environ 2 semaines de travail pour une \u00e9quipe de 5 ou 6 personnes. Par contre, il faudrait plus de 10 ann\u00e9es homme pour corriger les violations qui p\u00e8sent sur les co\u00fbts de maintenance.<\/p>\n<h3><strong>Plan d&rsquo;actions<br \/>\n<\/strong><\/h3>\n<p>Bien \u00e9videmment, il nous faudra pr\u00e9senter ces r\u00e9sultats \u00e0 l\u2019\u00e9quipe de projet et les commenter avec eux afin de v\u00e9rifier nos hypoth\u00e8ses. Cependant, notre objectif n\u2019est pas de r\u00e9aliser un audit exhaustif mais de montrer comment il est possible de tirer quelques conclusions sur la base de ces quelques donn\u00e9es, et formuler une \u00e9bauche de plan d\u2019actions.<\/p>\n<p>Actions \u00e0 court terme :<\/p>\n<ul>\n<li>Corriger les d\u00e9fauts \u2018Blockers\u2019 qui affectent la performance : 5 jours.<\/li>\n<li>Corriger les d\u00e9fauts \u2018Critical\u2019, source potentielle de bugs : 55 jours.<\/li>\n<li>Rappeler aux \u00e9quipes Cobol l\u2019interdiction des GOTOs \u2013 notamment en exception \u00e0 la logique du module \u2013 et les bonnes pratiques en mati\u00e8re de gestions des erreurs, comme l&rsquo;obligation de tester le statut d\u2019un fichier apr\u00e8s toute op\u00e9ration sur celui-ci et le EVALUATE sans WHEN OTHER.<\/li>\n<li>Effectuer une analyse r\u00e9guli\u00e8re de cette application et v\u00e9rifier qu\u2019aucune r\u00e8gle bloquante ou critique ne r\u00e9apparaisse.<\/li>\n<\/ul>\n<p>Ces actions sont peu co\u00fbteuses et peuvent s\u2019effectuer \u00e0 court terme, pour un b\u00e9n\u00e9fice maximal. Elles conduisent \u00e0 la mise en place d&rsquo;un processus d&rsquo;am\u00e9lioration continue. Les utilisateurs vous en remercieront.<\/p>\n<p>Cette application pr\u00e9sente des co\u00fbts de maintenance \u00e9lev\u00e9s. V\u00e9rifier aupr\u00e8s du management si c\u2019est bien le cas et leur opinion \u00e0 ce sujet. Il se peut tr\u00e8s bien que cette application connaisse peu ou pas d\u2019\u00e9volution auquel cas, la maintenance n\u2019est pas un probl\u00e8me.<\/p>\n<p>V\u00e9rifiez \u00e9galement les hypoth\u00e8ses que nous avons \u00e9mises dans notre <a href=\"http:\/\/qualilogy.com\/fr\/evaluation-de-la-qualite-du-code-cobol-avec-sonar-12\" target=\"_blank\">post pr\u00e9c\u00e9dent<\/a> (application batch ou orient\u00e9e fichiers de donn\u00e9es, peu critique) et expliquez bien qu\u2019elle ne peut \u00eatre outsourc\u00e9e sans danger.<\/p>\n<p>Proposez le plan d\u2019action suivant:<\/p>\n<ul>\n<li>Identifier et supprimer les 184 fichiers dupliqu\u00e9s, qui p\u00e8sent \u00e9norm\u00e9ment sur la maintenabilit\u00e9.<\/li>\n<li>Effectuer \u00e0 nouveau une analyse afin de recalculer la dette technique et une estimation de co\u00fbt de refactoring.<\/li>\n<\/ul>\n<p><strong>Strat\u00e9gie applicative<br \/>\n<\/strong><\/p>\n<p><strong><\/strong>Le refactoring d&rsquo;une application Cobol est une op\u00e9ration rarement envisag\u00e9e, car les co\u00fbts sont trop \u00e9lev\u00e9s. G\u00e9n\u00e9ralement, on laisse l&rsquo;application mourir de sa belle mort, et l&rsquo;on recherche une autre solution (ERP par exemple).<\/p>\n<p><a href=\"http:\/\/qualilogy.com\/wp-content\/uploads\/2012\/07\/QualCobolAssesV3.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignright size-full wp-image-2048\" title=\"QualCobolAssesV3\" src=\"http:\/\/qualilogy.com\/wp-content\/uploads\/2012\/07\/QualCobolAssesV3.jpg\" alt=\"\" width=\"300\" height=\"370\" \/><\/a>Comme nous souhaitons effectuer des pr\u00e9conisations r\u00e9alistes, voici ce que je fais : je regarde quels sont les programmes qui comportent le plus grand nombre de lignes et de d\u00e9fauts.<\/p>\n<p>Ici, nous avons 3 programmes qui totalisent \u00e0 eux seuls plus de 27 000 lignes, soit 15% de la taille totale de l&rsquo;application (en LOC).<\/p>\n<p><a href=\"http:\/\/qualilogy.com\/wp-content\/uploads\/2012\/07\/QualCobolAssesRF1.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignright size-full wp-image-2049\" title=\"QualCobolAssesRF1\" src=\"http:\/\/qualilogy.com\/wp-content\/uploads\/2012\/07\/QualCobolAssesRF1.jpg\" alt=\"\" width=\"290\" height=\"165\" \/><\/a><\/p>\n<p>&nbsp;<\/p>\n<p><a href=\"http:\/\/qualilogy.com\/wp-content\/uploads\/2012\/07\/QualCobolAssesRF2.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignright size-full wp-image-2051\" title=\"QualCobolAssesRF2\" src=\"http:\/\/qualilogy.com\/wp-content\/uploads\/2012\/07\/QualCobolAssesRF2.jpg\" alt=\"\" width=\"290\" height=\"166\" \/><\/a>Ils sont \u00e9galement dans le top 5 des programmes les plus complexent, avec un total de 5 900 points de Complexit\u00e9 Cyclomatique, soit 26% de la complexit\u00e9 totale de l&rsquo;application.<\/p>\n<p><a href=\"http:\/\/qualilogy.com\/wp-content\/uploads\/2012\/07\/QualCobolAssesRF3.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignleft size-full wp-image-2052\" title=\"QualCobolAssesRF3\" src=\"http:\/\/qualilogy.com\/wp-content\/uploads\/2012\/07\/QualCobolAssesRF3.jpg\" alt=\"\" width=\"464\" height=\"134\" \/><\/a><\/p>\n<p>Et ce sont les 3 programmes qui concentrent le plus de violations, quelques une Critical mais la plupart de type Major.<\/p>\n<p><a href=\"http:\/\/qualilogy.com\/wp-content\/uploads\/2012\/07\/QualCobolAssesRF4.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignright size-full wp-image-2054\" title=\"QualCobolAssesRF4\" src=\"http:\/\/qualilogy.com\/wp-content\/uploads\/2012\/07\/QualCobolAssesRF4.jpg\" alt=\"\" width=\"376\" height=\"140\" \/><\/a><br \/>\nAu total, plus de 6 700 violations donc pr\u00e9s du quart (24%) du nombre total de d\u00e9fauts rencontr\u00e9s dans cette application.<\/p>\n<p>Certes, le co\u00fbt de rem\u00e9diation de ces 3 programmes est tr\u00e8s \u00e9lev\u00e9: 735 jours, soit environ 3 ann\u00e9es-homme.<\/p>\n<p>Quelles informations pouvons-nous donc d\u00e9livrer ?<\/p>\n<p>Un refactoring partiel portant sur ces 3 programmes repr\u00e9sentant 15% de la taille de l&rsquo;application et 26% de sa complexit\u00e9, permettrait de supprimer un quart du nombre de d\u00e9fauts total, ceux-ci portant quasi exclusivement sur la maintenabilit\u00e9.<\/p>\n<p>Si l&rsquo;on imagine que ce refactoring partiel permettrait de diminuer les co\u00fbts de maintenabilit\u00e9 dans la m\u00eame proportion (25%), cela repr\u00e9sente pour une \u00e9quipe de 6 personnes un gain de 1.5 personne \u00e0 l&rsquo;ann\u00e9e. Contre un co\u00fbt de refactoring de 3 ann\u00e9es-homme, donc avec un retour sur investissement au bout de 2 ans.<\/p>\n<p>Certes il s&rsquo;agit d&rsquo;une estimation rapide pour ne pas dire grossi\u00e8re. Mais je souhaite illustrer de cette mani\u00e8re que la valeur d&rsquo;un assessment consiste \u00e0 d\u00e9livrer des informations objectives qui permettent au management de prendre des d\u00e9cisions. Le chiffre de la dette technique globale sur toute l&rsquo;application n&rsquo;aboutit qu&rsquo;\u00e0 une seule d\u00e9cision possible : jeter cette application. Une estimation de gains \/ co\u00fbts et ROI sur un refactoring partiel permet d&rsquo;imaginer une strat\u00e9gie alternative et m\u00eame si vos chiffres supposent une certaine marge d&rsquo;erreur, le management comprendra bien quelle est votre intention et l&rsquo;appr\u00e9ciera \u00e0 sa valeur.<\/p>\n<h3><strong>Vendez la valeur<\/strong><\/h3>\n<p>Le post d&rsquo;aujourd&rsquo;hui conclue notre s\u00e9rie sur l&rsquo;analyse de code Cobol avec Sonar. Notre intention dans cette s\u00e9rie \u00e9tait de d\u00e9montrer qu&rsquo;il est possible d&rsquo;\u00e9valuer la qualit\u00e9 des applications Cobol sans \u00eatre un expert du monde Mainframe. De la m\u00eame mani\u00e8re, nul besoin d&rsquo;\u00eatre un guru du monde Open Source ou un expert J2EE pour r\u00e9aliser cette analyse avec Sonar.<\/p>\n<p>En d\u00e9finitive, avec un minimum de connaissances de la technologie Cobol et de Sonar, nous pouvons proposer aux \u00e9quipes de projet, stakeholders et au management un plan d&rsquo;actions \u00e0 court et moyen terme qui permettent d&rsquo;am\u00e9liorer la performance et la robustesse de l&rsquo;application, mais \u00e9galement le respect des bonnes pratiques et la qualit\u00e9 de l&rsquo;application.<\/p>\n<p>Nous pouvons \u00e9galement fournir au management ce dont il est le plus demandeur : l&rsquo;information pour une meilleure prise de d\u00e9cision. L\u00e1 se trouve la valeur de vos analyses. Vendez cette valeur, pas des m\u00e9triques ou vos connaissances techniques.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Nous poursuivons aujourd&rsquo;hui notre \u00e9valuation de la qualit\u00e9 du code Cobol analys\u00e9 avec Sonar. Dans le post pr\u00e9c\u00e9dent, nous avons \u00e9tudi\u00e9 les m\u00e9triques mesurant la taille du code, sa complexit\u00e9, le niveau de documentation et de duplication, ce qui nous a permis de formuler quelques premi\u00e8res pr\u00e9conisations aux responsables de cette application.<\/p>\n","protected":false},"author":3,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[6],"tags":[],"class_list":["post-208","post","type-post","status-publish","format-standard","hentry","category-sonar-cobol"],"_links":{"self":[{"href":"http:\/\/qualilogy.com\/fr\/wp-json\/wp\/v2\/posts\/208"}],"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=208"}],"version-history":[{"count":2,"href":"http:\/\/qualilogy.com\/fr\/wp-json\/wp\/v2\/posts\/208\/revisions"}],"predecessor-version":[{"id":212,"href":"http:\/\/qualilogy.com\/fr\/wp-json\/wp\/v2\/posts\/208\/revisions\/212"}],"wp:attachment":[{"href":"http:\/\/qualilogy.com\/fr\/wp-json\/wp\/v2\/media?parent=208"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/qualilogy.com\/fr\/wp-json\/wp\/v2\/categories?post=208"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/qualilogy.com\/fr\/wp-json\/wp\/v2\/tags?post=208"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}