{"id":143,"date":"2012-06-03T09:41:20","date_gmt":"2012-06-03T08:41:20","guid":{"rendered":"http:\/\/dev.qualilogy.com\/es\/?p=143"},"modified":"2013-01-05T09:42:08","modified_gmt":"2013-01-05T08:42:08","slug":"sonar-cobol-las-preguntas","status":"publish","type":"post","link":"http:\/\/qualilogy.com\/es\/sonar-cobol-las-preguntas\/","title":{"rendered":"Sonar Cobol \u2013 Las preguntas"},"content":{"rendered":"<p><a href=\"http:\/\/vicken.deviantart.com\/\" target=\"_blank\"><img loading=\"lazy\" decoding=\"async\" class=\"alignright size-full wp-image-1812\" title=\"Qual_CobolQuest1\" src=\"http:\/\/qualilogy.com\/wp-content\/uploads\/2012\/06\/Qual_CobolQuest1.jpg\" alt=\"\" width=\"262\" height=\"337\" \/><\/a> Hemos visto <a href=\"http:\/\/qualilogy.com\/es\/sonar-cobol-lo-que-debes-saber\" target=\"_blank\">la semana pasada<\/a> lo que hab\u00eda que saber sobre Mainframe Cobol, antes de entrar en una reuni\u00f3n con los especialistas de esta tecnolog\u00eda y preparar un proceso de an\u00e1lisis con Sonar.<\/p>\n<p>Vamos ahora a examinar las cuestiones para organizar los an\u00e1lisis con Sonar (que veremos en un art\u00edculo pr\u00f3ximo).<\/p>\n<p>Estas cuestiones tambi\u00e9n nos permitir\u00e1n precisar las reglas de entrega del c\u00f3digo fuente.<\/p>\n<p><!--more-->Ya explicaste a tus interlocutores del mundo Mainframe que vamos a trabajar con los programas Cobol y las Copys. La primera cuesti\u00f3n ser\u00e1: \u00bfs\u00ed, pero cu\u00e1l Cobol?<\/p>\n<h3><strong>\u00bfCual Cobol?<\/strong><\/h3>\n<p>Hay todo tipo de plataformas de mainframe-COBOL: IBM z\/OS, IBM AS\/400, Bull GCOS (7 y 8), Tandem, Unisys y incluso Unix (Microfocus). El Cobol z\/OS es el m\u00e1s com\u00fan. Se basa en la norma ANSI 85, el que m\u00e1s frecuentemente encontramos. Los otros Cobol est\u00e1n muy cerca, pero pueden tener algunas variaciones de lenguajes que pueden dificultar o incluso bloquear un analizador.<\/p>\n<p>As\u00ed que la primera pregunta es \u00bfcual Cobol? Y si podemos analizar este Cobol con Sonar. La forma m\u00e1s f\u00e1cil de averiguar: ir a ver en esta p\u00e1gina <a href=\"http:\/\/www.sonarsource.com\/products\/plugins\/languages\/cobol\/\" target=\"_blank\">http:\/\/www.sonarsource.com\/products\/plugins\/languages\/cobol\/<\/a>.<\/p>\n<p><strong>\u00bfCu\u00e1les aplicaciones?<\/strong><\/p>\n<p>Hemos visto que la noci\u00f3n de aplicaci\u00f3n no ten\u00eda realmente inter\u00e9s para los cobol-ers. Sin embargo, como con cualquier tecnolog\u00eda, deseas organizar el dashboard Sonar de acuerdo a los diferentes m\u00f3dulos de aplicaciones, para poder responder a preguntas como:<\/p>\n<ul>\n<li>\u00bfCual aplicaci\u00f3n es la m\u00e1s grande? \u00bf La m\u00e1s compleja?<\/li>\n<li>\u00bfD\u00f3nde se encuentran m\u00e1s defectos? \u00bf Las aplicaciones con mayor riesgo para los usuarios? \u00bfLas aplicaciones m\u00e1s dif\u00edciles y por lo tanto las m\u00e1s costosas de mantener?<\/li>\n<li>\u00bfCual aplicaci\u00f3n presenta una deuda t\u00e9cnica importante? \u00bfCuales aplicaciones son candidatos para refactoring?<\/li>\n<li>\u00bfCu\u00e1l es la calidad del c\u00f3digo entregado por mis proveedores?<\/li>\n<li>Etc.<\/li>\n<\/ul>\n<p>Con el fin de presentar un cuadro de mandos Sonar que responda a estas preguntas, es necesario analizar el c\u00f3digo de cada aplicaci\u00f3n, y entoncer organizar sa entrega en diferentes directorios que corresponden a cada aplicaci\u00f3n. El c\u00f3digo Cobol es administrado en el mainframe en &#8216;bibliotecas&#8217; (equivalentes a directorios de tu ordenador), seg\u00fan una arborescencia en m\u00f3dulos de aplicaci\u00f3n. Por lo tanto, generalmente basta con extraer cada biblioteca en un repertorio de entrega distinte para cada aplicaci\u00f3n.<\/p>\n<p>Pide que el c\u00f3digo de cada m\u00f3dulo se entrega en un \u00fanico directorio. Comprueba con los futuros usuarios del dashboard Sonar la forma en que se desea organizar las aplicaciones.<\/p>\n<h3><strong>\u00bfCu\u00e1les reglas de denominaci\u00f3n?<\/strong><\/h3>\n<p>En Java, por lo general tendr\u00e1s una clase nombrada de acuerdo con la entidad correspondiente. Por ejemplo, la clase &#8216;Cliente&#8217; para administrar a los clientes, la clase &#8216;Connexion&#8217; para gestionar una conexi\u00f3n, etc. Nada de esto en Cobol. Los nombres de archivos son m\u00e1s esot\u00e9ricos. Pero, de hecho, es muy bien organizado.<\/p>\n<p>Un archivo Cobol obedece de forma casi sistem\u00e1tica a reglas de denominaci\u00f3n con 8 car\u00e1cteres. Muy a menudo, las primeros 2 o 3 letras de un programa de Cobol corresponden con el m\u00f3dulo de aplicaci\u00f3n al cual pertenece.<\/p>\n<p>Un ejemplo de reglas de nomenclatura: AAAnnnnX con<\/p>\n<ul>\n<li>AAA para identificar el m\u00f3dulo.<\/li>\n<li>nnnn: cuatro d\u00edgitos que componen un identificador \u00fanico.<\/li>\n<li>X: sufijo que precisa el tipo de programa. Por ejemplo, (B) para Batch o (T) para TP (transacci\u00f3n). (P)resentaci\u00f3n, l\u00f3gica de (N)egocio o (D)atos (acceso a base de datos).<\/li>\n<\/ul>\n<p>Encontrar\u00e1s muchos otros tipos de denominaci\u00f3n, esto es s\u00f3lo un ejemplo. Sin embargo, los elementos de la nomenclatura suelen ser muy a menudo los mismos, y casi siempre con un identificador de aplicaci\u00f3n.<\/p>\n<p>Pide que se especifique las reglas de nomenclatura. Estas normas deben permitir comprobar que la entrega es correcta. Por ejemplo, los archivos que comienzan con &#8216;AAA&#8217; corresponden al m\u00f3dulo de aplicaci\u00f3n AAA entregado en un directorio AAA.<br \/>\nA menudo encontrar\u00e1s archivos que no sean &#8216;AAA&#8217; en este directorio, pero no muchos. Lo importante, lo has adivinado, es no tener todos los archivos de &#8216;AAA&#8217; en un directorio &#8216;ZZZ&#8217; o es que tienes un problema, especialmente en el control de versiones. Falta solamente un peque\u00f1o error en el batch de extracci\u00f3n del c\u00f3digo fuente, que puede surgir cuando se modifica para, por ejemplo, agregar una nueva aplicaci\u00f3n en el dashboard Sonar.<\/p>\n<p><strong>C\u00f3digo generado<\/strong><\/p>\n<p><strong><\/strong>Existen generadores de c\u00f3digo Cobol. Por ejemplo, una herramienta que permite dibujar una pantalla y luego generar el c\u00f3digo para su gesti\u00f3n, para la presentaci\u00f3n de la pantalla o la entrada de datos.<br \/>\nObviamente, no hay ning\u00fan inter\u00e9s en analizar el c\u00f3digo generado. En primer lugar, estamos interesados en las malas pr\u00e1cticas de programaci\u00f3n de los desarrolladores. E incluso si decides corregir los defectos en el c\u00f3digo generado, esta correcci\u00f3n va a desaparecer con la pr\u00f3xima re-generaci\u00f3n del programa.<\/p>\n<p>Verifica si existe un generador de c\u00f3digo. En este caso, hazte precisar cuales reglas de denominaci\u00f3n permiten identificar estos programas con el fin de apartarlos de los an\u00e1lisis. Si es posible, hazte entregar los m\u00f3dulos aplicativos sin estos objetos.<\/p>\n<p><strong>Formato de archivo<\/strong><\/p>\n<p>Los mainframes poseen su propio formato de fichero, y esto no es ASCII. Sin embargo, debemos recibir los archivos en este formato. La persona en carga de la extracci\u00f3n deber\u00e1 efectuar esta conversi\u00f3n. Nada complicado, hay un mont\u00f3n de utilidades que hacen esto.<\/p>\n<p>Tambi\u00e9n nos hace falta un fichero por componente, es decir para cada programa y cada Copy-book. Esto parece evidente, pero me logr\u00f3 recibir ya un \u00fanico fichero (muy grueso) con todos los programas.<\/p>\n<p>Otra cosa: el nombre del archivo debe ser igual al nombre del programa o Copy-book. Una vez m\u00e1s, esto parece obvio, pero ya recib\u00ed programas con nombres como &#8216;MP238.PROG (MP8239XZ). La persona encargada de la extracci\u00f3n penso en hacerla bien con la creaci\u00f3n de archivos con el nombre de la biblioteca (MP238) y luego el nombre del programa MP8239XZ entre par\u00e9ntesis.<\/p>\n<p>Algo, al respecto. Un programa Cobol se compone de diferentes partes obligatorias, llamadas &#8216;Divisi\u00f3n&#8217;, y encargadas de reagrupar diferentes elementos de c\u00f3digo. Por ejemplo, la \u00abDATA DIVISON\u00bb define las estructuras de datos y las instrucciones l\u00f3gicas deben ser escritas en la \u00abPROCEDURE DIVISION\u00bb.<br \/>\nCualquier programa Cobol empeza necesariamente en la primera l\u00ednea por una \u00abIDENTIFICATION DIVISION\u00bb, con el nombre del programa en la siguiente l\u00ednea, y esta sintaxis: PROGRAM-ID. &lt;nombre&gt;.<\/p>\n<p>As\u00ed que si tienes un archivo que no se inicia con estas dos primeras l\u00edneas, o si tienes multiples \u00abIDENTIFICATION DIVISION\u00bb o \u00abPROGRAM-ID\u00bb en el archivo, o si el \u00abPROGRAM-ID\u00bb no coincide con el nombre de archivo, es que las reglas anteriores no fueron seguidas y tienes potencialmete un problema.<\/p>\n<p>Por fin, pida a que los ficheros Cobol tengan una extensi\u00f3n &#8216;.cob &#8216; y los Copy-books una extensi\u00f3n &#8216;.cpy &#8216;. Esto no es obligatorio, puedes definir estos par\u00e1metros en Sonar, pero tampoco es complicado extraer el c\u00f3digo seg\u00fan esta regla.<\/p>\n<p>En resumen, precisa a la persona encargada de extraer el c\u00f3digo fuente las siguientes reglas de entrega:<\/p>\n<ul>\n<li>Fichero al formato ASCII.<\/li>\n<li>Un fichero por programa o Copy.<\/li>\n<li>El nombre del fichero corresponde al nombre del programa (o de la Copy).<\/li>\n<li>Extensi\u00f3n .cob para los programas Cobol, y .cpy para Copy-books.<\/li>\n<\/ul>\n<p>Simplificate la vida. Evita crearte etapas adicionales con operaciones de transformaci\u00f3n del c\u00f3digo fuente. Haz que \u00e9ste sea en un formato que permita su an\u00e1lisis. Simplifica el proceso, es primordial para automatizarlo y evitar tareas suplementarias, potencialmente fuentes de errores.<\/p>\n<p>Las \u00faltimas preguntas corresponden a par\u00e1metros necesarios para el parser, para el an\u00e1lisis del c\u00f3digo.<\/p>\n<p><a href=\"http:\/\/qualilogy.com\/wp-content\/uploads\/2012\/06\/Qual_CobolQuest2.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignright size-full wp-image-1819\" title=\"Qual_CobolQuest2\" src=\"http:\/\/qualilogy.com\/wp-content\/uploads\/2012\/06\/Qual_CobolQuest2.jpg\" alt=\"\" width=\"353\" height=\"92\" \/><\/a>Indicador de posici\u00f3n: el c\u00f3digo Cobol est\u00e1 alineado en la misma columna. En otras palabras, todas las instrucciones se iniciar\u00e1n en la misma posici\u00f3n. Por defecto, un programa est\u00e1 alineado con un indicador de posici\u00f3n igual a 7.<\/p>\n<p>En el siguiente ejemplo, los 6 primeros d\u00edgitos corresponden a un n\u00famero de l\u00ednea (puedes notar que no son secuenciales, para poder introducir nuevas l\u00edneas). Pero una vez m\u00e1s, el c\u00f3digo comienza en la posici\u00f3n \/ la columna 7.<\/p>\n<p><a href=\"http:\/\/qualilogy.com\/wp-content\/uploads\/2012\/06\/Qual_CobolQuest3.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-1820\" title=\"Qual_CobolQuest3\" src=\"http:\/\/qualilogy.com\/wp-content\/uploads\/2012\/06\/Qual_CobolQuest3.jpg\" alt=\"\" width=\"658\" height=\"136\" \/><\/a><\/p>\n<p>Puedes definir este indicador de posici\u00f3n en Sonar, pero mejor antes de encontrar un error de parser.<\/p>\n<p>Otros par\u00e1metros que puedes ajustar con Sonar, y entonces, mejor hacer la pregunta antes:<\/p>\n<ul>\n<li>Tabulaci\u00f3n: as\u00ed como con todo lenguaje, un programador Cobol va a utilizar la tecla &#8216;Tab&#8217; para alinear su c\u00f3digo. Una tabulaci\u00f3n puede representar una talla en car\u00e1cteres diferente seg\u00fan el tipo de mainframe o de cotaz\u00f3n. Pregunta cual es el tama\u00f1o de una tabulaci\u00f3n.<\/li>\n<li>Longitud de la l\u00ednea de c\u00f3digo: todo fichero ASCII contiene una l\u00ednea de 80 car\u00e1cteres. Menos la posici\u00f3n de alineaci\u00f3n a izquierda pero tambi\u00e9n la posici\u00f3n de fin m\u00e1s all\u00e1 de la cual no se encontrar\u00e1 m\u00e1s c\u00f3digo. Pero eventualmente se puede encontrar un comentario. Por defecto, la &#8216;zona&#8217; de c\u00f3digo es igual a 66.<\/li>\n<\/ul>\n<p>Existen otros par\u00e1metros utilizables con Sonar, pero en la mayor\u00eda de los casos, no necesitar\u00e1s conocerlos. Porque en la mayor\u00eda de los casos, vas a analizar c\u00f3digo Cobol con los par\u00e1metros por defecto.<\/p>\n<p>\u00bf Esto parece complicado? Para nada. Puse las cuestiones por orden de importancia pues todo lo que tienes que recordar, es que:<\/p>\n<ul>\n<li>Vas a analizar programas Cobol y Copy-books.<\/li>\n<li>Se debe organizar la entrega en diferentes repertorios que corresponden a los diferentes m\u00f3dulos aplicativos que tus usuarios quieren ver en el dashboard Sonar. Pues un repertorio = una aplicaci\u00f3n.<\/li>\n<li>Pregunta cu\u00e1les son las reglas de denominaci\u00f3n de los ficheros Cobol. Verifica la entrega, particularmente para las primeras versiones, cuando implementas el proceso de an\u00e1lisis.<\/li>\n<li>Un fichero por programa con una extensi\u00f3n .cob, y por Copy-book con una extensi\u00f3n .cpy. Facilitate la vida.<\/li>\n<li>Verifica que no hay un generador de Cobol. Si es el caso, aparta estos programas generados.<\/li>\n<li>Verifica los par\u00e1metros por defecto, particularmente el indicador de posici\u00f3n.<\/li>\n<\/ul>\n<p>Estas preguntas no dar\u00e1n lugar a discusi\u00f3n en reuni\u00f3n. De hecho, tus interlocutores estar\u00e1n contentos de verte abordar estos puntos. Ser\u00e1n satisfechos de verte plantear las buenas cuestiones. Y luego: los cobol-ers son gente extremadamente amable.<\/p>\n<p>Pronto: el parametraje de un an\u00e1lisis Cobol con Sonar. En la espera, no dudes en preguntar.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Hemos visto la semana pasada lo que hab\u00eda que saber sobre Mainframe Cobol, antes de entrar en una reuni\u00f3n con los especialistas de esta tecnolog\u00eda y preparar un proceso de an\u00e1lisis con Sonar. Vamos ahora a examinar las cuestiones para organizar los an\u00e1lisis con Sonar (que veremos en un art\u00edculo pr\u00f3ximo). Estas cuestiones tambi\u00e9n nos [&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-143","post","type-post","status-publish","format-standard","hentry","category-sonar-cobol"],"_links":{"self":[{"href":"http:\/\/qualilogy.com\/es\/wp-json\/wp\/v2\/posts\/143"}],"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=143"}],"version-history":[{"count":1,"href":"http:\/\/qualilogy.com\/es\/wp-json\/wp\/v2\/posts\/143\/revisions"}],"predecessor-version":[{"id":144,"href":"http:\/\/qualilogy.com\/es\/wp-json\/wp\/v2\/posts\/143\/revisions\/144"}],"wp:attachment":[{"href":"http:\/\/qualilogy.com\/es\/wp-json\/wp\/v2\/media?parent=143"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/qualilogy.com\/es\/wp-json\/wp\/v2\/categories?post=143"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/qualilogy.com\/es\/wp-json\/wp\/v2\/tags?post=143"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}