{"id":194,"date":"2012-05-27T09:36:10","date_gmt":"2012-05-27T08:36:10","guid":{"rendered":"http:\/\/dev.qualilogy.com\/fr\/?p=194"},"modified":"2013-01-05T09:37:08","modified_gmt":"2013-01-05T08:37:08","slug":"sonar-cobol-ce-quil-faut-savoir","status":"publish","type":"post","link":"http:\/\/qualilogy.com\/fr\/sonar-cobol-ce-quil-faut-savoir\/","title":{"rendered":"Sonar Cobol &#8211; Ce qu&rsquo;il faut savoir"},"content":{"rendered":"<p><a href=\"http:\/\/vicken.deviantart.com\/\" target=\"_blank\"><img loading=\"lazy\" decoding=\"async\" class=\"alignright size-full wp-image-1776\" title=\"QualCobol11\" src=\"http:\/\/qualilogy.com\/wp-content\/uploads\/2012\/05\/QualCobol11.jpg\" alt=\"\" width=\"300\" height=\"417\" \/><\/a>J&rsquo;ai fait quelques posts il y a quelques mois (<a href=\"http:\/\/qualilogy.com\/fr\/analyse-de-code-cobol-avec-sonar-et-jenkins\" target=\"_blank\">Sonar \u2013 Analyse Cobol avec Jenkins<\/a>, <a href=\"http:\/\/qualilogy.com\/fr\/open-source-et-code-legacy\" target=\"_blank\">Open Source &amp; code Legacy<\/a>) dans le but de montrer que, contrairement \u00e0 une id\u00e9e assez r\u00e9pandue, il n&rsquo;est pas n\u00e9cessaire d&rsquo;\u00eatre un gourou J2EE ou un expert Open Source pour analyser du code Legacy d&rsquo;applications Cobol (ou ABAP) avec Sonar et Jenkins.<\/p>\n<p>Et je vois pas mal de visiteurs consulter ces pages sur mon blog, ce qui d\u00e9note l&rsquo;int\u00e9r\u00eat certain pour ce sujet.<\/p>\n<p>Mais quelqu&rsquo;un m&rsquo;a dit r\u00e9cemment : \u00ab\u00a0Nous effectuons r\u00e9guli\u00e8rement et avec succ\u00e8s des analyses Sonar pour du code J2EE. Nous envisageons \u00e9galement de mettre les applications Cobol dans Sonar et Jenkins, mais je ne connais pas le monde Mainframe\u00a0\u00bb.<\/p>\n<p>Ainsi, ce post (et les suivants) aura pour objectif d&rsquo;aider \u00e0 la mise en place d&rsquo;un processus d&rsquo;analyse de code Cobol avec Sonar et Jenkins. <!--more--><\/p>\n<p>Je ne vais pas faire un cours de Mainframe-Cobol, je suppose que cela doit probablement se trouver facilement sur Internet, et il faudrait plusieurs posts.<\/p>\n<p>Non. L\u2019id\u00e9e est la suivante: vous devez mettre en place ce processus d\u2019analyse de code Cobol. Une r\u00e9union est pr\u00e9vue avec quelques repr\u00e9sentants du monde Mainframe, de votre entreprise. Afin de pr\u00e9parer cette r\u00e9union :<\/p>\n<ul>\n<li>Que vous faut-il savoir ?<\/li>\n<li>Quelles sont les questions que vous devez poser  ?<\/li>\n<\/ul>\n<p>Vous devez savoir : ce que vous allez analyser.<\/p>\n<h3><strong>Les composants Cobol<\/strong><\/h3>\n<p>En Java, vous travaillez avec des classes, des m\u00e9thodes, des librairies (.jar), etc. Ce sont les objets du langage Java. En Cobol, les types de composants \u00e0 conna\u00eetre sont les suivants :<\/p>\n<ul>\n<li>Programme Cobol : un fichier d\u2019instructions Cobol, qui sera compil\u00e9 en un ex\u00e9cutable.<\/li>\n<li>Copy-book : un fichier d\u2019instructions Cobol, utilis\u00e9 comme un Include. Equivalent d\u2019un composant r\u00e9utilisable. Encore appel\u00e9 \u2018Copys\u2019, tout simplement parce que l\u2019appel \u00e0 ce fichier se fait \u00e0 l\u2019aide d\u2019une instruction COPY.<\/li>\n<\/ul>\n<p>Par exemple, le programme suivant fait appel \u00e0 la ligne 65 au Copy-book \u2018MYCOPY\u2019 :<\/p>\n<p><a href=\"http:\/\/qualilogy.com\/wp-content\/uploads\/2012\/05\/QualCobol111.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-1780\" title=\"QualCobol111\" src=\"http:\/\/qualilogy.com\/wp-content\/uploads\/2012\/05\/QualCobol111.jpg\" alt=\"\" width=\"368\" height=\"91\" \/><\/a>que j\u2019ai cr\u00e9\u00e9 moi-m\u00eame, avec le code suivant :<\/p>\n<p><a href=\"http:\/\/qualilogy.com\/wp-content\/uploads\/2012\/05\/QualCobol112.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-1781\" title=\"QualCobol112\" src=\"http:\/\/qualilogy.com\/wp-content\/uploads\/2012\/05\/QualCobol112.jpg\" alt=\"\" width=\"411\" height=\"40\" \/><\/a><\/p>\n<p>Lorsque le programme est compil\u00e9 (en l\u2019occurrence ici, analys\u00e9), on peut voir que le code du Copy-book a \u00e9t\u00e9 ins\u00e9r\u00e9 dans le programme \u00e0 l\u2019endroit o\u00f9 il \u00e9tait appel\u00e9 :<\/p>\n<p><a href=\"http:\/\/qualilogy.com\/wp-content\/uploads\/2012\/05\/QualCobol1131.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-1784\" title=\"QualCobol113\" src=\"http:\/\/qualilogy.com\/wp-content\/uploads\/2012\/05\/QualCobol1131.jpg\" alt=\"\" width=\"342\" height=\"44\" \/><\/a>J&rsquo;ai volontairement induit une erreur afin de montrer dans la log d&rsquo;erreur que le code du Copy-book est &lsquo;expanded&rsquo; au sein du programme Cobol.<\/p>\n<p>Les Copy-books sont l&rsquo;\u00e9quivalent de composants r\u00e9utilisables, tr\u00e8s utiles. Par exemple, les d\u00e9clarations de structures de tables de bases de donn\u00e9es sont effectu\u00e9es dans un Copy-book. De cette mani\u00e8re, chaque programme r\u00e9alisant un traitement sur la table (r\u00e9-)utilisera le Copy-book. Toute modification de la structure de la table se fera au travers de celui-ci, ce qui \u00e9vitera de devoir rechercher et modifier tous les programmes qui font appel \u00e0 lui.<\/p>\n<p>Vous comprenez donc que programmes et Copys sont les deux composants comportant le code Cobol dont nous souhaitons \u00e9valuer la qualit\u00e9.<\/p>\n<p>Les autres types d&rsquo;objets Mainframe \u00e0 conna\u00eetre :<\/p>\n<ul>\n<li>Transaction CICS \u2013 prononcez &lsquo;KiKs&rsquo; pour faire connaisseur \ud83d\ude42 : fichier utilis\u00e9 par le serveur de transactions sur les mainframes IBM. Lorsque vous effectuez une transaction bancaire, comme un retrait de votre compte en banque, il est probable que plusieurs milliers de personnes soient en train d\u2019effectuer la m\u00eame op\u00e9ration en m\u00eame temps que vous. C\u2019est le r\u00f4le du serveur de transactions CICS de g\u00e9rer ces milliers de transactions (et bien d\u2019autres) en parall\u00e8le.<\/li>\n<li>JCL : un fichier batch. Le JCL est un langage (Job Control Language) sp\u00e9cifique, assez abscons. Une fois votre op\u00e9ration bancaire effectu\u00e9e, il faudra enregistrer une \u00e9criture comptable, par exemple. Mais inutile d\u2019effectuer cette op\u00e9ration en \u2018direct live\u2019, et d\u2019utiliser inutilement de la ressource ordinateur (CPU, m\u00e9moire) alors que ce traitement peut \u00eatre effectu\u00e9 durant la nuit. Ce sera le r\u00f4le d\u2019un batch JCL.<\/li>\n<\/ul>\n<p>Il n\u2019existe pratiquement pas de normes de qualit\u00e9 pour les transactions CICS ou les fichiers JCL, et ce ne sont pas des r\u00e8gles critiques, donc nous \u00e9viterons l&rsquo;effort d&rsquo;extraire et analyser ces fichiers.<\/p>\n<p>Il existe d\u2019autres types d&rsquo;objet et d&rsquo;autres types de code (Assembleur, PL1, \u2026) dans le monde Mainframe, mais personne ne vous en voudra si vous ne savez pas ce dont il s&rsquo;agit. Tout ce que vous avez besoin de retenir, c\u2019est que nous allons analyser des composants \u00e0 base de langage Cobol, donc des programmes et des Copy-books. Et d&rsquo;\u00eatre capable de dire lors de votre r\u00e9union que le JCL et le &lsquo;KiKs&rsquo; ne sont pas vraiment int\u00e9ressants pour estimer la qualit\u00e9 d&rsquo;applications Mainframe.<\/p>\n<h3><strong>Les applications Cobol<\/strong><\/h3>\n<p>Tiens, en parlant d&rsquo;applications Mainframe, autre chose \u00e0 savoir.<\/p>\n<p>Une banque moyenne doit avoir autour de 20 millions de lignes de Cobol, environ. Donc vous n\u2019allez pas tout analyser d\u2019un seul coup, vous allez commencer par les applications les plus critiques. Le probl\u00e8me : la notion d\u2019application n\u2019a pas de sens en Cobol.<\/p>\n<p>Il s\u2019agit de syst\u00e8mes Legacy, qui existent depuis des dizaines d\u2019ann\u00e9es, et sont fortement imbriqu\u00e9s. Par exemple, le code Cobol qui vous permet d\u2019effectuer votre op\u00e9ration bancaire va probablement utiliser quelques Copy-books qui seront \u00e9galement n\u00e9cessaires au syst\u00e8me comptable, qui utilisera un batch afin d\u2019enregistrer l\u2019\u00e9criture correspondant \u00e0 votre retrait. A quelle application appartiennent ces Copy-books ? Pour les cobolistes, cela n\u2019a pas vraiment d\u2019importance.<\/p>\n<p>Par contre, il est bien \u00e9vident que tous les fichiers constitutifs de ces millions de lignes de code ne vont pas se trouver tous group\u00e9s dans un seul et unique emplacement. Un mainframe est un ordinateur avec un file-system et les fichiers seront organis\u00e9s en \u2018biblioth\u00e8ques\u2019 ou librairies, tous comme les r\u00e9pertoires de votre propre ordinateur personnel. Ce que nous allons analyser, c&rsquo;est le contenu d&rsquo;un directory, que l&rsquo;on va extraire et downloader depuis le mainframe jusqu&rsquo;\u00e0 notre plateforme Sonar \/ Jenkins.<\/p>\n<p>Donc ne vous \u00e9tonnez pas si dans votre r\u00e9union, certains parlent de &lsquo;modules&rsquo; au lieu d&rsquo;applications. Dans tous les cas, ce qui vous int\u00e9resse, c&rsquo;est de savoir comment organiser les diff\u00e9rents ensembles de fichiers en diff\u00e9rentes analyses, que celles-ci portent sur des applications, des modules ou tout autre appellation qu&rsquo;on voudra bien leur donner.<\/p>\n<p>Ces simples notions sont le minimum n\u00e9cessaire \u00e0 conna\u00eetre afin de savoir de quoi l&rsquo;on parle dans la r\u00e9union qui vous attend.<\/p>\n<p>Il vous reste maintenant \u00e0 savoir quelles sont les questions \u00e0 poser. Ce que nous verrons dans notre prochain post.<\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>J&rsquo;ai fait quelques posts il y a quelques mois (Sonar \u2013 Analyse Cobol avec Jenkins, Open Source &amp; code Legacy) dans le but de montrer que, contrairement \u00e0 une id\u00e9e assez r\u00e9pandue, il n&rsquo;est pas n\u00e9cessaire d&rsquo;\u00eatre un gourou J2EE ou un expert Open Source pour analyser du code Legacy d&rsquo;applications Cobol (ou ABAP) avec [&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-194","post","type-post","status-publish","format-standard","hentry","category-sonar-cobol"],"_links":{"self":[{"href":"http:\/\/qualilogy.com\/fr\/wp-json\/wp\/v2\/posts\/194"}],"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=194"}],"version-history":[{"count":1,"href":"http:\/\/qualilogy.com\/fr\/wp-json\/wp\/v2\/posts\/194\/revisions"}],"predecessor-version":[{"id":195,"href":"http:\/\/qualilogy.com\/fr\/wp-json\/wp\/v2\/posts\/194\/revisions\/195"}],"wp:attachment":[{"href":"http:\/\/qualilogy.com\/fr\/wp-json\/wp\/v2\/media?parent=194"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/qualilogy.com\/fr\/wp-json\/wp\/v2\/categories?post=194"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/qualilogy.com\/fr\/wp-json\/wp\/v2\/tags?post=194"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}