{"id":145,"date":"2012-06-03T09:45:25","date_gmt":"2012-06-03T08:45:25","guid":{"rendered":"http:\/\/dev.qualilogy.com\/es\/?p=145"},"modified":"2013-01-05T09:45:54","modified_gmt":"2013-01-05T08:45:54","slug":"analisis-de-codigo-cobol-con-sonar-y-jenkins","status":"publish","type":"post","link":"http:\/\/qualilogy.com\/es\/analisis-de-codigo-cobol-con-sonar-y-jenkins\/","title":{"rendered":"An\u00e1lisis de c\u00f3digo Cobol con Sonar y Jenkins"},"content":{"rendered":"<p><a href=\"http:\/\/vicken.deviantart.com\/\" target=\"_blank\"><img loading=\"lazy\" decoding=\"async\" class=\"alignright size-full wp-image-1849\" title=\"QualCobol31\" src=\"http:\/\/qualilogy.com\/wp-content\/uploads\/2012\/06\/QualCobol31.jpg\" alt=\"\" width=\"298\" height=\"469\" \/><\/a>Continuamos nuestra serie sobre el an\u00e1lisis de c\u00f3digo Cobol, con el objetivo de demostrar que es simple y f\u00e1cil de iniciar un proceso de evaluaci\u00f3n de la calidad de este c\u00f3digo Legacy, sin ser un experto en este idioma.<\/p>\n<p>Ya tienes una plataforma de an\u00e1lisis de c\u00f3digo, con Sonar y Jenkins. Si no es el caso, una serie anterior de post explica c\u00f3mo instalar estas herramientas:<\/p>\n<ul>\n<li><a title=\"Installation Sonar\" href=\"http:\/\/qualilogy.com\/es\/sonar-instalacion\" target=\"_blank\">Sonar \u2013 Instalaci\u00f3n<\/a><\/li>\n<li><a href=\"http:\/\/qualilogy.com\/es\/jenkins-instalacion\" target=\"_blank\">Jenkins \u2013 Instalaci\u00f3n<\/a><\/li>\n<li><a href=\"http:\/\/qualilogy.com\/es\/sonar-jenkins-plugin\" target=\"_blank\">Sonar \u2013 Jenkins plugin<\/a><\/li>\n<\/ul>\n<p>en <a href=\"http:\/\/qualilogy.com\/es\/sonar-nuestro-entorno\" target=\"_blank\">nuestro entorno<\/a>.<\/p>\n<p>Analizas c\u00f3digo Java o .NET con esta plataforma y se te pide hacer lo mismo con aplicaciones Cobol. El problema: no conoces nada del mundo Mainframe. \u00a1Qu\u00e9 l\u00edo!<\/p>\n<p>No, nada de p\u00e1nico. Nuestros dos posts anteriores explicaban:<\/p>\n<ul>\n<li><a href=\"http:\/\/qualilogy.com\/es\/sonar-cobol-lo-que-debes-saber\" target=\"_blank\">Lo que debes saber<\/a> antes de entrar en una reuni\u00f3n con Cobol-ers.<\/li>\n<li><a href=\"http:\/\/qualilogy.com\/es\/sonar-cobol-las-preguntas\" target=\"_blank\">Lo que debes preguntar<\/a> para preparar la entrega de c\u00f3digo Cobol.<\/li>\n<\/ul>\n<p>Ahora ha llegado el momento: vamos a ver como implementar el proceso de an\u00e1lisis en nuestra plataforma Sonar-Jenkins. Let\u2019s play. <!--more--><\/p>\n<h3><strong>Validaci\u00f3n de la entrega<\/strong><\/h3>\n<p><strong><\/strong>Primer paso: verificar que la entrega del c\u00f3digo es correcta, es decir, cumple con los principios presentados en el post anterior. Si no tienes c\u00f3digo para probar un an\u00e1lisis, Sonar ofrece unos archivos para tus primeros pasos, en esta p\u00e1gina: <a href=\"http:\/\/docs.codehaus.org\/display\/SONAR\/Sonar+Project+Examples\" target=\"_blank\">Sonar Project Examples<\/a>.<\/p>\n<p>Esta p\u00e1gina permite conseguir un conjunto de archivos de c\u00f3digo fuente para distintas tecnolog\u00edas. Haz Click en el enlace &#8216;Cobol&#8217; y ser\u00e1s redirigido a una p\u00e1gina con un bot\u00f3n &#8216;Downloads&#8217; que te permitir\u00e1 recuperar un archivo comprimido que contiene un directorio <strong>..\\projects\\languages\\<\/strong> con diferentes ejemplos de c\u00f3digo fuente, incluyendo unos en un subdirectorio &#8216;cobol&#8217;. A ver que tenemos:<\/p>\n<ul>\n<li>Un fichero \u2018Custmnt2.cbl\u2019 en una carpeta \u2018src\u2019.<\/li>\n<li>Unos ficheros .cpy en un directorio \u2018copybooks\u2019.<\/li>\n<\/ul>\n<p>Muy bien. Se cumplen las reglas de nuestro post anterior para la entrega:<\/p>\n<ul>\n<li>Vamos a analizar un programa Cobol y varios Copy-books, entregados en un directorio espec\u00edfico y con las extensiones .cbl et .cpy por defecto.<\/li>\n<li><a href=\"http:\/\/qualilogy.com\/wp-content\/uploads\/2012\/06\/QualCobolPos7.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignright size-full wp-image-1856\" title=\"QualCobolPos7\" src=\"http:\/\/qualilogy.com\/wp-content\/uploads\/2012\/06\/QualCobolPos7.jpg\" alt=\"\" width=\"314\" height=\"76\" \/><\/a>En el programa Cobol, podemos ver que el c\u00f3digo comienza en la posici\u00f3n 7, que es la configuraci\u00f3n predeterminada en S\u00f3nar. As\u00ed que no necesitamos cambiar los parametros por defecto.<\/li>\n<\/ul>\n<p>Entrega validada. Podemos proceder al an\u00e1lisis.<\/p>\n<p><strong>Configuraci\u00f3n del an\u00e1lisis<br \/>\n<\/strong><\/p>\n<p>Vamos a realizar nuestro an\u00e1lisis Sonar con Jenkins, sin presentar los detalles de su creaci\u00f3n, puesto que ya lo haces para otras aplicaciones. O si es la primera vez, puedes ver aqu\u00ed c\u00f3mo empezar: <a href=\"http:\/\/qualilogy.com\/es\/analisis-de-codigo-cobol-con-sonar-y-jenkins\" target=\"_blank\">Sonar \u2013 An\u00e1lisis Cobol con Jenkins<\/a>.<\/p>\n<p>En este ejemplo, el an\u00e1lisis se bas\u00f3 en un archivo &#8216;MyAppCobol.properties&#8217; con los diferentes par\u00e1metros. Esta vez, vamos a trabajar sin este archivo, especificando la configuraci\u00f3n directamente en Jenkins. Sin embargo, estos par\u00e1metros, \u00bfqu\u00e9 son?<\/p>\n<p>En el directorio <strong>..\\projects\\languages\\cobol\\<\/strong> con el c\u00f3digo fuente que hemos descargado, se encuentra tambi\u00e9n un archivo &#8216;sonar project.properties&#8217; con un ejemplo de configuraci\u00f3n de an\u00e1lisis Cobol.<br \/>\nPrimero, tenemos que definir unos par\u00e1metros gen\u00e9ricos como el nombre o la versi\u00f3n del proyecto as\u00ed que el lenguaje y, por \u00faltimo, la ubicaci\u00f3n del c\u00f3digo en el archivo descargado:<\/p>\n<ul>\n<li><strong>sources=src<\/strong><\/li>\n<li><strong> sonar.cobol.copy.directories=copybooks<\/strong><\/li>\n<\/ul>\n<p>Pero falta algo: \u00bfc\u00f3mo Sonar puede saber d\u00f3nde encontrar estos directorios? Los copi\u00e9 en mi entorno de an\u00e1lisis en una carpeta <strong>C:\\SRC\\Mainframe\\SonarCobol\\Source<\/strong>. Pues tengo que indicar a Sonar donde buscar el c\u00f3digo fuente en este directorio. Lo que voy a hacer con el siguiente par\u00e1metro:<br \/>\n<strong>project.home=C:\\SRC\\Mainframe\\SonarCobol\\Source<\/strong>.<\/p>\n<p>Estos son todos los par\u00e1metros que he utilizado, en Jenkins:<\/p>\n<p><a href=\"http:\/\/qualilogy.com\/wp-content\/uploads\/2012\/06\/QualCobolJenkinsParam.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-1858\" title=\"QualCobolJenkinsParam\" src=\"http:\/\/qualilogy.com\/wp-content\/uploads\/2012\/06\/QualCobolJenkinsParam.jpg\" alt=\"\" width=\"534\" height=\"200\" \/><\/a><\/p>\n<p>Ahora podemos lanzar nuestro an\u00e1lisis y comprobar los resultados.<\/p>\n<p><strong>Verificaci\u00f3n del log de an\u00e1lisis<br \/>\n<\/strong><\/p>\n<p>Revisar el log de an\u00e1lisis es un paso necesario en el proceso que hemos implementado. Especialmente en el caso de c\u00f3digo fuente Cobol. \u00bfPor qu\u00e9?<\/p>\n<p>En primer lugar para comprobar el \u00e9xito de nuestro an\u00e1lisis:<\/p>\n<p><a href=\"http:\/\/qualilogy.com\/wp-content\/uploads\/2012\/06\/QualCobolSucess.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-1859\" title=\"QualCobolSucess\" src=\"http:\/\/qualilogy.com\/wp-content\/uploads\/2012\/06\/QualCobolSucess.jpg\" alt=\"\" width=\"453\" height=\"24\" \/><\/a>Luego, incluso si todo ha ido bien, podemos observar el siguiente Warning:<\/p>\n<p><a href=\"http:\/\/qualilogy.com\/wp-content\/uploads\/2012\/06\/QualCobolWarn1.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-1862\" title=\"QualCobolWarn\" src=\"http:\/\/qualilogy.com\/wp-content\/uploads\/2012\/06\/QualCobolWarn1.jpg\" alt=\"\" width=\"409\" height=\"23\" \/><\/a>El fichero Cobol analizado comporte (en la l\u00ednea 53) una llamada a un Copy book DFHAID. Pero este fichero DFHAID.CPY no se encuentra en la entrega.<\/p>\n<p>Este caso se encuentra con bastante frecuencia. Como hemos visto en el primer post de esta serie, la noci\u00f3n de aplicaci\u00f3n no tiene tanto sentido en el mundo Mainframe. Este Copy-book puede ser utilizado por muchos otros programas, y encontrarse en un otro m\u00f3dulo. As\u00ed que esto no significa que la entrega no es correcta.<\/p>\n<p>Pero es importante identificar a estos Copy-books que faltan con el fin de decirselo a la persona que se encargo de la entrega. Para su informaci\u00f3n. Si este Copy-book no pertenece al m\u00f3dulo analizado, no tienes que esperar una nueva entrega. Pero no te sorprendes si entregas complementarias ocuren a menudo en el proceso, es usual cuando se analiza  c\u00f3digo Cobol.<\/p>\n<p>Poedemos comprobar en el dashboard de Sonar los resultados de nuestro an\u00e1lisis:<\/p>\n<p><a href=\"http:\/\/qualilogy.com\/wp-content\/uploads\/2012\/06\/QualCobolSonar.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-1863\" title=\"QualCobolSonar\" src=\"http:\/\/qualilogy.com\/wp-content\/uploads\/2012\/06\/QualCobolSonar.jpg\" alt=\"\" width=\"455\" height=\"50\" \/><\/a>Y la presencia de defectos en el c\u00f3digo:<\/p>\n<p><a href=\"http:\/\/qualilogy.com\/wp-content\/uploads\/2012\/06\/QualCobolDefects.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-1864\" title=\"QualCobolDefects\" src=\"http:\/\/qualilogy.com\/wp-content\/uploads\/2012\/06\/QualCobolDefects.jpg\" alt=\"\" width=\"676\" height=\"150\" \/><\/a><\/p>\n<p>Hemos visto todas las etapas de un proceso de an\u00e1lisis de c\u00f3digo Cobol con Sonar y Jenkins:<\/p>\n<ol>\n<li>Validaci\u00f3n de la entrega: comprobar que corresponde con las normas definidas en la reuni\u00f3n de kick-off del proceso. Este paso es necesariamente manual, pero una vez que est\u00e1n automatizados los procesos de entrega y de an\u00e1lisis, podras evitar que se repita este paso. Sin embargo, si tienes que analizar 60 millones de l\u00edneas de c\u00f3digo Cobol, tomate alg\u00fan tiempo para completar esta validaci\u00f3n.<\/li>\n<li>Configuraci\u00f3n del an\u00e1lisis: solamente la primera vez. Pero puedes tener que modificar la configuraci\u00f3n cuando la organizaci\u00f3n de la entrega se cambia, con nuevos directorios de c\u00f3digo fuente. A comprobar en la validaci\u00f3n de la entrega.<\/li>\n<li>Verificaci\u00f3n del log de an\u00e1lisis:\n<ul>\n<li>Un nuevo archivo con una sintaxis incorrecta o no reconocida por el parser (analizador) puede bloquear el proceso. Verificar que el an\u00e1lisis es \u2018Successfull\u2019.<\/li>\n<li>Comprobar la presencia de Warnings y listar los Copy-books que faltan. Informar de la ausencia de estos elementos, pero no esperes otra entrega para poner a disposici\u00f3n los resultados en el dashboar Sonar.<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n<p>Queda \u2013 posiblemente \u2013 un paso m\u00e1s: presentar estos resultados con una auditor\u00eda de calidad del c\u00f3digo y un plan de acci\u00f3n. Este ser\u00e1 el tema de un nuevo post.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Continuamos nuestra serie sobre el an\u00e1lisis de c\u00f3digo Cobol, con el objetivo de demostrar que es simple y f\u00e1cil de iniciar un proceso de evaluaci\u00f3n de la calidad de este c\u00f3digo Legacy, sin ser un experto en este idioma. Ya tienes una plataforma de an\u00e1lisis de c\u00f3digo, con Sonar y Jenkins. Si no es el [&hellip;]<\/p>\n","protected":false},"author":3,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[5],"tags":[],"class_list":["post-145","post","type-post","status-publish","format-standard","hentry","category-sonar-cobol"],"_links":{"self":[{"href":"http:\/\/qualilogy.com\/es\/wp-json\/wp\/v2\/posts\/145"}],"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=145"}],"version-history":[{"count":1,"href":"http:\/\/qualilogy.com\/es\/wp-json\/wp\/v2\/posts\/145\/revisions"}],"predecessor-version":[{"id":146,"href":"http:\/\/qualilogy.com\/es\/wp-json\/wp\/v2\/posts\/145\/revisions\/146"}],"wp:attachment":[{"href":"http:\/\/qualilogy.com\/es\/wp-json\/wp\/v2\/media?parent=145"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/qualilogy.com\/es\/wp-json\/wp\/v2\/categories?post=145"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/qualilogy.com\/es\/wp-json\/wp\/v2\/tags?post=145"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}