Oferta de Trabajo - Desarrollador COBOL

Oferta de Trabajo - Desarrollador COBOL


Hoy te traemos una oferta que nos parece interesante, es para desarrollador de COBOL en Madrid, la hemos visto en Linkedin


Estamos buscando a un nuevo compañero/a para trabajar con nosotros en nuestras oficinas  de MBC Madrid ayudando a uno de nuestros clientes del sector financiero y en una empresa de consultoría joven y dinámica.


Responsabilidades:

  • Ajustes de JCL´s
  • Manejo de queries, tablas y experiencia en interfases.


Requisitos:

  • Experiencia previa como programador COBOL
  • Conocimiento de Microfocus (Visual Cobol: versión de Cobol de Microsoft)
  • Experiencia con Linux
  • Experiencia con Oracle
  • Experiencia con Microsoft Azure
  • Conocimiento de productos bancarios, tarjetas... 
  • Buen nivel de inglés (nivel B2)

 

Lugar: En principio será en remoto, en caso de ser necesaria presencialidad sería en Madrid.


Ofrecemos un contrato de trabajo indefinido.

 

Únete a una joven empresa de consultoría, con muchas posibilidades de crecimiento y desarrollo profesional. Proyectos tanto nacionales como internacionales, así como un ambiente de trabajo basado en objetivos con una estructura simple y plana.



Si esta interesado, entra en el enlace y suscríbete. 




Control de calidad de código COBOL-CICS-DB2

Control de calidad de código COBOL-CICS-DB2: Su importancia y QuaCOBOL una herramienta que verifica el cumplimiento de reglas de buena construcción

Nueva entrega de Curiosidades Cobol de Leonardo Zrycki.




Es conocida en la industria del software la inexistencia de programas carecientes de evolución. 

Hay un ciclo de vida que se cumple y que se inicia con un requerimiento, continúa con un diseño funcional y técnico el cual deriva finalmente en un nuevo programa.

Este es solo el comienzo; con frecuente habitualidad los programas se actualizan tanto sea por corrección de incidencias y bugs como por modificaciones en el negocio.

Igual que con los seres vivos, una buena y saludable concepción, nacimiento, infancia, adolescencia y adultez permitirá en cada etapa evolutiva facilitar los permanentes cambios y adaptaciones en los programas.

Cuanto más saludable luzca un programa, las actualizaciones del software podrán efectuarse en la forma más simple, rápida y menos costosa.

Esto solo es factible de lograr si nuestros programas cumplen con reglas que garanticen la facilidad de su mantenimiento.

Para lograr este objetivo es necesario regular la construcción de programas con la definición de reglas sencillas; entre estas podemos mencionar las reglas de definición de datos, niveles de datos, identacion, uso de índices en tablas, prefijos de nombres de datos, rutinas únicas para apertura, cierre, lectura y escritura de datos, límites a anidamientos de IFs, no uso de hardcodes, no uso de verbos como GO TO y ALTER, prefijo numérico de párrafos, ordenamiento de párrafos según prefijos, EVALUATE sin clausula WHEN OTHER, un solo punto por párrafo, identacion de sentencias en la PROCEDURE, verificación de existencia de archivos o cursores definidos pero no usados, prohibición del SELECT * y otras sentencias SQL, prohibición de algunos comandos CICS, un único STOP RUN / GOBACK / EXEC CICS RETURN.

Pero no basta con tenerlas escritas y usarlas, hay que garantizar que han sido usadas para mantener el compromiso de servicio con nuestros clientes, generar una marca distintiva personal, de equipo, gerencia o software factory para asegurar que nuestros entregables cumplen con los requerimientos y están codificados de forma tal que resultan sencillos de actualizar.

En la experiencia de Software Factory, surgen inconvenientes en las estimaciones, como, por ejemplo, cual es el costo de una actualización simple en un programa de complejidad media o alta.

La buena génesis de un programa, permitirá que esta estimación de costos se mantenga lo más baja posible para beneficio del cliente, la software factory, el equipo desarrollador y el programador.

Veamos algunos ejemplos de mala construcción de programas:

No alt text provided for this image

Aun en un programa HolaMundo pueden generarse algunas dificultades de lectura.

Se puede observar que las cláusulas que habitualmente se encuentran iniciadas en la columna 8 ‘flotan’ entre la 8 y la 11 y que en la propia PROCEDURE se introducen verbos COBOL

