{"id":196,"date":"2012-06-03T09:42:22","date_gmt":"2012-06-03T08:42:22","guid":{"rendered":"http:\/\/dev.qualilogy.com\/fr\/?p=196"},"modified":"2013-01-05T09:43:06","modified_gmt":"2013-01-05T08:43:06","slug":"sonar-cobol-quelles-questions","status":"publish","type":"post","link":"http:\/\/qualilogy.com\/fr\/sonar-cobol-quelles-questions\/","title":{"rendered":"Sonar Cobol &#8211; Quelles questions"},"content":{"rendered":"<p><a href=\"http:\/\/vicken.deviantart.com\/\" target=\"_blank\"><img loading=\"lazy\" decoding=\"async\" class=\"alignright size-full wp-image-1812\" title=\"Qual_CobolQuest1\" src=\"http:\/\/qualilogy.com\/wp-content\/uploads\/2012\/06\/Qual_CobolQuest1.jpg\" alt=\"\" width=\"262\" height=\"337\" \/><\/a>Nous avons vu <a href=\"http:\/\/qualilogy.com\/fr\/sonar-cobol-ce-quil-faut-savoir\" target=\"_blank\">la semaine derni\u00e8re<\/a> ce qu\u2019il fallait savoir en mati\u00e8re de Mainframe-Cobol, avant de se pr\u00e9senter dans une r\u00e9union avec les sp\u00e9cialistes de cette technologie et pr\u00e9parer un processus d\u2019analyse avec Sonar.<\/p>\n<p>Nous allons maintenant examiner les questions \u00e0 poser afin d\u2019organiser les analyses avec Sonar (que nous verrons dans un prochain article).<\/p>\n<p>Ces questions vous permettront \u00e9galement de pr\u00e9ciser les r\u00e8gles de livraison du code source.<\/p>\n<p><!--more--><\/p>\n<p>Vous avez d\u00e9j\u00e0 expliqu\u00e9 \u00e0 vos interlocuteurs du monde Mainframe que vous allez travailler avec les programmes Cobol et les Copys. La premi\u00e8re question sera : oui, mais quel Cobol ?<\/p>\n<h3><strong>Quel Cobol ?<\/strong><\/h3>\n<p>Il existe toutes sortes de plates-formes Mainframe-Cobol : IBM z\/OS, IBM AS\/400, Bull GCOS (7 et 8), Tandem, Unisys et m\u00eame Unix (Microfocus, notamment). Le Cobol z\/OS est le plus r\u00e9pandu. Il est bas\u00e9 sur la norme ANSI 85, celui que vous rencontrerez le plus souvent. Les autres Cobol sont tr\u00e8s proches mais peuvent avoir quelques variantes de langages qui peuvent g\u00eaner voire bloquer un parser.<\/p>\n<p>Donc la 1\u00e8re question est : quel Cobol ? Et peut-on l\u2019analyser avec Sonar ? Le plus simple, pour le savoir : allez v\u00e9rifier sur cette page <a href=\"http:\/\/www.sonarsource.com\/products\/plugins\/languages\/cobol\/\" target=\"_blank\">http:\/\/www.sonarsource.com\/products\/plugins\/languages\/cobol\/<\/a>.<\/p>\n<p><strong>Quelles applications ?<\/strong><\/p>\n<p>Nous avons vu que la notion d\u2019applications n\u2019avait pas vraiment d\u2019int\u00e9r\u00eat pour les cobolistes. N\u00e9anmoins, comme pour toute autre technologie, vous souhaitez organiser le dashboard Sonar en fonction des diff\u00e9rents modules applicatifs, afin de pouvoir r\u00e9pondre \u00e0 des questions telles que :<\/p>\n<ul>\n<li>Quelle application est la plus volumineuse ? La plus complexe ?<\/li>\n<li>O\u00f9 trouve-t-on le plus de d\u00e9fauts ? Quelle application pr\u00e9sente le plus de risques pour les utilisateurs ? Quelles applications sont les plus difficiles et donc les plus co\u00fbteuses \u00e0 maintenir ?<\/li>\n<li>Quelle application pr\u00e9sente une dette technique importante ? Quelles sont les applications candidates \u00e0 un refactoring ?<\/li>\n<li>Quelle est la qualit\u00e9 du code fourni par mes outsourceurs ?<\/li>\n<li>Etc.<\/li>\n<\/ul>\n<p>Afin de pr\u00e9senter un dashboard Sonar qui r\u00e9ponde \u00e0 ces questions, il vous faut analyser le code de chaque application, et donc organiser sa livraison en diff\u00e9rents r\u00e9pertoires correspondant \u00e0 chaque application. Le code Cobol est g\u00e9r\u00e9 sur le mainframe dans des biblioth\u00e8ques (\u00e9quivalent des r\u00e9pertoires de votre ordinateur), selon une arborescence en modules applicatifs. Donc, il suffit habituellement d\u2019extraire chaque biblioth\u00e8que dans un r\u00e9pertoire de livraison distinct, pour chaque application.<\/p>\n<p>Demandez \u00e0 ce que le code correspondant \u00e0 chaque module applicatif soit livr\u00e9 dans un unique r\u00e9pertoire. V\u00e9rifiez avec vos interlocuteurs et les futurs utilisateurs du dashboard Sonar comment ils veulent organiser les diff\u00e9rentes applications.<\/p>\n<h3><strong>Quelles r\u00e8gles de nommage ?<\/strong><\/h3>\n<p>En Java, vous aurez g\u00e9n\u00e9ralement une classe nomm\u00e9e en fonction de l\u2019entit\u00e9 m\u00e9tier correspondante. Par exemple, la classe \u2018Client\u2019 pour g\u00e9rer les clients, la classe \u2018Connexion\u2019 pour g\u00e9rer une connexion, etc. Rien de tout cela en Cobol. Les noms de fichiers sont tout ce qu\u2019il y a d\u2019\u00e9sot\u00e9rique. Mais en fait, c\u2019est tr\u00e8s bien organis\u00e9.<\/p>\n<p>Un fichier Cobol ob\u00e9it quasi syst\u00e9matiquement \u00e0 des r\u00e8gles de nommage sur 8 caract\u00e8res. Le plus souvent, les 2 ou 3 premi\u00e8res lettres d\u2019un programme Cobol correspondent au module applicatif auquel il appartient.<\/p>\n<p>Voici un exemple de r\u00e8gles de nommages : AAAnnnnX avec<\/p>\n<ul>\n<li>AAA pour identifier le module.<\/li>\n<li>nnnn : 4 chiffres composant un identifiant unique.<\/li>\n<li>X : suffixe pr\u00e9cisant le type de programme. Par exemple, (B) pour Batch ou (T) pour TP (transactionnel). Ou encore (P)r\u00e9sentation, logique (M)\u00e9tier ou (D)ata (acc\u00e8s aux donn\u00e9es en database).<\/li>\n<\/ul>\n<p>Vous rencontrerez bien d\u2019autres types de nommage, ce n\u2019est qu\u2019un exemple. Mais les \u00e9l\u00e9ments de nomenclature sont bien souvent les m\u00eames, et comportent presque toujours un identifiant applicatif.<\/p>\n<p>Demandez \u00e0 vous faire pr\u00e9ciser les r\u00e8gles de nommage. Ces r\u00e8gles doivent vous permettre de v\u00e9rifier que la livraison est correcte. Par exemple, les fichiers commen\u00e7ant par \u2018AAA\u2019 correspondent au module applicatif AAA et sont livr\u00e9s dans un r\u00e9pertoire unique AAA.<br \/>\nVous aurez fr\u00e9quemment d\u2019autres fichiers que \u2018AAA\u2019 dans ce r\u00e9pertoire, mais ils seront n\u00e9anmoins peu nombreux. L\u2019important, vous l\u2019avez compris, est de ne pas avoir tous les fichiers \u2018AAA\u2019 dans un r\u00e9pertoire \u2018ZZZ\u2019 Sinon, vous allez avoir un probl\u00e8me, notamment dans le suivi historique des versions. Il suffit d\u2019une petite erreur dans le batch d\u2019extraction du code source, qui peut survenir lorsque celui-ci est modifi\u00e9, par exemple pour ajouter une nouvelle application dans le dashboard Sonar.<\/p>\n<p><strong>Code g\u00e9n\u00e9r\u00e9<\/strong><\/p>\n<p>Il existe des g\u00e9n\u00e9rateurs de code Cobol. Par exemple, un outil va permettre de dessiner simplement un \u00e9cran et g\u00e9n\u00e8rera ensuite le code des programmes destin\u00e9s \u00e0 g\u00e9rer celui-ci, pour l\u2019affichage ou la saisie de donn\u00e9es.<br \/>\nEvidemment, il n\u2019y a aucun int\u00e9r\u00eat \u00e0 analyser du code g\u00e9n\u00e9r\u00e9. D\u2019abord, vous vous int\u00e9ressez aux \u2018bad practices\u2019 des programmeurs. Et m\u00eame si vous d\u00e9cidez de corriger des d\u00e9fauts dans du code g\u00e9n\u00e9r\u00e9, la correction effectu\u00e9e dispara\u00eetra \u00e0 la prochaine re-g\u00e9n\u00e9ration du programme.<\/p>\n<p>V\u00e9rifiez s\u2019il existe un g\u00e9n\u00e9rateur de code. Si oui, faites vous pr\u00e9ciser quelles r\u00e8gles de nommage permettent d\u2019identifier ces programmes afin de les \u00e9carter des analyses. Si possible, faites vous livrer les modules applicatifs sans ces objets.<\/p>\n<p><strong>Format de fichier<\/strong><\/p>\n<p>Les mainframes poss\u00e8dent leur propre format de fichier, et ce n\u2019est pas de l\u2019ASCII. Or, il nous faut bien \u00e9videmment des fichiers dans ce format. La personne en charge de l\u2019extraction devra donc effectuer cette conversion. Rien de bien compliqu\u00e9, il y a plein d\u2019utilitaires qui font cela.<\/p>\n<p>Il nous faut \u00e9galement un fichier par composant, c\u2019est-\u00e0-dire pour chaque programme et chaque Copy-book. Cela para\u00eet \u00e9vident, mais il m\u2019est arriv\u00e9 de recevoir un seul et unique (tr\u00e8s gros) fichier avec tous les programmes.<\/p>\n<p>De m\u00eame, le nom du fichier doit \u00eatre \u00e9quivalent au nom du programme ou du Copy-book. L\u00e0 encore, cela para\u00eet \u00e9vident, mais j\u2019ai d\u00e9j\u00e0 re\u00e7u des programmes avec des noms comme \u2018MP238.PROG(MP8239XZ)\u2019. La personne en charge de l\u2019extraction a cru bien faire en cr\u00e9ant des fichiers avec le nom de la biblioth\u00e8que (MP238) et le nom du programme MP8239XZ entre parenth\u00e8ses.<\/p>\n<p>Un truc, \u00e0 ce sujet. Un programme Cobol se compose de diff\u00e9rentes parties obligatoires, appel\u00e9es \u2018Division\u2019, et charg\u00e9es de regrouper diff\u00e9rents \u00e9l\u00e9ments de code. Par exemple, la \u2018DATA DIVISION\u2019 permet de d\u00e9finir les structures de donn\u00e9es, et les instructions logiques doivent obligatoirement s\u2019\u00e9crire dans la \u2018PROCEDURE DIVISION\u2019.<br \/>\nOr, tout programme Cobol d\u00e9butera forc\u00e9ment \u00e0 la premi\u00e8re ligne par une \u2018IDENTIFICATION DIVISION\u2019\u2019 suivi ensuite d\u2019une ligne avec le nom du programme, selon la syntaxe suivante : PROGRAM-ID. &lt;nom du programme&gt;.<\/p>\n<p>Donc si vous avez un fichier qui ne commence pas avec ces deux premi\u00e8res lignes, ou si vous avez plusieurs IDENTIFICATION DIVISION et PROGRAM-ID dans votre fichier, ou si le PROGRAM-ID ne correspond pas au nom du fichier, alors c\u2019est que les r\u00e8gles pr\u00e9c\u00e9dentes n\u2019ont pas \u00e9t\u00e9 respect\u00e9es et vous avez potentiellement un probl\u00e8me.<\/p>\n<p>Enfin, demandez \u00e0 ce que les fichiers pour les programmes Cobol aient une extension \u2018.cob\u2019 et les Copy-books une extension \u2018.cpy\u2019. Ce n\u2019est pas obligatoire, d\u2019autant que vous pouvez param\u00e9trer cet \u00e9l\u00e9ment avec Sonar, mais ce n\u2019est pas compliqu\u00e9 d\u2019extraire le code selon cette r\u00e8gle.<\/p>\n<p>En r\u00e9sum\u00e9, pr\u00e9cisez \u00e0 la personne en charge de l\u2019extraction du code source les r\u00e8gles de livraison de celui-ci :<\/p>\n<ul>\n<li>Fichier au format ASCII.<\/li>\n<li>Un fichier par programme.<\/li>\n<li>Le nom du fichier correspond au nom du programme.<\/li>\n<li>Si possible. extension .cob pour les programmes Cobol, et .cpy pour les Copy-books.<\/li>\n<\/ul>\n<p>Simplifiez vous la vie. Evitez de vous cr\u00e9er des \u00e9tapes suppl\u00e9mentaires avec des op\u00e9rations de transformation du code source. Faites en sorte que celui-ci soit dans un format qui permette son analyse : vous simplifiez votre processus, ce qui est primordial afin de pouvoir automatiser celui-ci et vous \u00e9vitez des t\u00e2ches suppl\u00e9mentaires, potentiellement sources d\u2019erreurs.<\/p>\n<p>Les derni\u00e8res questions \u00e0 poser correspondent \u00e0 des param\u00e8tres n\u00e9cessaires au parser, pour l\u2019analyse du code.<\/p>\n<p><a href=\"http:\/\/qualilogy.com\/wp-content\/uploads\/2012\/06\/Qual_CobolQuest2.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignright size-full wp-image-1819\" title=\"Qual_CobolQuest2\" src=\"http:\/\/qualilogy.com\/wp-content\/uploads\/2012\/06\/Qual_CobolQuest2.jpg\" alt=\"\" width=\"353\" height=\"92\" \/><\/a>Indicateur de position : le code d\u2019un programme Cobol est align\u00e9 sur la m\u00eame colonne. En d\u2019autres termes, toutes les instructions vont commencer \u00e0 la m\u00eame position. Par d\u00e9faut, un programme est align\u00e9 sur un indicateur de position, \u00e9gal \u00e0 7 par d\u00e9faut.<\/p>\n<p>Dans l\u2019exemple suivant, les 6 premiers caract\u00e8res correspondent \u00e0 un num\u00e9ro de ligne (notez qu\u2019ils ne sont pas s\u00e9quentiels, afin de pouvoir introduire de nouvelles lignes). Mais l\u00e0 encore, le code commence \u00e0 la position\/colonne 7.<\/p>\n<p><a href=\"http:\/\/qualilogy.com\/wp-content\/uploads\/2012\/06\/Qual_CobolQuest3.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-1820\" title=\"Qual_CobolQuest3\" src=\"http:\/\/qualilogy.com\/wp-content\/uploads\/2012\/06\/Qual_CobolQuest3.jpg\" alt=\"\" width=\"658\" height=\"136\" \/><\/a><\/p>\n<p>Vous pouvez param\u00e9trer cet indicateur de position avec Sonar, mais autant s\u2019en assurer auparavant avant de tomber sur une erreur de parser.<\/p>\n<p>Autres param\u00e8tres que vous pouvez ajuster avec Sonar, et l\u00e0 encore, n\u2019h\u00e9sitez pas \u00e0 demander :<\/p>\n<ul>\n<li>Tabulation : comme avec tout langage, un programmeur Cobol va utiliser la touche \u2018Tab\u2019 pour aligner son code. Une tabulation peut repr\u00e9senter une taille en caract\u00e8res diff\u00e9rente selon le type de mainframe ou de cobol.<\/li>\n<li>Longueur de la ligne de code : tout fichier ASCII comporte une ligne de 80 caract\u00e8res. Moins la position de d\u00e9part mais aussi la position de fin au-del\u00e0 de laquelle on ne trouvera plus de code. Mais \u00e9ventuellement un commentaire. Par d\u00e9faut, la \u2018zone\u2019 de code est \u00e9gale \u00e0 66.<\/li>\n<\/ul>\n<p>Il existe d\u2019autres param\u00e8tres utilisables avec Sonar, mais dans la plupart des cas, vous n\u2019aurez pas besoin de les conna\u00eetre. Parce que dans la plupart des cas, vous allez analyser du code Cobol de mainframe IBM avec les param\u00e8tres par d\u00e9faut.<\/p>\n<p>Cela semble compliqu\u00e9 ? Cela ne l\u2019est pas. J\u2019ai list\u00e9 les questions \u00e0 poser par ordre d\u2019importance donc tout ce que vous avez \u00e0 vous rappeler, c\u2019est que :<\/p>\n<ol>\n<li>Vous allez analyser des programmes Cobol et des Copy-books. Expliquez bien cela en d\u00e9but de r\u00e9union.<\/li>\n<li>Vous devez organiser la livraison en diff\u00e9rents r\u00e9pertoires correspondant aux diff\u00e9rents modules applicatifs que vos utilisateurs veulent voir dans le dashboard Sonar. Donc un r\u00e9pertoire = une application.<\/li>\n<li>Demandez quelles sont les r\u00e8gles de nommage des fichiers Cobol. Chaque fichier aura un identifiant qui correspond g\u00e9n\u00e9ralement au module applicatif. V\u00e9rifiez la livraison, notamment pour les premi\u00e8res versions, lorsque vous impl\u00e9mentez votre processus d\u2019analyse.<\/li>\n<li>Un fichier par programme, correspondant au nom du programme, avec une extension .cob, et par Copy-book avec une extension .cpy. Facilitez vous la vie.<\/li>\n<li>V\u00e9rifiez qu\u2019il n\u2019y a pas de g\u00e9n\u00e9rateur de Cobol. Si c\u2019est le cas, \u00e9cartez ces programmes g\u00e9n\u00e9r\u00e9s de la livraison.<\/li>\n<li>V\u00e9rifiez les param\u00e8tres par d\u00e9faut, notamment l\u2019indicateur de position.<\/li>\n<\/ol>\n<p>Ces questions ne donneront pas lieu \u00e0 discussion en r\u00e9union. En fait, vos interlocuteurs seront contents de vous voir aborder ces points. Ils seront satisfaits de vous voir poser les bonnes questions. Et puis vous verrez : les cobolistes sont des gens extr\u00eamement gentils.<\/p>\n<p>Prochainement : le param\u00e9trage d\u2019une analyse Cobol avec Sonar. Dans l\u2019attente, n\u2019h\u00e9sitez pas \u00e0 poser vos questions.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Nous avons vu la semaine derni\u00e8re ce qu\u2019il fallait savoir en mati\u00e8re de Mainframe-Cobol, avant de se pr\u00e9senter dans une r\u00e9union avec les sp\u00e9cialistes de cette technologie et pr\u00e9parer un processus d\u2019analyse avec Sonar. Nous allons maintenant examiner les questions \u00e0 poser afin d\u2019organiser les analyses avec Sonar (que nous verrons dans un prochain article). [&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-196","post","type-post","status-publish","format-standard","hentry","category-sonar-cobol"],"_links":{"self":[{"href":"http:\/\/qualilogy.com\/fr\/wp-json\/wp\/v2\/posts\/196"}],"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=196"}],"version-history":[{"count":1,"href":"http:\/\/qualilogy.com\/fr\/wp-json\/wp\/v2\/posts\/196\/revisions"}],"predecessor-version":[{"id":197,"href":"http:\/\/qualilogy.com\/fr\/wp-json\/wp\/v2\/posts\/196\/revisions\/197"}],"wp:attachment":[{"href":"http:\/\/qualilogy.com\/fr\/wp-json\/wp\/v2\/media?parent=196"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/qualilogy.com\/fr\/wp-json\/wp\/v2\/categories?post=196"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/qualilogy.com\/fr\/wp-json\/wp\/v2\/tags?post=196"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}