{"id":290,"date":"2013-01-21T11:40:24","date_gmt":"2013-01-21T10:40:24","guid":{"rendered":"http:\/\/qualilogy.com\/fr\/?p=290"},"modified":"2013-01-28T14:42:21","modified_gmt":"2013-01-28T13:42:21","slug":"bonnes-pratiques-de-programmation-abap-les-blockers","status":"publish","type":"post","link":"http:\/\/qualilogy.com\/fr\/bonnes-pratiques-de-programmation-abap-les-blockers\/","title":{"rendered":"Bonnes pratiques de programmation ABAP \u2013 Les Blockers"},"content":{"rendered":"<p><a href=\"http:\/\/vicken.deviantart.com\/\" target=\"_blank\"><img loading=\"lazy\" decoding=\"async\" class=\"alignright size-full wp-image-292\" alt=\"Bonnes pratiques de programmation ABAP - Les blockers\" src=\"http:\/\/qualilogy.com\/fr\/wp-content\/uploads\/sites\/2\/2013\/01\/Qualilogy_AbapRules1.jpg\" width=\"250\" height=\"280\" \/><\/a>Apr\u00e8s une interruption due \u00e0 la r\u00e9organisation du blog \u2013 j\u2019esp\u00e8re que vous appr\u00e9ciez la nouvelle interface \u2013 nous reprenons la s\u00e9rie sur l\u2019analyse de code ABAP.<\/p>\n<p>Nous avions vu la derni\u00e8re fois comment param\u00e9trer <a title=\"Notre premi\u00e8re analyse de code ABAP avec Sonar et Jenkins\" href=\"http:\/\/qualilogy.com\/fr\/premiere-analyse-de-code-abap\" target=\"_blank\">notre premi\u00e8re analyse de code ABAP<\/a>, avec Sonar et Jenkins.<\/p>\n<p>Cette semaine, nous allons examiner les premi\u00e8res r\u00e8gles ABAP, tout au moins les plus critiques en mati\u00e8re de bonnes pratiques de programmation. <!--more--><\/p>\n<h2>Les douleurs dans le monde ABAP<\/h2>\n<p>Quels sont les d\u00e9fauts les plus redout\u00e9s par la plupart des entreprises ? Quelles sont les mauvaises pratiques de programmation qui pr\u00e9sentent le plus de risque pour leur business ? Quelles sont les pr\u00e9occupations principales des chefs de projet et des stakeholders ? Bref, quelles sont les douleurs dans le monde ABAP ?<\/p>\n<ol>\n<li>Tout ce qui peut interrompre une transaction en cours.<\/li>\n<li>Tout ce qui peut impacter la performance.<\/li>\n<\/ol>\n<p>N\u2019oublions pas que SAP est un logiciel financier, et qu\u2019une erreur dans le traitement d\u2019une op\u00e9ration signifie au mieux un retard, au pire une perte financi\u00e8re, et dans tous les cas une tr\u00e8s mauvaise image. Si vous n\u2019\u00eates m\u00eame pas capable de facturer correctement, d\u2019\u00e9diter une commande convenablement ou de g\u00e9rer vos stocks sans erreur, comment voulez-vous qu\u2019on ait confiance en votre entreprise, en vos produits, en votre personnel.<\/p>\n<p>De plus, SAP est le progiciel pr\u00e9f\u00e9r\u00e9 des grandes entreprises : le nombre de donn\u00e9es collect\u00e9es et manipul\u00e9es dans le cadre de leur activit\u00e9 est extr\u00eamement \u00e9lev\u00e9, et les programmes ABAP doivent souvent g\u00e9rer des tables de plusieurs millions d\u2019enregistrement. La performance est donc un v\u00e9ritable souci, et toutes les bonnes pratiques en mati\u00e8re de programmation SQL seront en bonne place dans notre panel de r\u00e8gles ABAP.<\/p>\n<h2>Quality Profile<\/h2>\n<p>Je vais donc me cr\u00e9er un Quality Profile Sonar un peu diff\u00e9rent de celui livr\u00e9 avec le plugin ABAP, afin de mettre en avant les r\u00e8gles les plus critiques en mati\u00e8re de robustesse et de performance.<\/p>\n<p>Pour ce faire, je vais me connecter en \u2018Admin\u2019 sous Sonar, et configurer un nouveau Quality Profile. Je passe sur la marche \u00e0 suivre, vous devez d\u00e9j\u00e0 la conna\u00eetre et sinon, c\u2019est tr\u00e8s intuitif. Vous pouvez \u00e9galement voir ce post \u2018<a title=\"Quality Profile\" href=\"http:\/\/qualilogy.com\/fr\/quality-profile\/\" target=\"_blank\">Quality Profile<\/a>\u2019, sur la cr\u00e9ation d\u2019un Quality Profile pour des r\u00e8gles Cobol, mais le principe reste le m\u00eame.<\/p>\n<p><a href=\"http:\/\/qualilogy.com\/fr\/bonnes-pratiques-de-programmation-abap-les-blockers\/sonar-abap-profile\/\" rel=\"attachment wp-att-300\"><img loading=\"lazy\" decoding=\"async\" class=\"alignright size-full wp-image-300\" alt=\"SONAR ABAP Profile\" src=\"http:\/\/qualilogy.com\/fr\/wp-content\/uploads\/sites\/2\/2013\/01\/SONAR-ABAP-Profile.jpg\" width=\"237\" height=\"108\" \/><\/a>Voici le r\u00e9sultat :<\/p>\n<p>J\u2019ai cr\u00e9\u00e9 un \u2018ABAP JPF Profile\u2019 qui compte 51 r\u00e8gles. C\u2019est-\u00e0-dire que j\u2019ai activ\u00e9es 11 r\u00e8gles ABAP qui \u00e9taient simplement facultatives dans le Quality Profile par d\u00e9faut &lsquo;Sonar way&rsquo;, parce qu\u2019elles ne sont pas syst\u00e9matiquement utilis\u00e9es par tous les clients. Mais je les trouve int\u00e9ressantes, elles sont utiles dans le cadre d\u2019un audit, et si une \u00e9quipe de projet me dit qu\u2019elles ne font pas partie de leur mod\u00e8le qualit\u00e9, alors il sera toujours possible de les d\u00e9sactiver ou de d\u00e9grader leur criticit\u00e9.<\/p>\n<h2>Gestion des erreurs<\/h2>\n<p>J\u2019ai ensuite lanc\u00e9 une analyse sur du code que j\u2019utilise pour faire des d\u00e9mos. Voici les principales r\u00e8gles bloquantes ou Blockers dans SONAR.<\/p>\n<p><a href=\"http:\/\/qualilogy.com\/fr\/bonnes-pratiques-de-programmation-abap-les-blockers\/sonar_abap_blockers\/\" rel=\"attachment wp-att-301\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-301\" alt=\"Blockers SONAR ABAP\" src=\"http:\/\/qualilogy.com\/fr\/wp-content\/uploads\/sites\/2\/2013\/01\/SONAR_ABAP_Blockers.jpg\" width=\"510\" height=\"124\" srcset=\"http:\/\/qualilogy.com\/fr\/wp-content\/uploads\/sites\/2\/2013\/01\/SONAR_ABAP_Blockers.jpg 510w, http:\/\/qualilogy.com\/fr\/wp-content\/uploads\/sites\/2\/2013\/01\/SONAR_ABAP_Blockers-300x72.jpg 300w\" sizes=\"(max-width: 510px) 100vw, 510px\" \/><\/a><\/p>\n<p>Deux r\u00e8gles permettent d\u2019identifier une gestion incorrecte des erreurs : \u2018Avoid calling a function module without handling exceptions\u2019 et \u2018Handle error codes when using CALL-FUNCTION\u2019.<\/p>\n<p>Les erreurs arrivent, personne n\u2019est \u00e0 l\u2019abri d\u2019un algorithme erron\u00e9, d\u2019un cas non pr\u00e9vu, etc. Un traitement sans gestion des exceptions signifie une interruption de ce traitement, et donc de la transaction correspondante. L\u2019utilisateur ne pourra terminer l\u2019op\u00e9ration en cours, avec toutes les cons\u00e9quences possibles et imaginables : corruption de donn\u00e9es, \u2018page blanche\u2019, etc. Dans le pire des cas, il ne saura m\u00eame pas qu\u2019une erreur est intervenue.<\/p>\n<p>La seconde r\u00e8gle identifie les appels \u00e0 une fonction dont le code-retour n\u2019est pas trait\u00e9. C\u2019est incorrect dans tous les langages, et significatif d\u2019une \u2018bad practice\u2019 malheureusement assez courante. La plupart des applications ABAP sont sous-trait\u00e9es \u00e0 des outsourcers, parfois offshore, et vous ne savez pas quel est le niveau de connaissance de leurs \u00e9quipes. Donc si vous rencontrez des traitements sans gestion du code-retour, vous interdisez la mise en production du programme correspondant et vous demandez \u00e0 votre provider qu\u2019il corrige imm\u00e9diatement ce d\u00e9faut.<br \/>\nVoire qu\u2019il forme ses programmeurs \u00e0 cette bonne pratique indispensable, si vous en rencontrez un nombre important. Sinon, m\u00eame lorsque cette r\u00e8gle est connue, le manque d\u2019attention est toujours possible qui sera la cause de quelques violations de ce type.<\/p>\n<p><a href=\"http:\/\/qualilogy.com\/fr\/bonnes-pratiques-de-programmation-abap-les-blockers\/sonar_abap_handle_error_code\/\" rel=\"attachment wp-att-298\"><img loading=\"lazy\" decoding=\"async\" class=\"alignleft size-full wp-image-298\" alt=\"SONAR ABAP Handle error code\" src=\"http:\/\/qualilogy.com\/fr\/wp-content\/uploads\/sites\/2\/2013\/01\/SONAR_ABAP_Handle_error_code.jpg\" width=\"392\" height=\"114\" srcset=\"http:\/\/qualilogy.com\/fr\/wp-content\/uploads\/sites\/2\/2013\/01\/SONAR_ABAP_Handle_error_code.jpg 392w, http:\/\/qualilogy.com\/fr\/wp-content\/uploads\/sites\/2\/2013\/01\/SONAR_ABAP_Handle_error_code-300x87.jpg 300w\" sizes=\"(max-width: 392px) 100vw, 392px\" \/><\/a>Pour information, le test du code retour se fait \u00e0 travers le param\u00e8tre \u2018SY-SUBRC\u2019, comme nous pouvons le voir en allant regarder la ligne de code fautive.<\/p>\n<p>Comment ? J\u2019ai oubli\u00e9 de vous dire que vous pouviez descendre jusqu\u2019\u00e0 la ligne de code o\u00f9 se trouve la violation ? Et oui, inutile de chercher l\u2019erreur dans plusieurs centaines de lignes de code, SONAR vous y am\u00e8ne imm\u00e9diatement. Bien pratique lorsqu\u2019il s\u2019agit de v\u00e9rifier celle-ci, ou pour le programmeur qui devra effectuer la correction.<\/p>\n<h2>Achtung Verboten !<\/h2>\n<p>Les deux autres r\u00e8gles concernent des instructions absolument interdites.<\/p>\n<p>\u2018Forbid use of SYSTEM-CALL\u2019 identifie un appel au noyau SAP. C\u2019est absolument interdit parce que lors d\u2019un upgrade de version SAP (ce qui arrive assez r\u00e9guli\u00e8rement), le traitement appel\u00e9 risque de dispara\u00eetre et donc le programme correspondant cessera de fonctionner.<br \/>\nCette r\u00e8gle est bien connue, et je n\u2019ai pas trouv\u00e9 de violations dans le code ABAP dont je dispose. J\u2019ai donc cr\u00e9\u00e9 mon propre programme \u2018Z_SYSTEM_CALL\u2019 avec 38 exemplaires de cette instruction, tous avec une syntaxe diff\u00e9rente.<\/p>\n<p><a href=\"http:\/\/qualilogy.com\/fr\/bonnes-pratiques-de-programmation-abap-les-blockers\/sonar_abap_system_call\/\" rel=\"attachment wp-att-299\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-299\" alt=\"SONAR ABAP System Call\" src=\"http:\/\/qualilogy.com\/fr\/wp-content\/uploads\/sites\/2\/2013\/01\/SONAR_ABAP_System_Call.jpg\" width=\"735\" height=\"318\" srcset=\"http:\/\/qualilogy.com\/fr\/wp-content\/uploads\/sites\/2\/2013\/01\/SONAR_ABAP_System_Call.jpg 735w, http:\/\/qualilogy.com\/fr\/wp-content\/uploads\/sites\/2\/2013\/01\/SONAR_ABAP_System_Call-300x129.jpg 300w, http:\/\/qualilogy.com\/fr\/wp-content\/uploads\/sites\/2\/2013\/01\/SONAR_ABAP_System_Call-624x269.jpg 624w\" sizes=\"(max-width: 735px) 100vw, 735px\" \/><\/a><\/p>\n<p>Et je peux v\u00e9rifier, dans la liste pr\u00e9c\u00e9dente des &lsquo;Blockers&rsquo;, que SONAR a bien reconnu ces 38 diff\u00e9rentes syntaxes, sans aucun false-positive.<\/p>\n<p>L\u2019instruction \u2018BREAK-POINT\u2019 a pour effet d\u2019interrompre imm\u00e9diatement un programme. Elle est en fait utilis\u00e9e pour d\u00e9boguer celui-ci. Sa pr\u00e9sence dans le code signifie tout simplement que le programmeur a oubli\u00e9 d\u2019\u00f4ter celle-ci une fois son d\u00e9veloppement termin\u00e9. Si vous voulez coller la honte \u00e0 un outsourcer, montrez lui les \u2018BREAK-POINT\u2019 dans la version qu\u2019il vient de vous livrer. J&rsquo;en rencontre g\u00e9n\u00e9ralement 1 ou 2 (ou plus) dans chaque application.<\/p>\n<p>Tous les Blockers que nous venons de voir correspondent \u00e0 des d\u00e9fauts \u00e0 tol\u00e9rance z\u00e9ro. Ils doivent \u00eatre imm\u00e9diatement corrig\u00e9s, aucune exception n\u2019est admise et ce code ne sera pas install\u00e9 en production. Certains peuvent consid\u00e9rer qu\u2019une gestion incorrecte des exceptions est certes grave mais pas bloquante, mais c\u2019est assez peu souvent le cas. La gestion du code-retour est dans le top 5 des Blockers pour la plupart des clients que je connais.<\/p>\n<p>Nous verrons dans le prochain post les r\u00e8gles critiques, portant majoritairement sur la performance.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Apr\u00e8s une interruption due \u00e0 la r\u00e9organisation du blog \u2013 j\u2019esp\u00e8re que vous appr\u00e9ciez la nouvelle interface \u2013 nous reprenons la s\u00e9rie sur l\u2019analyse de code ABAP. Nous avions vu la derni\u00e8re fois comment param\u00e9trer notre premi\u00e8re analyse de code ABAP, avec Sonar et Jenkins. Cette semaine, nous allons examiner les premi\u00e8res r\u00e8gles ABAP, tout [&hellip;]<\/p>\n","protected":false},"author":3,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[13],"tags":[],"class_list":["post-290","post","type-post","status-publish","format-standard","hentry","category-sonar-abap"],"_links":{"self":[{"href":"http:\/\/qualilogy.com\/fr\/wp-json\/wp\/v2\/posts\/290"}],"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=290"}],"version-history":[{"count":25,"href":"http:\/\/qualilogy.com\/fr\/wp-json\/wp\/v2\/posts\/290\/revisions"}],"predecessor-version":[{"id":294,"href":"http:\/\/qualilogy.com\/fr\/wp-json\/wp\/v2\/posts\/290\/revisions\/294"}],"wp:attachment":[{"href":"http:\/\/qualilogy.com\/fr\/wp-json\/wp\/v2\/media?parent=290"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/qualilogy.com\/fr\/wp-json\/wp\/v2\/categories?post=290"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/qualilogy.com\/fr\/wp-json\/wp\/v2\/tags?post=290"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}