Identacion y fácil visibilidad es una de las claves.

Este programa tal como está escrito compila con RC = 0.

No alt text provided for this image

Este programa simplemente calcula la energía generada por una pequeña masa a través de un COMPUTE y despliega su resultado; pero como se ve posee algunos rasgos que lo hacen de muy difícil lectura.

Las variables C2,PI,MASA y ENERGIA no tienen prefijo, por lo que su lectura dentro de la Procedure no nos dirá a que estructura de datos pertenece; sus cláusulas PIC y VALUE se encuentran diseminadas y no en posiciones fijas; por otra parte estas variables no son utilizadas.

Se puede observar que hay 4 verbos COBOL en la misma línea de definición del párrafo PROGR, 3 en el párrafo INICIO, 2 en el párrafo PROCESO, 4 en el párrafo FIN y 1 en al párrafo FIN1.

Otra observación es que algunos nombres de párrafo no se encuentran iniciados en la columna 8 y algo poco conocido y que puede generar un engorroso aglutinamiento es que en los literales el apostrofe no necesita una separación de un espacio en blanco por lo que es posible codificar

DISPLAY’E=MC2’DISPLAY’M:’WS-MASA  sin inconvenientes. 

En COMPUTE WS-ENERGIA=WS-MASA*CT-CT2**se obviaron espacios entre las variables y los signos de operación.

Por último existe un párrafo FIN1 que jamás se ejecutará conteniendo un segundo GOBACK.

Este programa tal como está escrito compila con RC = 4.

Estos 2 programas muestran como la compactación innecesaria afecta gravemente la visualización correcta de las sentencias.

Veamos ahora como la dilatación innecesaria de sentencias afecta de igual forma.

No alt text provided for this image

𝗕𝗢𝗟𝗢𝗡𝗞𝗜2 es una versión de 𝗕𝗢𝗟𝗢𝗡𝗞𝗜1 y compila con RC=4.

La sentencia en el párrafo 0100-INICIO no es otra que MOVE 0  TO WS-ENERGIA. 

y tal como está escrita es absolutamente compilable y de igual significado a lo que podemos llamar su forma normal.

Visualización y mantenimiento de programas quedan dificultados por compactación o dilatación innecesarias de sentencias.

Estos son solo 3 ejemplos de una serie grande de formas inadecuadas de codificación.

Al observar la falta de herramientas de control de calidad de código COBOL-CICS-DB2 me sumergí en el desarrollo de un proyecto que presenté en el concurso público 𝗙𝗼𝗻𝗦𝗼𝗳𝘁 de la Agencia de Promoción Científica y Tecnológica del Ministerio de Ciencia y Tecnología de Argentina, el cual fue aprobado y adjudicado , y con el que se generó QuaCOBOL.

QuaCOBOL es una herramienta de control de calidad de código COBOL-CICS-DB2 que asegura la calidad de los programas de acuerdo con el cumplimiento de reglas generadas desde las mejores prácticas de construcción de programas

QuaCOBOL realiza las siguientes acciones sobre un programa fuente:

1.    Parsea el código según la gramática COBOL extrayendo todos sus componentes

2.    Verifica existencia de errores sintácticos

3.    Verifica el cumplimiento de 60 reglas de buena construcción de programas

4.    Reporta incumplimientos de reglas

5.    Reporta estadísticas del código como:

5.1 Verbos COBOL, comandos CICS y sentencias SQL usados y sus respectivos números de ocurrencia

5.2 Verbos, comandos CICS y sentencias SQL de uso no permitido y sus respectivos números de ocurrencia

5.3 Lista de Copys e Includes

5.4 Estadísticas de párrafos

5.5 Estadísticas de declaración y uso de archivos

5.6 Estadísticas de declaración y uso de tablas SQL

5.7 Estadísticas de declaración y uso de cursores SQL

5.8 Variables no usadas

Párrafos definidos pero no utilizados ( código muerto )

No alt text provided for this image

QuaCOBOL Pantalla de solicitud de análisis de calidad de programas con patrón de búsqueda ??K4*, desde BA hasta DD con última fecha de actualización entre el 01/07/2020 y 31/08/2020

No alt text provided for this image

QuaCOBOL Reporte de incumplimiento de reglas de calidad de código

La detección e identificación de estas fallas permite la rápida reparación del programa para adecuarlo a las reglas, simplificar el código y facilitar enormemente su visualización y mantenimiento.

