{"id":156,"date":"2012-07-09T10:35:01","date_gmt":"2012-07-09T09:35:01","guid":{"rendered":"http:\/\/dev.qualilogy.com\/es\/?p=156"},"modified":"2013-01-05T10:36:19","modified_gmt":"2013-01-05T09:36:19","slug":"auditoria-de-codigo-cobol-con-sonar-22","status":"publish","type":"post","link":"http:\/\/qualilogy.com\/es\/auditoria-de-codigo-cobol-con-sonar-22\/","title":{"rendered":"Auditoria de c\u00f3digo Cobol con Sonar (2\/2)"},"content":{"rendered":"<p>Hoy terminamos nuestra evaluaci\u00f3n de la calidad del c\u00f3digo Cobol analizado con el Sonar.<\/p>\n<p>En <a href=\"http:\/\/qualilogy.com\/es\/auditoria-de-codigo-cobol-con-sonar-12\" target=\"_blank\">el post anterior<\/a>, hemos trabajado con las m\u00e9tricas que med\u00edan el tama\u00f1o del c\u00f3digo, su complejidad, el nivel de documentaci\u00f3n y de duplicaci\u00f3n, lo que nos permiti\u00f3 formular algunas primeras recomendaciones a los responsables de esta aplicaci\u00f3n.<!--more--><\/p>\n<h3><strong>Blockers et Critical<\/strong><\/h3>\n<p>A ver las violaciones ahora. Recuerdate que hemos orientado <a href=\"http:\/\/qualilogy.com\/es\/tu-proprio-modelo-de-calidad\" target=\"_blank\">nuestro modelo Calidad<\/a> hacia la identificaci\u00f3n de defectos de robustez y de rendimiento, los que afectan lo m\u00e1s a los usuarios.<\/p>\n<p><a href=\"http:\/\/qualilogy.com\/wp-content\/uploads\/2012\/07\/QualCobolAssesV1.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-2043\" title=\"QualCobolAssesV1\" src=\"http:\/\/qualilogy.com\/wp-content\/uploads\/2012\/07\/QualCobolAssesV1.jpg\" alt=\"\" width=\"576\" height=\"154\" \/><\/a><\/p>\n<p>El n\u00famero de defectos bloqueantes es poco elevado. Encontramos el &#8216;SORT&#8217; de lo que hablamos anteriormente, y 5 &#8216;OPEN&#8217; de ficheros en un bucle. Este tratamiento costoso para el sistema operativo por supuesto debe realizarse antes del bucle. Estas violaciones presentan un riesgo elevado para el rendimiento pero son f\u00e1ciles de corregir.<\/p>\n<p>Los defectos cr\u00edticos se refieren a la robustez:<\/p>\n<ul>\n<li>\n<div id=\"gt-res-content\">\n<div dir=\"ltr\">Un c\u00f3digo de &#8216;status&#8217; declarado para la gesti\u00f3n correcta de un archivo no ha sido probado durante una operaci\u00f3n en este fichero (OPEN, READ, WRITE, \u2026). Un intento de escribir en un archivo no abierto, de leer en un archivo abierto en escritura (Output file), un tama\u00f1o de registro (RECORD) incorrecto son errores que pasar\u00e1n inadvertidos.<\/div>\n<\/div>\n<\/li>\n<li>Un GOTO que encamina el tratamiento fuera del m\u00f3dulo corriente rompe la l\u00f3gica de ejecuci\u00f3n de \u00e9ste.<\/li>\n<li>El EVALUATE sin WHEN OTHER es cl\u00e1sico: si ninguna de las condiciones del EVALUATE es verificada, la l\u00f3gica del programa se vuelve imprevisible.<\/li>\n<li>La \u00faltima regla sobre el tama\u00f1o del fichero s\u00f3lo se aplica a Cobol Microfocus, no z\/OS (mainframe IBM).<\/li>\n<\/ul>\n<p>Es muy probable que exista un est\u00e1ndar de calidad para la gesti\u00f3n del c\u00f3digo &#8216;status&#8217; de ficheros, pero que esta &#8216;best practice&#8217; se olvida a veces. No se puede evitar la falta de atenci\u00f3n. Sin prueba de este c\u00f3digo, un tratamiento incorrecto puede llevar a cabo una inconsistencia de los datos sin que se detecta.. La b\u00fasqueda de la causa del error tambi\u00e9n ser\u00e1 m\u00e1s dif\u00edcil. Al igual que el EVALUATE sin WHEN OTHER.<\/p>\n<p>Cualquier violaci\u00f3n de estas reglas para la gesti\u00f3n de errores impacta no s\u00f3lo a los usuarios, sino tambi\u00e9n a los costes de mantenimiento. En nuestro caso, sus n\u00fameros son suficientemente altos para pensar que se necesita recordar estas buenas pr\u00e1cticas a los desarrolladores.<\/p>\n<h3><strong>Costes de remediaci\u00f3n<\/strong><\/h3>\n<p>\u00bfTe recuerdas el widget que hemos utilizado en <a href=\"http:\/\/qualilogy.com\/es\/auditoria-de-codigo-cobol-con-sonar-12\" target=\"_blank\">el post anterior<\/a>, con los defectos m\u00e1s frecuentes?<\/p>\n<p><a href=\"http:\/\/qualilogy.com\/wp-content\/uploads\/2012\/07\/QualCobolAssesV2.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-2045\" title=\"QualCobolAssesV2\" src=\"http:\/\/qualilogy.com\/wp-content\/uploads\/2012\/07\/QualCobolAssesV2.jpg\" alt=\"\" width=\"583\" height=\"177\" \/><\/a><\/p>\n<p>Encontramos de nuevo el IF sin END-IF de que ya hemos hablados, los peligrosos GOTOs, m\u00e1s de 4 500 p\u00e1rrafos sin documentaci\u00f3n y c\u00f3digo duplicado. Estas violaciones impactan la mantenibilidad de la aplicaci\u00f3n, como se puede ver en este diagrama:<\/p>\n<p><a href=\"http:\/\/qualilogy.com\/wp-content\/uploads\/2012\/07\/QualCobolAssesV21.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-2046\" title=\"QualCobolAssesV21\" src=\"http:\/\/qualilogy.com\/wp-content\/uploads\/2012\/07\/QualCobolAssesV21.jpg\" alt=\"\" width=\"582\" height=\"171\" \/><\/a><\/p>\n<p>No vamos a comentar en detalles estos defectos ya que nuestro objetivo es identificar a los que impactan a los usuarios. Pues las 45 violaci\u00f3nes de tipo \u2018Blockers\u2019 y los 292 \u2018Critical\u2019 representan, respectivamente, 5.6 d\u00edas y 50.5 d\u00edas de correcci\u00f3n.<\/p>\n<p><a href=\"http:\/\/qualilogy.com\/wp-content\/uploads\/2012\/07\/QualCobolAssesV22.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-2047\" title=\"QualCobolAssesV22\" src=\"http:\/\/qualilogy.com\/wp-content\/uploads\/2012\/07\/QualCobolAssesV22.jpg\" alt=\"\" width=\"584\" height=\"180\" \/><\/a><\/p>\n<p>Aproximadamente dos semanas de trabajo para un equipo de 5 o 6 personas versus m\u00e1s de 10 a\u00f1os\/hombre para corregir todas las violaci\u00f3nes que afectan los costes de mantenimiento.<\/p>\n<h3><strong>Plan de acci\u00f3n<br \/>\n<\/strong><\/h3>\n<p>Por supuesto, vamos a presentar los resultados al equipo del proyecto y comentar con ellos para comprobar nuestras hip\u00f3tesis. Sin embargo, nuestro objetivo no es realizar una auditor\u00eda exhaustiva, sino mostrar c\u00f3mo es posible llegar a algunas conclusiones basadas en estos datos, y formular un plan de acci\u00f3n preliminar.<\/p>\n<p>Acciones a corto plazo:<\/p>\n<ul>\n<li>Corregir los defectos \u2018Blockers\u2019 que afectan al rendimiento: 5 d\u00edas.<\/li>\n<li>Corregir los defectos cr\u00edticos, una fuente potencial de errores: 55 d\u00edas.<\/li>\n<li>Recordar a los equipos Cobol: nada de GOTO \u2013 especialmente cuando crean una excepci\u00f3n a la l\u00f3gica del m\u00f3dulo \u2013 y recordar tambi\u00e9n las mejores pr\u00e1cticas de gesti\u00f3n de errores, como la obligaci\u00f3n de comprobar el estado de un archivo despu\u00e9s de cualquier operaci\u00f3n sobre \u00e9l y el EVALUATE sin WHEN OTHER.<\/li>\n<li>Realizar an\u00e1lisis peri\u00f3dicos de esta applicaci\u00f3n y verificar que no vuelven a aparecer defectos bloqueantes o cr\u00edticos.<\/li>\n<\/ul>\n<p>Estas acciones no cuestan mucho y se pueden realizar a corto plazo, para un beneficio optimal. Ellas conducen a la creaci\u00f3n de un proceso de mejora continua. Los usuarios te lo agradecer\u00e1n.<\/p>\n<p>Esta aplicaci\u00f3n cuenta con altos costes de mantenimiento. Consulte con el management si es el caso y cual es su opini\u00f3n al respecto. Es muy posible que esta aplicaci\u00f3n tenga pocas evoluciones o ninguna, y en tal caso, el mantenimiento no es un problema.<\/p>\n<p>Verifica tambi\u00e9n las hip\u00f3tesis que hemos formulado en <a href=\"http:\/\/qualilogy.com\/es\/auditoria-de-codigo-cobol-con-sonar-12\" target=\"_blank\">el post anterior<\/a> (applicaci\u00f3n batch orientada a la gesti\u00f3n de ficheros de datos, poca critica) y explica bien que ella no puede ser subcontratada con seguridad.<\/p>\n<p>Propone el plan de acci\u00f3n siguiente:<\/p>\n<ul>\n<li>Identificar y eliminar los 184 archivos duplicados, que pesan sobre el mantenimiento.<\/li>\n<li>Realizar un nuevo an\u00e1lisis para calcular la deuda t\u00e9cnica y el coste estimado de refactorizaci\u00f3n.<\/li>\n<\/ul>\n<p><strong>Estrategia aplicativa<br \/>\n<\/strong><\/p>\n<p><strong><\/strong>El refactoring de una aplicaci\u00f3n en Cobol es una operaci\u00f3n que rara vez se considera, porque los costes son demasiado altos. En general, la aplicaci\u00f3n puede morir de muerte natural, y se busca otra soluci\u00f3n (por ejemplo, ERP).<\/p>\n<p><a href=\"http:\/\/qualilogy.com\/wp-content\/uploads\/2012\/07\/QualCobolAssesV3.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignright size-full wp-image-2048\" title=\"QualCobolAssesV3\" src=\"http:\/\/qualilogy.com\/wp-content\/uploads\/2012\/07\/QualCobolAssesV3.jpg\" alt=\"\" width=\"300\" height=\"370\" \/><\/a>Deseamos formular recomendaciones realistas. Pues esto es lo que hago: buscar los programas que tienen el mayor n\u00famero de l\u00edneas y de defectos.<\/p>\n<p>Aqu\u00ed tenemos tres programas que representan m\u00e1s de 27 000 l\u00edneas, el 15% del tama\u00f1o total de la aplicaci\u00f3n (LOC).<\/p>\n<p><a href=\"http:\/\/qualilogy.com\/wp-content\/uploads\/2012\/07\/QualCobolAssesRF1.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignright size-full wp-image-2049\" title=\"QualCobolAssesRF1\" src=\"http:\/\/qualilogy.com\/wp-content\/uploads\/2012\/07\/QualCobolAssesRF1.jpg\" alt=\"\" width=\"290\" height=\"165\" \/><\/a><\/p>\n<p>&nbsp;<\/p>\n<p><a href=\"http:\/\/qualilogy.com\/wp-content\/uploads\/2012\/07\/QualCobolAssesRF2.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignright size-full wp-image-2051\" title=\"QualCobolAssesRF2\" src=\"http:\/\/qualilogy.com\/wp-content\/uploads\/2012\/07\/QualCobolAssesRF2.jpg\" alt=\"\" width=\"290\" height=\"166\" \/><\/a>Tambi\u00e9n est\u00e1n entre los cinco primeros m\u00e1s complejos, con un total de 5 900 puntos de Complejidad Ciclom\u00e1tica, o el 26% de la complejidad total de la aplicaci\u00f3n.<\/p>\n<p><a href=\"http:\/\/qualilogy.com\/wp-content\/uploads\/2012\/07\/QualCobolAssesRF3.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignleft size-full wp-image-2052\" title=\"QualCobolAssesRF3\" src=\"http:\/\/qualilogy.com\/wp-content\/uploads\/2012\/07\/QualCobolAssesRF3.jpg\" alt=\"\" width=\"464\" height=\"134\" \/><\/a><\/p>\n<p>Y son los tres programas en los cuales se concentran m\u00e1s violaci\u00f3nes, de tipo mayor, pero pocos cr\u00edticos m\u00e1s.<\/p>\n<p><a href=\"http:\/\/qualilogy.com\/wp-content\/uploads\/2012\/07\/QualCobolAssesRF4.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignright size-full wp-image-2054\" title=\"QualCobolAssesRF4\" src=\"http:\/\/qualilogy.com\/wp-content\/uploads\/2012\/07\/QualCobolAssesRF4.jpg\" alt=\"\" width=\"376\" height=\"140\" \/><\/a><br \/>\nEn total, m\u00e1s de 6.700 violaci\u00f3nes, casi una cuarta parte (24%) del n\u00famero total de defectos encontrados en esta aplicaci\u00f3n.<\/p>\n<p>Claro, el coste de remediaci\u00f3n de estos tres programas es muy alto: 735 d\u00edas, alrededor de 3 a\u00f1os-hombre.<\/p>\n<p>\u00bfQu\u00e9 informaci\u00f3n podemos ofrecer?<\/p>\n<p>Un refactoring parcial en estos tres programas que representan el 15% del tama\u00f1o de la aplicaci\u00f3n y el 26% de su complejidad, eliminar\u00eda una cuarta parte del n\u00famero total de defectos, casi exclusivamente en Maintainability.<\/p>\n<p>Imaginamos que esta refactorizaci\u00f3n parcial reducir\u00eda el coste de mantenimiento en la misma proporci\u00f3n (25%), lo que representa para un equipo de 6 personas una ganancia de 1.5 persona al a\u00f1o. Versus un coste de refactorizaci\u00f3n de 3 a\u00f1os-hombre, el retorno de la inversi\u00f3n es de 2 a\u00f1os.<\/p>\n<p>Cierto, esta es una estimaci\u00f3n r\u00e1pida, si no poca precisa. Pero quiero ilustrar de esta forma que el valor de una auditoria es proporcionar informaci\u00f3n objetiva que permita tomar decisiones a los responsables. La deuda t\u00e9cnica de cualquier aplicaci\u00f3n en general da como resultado una \u00fanica decisi\u00f3n posible: echar esta aplicaci\u00f3n. Una estimaci\u00f3n de las ganancias y los costes y retorno de la inversi\u00f3n con una refactorizaci\u00f3n parcial puede llegar a imaginar una estrategia. El management prefiere unos datos para alimentar la reflexi\u00f3n a no tener nada y aunque tus cifras suponen un cierto margen de error, el es plenamente consciente de lo que es tu intenci\u00f3n y aprecia su valor.<\/p>\n<h3><strong>Vende el valor<\/strong><\/h3>\n<p>Este post concluye nuestra serie sobre an\u00e1lisis de c\u00f3digo Cobol con el Sonar. Nuestra intenci\u00f3n en esta serie fue demostrar que es posible evaluar la calidad de las aplicaciones Cobol sin ser un experto en el mundo Mainframe. Del mismo modo, no es necesario ser un gur\u00fa en Open Source o un experto en J2EE para llevar a cabo an\u00e1lisis con Sonar.<\/p>\n<p>Con un conocimiento basico de la tecnolog\u00eda Cobol y de Sonar, podemos ofrecer a los equipos de proyecto, los stakeholders y el management un plan de acci\u00f3n a corto \/ medio plazo que mejora el rendimiento y la robustez de la aplicaci\u00f3n, sino tambi\u00e9n el cumplimiento de las buenas pr\u00e1cticas y la calidad del c\u00f3digoo.<\/p>\n<p>Tambi\u00e9n podemos ofrecer a los managers lo que solicitan lo m\u00e1s: informaci\u00f3n para una mejor toma de decisiones. Ahi es el valor de tus an\u00e1lisis. Vende este valor, no las m\u00e9tricas o tus conocimientos t\u00e9cnicos.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Hoy terminamos nuestra evaluaci\u00f3n de la calidad del c\u00f3digo Cobol analizado con el Sonar. En el post anterior, hemos trabajado con las m\u00e9tricas que med\u00edan el tama\u00f1o del c\u00f3digo, su complejidad, el nivel de documentaci\u00f3n y de duplicaci\u00f3n, lo que nos permiti\u00f3 formular algunas primeras recomendaciones a los responsables de esta aplicaci\u00f3n.<\/p>\n","protected":false},"author":3,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[7],"tags":[],"class_list":["post-156","post","type-post","status-publish","format-standard","hentry","category-sonar-360"],"_links":{"self":[{"href":"http:\/\/qualilogy.com\/es\/wp-json\/wp\/v2\/posts\/156"}],"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=156"}],"version-history":[{"count":2,"href":"http:\/\/qualilogy.com\/es\/wp-json\/wp\/v2\/posts\/156\/revisions"}],"predecessor-version":[{"id":158,"href":"http:\/\/qualilogy.com\/es\/wp-json\/wp\/v2\/posts\/156\/revisions\/158"}],"wp:attachment":[{"href":"http:\/\/qualilogy.com\/es\/wp-json\/wp\/v2\/media?parent=156"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/qualilogy.com\/es\/wp-json\/wp\/v2\/categories?post=156"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/qualilogy.com\/es\/wp-json\/wp\/v2\/tags?post=156"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}