{"id":206,"date":"2012-07-03T10:30:00","date_gmt":"2012-07-03T09:30:00","guid":{"rendered":"http:\/\/dev.qualilogy.com\/fr\/?p=206"},"modified":"2013-01-05T10:30:53","modified_gmt":"2013-01-05T09:30:53","slug":"evaluation-de-la-qualite-du-code-cobol-avec-sonar-12","status":"publish","type":"post","link":"http:\/\/qualilogy.com\/fr\/evaluation-de-la-qualite-du-code-cobol-avec-sonar-12\/","title":{"rendered":"Evaluation de la qualit\u00e9 du code Cobol avec Sonar (1\/2)"},"content":{"rendered":"<p><a href=\"http:\/\/vicken.deviantart.com\/\" target=\"_blank\"><img loading=\"lazy\" decoding=\"async\" class=\"alignright size-full wp-image-2013\" title=\"QualCobolAssess1\" src=\"http:\/\/qualilogy.com\/wp-content\/uploads\/2012\/07\/QualCobolAssess1.jpg\" alt=\"\" width=\"266\" height=\"400\" \/><\/a> La qualit\u00e9 du code applicatif est un souci constant depuis des lustres. Les \u2018bad practices\u2019 de programmation g\u00e9n\u00e8rent des d\u00e9fauts qui impactent les utilisateurs et les co\u00fbts de maintenabilit\u00e9 des applications. La Dette Technique, simple m\u00e9taphore \u00e0 ses d\u00e9buts, est devenue depuis un outil de mesure de cette qualit\u00e9 et de ces co\u00fbts.<\/p>\n<p>Il y a quelques ann\u00e9es encore, les logiciels qui permettaient d\u2019identifier ces d\u00e9fauts \u00e9taient rares et chers. Aujourd\u2019hui, les outils Open Source tels que Sonar permettent \u00e1 chacun \u2013 \u00e9quipes de projets, providers, consultants Qualit\u00e9, etc. \u2013 de d\u00e9tecter de mani\u00e8re ais\u00e9e et \u00e0 moindre co\u00fbt ces \u2018bad practices\u2019.<\/p>\n<p>Le monde Open Source a longtemps souffert de son image de \u2018geek\u2019 parce que ces outils sont d\u2019abord utilis\u00e9s par des passionn\u00e9s issus du monde J2EE, technologie majoritaire dans le monde applicatif. Mais les temps changent, et il est maintenant possible d\u2019analyser du code Legacy, tel que Cobol et ABAP avec Sonar.<\/p>\n<p>C\u2019est l\u00e0 l\u2019objectif de notre s\u00e9rie de posts : montrer qu\u2019il est possible d\u2019\u00e9valuer la qualit\u00e9 d\u2019applications Cobol sans rien conna\u00eetre du monde Mainframe. <!--more--><\/p>\n<p>Nous avons vu :<\/p>\n<ul>\n<li><a href=\"http:\/\/qualilogy.com\/fr\/sonar-cobol-ce-quil-faut-savoir\" target=\"_blank\">Les quelques concepts \u00e0 conna\u00eetre<\/a> pour s\u2019asseoir \u00e0 une table avec des Cobol-ers et savoir <a href=\"http:\/\/qualilogy.com\/fr\/sonar-cobol-quelles-questions\" target=\"_blank\">quelles questions poser<\/a> afin de pr\u00e9parer la livraison d\u2019une application Cobol.<\/li>\n<li>Comment <a href=\"http:\/\/qualilogy.com\/fr\/sonar-analyse-cobol-avec-jenkins\" target=\"_blank\">organiser une analyse Cobol<\/a> avec un <a href=\"http:\/\/qualilogy.com\/fr\/quality-profile\" target=\"_blank\">Quality profile<\/a> Sonar.<\/li>\n<li>Comment d\u00e9finir son propre <a href=\"http:\/\/qualilogy.com\/fr\/votre-propre-modele-qualite\" target=\"_blank\">mod\u00e8le Qualit\u00e9<\/a> et agr\u00e9ger les analyses de diff\u00e9rentes applications en une unique View Sonar.<\/li>\n<\/ul>\n<p>Ces posts ont attis\u00e9 la curiosit\u00e9 (si j\u2019en juge par le nombre de visiteurs du blog) et attir\u00e9 nombre de questions concernant le r\u00e9sultat de ces analyses. C\u2019est ce que nous allons voir maintenant : quelles pr\u00e9conisations ou recommandations effectuer sur la base de nos analyses et du tableau de bord Sonar.<\/p>\n<p>Tout d\u2019abord, je ne vais pas effectuer un audit, cela me prend entre 15 et 20 heures pour effectuer un travail un minimum s\u00e9rieux, et il faudrait un post de 30 ou 40 pages. L\u2019objectif sera de montrer la d\u00e9marche que j\u2019utilise, et surtout le plus important, comment traduire les r\u00e9sultats en valeur pour nos interlocuteurs, c\u2019est-\u00e0-dire en des \u00e9l\u00e9ments d\u2019information et de d\u00e9cision.<\/p>\n<p>Nous n\u2019allons pas effectuer une analyse exhaustive des r\u00e9sultats, mais tenter de d\u00e9montrer \u00e0 partir de quelques exemples simples comment utiliser le tableau de bord Sonar pour \u00e9valuer la qualit\u00e9 du code d\u2019une application.<\/p>\n<p>En pr\u00e9alable, un rappel : nous avons orient\u00e9 notre mod\u00e8le Qualit\u00e9 sur la performance et la fiabilit\u00e9, afin d\u2019identifier les d\u00e9fauts qui risquent d\u2019impacter les utilisateurs. Donc les questions de lisibilit\u00e9 et de maintenabilit\u00e9 des applications ne sont pas notre pr\u00e9occupation principale. Elles pourraient l\u2019\u00eatre, mais ce n\u2019est pas le cas, ou en tout cas pas maintenant.<\/p>\n<p>Rappelez-vous : vous n\u2019\u00eates pas un expert du monde Mainframe mais vous devez d\u00e9montrer \u00e0 de tels experts en quoi vos analyses peuvent les aider. Le plus simple pour cela consiste \u00e0 identifier des d\u00e9fauts graves qui peuvent se corriger facilement, pas \u00e0 calculer une dette technique qui va se chiffrer en milliers de jours que personne n\u2019a les moyens d\u2019effectuer.<\/p>\n<h3><strong>M\u00e9triques<\/strong><\/h3>\n<p><a href=\"http:\/\/qualilogy.com\/wp-content\/uploads\/2012\/07\/QualCobolAsses2b.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignright size-full wp-image-2016\" title=\"QualCobolAsses2b\" src=\"http:\/\/qualilogy.com\/wp-content\/uploads\/2012\/07\/QualCobolAsses2b.jpg\" alt=\"\" width=\"337\" height=\"284\" \/><\/a>Tout d\u2019abord, j\u2019aime savoir \u00e0 quoi je m\u2019affronte : une mignonne petite application ou un gros monstre affreux, tr\u00e8s r\u00e9pandu dans le monde Mainframe. N\u2019oublions pas que la dette technique dans ce monde se mesure en d\u00e9cennies.<\/p>\n<p>Le tableau de bord Sonar nous permet de voir que, parmi les applications analys\u00e9es, \u2018Cobol \u2013 Tax\u2019 est l\u2019application la plus volumineuse, suivie de pr\u00e8s par \u2018Cobol \u2013 Big Banking app\u2019. Mais c\u2019est l\u2019application \u2018Cobol \u2013 Billing\u2019 qui pr\u00e9sente la moindre qualit\u00e9.<\/p>\n<p>Regardons d\u2019un peu plus pr\u00e9s cette application :<\/p>\n<p><a href=\"http:\/\/qualilogy.com\/wp-content\/uploads\/2012\/07\/QualCobolAssesSize.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-2018\" title=\"QualCobolAssesSize\" src=\"http:\/\/qualilogy.com\/wp-content\/uploads\/2012\/07\/QualCobolAssesSize.jpg\" alt=\"\" width=\"584\" height=\"143\" \/><\/a><\/p>\n<p>Environ 180 000 lignes de code dans moins de 1 400 fichiers : il s\u2019agit d\u2019une application de petite taille. On peut voir que plus de la moiti\u00e9 des lignes se trouve en \u2018Data Divisions\u2019, la partie d\u2019un programme Cobol qui permet de d\u00e9finir les donn\u00e9es utilis\u00e9es.<\/p>\n<p>Ceci indique une application orient\u00e9e \u2018donn\u00e9es\u2019, probablement une application Batch qui g\u00e8re des fichiers, par exemple des journaux comptables pour enregistrer durant la nuit les \u00e9critures pass\u00e9es sur des comptes en banque. Vous pouvez poser la question \u00e0 l\u2019\u00e9quipe Cobol lorsque vous ferez votre pr\u00e9sentation. Le plus souvent, je vais jeter un coup d&rsquo;oeil sur les commentaires dans les programmes afin de v\u00e9rifier si l&rsquo;application fait bien ce que je crois qu&rsquo;elle fait.<\/p>\n<p>La plupart du temps, vos interlocuteurs seront capables de dire si l\u2019application est petite ou importante, complexe ou pas, mais ils ne connaissent g\u00e9n\u00e9ralement pas ces chiffres pr\u00e9cis\u00e9ment et ils seront probablement surpris et int\u00e9ress\u00e9s lorsqu&rsquo;ils d\u00e9couvriront la r\u00e9partition des lignes de code entre les \u2018divisions\u2019 d\u00e9di\u00e9es aux donn\u00e9es ou aux traitements (Procedure Divisions).<\/p>\n<p>Le niveau de commentaire est faible pour une application Mainframe : la moyenne est plut\u00f4t entre 20% (minimum) et 30% (correct). Au moins, ces commentaires se trouvent dans les traitements mais on s\u2019aper\u00e7oit qu\u2019il s\u2019agit en grande partie de commentaires \u2018blank\u2019 c\u2019est-\u00e0-dire vides. De surcro\u00eet, nous n\u2019aurons probablement rien pour comprendre les structures de donn\u00e9es, pourtant pr\u00e9dominantes dans le code.<\/p>\n<p><a href=\"http:\/\/qualilogy.com\/wp-content\/uploads\/2012\/07\/QualCobolAssesCC.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-2019\" title=\"QualCobolAssesCC\" src=\"http:\/\/qualilogy.com\/wp-content\/uploads\/2012\/07\/QualCobolAssesCC.jpg\" alt=\"\" width=\"584\" height=\"119\" \/><\/a><\/p>\n<p>Comme on peut le voir, cette application embarque peu de complexit\u00e9, avec une Complexit\u00e9 Cyclomatique de 17.5 par fichier. Par contre, le nombre de lignes de code dupliqu\u00e9es est tr\u00e8s \u00e9lev\u00e9, sup\u00e9rieur \u00e0 50%, tr\u00e8s certainement \u00e0 cause des 184 \u2018Duplicated files\u2019, soit environ 13% de l\u2019application compl\u00e8te. Quelle est l\u2019origine de ces fichiers dupliqu\u00e9s ? Tout simplement, pour raison de backups. Le monde Mainframe n\u2019est pas le plus avanc\u00e9 en mati\u00e8re de gestion de versions. Le plus simple, lorsque l\u2019on n\u2019est pas s\u00fbr de la fonctionnalit\u00e9 que l\u2019on impl\u00e9mente, consiste \u00e0 mettre le code en commentaires ou plus rapide, \u00e0 copier le fichier afin d\u2019effectuer l\u2019\u00e9volution souhait\u00e9e tout en gardant un backup qui permette un \u00e9ventuel retour arri\u00e8re.<\/p>\n<p>Message au management : il pourrait sembler tentant au premier abord d\u2019outsourcer cette application car :<\/p>\n<ul>\n<li>Sa taille r\u00e9duite implique des co\u00fbts d\u2019outsourcing peu \u00e9lev\u00e9.<\/li>\n<li>Elle est peu complexe donc facile \u00e0 comprendre.<\/li>\n<li>Une application batch est rarement une application critique, donc le risque de d\u00e9pendance vis-\u00e0-vis de l\u2019outsourceur est r\u00e9duit.<\/li>\n<\/ul>\n<p>N\u00e9anmoins, un faible niveau de commentaires \u00e9quivaut \u00e0 un transfert de connaissances plus difficile et plus de temps \u2013 et donc d\u2019argent \u2013 pour le provider qui accepterait un tel outsourcing. De plus, le pourcentage \u00e9lev\u00e9 de code dupliqu\u00e9 signifie plus de travail \u2013 et donc d\u2019argent \u2013 pour r\u00e9percuter chaque modification sur les blocs de code copi\u00e9-coll\u00e9.<\/p>\n<p>Un outsourceur ne peut pas se permettre de perdre de l\u2019argent, donc ces t\u00e2ches suppl\u00e9mentaires diminueront d\u2019autant le temps imparti pour effectuer la maintenance. Il n&rsquo;est pas souhaitable de confier ce code \u00e0 un prestataire sans un travail de refactoring pr\u00e9alable afin de supprimer les fichiers dupliqu\u00e9s et redocumenter cette application, notamment en ce qui concerne les donn\u00e9es en fichiers.<\/p>\n<p>La suite dans notre prochain post, qui portera sur les violations rencontr\u00e9es et nos recommandations finales.<\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>La qualit\u00e9 du code applicatif est un souci constant depuis des lustres. Les \u2018bad practices\u2019 de programmation g\u00e9n\u00e8rent des d\u00e9fauts qui impactent les utilisateurs et les co\u00fbts de maintenabilit\u00e9 des applications. La Dette Technique, simple m\u00e9taphore \u00e0 ses d\u00e9buts, est devenue depuis un outil de mesure de cette qualit\u00e9 et de ces co\u00fbts. Il y [&hellip;]<\/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-206","post","type-post","status-publish","format-standard","hentry","category-sonar-cobol"],"_links":{"self":[{"href":"http:\/\/qualilogy.com\/fr\/wp-json\/wp\/v2\/posts\/206"}],"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=206"}],"version-history":[{"count":1,"href":"http:\/\/qualilogy.com\/fr\/wp-json\/wp\/v2\/posts\/206\/revisions"}],"predecessor-version":[{"id":207,"href":"http:\/\/qualilogy.com\/fr\/wp-json\/wp\/v2\/posts\/206\/revisions\/207"}],"wp:attachment":[{"href":"http:\/\/qualilogy.com\/fr\/wp-json\/wp\/v2\/media?parent=206"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/qualilogy.com\/fr\/wp-json\/wp\/v2\/categories?post=206"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/qualilogy.com\/fr\/wp-json\/wp\/v2\/tags?post=206"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}