La generación de estadísticas permite conocer la estructura del programa y por lo tanto conocer su grado de dificultad, dato necesario para estimar costos de mantenimiento.

En mi valoración personal contar con una herramienta de control de calidad de código COBOL-CICS-DB2 es imprescindible.

Programa Charlatán - Curiosidades COBOL

 Programa Charlatán - Curiosidades COBOL

Segunda entrega que nos trae Leonardo Zrycki, de la serie de Curiosidades de COBL, en esta ocasión nos habla del programa mas pequeño, pero a la vez el mas charlatán, ya que nos muestra todos los mensajes de compilación con tan solo una "palabra". 

No alt text provided for this image

Estudiando la estructura y funcionamiento del compilador 𝗜𝗕𝗠 𝗘𝗻𝘁𝗲𝗿𝗽𝗿𝗶𝘀𝗲 𝗖𝗢𝗕𝗢𝗟 𝗳𝗼𝗿 𝘇/𝗢𝗦 para la construcción de un software que pudiera realizar el control de calidad de código de programas COBOL-CICS-DB2, me encontré con el inconveniente de la inexistencia de algún documento que contuviera todos los mensajes informativos, warnings, errores, errores severos e irrecuperables que pudieran ser emitidos por el compilador.

Contar con esta documentación era de mucha necesidad para determinar el alcance y la co-bertura del software a desarrollar.

Resultaba extraño que IBM no tuviera documentado estos mensajes, por lo que comencé una intensa búsqueda hasta que di finalmente con esta información no muy conocida y que ahora te comento.

La lista de mensajes se obtiene a través del más corto de los programas COBOL aun mas corto que los que simplemente despliegan “Hello World” u “Hola Mundo”.

Tan solo 2 sentencias y un nombre especial 𝗘𝗥𝗥𝗠𝗦𝗚:

No alt text provided for this image

Simplemente hay que compilar este pequeño programa sin linkeditar y por //𝗦𝗬𝗦𝗣𝗥𝗜𝗡𝗧 se obtendrá el listado completo de todos los mensajes de compilación.

La cantidad de mensajes es del orden de los 2.000 dependiendo de la versión del compilador 𝗜𝗕𝗠 𝗘𝗻𝘁𝗲𝗿𝗽𝗿𝗶𝘀𝗲 𝗖𝗢𝗕𝗢𝗟 𝗳𝗼𝗿 𝘇/𝗢𝗦. Bastante charlatán nuestro pequeño programa que con solo 2 líneas emite miles de líneas de información.

Una lectura rápida de los mensajes te podrá mostrar algunas novedades que tal vez no co-nozcas, por ejemplo, el manejo de XML o programación orientada a objetos.

El listado comienza con una descripción del formato del código de mensaje que comienza con el acrónimo IGY identificatorio del compilador IBM COBOL y continua con una des-cripción de los 5 niveles 𝗜𝗚𝗬 de mensajes: I, W, E, S y U.

No alt text provided for this image

Y a continuación la lista completa de los mensajes:

No alt text provided for this image

¿𝐋𝐨 𝐬𝐚𝐛𝐢𝐚𝐬?

Hasta la próxima Curiosidad COBOL.

Leonardo Zrycki

¿Está Cobol obsoleto?

 

¿Está Cobol obsoleto?

Algunas tecnologías nunca mueren, simplemente se mezclan con el fondo, pero mencionar a Cobol, que es el lenguaje común orientado a los negocios con el desarrollador promedio hará que lo miren como si estuviera hablando de papel carbón, gasolina con plomo o el récord de 78 rpm. Comparado con lenguajes modernos como Go o Python, o incluso Pascal, Cobol parece enorme, prolijo y anticuado.

Pero se resistió, lejos de ser una tecnología obsoleta que habríamos abandonado, Cobol se ha convertido en una institución. Las bases de código masivas de Cobol todavía se usan en todo el mundo, muchas de ellas funcionan casi exactamente como lo hacían cuando se crearon por primera vez.

Entonces debemos decir que no es obsoleto, Cobol sigue siendo relevante y oportuno, incluso dolorosamente de hecho. En los últimos meses, Cobol ha vuelto a entrar en la conciencia pública cuando estados en Norteamérica como Nueva Jersey hicieron un llamado a los programadores para que los ayudaran a llevar sus aplicaciones de Cobol al siglo XXI.

