{"id":229,"date":"2013-01-21T15:23:09","date_gmt":"2013-01-21T14:23:09","guid":{"rendered":"http:\/\/qualilogy.com\/es\/?p=229"},"modified":"2013-01-21T17:59:31","modified_gmt":"2013-01-21T16:59:31","slug":"buenas-practicas-de-programacion-abap-los-blockers","status":"publish","type":"post","link":"http:\/\/qualilogy.com\/es\/buenas-practicas-de-programacion-abap-los-blockers\/","title":{"rendered":"Buenas pr\u00e1cticas de programaci\u00f3n ABAP &#8211; Los 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>Despu\u00e9s de una interrupci\u00f3n debido a la reorganizaci\u00f3n del blog &#8211; espero que\u00a0disfrut\u00e1is de la nueva interfaz &#8211; vamos a seguir con la serie sobre an\u00e1lisis de c\u00f3digo ABAP.<\/p>\n<p>Hemos visto la \u00faltima vez c\u00f3mo configurar <a title=\"Nuestro prime an\u00e1lisis de c\u00f3digo ABAP con Sonar y Jenkins\" href=\"http:\/\/qualilogy.com\/es\/primer-analisis-de-codigo-abap\/\" target=\"_blank\">nuestro primer an\u00e1lisis de c\u00f3digo ABAP<\/a> con Sonar y Jenkins.<\/p>\n<p>Esta semana, vamos a examinar las primeras reglas ABAP, las m\u00e1s importantes cuando se trata de buenas pr\u00e1cticas de programaci\u00f3n.<!--more--><\/p>\n<h2>Los dolores en el mundo ABAP<\/h2>\n<p>\u00bfCu\u00e1les son los defectos m\u00e1s temidos por la mayor\u00eda de las empresas? \u00bfCu\u00e1les son las malas pr\u00e1cticas de programaci\u00f3n que representan el mayor riesgo para su negocio? \u00bfCu\u00e1les son las principales preocupaciones de los responsables del proyecto y de los stakeholders? En pocas palabras, \u00bfcu\u00e1les son los dolores en el mundo ABAP?<\/p>\n<ol>\n<li>Cualquier cosa que pueda detener una transacci\u00f3n.<\/li>\n<li>Cualquier cosa que pueda afectar al rendimiento.<\/li>\n<\/ol>\n<p>No olvides que SAP es un software financiero, y un error en el proceso de una operaci\u00f3n significa, al mejor un retraso y en el peor caso, una p\u00e9rdida financiera, y en todos los casos una degradaci\u00f3n de la imagen. Si ni siquiera eres capaz de realizar una factura correctamente, de editar un orden o de administrar un inventario sin error, \u00bfc\u00f3mo quieres que alguien tenga confianza en tu empresa, tus productos, tus empleados.<\/p>\n<h2>Quality Profile<\/h2>\n<p>As\u00ed que voy a crear en SONAR un Quality Profile o perfil de calidad un poco diferente del que viene con el plugin ABAP, para promover las reglas m\u00e1s importantes en t\u00e9rminos de robustez y rendimiento.<\/p>\n<p>Para hacer esto, voy a conectarme como &#8216;Admin&#8217; en Sonar, y configurar un nuevo Quality Profile. No voy a precisar los detalles de esta operaci\u00f3n, ya debes saber hacerlo, y si no, es muy intuitivo. Tambi\u00e9n puedes ver este post \u2018<a title=\"Quality Profile\" href=\"http:\/\/qualilogy.com\/es\/quality-profile\/\" target=\"_blank\">Quality Profile<\/a>\u2019, que trata de la creaci\u00f3n de un Quality Profile para reglas Cobol, pero el procedimiento es el mismo.<\/p>\n<p><a href=\"http:\/\/qualilogy.com\/fr\/?attachment_id=300\" 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>Aqu\u00ed est\u00e1 el resultado:<\/p>\n<p>He creado un \u2018ABAP JPF Profile\u2019 que consta de 51 reglas. He activado 11 reglas ABAP que simplemente eran opcionales en el Quality Profile &#8216;Sonar way&#8217;, porque no son habitualmente utilizadas por todos los clientes. Pero me parecen interesantes, son \u00fatiles en el contexto de una auditor\u00eda, y si un equipo de proyecto me dice que no forman parte de su modelo de calidad, pues siempre ser\u00e1 posible desactivarlas o degradar su criticidad.<\/p>\n<h2>Control de errores<\/h2>\n<p>Luego inicio un an\u00e1lisis del c\u00f3digo que utilizo para hacer demos. Estas son las principales reglas Blockers en SONAR.<\/p>\n<p><a href=\"http:\/\/qualilogy.com\/fr\/?attachment_id=301\" 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\" \/><\/a><\/p>\n<p>Dos reglas permiten identificar una gesti\u00f3n incorrecta de errores: \u2018Avoid calling a function module without handling exceptions\u2019 y \u2018Handle error codes when using CALL-FUNCTION\u2019.<\/p>\n<p>Los errores suceden, nadie es inmune a un algoritmo err\u00f3neo, un caso no previsto, etc. Un tratamiento sin gesti\u00f3n de excepciones significa una interrupci\u00f3n del tratamiento, y por lo tanto de la transacci\u00f3n correspondiente. El usuario no puede terminar la operaci\u00f3n, con todas las consecuencias imaginables: corrupci\u00f3n de datos, &#8216;pantalla vacia&#8217;, etc. En el peor de los casos, no se dar\u00e1 cuenta de que ha ocurrido un error.<\/p>\n<p>La segunda regla identifica una llamada a una funci\u00f3n cuyo c\u00f3digo de retorno no se procesa. Esto no es correcto en todos los idiomas, e indica una mala pr\u00e1ctica bastante com\u00fan. La mayor\u00eda de las aplicaciones ABAP se subcontratan a proveedores externos, a veces offshore, y no sabes cu\u00e1l es el nivel de conocimiento de sus equipos. As\u00ed que si tienes tratamientos sin gesti\u00f3n del c\u00f3digo de retorno, se prohibe poner este programa en producci\u00f3n y se pide al proveedor que inmediatamente corrige este defecto.<br \/>\nY que forma sus programadores a esta buena pr\u00e1ctica, si encuentras un gran n\u00famero de esos defectos. Incluso cuando esta regla es conocida, la falta de atenci\u00f3n es siempre posible que causar\u00e1 tales violaci\u00f3nes.<\/p>\n<p><a href=\"http:\/\/qualilogy.com\/fr\/?attachment_id=298\" 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\" \/><\/a>La prueba del c\u00f3digo de retorno se realiza a trav\u00e9s del par\u00e1metro &#8216;SY-SUBRC&#8217;, como se puede ver al observar el defecto en la l\u00ednea de c\u00f3digo.<\/p>\n<p>\u00bfC\u00f3mo? Olvid\u00e9 decir que puedes ir a la l\u00ednea de c\u00f3digo donde se encuentra la violaci\u00f3n? S\u00ed, no necesitas buscar un error dentro de cientos de l\u00edneas de c\u00f3digo, SONAR te llevar\u00e1 all\u00ed inmediatamente. Es \u00fatil cuando se trata de comprobar el error, o para el programador que tiene que hacer la correcci\u00f3n.<\/p>\n<h2>Achtung Verboten !<\/h2>\n<p>Las otras dos normas se refieren a instrucciones estrictamente prohibidas.<\/p>\n<p>\u2018Forbid use of SYSTEM-CALL\u2019 identifica una llamada al n\u00facleo de SAP. Est\u00e1 absolutamente prohibido porque despues de una actualizaci\u00f3n de SAP (lo que ocurre muy a menudo), el tratamiento llamado en SAP puede desaparecer y con ello el programa dejar\u00e1 de funcionar.<br \/>\nEsta regla es bien conocida, y no he encontrado ning\u00fan violaci\u00f3n en el c\u00f3digo ABAP que tengo. As\u00ed que cre\u00e9 mi propio programa &#8216;Z_SYSTEM_CALL&#8217;, con 38 ejemplos de esta instrucci\u00f3n, todos con una sintaxis diferente.<a href=\"http:\/\/qualilogy.com\/fr\/?attachment_id=299\" 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\" \/><\/a><\/p>\n<p>Y puedo ver en la lista anterior de los Blockers en mi an\u00e1lisis que SONAR ha reconocido estas 38 sintaxis sin falsos positivos.<\/p>\n<p>La instrucci\u00f3n\u00a0\u2018BREAK-POINT\u2019 tiene el efecto de interrumpir un programa inmediatamente. En realidad, es utilizado para depurarlo. Su presencia en el c\u00f3digo significa simplemente que el programador se olvid\u00f3 de quitarla una vez que su desarrollo se ha completado. Si quieres darle verguenza a un outsourcer, muestrale un\u00a0\u2018BREAK-POINT\u2019 en la versi\u00f3n que el acaba de entregar. Por lo general, encuentro 1 o 2 (o m\u00e1s) en cada aplicaci\u00f3n.<\/p>\n<p>Todos los Blockers que hemos visto corresponden a reglas con cero tolerancia. Deben corregirse de inmediato esos defectos, no se permite ninguna excepci\u00f3n y el c\u00f3digo no se instalar\u00e1 en producci\u00f3n. Algunos pueden considerar que una gesti\u00f3n incorrecta de excepciones es ciertamente grave, pero no bloqueante, pero no es el caso a menudo. La gesti\u00f3n del c\u00f3digo de retorno es en los 5 primeros Blockers de la mayor\u00eda de los clientes que conozco.<\/p>\n<p>Veremos en el pr\u00f3ximo post las reglas cr\u00edticas, principalmente sobre el rendimiento.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Despu\u00e9s de una interrupci\u00f3n debido a la reorganizaci\u00f3n del blog &#8211; espero que\u00a0disfrut\u00e1is de la nueva interfaz &#8211; vamos a seguir con la serie sobre an\u00e1lisis de c\u00f3digo ABAP. Hemos visto la \u00faltima vez c\u00f3mo configurar nuestro primer an\u00e1lisis de c\u00f3digo ABAP con Sonar y Jenkins. Esta semana, vamos a examinar las primeras reglas ABAP, [&hellip;]<\/p>\n","protected":false},"author":3,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[12],"tags":[],"class_list":["post-229","post","type-post","status-publish","format-standard","hentry","category-sonar-abap"],"_links":{"self":[{"href":"http:\/\/qualilogy.com\/es\/wp-json\/wp\/v2\/posts\/229"}],"collection":[{"href":"http:\/\/qualilogy.com\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/qualilogy.com\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/qualilogy.com\/es\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"http:\/\/qualilogy.com\/es\/wp-json\/wp\/v2\/comments?post=229"}],"version-history":[{"count":17,"href":"http:\/\/qualilogy.com\/es\/wp-json\/wp\/v2\/posts\/229\/revisions"}],"predecessor-version":[{"id":231,"href":"http:\/\/qualilogy.com\/es\/wp-json\/wp\/v2\/posts\/229\/revisions\/231"}],"wp:attachment":[{"href":"http:\/\/qualilogy.com\/es\/wp-json\/wp\/v2\/media?parent=229"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/qualilogy.com\/es\/wp-json\/wp\/v2\/categories?post=229"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/qualilogy.com\/es\/wp-json\/wp\/v2\/tags?post=229"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}