{"id":257,"date":"2013-02-04T13:59:21","date_gmt":"2013-02-04T12:59:21","guid":{"rendered":"http:\/\/qualilogy.com\/es\/?p=257"},"modified":"2013-02-04T17:04:08","modified_gmt":"2013-02-04T16:04:08","slug":"buenas-practicas-de-programacion-abap-los-defectos-major","status":"publish","type":"post","link":"http:\/\/qualilogy.com\/es\/buenas-practicas-de-programacion-abap-los-defectos-major\/","title":{"rendered":"Buenas pr\u00e1cticas de programaci\u00f3n ABAP \u2013 Los defectos \u2018Major\u2019"},"content":{"rendered":"<p><a href=\"http:\/\/vicken.deviantart.com\/\" target=\"_blank\"><img loading=\"lazy\" decoding=\"async\" class=\"alignleft size-full wp-image-342\" alt=\"Bonnes pratiques de programmation ABAP - Les d\u00e9fauts majeurs\" src=\"http:\/\/qualilogy.com\/fr\/wp-content\/uploads\/sites\/2\/2013\/02\/QualSonarAbapRules.jpg\" width=\"350\" height=\"174\" \/><\/a>Hemos visto anteriormente <a title=\"Buenas practicas de programaci\u00f3nn ABAP \u2013 Los defectos 'Blockers'\" href=\"http:\/\/qualilogy.com\/es\/buenas-practicas-de-programacion-abap-los-blockers\/\" target=\"_blank\">los defectos bloqueantes o \u2018Blockers\u2019<\/a>, as\u00ed llamados porque ninguna violaci\u00f3n se puede tolerar, y <a title=\"Buenas practivas de programaci\u00f3n ABAP - Los defectos Crtical\" href=\"http:\/\/qualilogy.com\/es\/buenas-practicas-de-programacion-abap-los-defectos-critical\/\" target=\"_blank\">los defectos \u2018Critical\u2019 <\/a>tan graves que requieren una correcci\u00f3n inmediata, aunque se puede admitir una excepci\u00f3n si se puede justificarla, y eso de manera muy rigurosa.<\/p>\n<p>En nuestro Quality Profile SONAR, los \u00abbloqueadores\u00bb se concentran en todo que pueda detener una transacci\u00f3n o un programa y los \u00abcr\u00edticos\u00bb en las pr\u00e1cticas de programaci\u00f3n que supongan un riesgo para el rendimiento.<\/p>\n<p>Vamos a concluir esta serie sobre las mejores pr\u00e1cticas de programaci\u00f3n ABAP con las reglas restantes, que afectar\u00e1n principalmente a la capacidad de mantenimiento del c\u00f3digo.<\/p>\n<p><!--more--><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignleft size-full wp-image-331\" alt=\"Mon application ABAP\" src=\"http:\/\/qualilogy.com\/fr\/wp-content\/uploads\/sites\/2\/2013\/01\/SONAR_ABAP_LOC.jpg\" width=\"286\" height=\"114\" \/><\/p>\n<p>Nuestra aplicaci\u00f3n ABAP no tiene un tama\u00f1o muy grande: un poco menos de 700 archivos para aproximadamente 26.000 l\u00edneas, pues un promedio no muy elevado de 40 l\u00edneas de c\u00f3digo por programa.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignright size-full wp-image-348\" alt=\"SONAR ABAP Taux de commentaires et de copier-coll\u00e9\" src=\"http:\/\/qualilogy.com\/fr\/wp-content\/uploads\/sites\/2\/2013\/02\/SONAR_ABAP_Comments.jpg\" width=\"285\" height=\"134\" \/>La tasa de comentario es correcta, por encima del 22%. Tambi\u00e9n podemos ver un porcentaje significativo de c\u00f3digo duplicado.<\/p>\n<p><a href=\"http:\/\/qualilogy.com\/fr\/wp-content\/uploads\/sites\/2\/2013\/02\/SONAR_ABAP_Violations.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignleft size-full wp-image-347\" alt=\"SONAR ABAP - Liste des violations\" src=\"http:\/\/qualilogy.com\/fr\/wp-content\/uploads\/sites\/2\/2013\/02\/SONAR_ABAP_Violations.jpg\" width=\"204\" height=\"142\" \/><\/a><\/p>\n<p>&nbsp;<\/p>\n<p>Pero esto es un promedio que puede reflejar una varianza y por lo tanto realidades muy diferentes. Para comprobar esto, vamos a ver lo que tenemos en los defectos &#8216;Major&#8217;.<\/p>\n<h2>Nivel de comentario<\/h2>\n<p>Las principales violaci\u00f3nes de este tipo son m\u00e9todos, clases, forms, funciones, etc. sin comentarios, junto con una serie de objetos con un nivel de comentarios insuficiente.<\/p>\n<p><a href=\"http:\/\/qualilogy.com\/fr\/wp-content\/uploads\/sites\/2\/2013\/02\/SONAR_ABAP_CommentsRules.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-346\" alt=\"SONAR ABAP - Commentaires dans les objets\" src=\"http:\/\/qualilogy.com\/fr\/wp-content\/uploads\/sites\/2\/2013\/02\/SONAR_ABAP_CommentsRules.jpg\" width=\"2208\" height=\"1320\" \/><\/a><\/p>\n<p>Podemos ver que hay un ABAP orientado Objeto con clases y m\u00e9todos. Este tipo de c\u00f3digo no es muy com\u00fan, pero al menos podemos comprobar que se puede analizar con SONAR.<br \/>\nSONAR tambi\u00e9n lista:<\/p>\n<ul>\n<li>Archivos con una densidad de comentarios de menos de 20%.<\/li>\n<li>Objetos (desarrollados en estos archivos) con una densidad de comentarios de menos de 15%.<\/li>\n<\/ul>\n<p>El c\u00f3digo es f\u00e1cil de mantener si es comprensible. M\u00e1s largo y complicado es un programa, m\u00e1s esfuerzo se necesitar\u00e1 para introducir un cambio, y m\u00e1s alto el riesgo de introducir un defecto al mismo tiempo. La presencia de comentarios en el c\u00f3digo debe permitir al desarrollador comprender m\u00e1s f\u00e1cilmente la l\u00f3gica del programa, las evoluciones o correcciones anteriores y por lo tanto minimizar los costes de mantenimiento y los riesgos para la estabilidad de la aplicaci\u00f3n.<\/p>\n<h2>C\u00f3digo duplicado<\/h2>\n<p>Tambi\u00e9n tenemos 58 programas, un poco m\u00e1s de 8% del total, con c\u00f3digo duplicado.<\/p>\n<p>C\u00f3digo duplicado es c\u00f3digo &#8216;Copiado-Pegado&#8217;. Un programador debe implementar una nueva funci\u00f3n, un tratamiento ya codificado en un otro fichero (generalmente por el mismo), por lo que le resuelta m\u00e1s f\u00e1cil reproducirlo tantas veces como sea necesario.<\/p>\n<p>Esta mala pr\u00e1ctica es ciertamente m\u00e1s peligrosa que un nivel de comentario insuficiente, porque cualquier cambio en uno de estos bloques de c\u00f3digo duplicado debe introducirse en todas sus copias, o la a que se olvida dejar\u00e1 de funcionar correctamente. Esto multiplica el n\u00famero de todos los cambios que hacer, sabiendo por supuesto que es imposible recordar todas las duplicaciones. El esfuerzo de mantenimiento es mucho mayor, y lo m\u00e1s importante, el riesgo de introducir un defecto es muy alto.<\/p>\n<p>Se recomienda corregir estas violaci\u00f3nes tan pronto como sea posible, y reemplazar los bloques de c\u00f3digo duplicados por funciones reutilizables.<\/p>\n<h2>Estructura de c\u00f3digo<\/h2>\n<p>Un c\u00f3digo incorrectamente estructurado es dif\u00edcil de leer.<\/p>\n<p><a href=\"http:\/\/qualilogy.com\/fr\/wp-content\/uploads\/sites\/2\/2013\/02\/SONAR_ABAP_CASEwithTooManyLOC.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-353\" alt=\"SONAR ABAP - CASE\/WHEN with too many lines of code\" src=\"http:\/\/qualilogy.com\/fr\/wp-content\/uploads\/sites\/2\/2013\/02\/SONAR_ABAP_CASEwithTooManyLOC.jpg\" width=\"540\" height=\"57\" \/><\/a><\/p>\n<p>Aqu\u00ed tenemos tratamientos de tipo CASE (para m\u00e1s detalles sobre esta instrucci\u00f3n, puedes ver el\u00a0post sobre <a title=\"Buenas practivas de programaci\u00f3n ABAP - Los defectos Crtical\" href=\"http:\/\/qualilogy.com\/es\/buenas-practicas-de-programacion-abap-los-defectos-critical\/\" target=\"_blank\">los defectos criticos o \u2018Critical\u2019)<\/a> que tien uno o m\u00e1s &#8216;caminos&#8217; WHEN con varias l\u00edneas de c\u00f3digo, lo que significa que el desarrollador ha programado un procesamiento l\u00f3gico en una estructura condicional. Si el tratamiento tiene m\u00faltiples lineas (m\u00e1s de 4 regla por defecto), se recomienda encapsularlo en una funci\u00f3n que ser\u00e1 llamada por el WHEN.<\/p>\n<p><a href=\"http:\/\/qualilogy.com\/fr\/wp-content\/uploads\/sites\/2\/2013\/02\/SONAR_ABAP_AvoidDeeplyNestedIF_DO.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-354\" alt=\"SONAR ABAP Avoid deeply nested IF\/DO\" src=\"http:\/\/qualilogy.com\/fr\/wp-content\/uploads\/sites\/2\/2013\/02\/SONAR_ABAP_AvoidDeeplyNestedIF_DO.jpg\" width=\"501\" height=\"46\" \/><\/a><\/p>\n<p>SONAR identifica un procesamiento condicional imbricado, como un IF con 3 o m\u00e1s niveles, Introducir un cambio en una tal estructura requiere un esfuerzo significativo para entender la l\u00f3gica, pues de nuevo m\u00e1s costes de mantenimiento y mayor riesgo de error.<\/p>\n<p><a href=\"http:\/\/qualilogy.com\/fr\/wp-content\/uploads\/sites\/2\/2013\/02\/SONAR_ABAP_AvoidTooComplexLogicalExpression.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-355\" alt=\"SONAR ABAP Avoid too complex logical expression\" src=\"http:\/\/qualilogy.com\/fr\/wp-content\/uploads\/sites\/2\/2013\/02\/SONAR_ABAP_AvoidTooComplexLogicalExpression.jpg\" width=\"491\" height=\"43\" \/><\/a><\/p>\n<p>Lo mismo ocurre con las expresiones condicionales complejas, con m\u00e1s de 4 AND u OR. A continuaci\u00f3n se muestra un ejemplo de c\u00f3digo proporcionado por SONAR para ilustrar esta regla.<\/p>\n<p><a href=\"http:\/\/qualilogy.com\/fr\/wp-content\/uploads\/sites\/2\/2013\/02\/SONAR_ABAP_AvoidTooComplexLogicalExpression_Exemple.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-356\" alt=\"SONAR ABAP Avoid too complex logical expression - Exemple\" src=\"http:\/\/qualilogy.com\/fr\/wp-content\/uploads\/sites\/2\/2013\/02\/SONAR_ABAP_AvoidTooComplexLogicalExpression_Exemple.jpg\" width=\"745\" height=\"83\" \/><\/a><\/p>\n<h2>Tama\u00f1o y complejidad<\/h2>\n<p>Otros defectos importantes que se pueden encontrar en una aplicaci\u00f3n ABAP, aunque pocos en la que hemos analizado: los programas grandes o con demasiados objetos.<\/p>\n<p><a href=\"http:\/\/qualilogy.com\/fr\/wp-content\/uploads\/sites\/2\/2013\/02\/SONAR_ABAP_AvoidToomany.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-357\" alt=\"SONAR ABAP Avoid too many objects\" src=\"http:\/\/qualilogy.com\/fr\/wp-content\/uploads\/sites\/2\/2013\/02\/SONAR_ABAP_AvoidToomany.jpg\" width=\"658\" height=\"83\" \/><\/a><\/p>\n<p>La complejidad tambi\u00e9n supone un riesgo para el mantenimiento de una aplicaci\u00f3n.<br \/>\n<a href=\"http:\/\/qualilogy.com\/fr\/wp-content\/uploads\/sites\/2\/2013\/02\/SONAR_ABAP_AvoidComplexity.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-358\" alt=\"SONAR ABAP - Avoid complexity\" src=\"http:\/\/qualilogy.com\/fr\/wp-content\/uploads\/sites\/2\/2013\/02\/SONAR_ABAP_AvoidComplexity.jpg\" width=\"599\" height=\"107\" \/><\/a><\/p>\n<p>De hecho, casi no hay ning\u00fan objeto con un nivel significativo de complejidad en esta aplicaci\u00f3n. Es normal porque es un c\u00f3digo que utilizo para hacer demo, no es una apliaci\u00f3n real.<\/p>\n<h2>Conclusi\u00f3n<\/h2>\n<p>Recuerdas que estas son s\u00f3lo algunas reglas de tipo &#8216;Major&#8217; encontradas en el c\u00f3digo analizado. Hay muchas otras en el Quality Profile ABAP de Sonar. Probablemente volveremos\u00a0en el futuro con una oportunidad de examinarlas, en relaci\u00f3n con otros art\u00edculos sobre el mundo ABAP.<\/p>\n<p>Equipos de proyecto, gerentes de aplicaciones SAP o stakeholders suelen pensar que SONAR, porque es Open Source, sabe trabajar solamente con las nuevas tecnolog\u00edas J2EE. De hecho, hemos visto a trav\u00e9s de esta serie de posts que es f\u00e1cil y r\u00e1pido realizar an\u00e1lisis de c\u00f3digo ABAP con SONAR, e implementar procesos \u2013 un Quality Gate, por ejemplo\u00a0\u2013 que puede detectar riesgos para la robustez y el rendimiento al mismo tiempo que controla los costes de mantenimiento.<\/p>\n<p><!--[if !mso]&gt;--><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Hemos visto anteriormente los defectos bloqueantes o \u2018Blockers\u2019, as\u00ed llamados porque ninguna violaci\u00f3n se puede tolerar, y los defectos \u2018Critical\u2019 tan graves que requieren una correcci\u00f3n inmediata, aunque se puede admitir una excepci\u00f3n si se puede justificarla, y eso de manera muy rigurosa. En nuestro Quality Profile SONAR, los \u00abbloqueadores\u00bb se concentran en todo que [&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-257","post","type-post","status-publish","format-standard","hentry","category-sonar-abap"],"_links":{"self":[{"href":"http:\/\/qualilogy.com\/es\/wp-json\/wp\/v2\/posts\/257"}],"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=257"}],"version-history":[{"count":16,"href":"http:\/\/qualilogy.com\/es\/wp-json\/wp\/v2\/posts\/257\/revisions"}],"predecessor-version":[{"id":273,"href":"http:\/\/qualilogy.com\/es\/wp-json\/wp\/v2\/posts\/257\/revisions\/273"}],"wp:attachment":[{"href":"http:\/\/qualilogy.com\/es\/wp-json\/wp\/v2\/media?parent=257"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/qualilogy.com\/es\/wp-json\/wp\/v2\/categories?post=257"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/qualilogy.com\/es\/wp-json\/wp\/v2\/tags?post=257"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}