¿Qué hace que este lenguaje se destaque incluso hoy y qué lo hace tan tenaz?

Cobol apareció a finales de la década de 1950 y principios de la de 1960. Su desarrollo fue un proyecto apoyado por el Departamento de Defensa de los Estados Unidos que incluía un consorcio de proveedores de TI conformados por IBM, Honeywell, Sperry Rand y Burroughs.

El objetivo era crear un lenguaje de programación con los siguientes atributos, primero, la portabilidad entre sistemas informáticos para facilitar la migración de software tanto entre generaciones de hardware como entre fabricantes de hardware. En segundo lugar, una sintaxis más cercana al inglés que los otros idiomas de la época como, por ejemplo, Fortran, para alentar a un público más amplio a usarlo, incluso si esto tuviera que hacerse a expensas de una cierta velocidad operativa y, en tercer lugar, tenía que poder adaptarse a los cambios.

Las primeras especificaciones oficiales se publicaron en 1960, durante la siguiente década, y para consternación de los críticos, Cobol se convirtió en la opción predeterminada para escribir aplicaciones comerciales. Su rápida difusión fue el resultado de un efecto de red.

IBM, uno de los contribuyentes originales al lenguaje, lo adoptó temprano y vigorosamente, y su presencia dominante en el mundo de las TI ayudó a impulsar la adopción de Cobol. Debido a sus ventajas de diseño y al enorme apoyo industrial del que disfrutaba, Cobol sobrevivió con creces a los sistemas para los que se desarrolló originalmente.

Según diversas estimaciones, en 1970 Cobol era el lenguaje de programación más utilizado en el mundo. Para el año 1997, tenía que ejecutar casi el 80% de las aplicaciones comerciales.

Cobol como lenguaje en sí.

Los diseñadores de Cobol rompieron con la sintaxis lapidaria de otros lenguajes del momento como Fortran, de nuevo él. La idea era que pudiera ser leído y comprendido por los no programadores, especialmente los profesionales de contabilidad, finanzas, seguros y otras profesiones.

Para los desarrolladores actuales acostumbrados a la brevedad de lenguajes como Python, este código es detallado. Pero la verbosidad de Cobol proviene del hecho de que el código se lee con mucha más frecuencia de lo que se escribe, por lo que debe escribirse para que sea legible.

Si bien este ejemplo es más conciso, se aplican los mismos principios básicos donde el código se esfuerza por ser explícito sobre lo que sucede en cada paso. Cobol tiene reglas estrictas sobre la sintaxis y la organización interna de los programas.

Un programa Cobol se divide explícitamente en secciones, o divisiones, que ayudan a encontrar y comprender sus componentes de un vistazo como es el caso de la división de identificación, la cual es básicamente una sección de metadatos, que contiene detalles sobre el programa, su autor, entre otros. Mientras que el entorno de división contiene detalles sobre el entorno de ejecución, por ejemplo, alias para dispositivos externos, que puede ser necesario cambiar cuando el programa se ejecuta en un hardware diferente.

Esto ayuda a la portabilidad entre sistemas cuando, por ejemplo, las E / S se pueden manejar de una manera totalmente diferente. Así mismo, la división de datos contiene las secciones de archivo y almacenamiento de trabajo, la división de datos describe los archivos y las variables utilizadas en el programa.

            Para que finalmente, la división de procedimientos sea donde encontramos el código real del programa, separado en unidades lógicas llamadas secciones, párrafos, oraciones y declaraciones. Es tentador relacionarse, por analogía, con módulos o funciones, porque realizan prácticamente las mismas funciones, debido que dividen el código en bloques con restricciones en las entradas y salidas, pero son mucho menos flexibles.


Personas programando



Curiosidades COBOL - El Curioso caso de No cancelación de Programas Cobol

Curiosidades COBOL - El Curioso caso de No cancelación de Programas Cobol 

Leonardo Zrycki nos comparte desde su cuenta de Linkedin desde hace un mes, curiosidades de COBOL, en esta primera entrega, nos explica el caso de un programa que sumaba, restaba, multiplicaba y dividía nombres, sin que el programa cobol cancelara!! 

"De como Nora y Luis suman, restan, multiplican y dividen sus nombres sin que cancele su programa COBOL y el inconveniente que esto genera en los sistemas de datos".

 

File status 46

 File status 46 

¿Qué es un File Status 46? 

Se ha intentado una operación READ o START en un archivo no abierto INPUT o IO. Se ha intentado una operación de ESCRITURA en un archivo no abierto en el modo SALIDA, E / S o EXTENDER, o en un archivo E / S abierto en el modo de acceso secuencial.


¿Cómo se arregla File Status 46? 

Si el error es al hacer READ, tendremos que controlar que el fichero esta abierto en Modo Lectura, y controlar que no se haya llegado al final del Fichero, también tener cuidado no leer una vez cerrado el fichero de Lectura.

 
Si el error es al Escribir, observa que el fichero en el que intentas escribir esta en Modo Salida y abierto de forma secuencial. 





Mascaras de Edición en JCL

MASCARAS DE EDICION


Ejemplos de Mascaras de Edición.

 

 

Mascara

Formato

Valor

Resultado

M0

IIIIIIIIIIIIIITS

+01234

1234

 

 

-00001

1-

M1

TTTTTTTTTTTTTTTS

-00123

00123-

 

 

+00123

00123

M2

I,III,III,III,IIT.TTS

+123450

1,234.50

 

 

-000020

0.20-

M3

I,III,III,III,IIT.TTCR

-001234

12.34CR

 

 

+123456

1,234.56

M4

SI,III,III,III,IIT.TT

+0123456

+1,234.56

 

 

-1234567

-12,345.67

M5

SI,III,III,III,IIT.TTS

-001234

(12.34)

 

 

+123450

1,234.50

M6

III-TTT-TTTT

00123456

012-3456

 

 

12345678

1-234-56788

M7

TTT-TT-TTTT

00123456

000-12-3456

 

 

12345678

012-34-5678

M8

IT:TT:TT

030553

3:05:53

 

 

121736

12:17:36

M9

IT/TT/TT

123094

12/30/94

 

 

083194

8/31/94

M10

IIIIIIIIIIIIIIT

01234

1234

 

 

00000

0

M11

TTTTTTTTTTTTTTT

00010

00010

 

 

01234

01234

M12

SIII,III,III,III,IIT

+1234567

1,234,567

 

 

-0012345

-12,345

M13

SIII.III.III.III.IIT

+1234567

1.234.567

 

 

-0012345

-12.345

M14

SIII III III III IITS

+1234567

1 234 567

 

 

-0012345

(12 345)

M15

III III III III IITS

+1234567

1 234 567

 

 

-0012345

12 345-

M16

SIII III III III IIT

+1234567

1 234 567

 

 

-0012345

-12 345

M17

SIII’III’III’III’IIT

+1234567

1’234’567

 

 

-0012345

-12’345

M18

SI,III,III,III,IIT.TT

+0123456

1,234.56

 

 

-1234567

-12,345.67

M19

SI.III.III.III.IIT,TT

+0123456

1.234,56

 

 

-1234567

-12.345,67

M20

SI III III III IIT,TTS

+0123456

1 234,56

 

 

-1234567

(12 345,67)

M21

I III III III IIT,TTS

+0123456

1 234,567

 

 

-1234567

12 345,67-

M22

SI III III III IIT,TT

+0123456

1 234,56

 

 

-1234567

-12 345,67

M23

SI’III’III’III’IIT.TT

+0123456

1’234.56

 

 

-1234567

-12’345.67

M24

SI’III’III’III’IIT,TT

+0123456

1’234,56

 

 

-1234567

-12’345,67

M25

SIIIIIIIIIIIIIIT

+01234

1234

 

 

-00001

-1

M26

STTTTTTTTTTTTTTT

1234

+01234

 

 

-1

-00001

 

Los valores utilizados en la representación de las mascaras de edición son los siguientes:

 

El valor I indica un dígito no significativo. Si es cero, no se muestra

 

El valor T indica un dígito significativo. Si es cero se muestra.

 

El valor CR (en M3) se muestra a la derecha de los dígitos si el valor es negativo, si no dos blancos son colocados a la derecha de los dígitos.

 

    El valor S indica el signo. 


Ejemplo:

Para este ejemplo vamos a usar el M19, 

M19

SI.III.III.III.IIT,TT

+0123456

1.234,56

 

 

-1234567

-12.345,67


    En este caso, pasaremos de un PD, a la mascara M19:


Fichero de Entrada:


Fichero de Salida: