UNIVERSIDAD NACIONAL AUTÓNOMA DE MÉXICO FACULTAD DE ESTUDIOS SUPERIORES CUAUTITLÁN LA APLICACIÓN DEL LENGUAJE COBOL EN LA INSTITUCIÓN FINANCIERA DENOMINADA BANCOMER: TRABAJO PROFESIONAL QUE PARA OBTENER EL TÍTULO DE: LICENCIADO EN INFORMÁTICA P R E S E N T A: ROCÍO MAGDALENA GIL RAMÍREZ ASESOR: L. D. IMELDA MÁRQUEZ ALVARADO CUAUTITLÁN IZCALLI, ESTADO DE MÉXICO 2014 1 AGRADECIMIENTOS “Somos todos esclavos de nuestro personaje, creado primeramente por la familia, segundo por la sociedad y tercero por la cultura. El camino de la transformación es liberarse de la esclavitud. Detrás de mis mil máscaras soy auténtico.” – Alejandro Jodorowsky. Mi vida se ha colmado de personas inmensamente especiales, sería una pena no nombrarlos a todos, sin embargo si alguien me hace falta mencionar sabe que de corazón agradezco su apoyo y cariño. Primero que nada a mi Madre, mujer de carácter fuerte y con ánimo de lucha, ella es quién me ha dado las bases para salir adelante, combatir y jamás rendirme. Gracias a ti Magdalena Ramírez por tus consejos, tus regaños, tus experiencias compartidas, tus sacrificios y valores, pero ante todo por cada día de motivación que me has regalado para poder convertirme en la mujer que soy ahora. Estaré eternamente agradecida con la vida por tenerte a ti siempre. Te amo Mami. A mi Padre, siempre conté con tu apoyo para poder continuar mi educación. Gracias por ser un ejemplo de arduo trabajo y responsabilidad. A mis hermanos: Juanito, Erick y David, ustedes son el pilar de mi vida. Gracias por cuidarme, regañarme y darme como ejemplo cada una de sus experiencias para enriquecer mi existencia. Gracias gordo por ser un ejemplo de que todo en esta vida se puede mientras tengas la dedicación y el coraje de hacerlo. Gracias Negro porque a pesar de tener el papel de hermano mayor siempre has sido un amigo para mí y un mayor ejemplo de virtudes y endereza, de que bajo cualquier circunstancia se puede salir adelante. Gracias David, eres un ejemplo de que la familia siempre estará ahí no importando el escenario. 2 A mis amigos de vida: Esmeralda y Griselda incluso en la lejanía siempre estuvieron cerca. Carlos, Vlad, Andrés, Alejandra, David, Mary, Sakui, Karen y José Luís, por cada momento, cada sonrisa, cada consejo, cada celebración, pero ante todo por seguir conmigo en este camino de aprendizaje y felicidad. Erik, Alejandro, Jesús y Laura amigos de trabajo no solo laboral sino vivencial, agradezco todo lo que me han compartido y deseo poder continuar en su vida para sembrar y cosechar mejores experiencias. Naye y Lali han sido para mí un gran ejemplo de mujeres trabajadoras, inteligentes y amorosas, gracias. A mis jefes: Mirelle y Agustina, por brindarme la oportunidad de crecimiento y desarrollo profesional que sin duda fue el despunte para una vida de grandes logros, ¡Gracias Jefas! A Softtek por confiar en mí y enseñarme. Agustín, Miguel y Enrique Medina, por la confianza y apoyo que en tan poco tiempo me han motivado a querer dar más de mí profesional y personalmente. A todos mis profesores, quienes con su dedicación y vocación me transmitieron no sólo sus conocimientos sino también valores y virtudes para ser mejor persona cada día. Particularmente agradezco a la L. D. Imelda Márquez por apoyarme en la realización de este trabajo profesional. Y por último, a ese ser supremo que me ha permitido estar en este lugar y quien me sigue permitiendo vivir y disfrutar de cada uno de ustedes. ¡Gracias Vida! 3 ÍNDICE GENERAL Introducción 9 Objetivo 10 Capitulo 1. Marco de referencia 11 LAS TIC 11 INFORMÁTICA 12 ANALISIS DE SISTEMAS 12 PROCESO DE DESARROLLO DE SOFTWARE 12 LENGUAJE DE PROGRAMACIÓN 14 ENTIDAD FINANCIERA 15 TARJETA DE CRÉDITO 16 SERVICIOS DE CONSULTORÍA (OUTSOURCING) 16 Capítulo 2. El lenguaje cobol 18 Reseña histórica 18 IMPORTANCIA 21 CARACTERÍSTICAS 23 ESTANDARES 25 DESARROLLO DE UN PROGRAMA COBOL 25 Divisiones de un programa cobol 28 Tipos de datos 33 Instrucciones imperativas y condicionales 39 Temas relacionados al uso del lenguaje cobol 4 48 48 PROGRAMACIÓN ESTRUCTURADA Técnicas de la programación estructurada JCL (JOB CONTROL LANGUAGE) 48 54 Conceptos generales 55 Sintaxis general de un jcl 55 Utilerías jcl 64 Tipos de archivos 67 DB2 (DATA BASE II) 70 Características de DB2 70 Tablas 70 SQL (LENGUAJE DE CONSULTA ESTRUCTURADO) 72 Componentes del SQL 73 Uso de sql en un programa COBOL 77 Estándares de programación SQL 79 Capítulo 3. Outsourcing e institución financiera 81 Valores corporativos Softtek S. A. de C. V. 81 RESEÑA HISTÓRICA 81 DESARROLLO DEL CAPITAL HUMANO 82 CAPACITACIÓN 82 FABRICA DE SOFTWARE 84 SERVICIOS QUE OFRECE 86 PRINCIPALES COMPETIDORES 87 Desarrollo de actividades en la entidad bancaria 5 90 90 ÁREA DE DISEÑO Y DESARROLLO Organigrama del área de diseño y desarrollo 91 MEDIOS DE PAGO 91 Organigrama 92 Funciones como D&D 93 Conclusiones 97 Referencias 100 DIGITALES 100 BIBLIOGRAFICAS 101 Glosario 102 6 ÍNDICE DE IMAGENES Imagen 1. Ejemplo de áreas de codificación. 27 Imagen 2. Ejemplo de áreas de codificación (continuación). 28 Imagen 3. Ejemplo de la estructura de la Procedure Division. 33 Imagen 4. Ejemplo de campos compuestos. 36 Imagen 5. Definición PERFORM. 45 Imagen 6. Definición sentencia UNTIL. 45 Imagen 7. SEQUENCE 49 Imagen 8. IF THEN ELSE 49 Imagen 9. CASE 50 Imagen 10. WHILE DO 50 Imagen 11. SALIDA ANORMAL 50 Imagen 12. Ejemplo de árbol de módulos. 52 Imagen 13. Ejemplo de definición de archivo. 60 Imagen 14. Uso de parametros de la sentencia DISP 62 Imagen 15. Relación DB2, SQL y Terminal 73 Imagen 16. Modelo de relación entre FSW e Institución Bancaria. 85 Imagen 17. La gráfica representa el porcentaje de empresas que contratarían consultoría en el año. 87 Imagen 18. Dentro del mismo estudio se definió el top de las 3 mejores consultoras, y este fue el resultado. 89 7 INDICE DE TABLAS Tabla 1. Codificación del verbo READ y definición de archivos de entrada. 42 Tabla 2.Codificación del verbo WRITE y definición de archivos de salida. 42 Tabla 3. Ejemplos de uso del verbo MOVE. 43 Tabla 4. Definición de verbos aritméticos 44 Tabla 5. Manejo de sentencia PARM 59 Tabla 6. Ejemplo de versiones de un archivo GDG 68 Tabla 7.Comandos DLL 73 Tabla 8. Comandos DML. 74 Tabla 9. Cláusulas de SQL. 74 Tabla 10. Operadores lógicos. 75 Tabla 11. Operadores de comparación. 75 Tabla 12. Funciones SQL de agregado. 76 Tabla 13. Ejemplo de comunicación entre COBOL y SQL por medio de variables HOST. 78 Tabla 14. Relación entre variables host y campos de una tabla. 8 78 INTRODUCCIÓN Hoy en día existen gran cantidad de lenguajes de programación, unos orientados a objetos, otros más orientados a Bases de Datos, y otros tantos dirigidos al desarrollo web, los cuales dan la apariencia de haber descontinuado por completo el uso de uno de los lenguajes más antiguos que existe COBOL; Sin embargo la nobleza de dicho lenguaje brinda una gran cantidad de ventajas al ser utilizado, ventajas que le permiten seguir compitiendo como una de las mejores opciones para el manejo de la información por lotes en diversas instituciones y empresas. A su vez, a la fecha las Entidades Educativas, dedicadas a la enseñanza de las denominadas TICS “Tecnologías de la Información y Comunicación”; retoman como mera historia lo relativo al lenguaje que nos ocupa, en forma vaga e imprecisa, haciendo denotar que el mismo ha quedado, como ya se ha mencionado en las líneas que anteceden, obsoleto. Sin embargo habrá que acotar que existen hoy en día empresas de consultoría dedicadas a brindar capacitación para aprender el lenguaje COBOL, lo que deja visualizar que hoy por hoy dicho lenguaje sigue siendo un instrumento que integra parte de las TICS, abriendo un sendero dentro de la gran gama de oportunidades de crecimiento laboral y profesional. 9 OBJETIVO El presente trabajo tiene como objetivo mejorar la visión que se tiene hoy en día en relación al aprendizaje del lenguaje COBOL, sirviendo como manual para que las nuevas generaciones de la Licenciatura en informática conozcan su funcionamiento y a su vez darles una opción más de oferta laboral, el dedicarse a ser desarrolladores en COBOL. 10 CAPITULO 1. MARCO DE REFERENCIA LAS TIC Las tecnologías de la información y la comunicación (TIC), a veces denominadas nuevas tecnologías de la información y la comunicación (NTIC) son un concepto muy asociado al de informática. «Las tecnologías de la información y la comunicación no son ningún remedio ni fórmula mágica, pero pueden mejorar la vida de todos los habitantes del planeta. Se dispone de herramientas para llegar a los Objetivos de Desarrollo del Milenio, de instrumentos que harán avanzar la causa de la libertad y la democracia y de los medios necesarios para propagar los conocimientos y facilitar la comprensión mutua1». Las TIC conforman el conjunto de recursos necesarios para manipular la información: los ordenadores, los programas informáticos y las redes necesarias para convertirla, almacenarla, administrarla, transmitirla y encontrarla. Se pueden clasificar las TIC en: las redes, los terminales y los servicios. En general como concepto podemos decir que las tecnologías de la información y la comunicación, también conocidas como TIC, son el conjunto de tecnologías desarrolladas para gestionar información y enviarla de un lugar a otro. Abarcan un abanico de soluciones muy amplio. Incluyen las tecnologías para almacenar información y recuperarla después, enviar y recibir información de un sitio a otro, o procesar información para poder calcular resultados y elaborar informes. 1 Kofi Annan, Secretario general de la Organización de las Naciones Unidas, discurso inaugural de la primera fase de la WSIS, Ginebra 2003. 11 INFORMÁTICA El Diccionario de la real Academia Española, la define como el conjunto de conocimientos científico y técnico, que hacen posible el tratamiento automático de la información por medio de ordenadores. Así mismo como desarrollar sistemas de información para agilizar la toma de decisiones y proponer alternativas que ayuden a impulsar el desarrollo global del área2. ANALISIS DE SISTEMAS El análisis de sistemas se puede definir más directamente como la aplicación del método científico a problemas relacionados con sistemas complejos. Es un conjunto de teorías y técnicas que sirve para estudiar, describir y hacer predicciones acerca de sistemas complejos, y que frecuentemente hace uso de la matemática avanzada, procedimientos estadísticos y computadoras.3 PROCESO DE DESARROLLO DE SOFTWARE Es también denominado ciclo de vida del desarrollo de software es una estructura aplicada al desarrollo de un producto de software. Hay varios modelos a seguir para el establecimiento de un proceso para el desarrollo de software, cada uno de los cuales describe un enfoque diferente para diferentes actividades que tienen lugar durante el proceso. Algunos autores consideran un modelo de ciclo de vida un término más general que un determinado proceso para el desarrollo de software. Para entenderlo mejor se mencionan diferentes conceptos: 2 Mejía, María Elaine, Arqhys Arquitectura, 2013, http://www.arqhys.com/general/concepto-deinformatica.html. 3 Docencia UAM, Capítulo 2. Conceptos Básicos del análisis de sistemas y simulación. 2014. 12 “Una aproximación lógica a la adquisición, el suministro, el desarrollo, la explotación y el mantenimiento del software4”. “Un marco de referencia que contiene los procesos, las actividades y las tareas involucradas en el desarrollo, la explotación y el mantenimiento de un producto de software, abarcando la vida del sistema desde la definición de los requisitos hasta la finalización de su uso”5. En resumen El ciclo de vida del software es una sucesión de estados o fases por los cuales pasa un software a lo largo de su "vida". Crear un ciclo de vida permite detectar errores más rápido, mejorar la calidad del software, estimar los plazos de implementación y sus costos, etc. Básicamente las bases a seguir son: 1.- Definición o desarrollo del concepto: lo que el software hará 2.- Desarrollo técnico: creación del software 3.- Uso u operación: uso del software 4.- Evolución: mantenimiento y evolución del software Esta clasificación no es estricta, puede haber más o menos etapas de acuerdo al nivel de detalle conceptual que se desee. Además las etapas no necesariamente se realizan en ese orden ni de forma serial. 4 C.C. Alberto Rozenfarb, Ciclo de Vida del SW y el BI, http://www.uai.edu.ar/ciiti/2007/rosario/ponencias/Bloque2/Rosario_Businiess%2520Intelligence_Rozenfarb.p pt, Concepto definido por IEEE 1074. 5 C.C. Alberto Rozenfarb, Ciclo de Vida del SW y el BI, http://www.uai.edu.ar/ciiti/2007/rosario/ponencias/Bloque2/Rosario_Businiess%2520Intelligence_Rozenfarb.p pt, Concepto definido por ISO 12207-1. 13 LENGUAJE DE PROGRAMACIÓN Un lenguaje de programación es aquel elemento dentro de la informática que nos permite crear programas mediante un conjunto de instrucciones, operadores y reglas de sintaxis; que pone a disposición del programador para que este pueda comunicarse con los dispositivos hardware y software existentes.6 Los lenguajes de programación se pueden clasificar atendiendo a varios criterios: Según su nivel de abstracción. o Lenguajes Maquina: están escritos en lenguajes directamente inteligibles por la maquina (computadora), ya que sus instrucciones son cadenas binarias (0 y 1). o Lenguajes de bajo nivel: son lenguajes de programación que se acercan al funcionamiento de una computadora. El lenguaje de más bajo nivel por excelencia es el código máquina. o Lenguajes de alto nivel: son normalmente fáciles de aprender porque están formados por elementos de lenguajes naturales, como el inglés. Según la forma de ejecución. o Lenguajes compilados: naturalmente, un programa que se escribe en un lenguaje de alto nivel también tiene que traducirse a un código que pueda utilizar la máquina. o Lenguajes interpretados: se puede también utilizar una alternativa diferente de los compiladores para traducir lenguajes de alto nivel. En vez de traducir el programa fuente y grabar en forma permanente el código objeto que se produce durante la compilación para utilizarlo en una ejecución 6 M.C Luis Arvizu Amezcua, Tecnologías para desarrollo de aplicaciones web. Un caso de uso. 2013 14 futura, el programador sólo carga el programa fuente en la computadora junto con los datos que se van a procesar. Según el paradigma de programación: un paradigma de programación representa un enfoque particular o filosofía para la construcción del software. No es mejor uno que otro, sino que cada uno tiene ventajas y desventajas. Dependiendo de la situación un paradigma resulta más apropiado que otro. o El paradigma imperativo o por procedimientos es considerado el más común y está representado, por ejemplo, por el C o por BASIC. o El paradigma funcional está representado por la familia de lenguajes LISP (en particular Scheme), ML o Haskell. o El paradigma lógico, un ejemplo es PROLOG. o El paradigma orientado a objetos. Un lenguaje completamente orientado a objetos es Smalltalk. ENTIDAD FINANCIERA7 En general, cualquier entidad que ofrece servicios financieros, sea cual sea la modalidad, a su clientela. Esos servicios financieros van desde la intermediación pura a labores de mediación, pasando por el traslado de órdenes a los diferentes mercados (no hay que olvidar que los inversores no pueden acceder directamente a los mercados sino a través de los mediadores especializados) o servicios de asesoramiento, de seguros u otros. En definitiva, las entidades que operan en los sistemas financieros, en cualquiera de las tres grandes áreas en las que éstos se dividen: Área de Banca; Área de Valores y Área de Seguros. 7 López Domínguez, Ignacio, Concepto de Entidad Financiera Diccionario Económico, 2014. 15 Las entidades financieras, con una mayor o menor especialización vocacional o normativa, intermedian la gran mayoría de los fondos generados por los sectores empresariales, economías domésticas y administraciones públicas, cualquiera que sea su destino (pagos, inversiones, ahorro, cobertura) y situación de las contrapartes (transacciones domésticas y transfronterizas). Los grandes volúmenes de recursos e inversiones de numerosas de estas entidades y la globalización de sus actividades a nivel mundial exigen cada día más normas prudenciales de vigilancia de su solvencia y riesgos, así como la disposición de una muy elevada calidad profesional y técnica en su gestión. TARJETA DE CRÉDITO Es un rectángulo de plástico numerado, que presenta una banda magnética o un microchip, y que permite realizar compras que se pagan a futuro. Para solicitar una tarjeta de este tipo, es necesario dirigirse a una institución financiera o entidad bancaria, la cual solicitará al interesado una serie de documentos y garantías para asegurarse de que se trata de una persona solvente y capaz de cumplir con sus potenciales obligaciones de pago. 8 SERVICIOS DE CONSULTORÍA (OUTSOURCING) El Outsourcing podría definirse como: “La gestión externa de determinados servicios o la ejecución de una obra para una empresa, mediante la celebración de un contrato entre la empresa cliente o usuaria y una empresa auxiliar”. Otra definición sería: “Herramienta de gestión, por la cual una organización opta por concentrarse únicamente en su core business y no tomar parte en procesos importantes pero no 8 Definicion.de, Definición de Tarjeta de Crédito, 2014. http://definicion.de/tarjeta-de-credito/. 16 inherentes a sus actividades distintivas, para las cuales contratará a un proveedor de servicios especializado y eficiente que, a la larga, se convertirá en un valioso socio de negocios.”9 9 Dr. Javier, Dolorier Torres, El outsourcing y el derecho laboral en el Perú. 2014. 17 CAPÍTULO 2. EL LENGUAJE COBOL RESEÑA HISTORICA El lenguaje COBOL nació de la colaboración conjunta de los fabricantes de ordenadores y de los usuarios, en cooperación con el Departamento de los Estados Unidos. Este lenguaje se describió por primera vez en un informe dirigido a la Conferencia sobre lenguajes de Sistemas de Proceso de Datos (CODASYL: Conference of Date Systems Languages), publicado por el Departamento de Imprenta del Gobierno de los Estados Unidos en Abril de 1960. Un extracto de dicho informe se presenta a continuación: “Toda aquella empresa y organismo al que interese reproducir en su totalidad o por partes el informe y las especificaciones COBOL iniciales, haciendo uso de ideas extraídas de este informe o utilizándolo como base para la creación de un manual de instrucción, o con cualquier otro fin, queda expresamente autorizada para hacerlo así. No obstante, se requiere a las referidas empresas u organismos para que reproduzcan en el prólogo de su manual el contenido de esta sección. Sin embargo, aquellas que solamente utilicen un breve pasaje de dichas especificaciones, como en el caso de una reseña bibliográfica, sólo estarán obligadas a mencionar la palabra COBOL como reconocimiento e identificación de su origen, pero sin que sea preciso reproducir esta sección en su totalidad”. COBOL es un lenguaje industrial y no es propiedad de ninguna sociedad o grupo de sociedades, ni de ningún organismo o grupo de organismos. Hablando más en concreto de la historia del leguaje COBOL es necesario saber que hace poco más de 50 años cada ordenador era concebido y creado con su propio sistema operativo y de programación. COBOL nació por el deseo de desarrollar un lenguaje de 18 programación que fuera aceptado por cualquier marca de ordenador. Fue así como, en Mayo de 1959, en Estados Unidos se reunió una comisión denominada CODASYL (Conference On Data System Languages), compuesta por fabricantes de ordenadores, usuarios y el Departamento de Defensa de Estados Unidos como ya ha sido mencionado; donde se dieron las primeras ideas de COBOL (Common Business Oriented Language). El primer nombre que se le dio fue: COBOL-60 por ser ese el año en que vio la luz. A partir de aquí, su evolución no paró, en 1968 salió la primera versión ANSI y posteriormente en 1989 se ampliaron sus funciones matemáticas, finalizando el estándar actual más usado, conocido como COBOL-ANSI. Hasta llegar a la versión COBOL ENTERPRISE lanzada en 1991, usada en sistemas HOST. Durante más de 5 décadas COBOL ha dominado el campo de diseño de aplicaciones para negocios. A través de todo este tiempo se ha visto nacer nuevos lenguajes como: PL1, PASCAL, C++; que han querido, sin éxito, desplazar a COBOL. En la actualidad existen solo 2 lenguajes que se han convertido en serios rivales: JAVA y Visual Basic. COBOL no fue concebido para cálculos complejos matemáticos o científicos (de hecho solo dispone de comandos para realizar los cálculos más elementales) como otros lenguajes de programación, aunque si posee un elevado grado de precisión y velocidad del cálculo numérico, pudiendo manejar hasta 30 posiciones decimales. Su empleo es más apropiado para el proceso de datos en aplicaciones comerciales y la utilización de grandes cantidades de ellos. Aun cuando no es el único lenguaje orientado para éste propósito, si ha sido el más utilizado en toda la historia. Si prestamos atención en el significado del nombre, "lenguaje común orientado a los negocios", podemos darnos cuenta de que el principal objetivo de éste lenguaje es utilizarlo para la gestión y administración de las empresas. 19 Al principio, los mainframes eran los tipos de ordenador que las grandes empresas elegían, sobre todo las del sector financiero, con sus propios sistemas operativos y sus propios compiladores de COBOL. Estos fueron consolidando a este como un lenguaje perfecto para conseguir sus propósitos por su robustez, su fiabilidad y su perfecta adaptación a las necesidades de gestión. COBOL, es un lenguaje independiente de la plataforma en la que se ejecute, por lo tanto es posible ejecutar el mismo programa sin modificar nada en cientos de sistemas diferentes como Windows, Unix, MS-Dos, Linux, Solaris, entre muchos más. Es un lenguaje que puede comunicarse a la perfección con cualquier base de datos existente en el mercado. Se puede adaptar a la tecnología cliente-servidor y puede estar presente en la web. En definitiva, se trata de un lenguaje capaz de todo. Cuando los sistemas operativos empezaron a independizarse de las máquinas, fue entonces cuando los fabricantes de compiladores COBOL comenzaron su expansión. Empresas como: Liant, Acucorp, Merant, Fujitsu, Nigsun, IBM o Computer Associates, fueron quienes permitieron a los programadores seguir programando con éste lenguaje. La expansión mundial de COBOL ha sido seguida por el grupo Gartner Group: • En 1997, estimaron que existían aproximadamente unos 300 billones de líneas de código en todo el mundo, de las cuales el 80% estaban escritas en COBOL y el 20% restante en todos los otros lenguajes. • En 1999 informaron de que el 50% de las nuevas aplicaciones importantes de misión crítica seguían estando diseñadas en COBOL. 20 • Para 2002 previeron que existieran dos millones de programadores de COBOL a lo largo de todo el mundo comparados con el millón de programadores de Java, o el millón de programadores de C++. • En ese entonces se calculó que en 2004/2005 aún el 15% de las aplicaciones importantes estén diseñadas en COBOL, y que el 80% del total tengan extensiones a librerías u otros recursos diseñados en COBOL. La mayoría se sorprende cuando se da cuenta de que las cifras se inclinan claramente a favor de COBOL en el dominio del mercado. Hay quien en el entorno de algunos lenguajes trataría de convencernos de que la mayoría de la producción en el mundo se realiza en Java, C, C++ o Visual Basic y que solo un pequeño porcentaje está hecho en COBOL, pero la realidad es muy diferente. IMPORTANCIA El lenguaje de programación COBOL está orientado hacia la resolución de problemas de gestión. Su propia evolución y la de las empresas, ha ampliado su campo de acción y su aplicación se ha extendido desde la simple utilización para resolver cualquier problema de facturación, hasta cualquier tipo de problema de gestión de una empresa (gestión de personal, gestión de aprovisionamientos, etc.). La característica fundamental de los problemas de gestión radica en el tratamiento de grandes volúmenes de datos a los que se les aplican operaciones aritméticas, generalmente sencillas, para obtener los resultados deseados. En contraposición, los problemas matemático-científicos se caracterizan por tratar poco volumen de datos que deber ser sometidos a complejos cálculos. Es obvio decir que existen 21 problemas mixtos o intermedios. Ni bajo ni elevado número de datos. Ni sencillos ni complicados cálculos. El COBOL está orientado fundamentalmente al primero y tercero de los tres tipos de problemas expuestos, y puede resolver algunos tipos particulares del segundo, aunque existen otros lenguajes más adecuados para estos fines, como FORTRAN. COBOL es un lenguaje de programación que es común a la mayoría de los ordenadores. Es decir, la mayoría de los fabricantes de ordenadores han diseñado sus máquinas para aceptar un compilador de COBOL de forma tal que un mismo programa COBOL puede ser compilado de una ordenador IBM sistema 4341 o en un ordenador UNIVAC serie 1100, o en un ordenador Siemens 7700, o en un H W-B serie 600, o en muchos otros, con algunas pequeñas variaciones de uno a otro. La universidad del COBOL permite, por consiguiente, a los usuarios de ordenadores una gran flexibilidad, un detalle que es conveniente resaltar para enfatizar en la importancia del tema en cuestión. El COBOL es un lenguaje similar al inglés. Todas sus instrucciones se codifican utilizando palabras inglesas en lugar de códigos más o menos complejos. Para sumar números, por ejemplo, se utiliza la palabra ADD. También las reglas de programación en COBOL son análogas a muchas reglas de escritura del inglés, lo que hace que sea un lenguaje de muy fácil aprendizaje, otra característica de gran importancia. Por otro lado, la prueba y puesta a punto de los programas COBOL se requiere mucho menos tiempo que en la de los programas escritos en otros lenguajes. La semejanza del COBOL con el inglés, aparte de facilitar su escritura, hace muy fácil su lectura, de tal forma que algunos programas pueden ser fácilmente comprendidos por personas profanas en proceso de datos. 22 Sencillamente COBOL está diseñado para desarrollar aplicaciones de Negocio, es por ello que es el lenguaje más utilizado en el sistema financiero mexicano, de ello se hablará más adelante. En resumen, en COBOL se puede, como ocurre con cualquier lenguaje, expresar una misma idea o resolver un mismo problema en formas muy diferentes, dependiendo del estilo gramatical utilizado por el programador, además de ser lo suficientemente flexible para facilitar su aprendizaje. CARACTERÍSTICAS COBOL es un lenguaje independiente de la plataforma donde se ejecute, además puede comunicarse con cualquier base de datos que exista, se adapta a la tecnología cliente-servidor, a la tecnología de eventos e inclusive puede estar en la web. Posee un elevado grado de precisión y velocidad de cálculo numérico, con la capacidad de manejar hasta 30 posiciones decimales. Se emplea en aplicaciones comerciales y para el manejo de grandes cantidades de datos. Como dato histórico es el lenguaje más utilizado en toda la historia para este propósito. COBOL cuenta con aproximadamente 300 palabras reservadas. COBOL tiene características principales únicas las cuales serán analizadas a continuación. ES UN LENGUAJE AUTODOCUMENTADO Uno de los objetivos de COBOL es que le sea posible a cualquier individuo, no programador, poder revisar el código y entenderlo sin conocer el lenguaje. COBOL contiene muchos elementos estructurales ingleses, como verbos, instrucciones, secciones y divisiones. Aunque, éste objetivo no ha sido cubierto en su totalidad; los administradores y los usuarios 23 no leen programas en COBOL, dado que son demasiado complejos para ser entendidos por mucha gente de negocios, a pesar de la familiaridad de los elementos sintácticos. Pero el intento ha tenido un efecto relativo, y es que COBOL es actualmente el lenguaje autodocumentado más fácil de entender. ES SIMPLE No tiene punteros ni funciones o tipos definidos por el usuario, con un campo limitado de funcionalidad. Curiosamente y a pesar de sus limitaciones, COBOL ha demostrado estar muy bien dotado para el dominio de las aplicaciones para las que se creó (informática de negocios). La mayoría de los programas en COBOL operan en un dominio en que la complejidad reside más en la codificación de las reglas de los negocios a los que se destina que en la sofisticación de las estructuras de datos o algoritmos requeridos. Y en estos casos, COBOL resuelve los problemas con instrucciones como SORT y SEARCH. ES PORTABLE El estándar COBOL no pertenece a ninguna marca concreta. El Comité ANSI COBOL legisla estándares de semántica y sintaxis que no son específicos de una marca. COBOL es virtualmente portable a cualquier tipo de máquina, desde Windows hasta UNIX pasando por VSE, OS/2, VMS, Unisys, DG, VM y MVS. ES MANTENIBLE Tiene una carrera de más de 30 años de mantenimiento de software, habilitación y producción de soporte a nivel de empresa. Los informes del problema del año 2000 revelaron que las aplicaciones en COBOL eran mucho más baratas de reparar que la gran mayoría de los otros lenguajes. 24 ESTANDARES En 1968, el Instituto Nacional de Normalización Estadounidense, en un intento de eliminar la incompatibilidad entre diferentes versiones de COBOL, creó un estándar para el lenguaje. Conocida como el Estándar Nacional Estadounidense COBOL, o COBOL ANS (por sus siglas en inglés), la norma pasó por varias mejoras, incluyendo las de 1974, 1985, 1997 y 2002. Otros lenguajes similares de alto nivel incluyen los lenguajes de programación Pascal, el BASIC (Código de Instrucción Simbólica para Todo Propósito para Principiantes) y el Ada. El grupo de trabajo de la ANSI encargada de establecer los estándares para COBOL, llamado J4 aprobó en Julio de 2002 el estándar COBOL ANS 2002, entre sus cosas más resaltables está la inclusión de la programación orientada a objetos, esto pone a COBOL nuevamente en el estado del arte de la programación. DESARROLLO DE UN PROGRAMA COBOL Para llevar a cabo el desarrollo de un programa COBOL existen ciertas reglas o indicaciones que debemos seguir, en el presente capítulo se describirán dichas indicaciones sobre los elementos, áreas de codificación y la estructura de un programa en lenguaje COBOL. Debemos tomar en cuenta que dentro de un programa COBOL se manejan caracteres, tales como: • Alfabéticos [A, …, Z] • Numéricos [0, …, 9]. • Aritméticos [suma (+), resta (-), multiplicación (*), división (/)] • De relación [mayor que (>), menor que (<), igual a (=)] • De inserción [signo de pesos ($), punto decimal (.), coma (,), dejar espacios (B)] 25 • Para formateo [Z, 9] • Para Identificadores [guión (-)] Entiéndase que un carácter es una unidad de información que corresponde aproximadamente con una unidad o símbolo parecido, como los de un alfabeto o silabario de la forma escrita de un lenguaje natural. A su vez COBOL cuenta, como cualquier lenguaje de programación, con palabras reservadas y palabras definidas por el usuario, ejemplo de ello son: Palabras Reservadas: • ACCEPT, AND, AUTHOR, CLOSE, DISPLAY, DIVISION, MOVE, PROCEDURE, WRITE, REDEFINES, STOP, RUN, entre otras. Palabras definidas por el usuario. • Se definen combinando caracteres alfabéticos, numéricos y guiones • Deben comenzar con un carácter alfabético, excepto las combinaciones usadas para los párrafos • No pueden iniciar ni finalizar con un guión. • No pueden excederse de más de 30 caracteres. • No pueden ser los mismos que las Palabras Reservadas • LINEA-DE-DETALLE, TOTAL-SALARIO, FIN-DE-ARCHIVO, etc. COBOL cuenta con 4 áreas de codificación las cuales se describen a continuación y se muestran en las Imágenes 1 y 2. “Ejemplo de Áreas de Codificación”: De la posición 1 a la 6. Se pueden utilizar para los números de secuencia que permiten ordenar rápidamente el programa. 26 Posición 7 – Área Indicadora. Se utiliza para indicar con un guión (-) la continuación de un literal alfanumérico cuando su longitud excede más de una línea. También se utiliza para indicar el comienzo de un comentario con el carácter especial (*). De la posición 8 a la 11 – Margen A. Se utiliza para cabeceras de división, cabeceras de sección, cabeceras de párrafos (inicio y fin), descripciones de nivel, nivel 01. De la posición 12 a la 72. Se utiliza para codificar Instrucciones, Sentencias, nivel 05 en adelante. De la posición 73 a la 80. Esta área no se utiliza para los programas COBOL, en algunos casos sirven para escribir comentarios Imagen 1. Ejemplo de áreas de codificación. 27 Imagen 2. Ejemplo de áreas de codificación (continuación). DIVISIONES DE UN PROGRAMA COBOL Para estructurar un programa COBOL se desarrolla dentro de las 4 divisiones siguientes: Identification Division, Environment Division, Data Division y la Procedure Division, que a su vez se dividen en secciones. IDENTIFICATION DIVISION. Dentro de esta división se especifican los datos generales del programa como: PROGRAM -ID. AUTHOR. Nombre del programa. Nombre del autor. DATE-WRITTEN. Fecha en la que fue escrito. DATE-COMPILED. Fecha en la que fue compilado. (Generalmente no se informa) 28 ENVIRONMENT DIVISION. En esta división se describen las características físicas en donde correrá el programa, así como los archivos de entrada y salida del mismo (lógicos) con los correspondientes archivos externos (físicos). En ella existen dos secciones: CONFIGURATION SECTION. Identifica las computadoras en donde el programa fuente se compilará y en donde el programa objeto correrá: • SOURCE-COMPUTER. Dónde se desarrolla. • OBJECT-COMPUTER. Dónde se ejecuta. INPUT-OUTPUT SECTION. Describe las características de cada uno de los archivos que serán usados por el programa tanto de entrada como de salida. Esto es definido en la sub sección File Control: • FILE-CONTROL. Vincula a cada uno de los archivos usados en el programa (lógicos) con los archivos externos. Ejemplo: SELECT nombre-interno-archivo ASSIGN TO nombre-externo FILE STATUS IS FS-nombre. DATA DIVISION. Describe detalladamente los datos usados, de entrada y de salida, reservando el espacio de memoria. Está compuesta de varias secciones que tienen una función lógica específica. Cada una de estas secciones se puede omitir cuando no se necesita en el programa (son opcionales). En caso de utilizarse estas secciones, deben codificarse en el orden siguiente: FILE SECTION. En esta sección se define la estructura de los archivos de entrada y salida. 29 • FD. File Description. Proporciona información acerca de la estructura física y la identificación de cada archivo, así como el nombre del registro vinculado al archivo. Ejemplo: FD nombre-interno-archivo LABEL RECORDS ARE tipo-dispositivo [STANDARD, OMITTED] BLOCK CONTAINS n RECORDS [n, 0] DATA RECORD IS REG-NAME. 01 REG-NAME o PIC X(longitud). LABEL RECORDS ARE [STANDARD, OMITTED]. Es usada para indicar si se tratan de discos ó cintas (STANDARD), o bien, si el archivo será impreso (OMITTED). o BLOCK CONTAINS n RECORDS. Indica el número de registros que pueden ser leídos con un espacio entre cada registro (no bloqueados), o bien, en grupos con un espacio entre cada número determinado de registros (bloqueado). Esta definición puede ser omitida, ya que sólo puede ser indicada para archivos bloqueados. Se asigna 0 para que sea asignado por la maquina en el momento de la ejecución. o Para archivos que serán impresos se omite. DATA RECORD IS REG-NAME. Indica el nombre del registro asociado al archivo, puede ser opcional. 30 La definición de este registro se encuentra en la Working- Storage Section, en la parte de Record Layout. WORKING-STORAGE SECTION. En esta sección se definen los registros de datos que no son parte de los archivos pero que son utilizados y procesados dentro del programa. En esta sección se pueden definir: Record Layout. Estructura de cada uno de los campos que forman los registros de los archivos tratados en el programa. Líneas y encabezados de reporte. Definición de constantes y variables que integran cada una de las líneas que corresponden a los títulos, cabeceras, líneas de detalle, totales, etc., de un reporte. Flags/Switches. Elementos de datos condicionales que indican verdadero o falso. Contadores/Acumuladores. Se refieren a una variable usada para guardar el contenido del conteo o adición de elementos. Constantes y literales. Son variables que contienen un valor fijo, el cual no cambiará durante el proceso del programa. Por ejemplo: títulos, etiquetas de columnas, etc. Variables de trabajo. Son variables que se encuentran involucradas en cálculos intermedios o en el proceso del programa. Por ejemplo: Una variable en la que en cada cambio de registro se vaya guardando el resultado de una operación. 31 Los datos son definidos con la cláusula PIC seguida del tipo de dato y la longitud de este. Por ejemplo: 05 WS-NUMERO PIC 9(25). 05 WS-NOMBRE PIC X(25). 05 WS-NOMBRE PIC A(25). LINKAGE SECTION. En esta sección se describen ítems de datos que estarán para otros programas. Estos ítems de datos proporcionan nombres y descripción de los mismos. La memoria dentro de un programa solo se reserva en el programa principal. PROCEDURE DIVISION. En esta división se tienen los procedimientos, secciones, párrafos, declarativas, sentencias e instrucciones que permiten realizar una función de procesamiento de datos. Como parte de los estándares de programación en lenguaje COBOL esta sección es dividida en párrafos, los cuales son descritos a continuación y pueden verse más claramente en la imagen 3. PRINCIPAL. Se le asigna, por lo general, el número 1000. Este párrafo tiene la función de guardar el orden de ejecución de los siguientes 3 párrafos, los cuales son los procesos principales. A su vez se encarga del manejo y control del programa principal, paso y recepción del control de otros programas, así como la finalización (stop-run) de los mismos. INICIO. En la mayoría de los casos se le asigna el número de párrafo 2000. En este párrafo generalmente se realiza la inicialización de variables de trabajo (acumuladores, contadores, etc). También se puede realizar la apertura de archivos de entrada y salida. 32 PROCESO. Para este párrafo el número asignado debería ser el 3000. En este párrafo se realiza el procesamiento principal del programa. FIN. Habitualmente se le coloca el número de párrafo 8000, En él se realiza el cierre de archivos de entrada y salida y el envío de cifras de control. Imagen 3. Ejemplo de la estructura de la Procedure Division. TIPOS DE DATOS Un tipo de dato informático es un atributo de una parte de los datos que indica al ordenador (y/o al programador) algo sobre la clase de datos que se va a procesar. Esto incluye imponer restricciones en los datos, como qué valores pueden tomar y qué operaciones se pueden realizar. En un sentido amplio, un tipo de datos define un conjunto de valores y las operaciones sobre estos valores. En COBOL los datos se organizan en campos los cuales pueden ser: - INDEPENDIENTES. Se definen en la WORKING-STORAGE y no son parte de la descripción de los archivos. Formato. [número de nivel] [nombre de dato] [PICTURE] [especificación del dato] Ejemplo: 01 NUM-BANCO PIC X(04). 33 Para el número de nivel se utilizan múltiplos de 5, es decir, el nivel más alto será 01, el que le siga será 05, el siguiente 10 y así sucesivamente. El nombre del dato nos permite hacer referencia del contenido del campo dentro del programa. La especificación del dato se refiere al tipo y a la longitud del campo. La cláusula PICTURE define la información que puede almacenarse en el campo y determina el tipo de operaciones que pueden realizarse con él. Se puede abreviar con PIC. Ejemplos de su uso: PIC XXXX = PIC X(04). El carácter X especifica cualquier carácter alfanumérico. PIC AAAA = PIC A(04). El carácter A especifica cualquier carácter alfabético. PIC 999999 = PIC 9(06), El carácter 9 especifica cualquier dígito del 0 al 9. PIC 99V99 = PIC 9(02)V99. El carácter V especifica un punto decimal. PIC S99 ó PIC S9V999. El carácter S especifica el signo. El carácter Z permite sustituir los ceros que no son significativos por espacios en blanco. Ejemplo: 01 WC-LINE-1 PIC Z,ZZZ,ZZ9 El carácter ‘.’ indica la posición del punto decimal. Ejemplo: 01 WS-IMPORTE-1 PIC -ZZZ,ZZ9.99 El carácter ‘,’ indica la posición de la coma como separador de miles. El carácter + al colocarse al extremo izquierdo o derecho permite la aparición del signo. Si es Positivo = +, si es Negativo = -. 34 El carácter - al colocarse al extremo izquierdo o derecho permite la aparición del signo. Si es Positivo = un espacio en blanco, si es Negativo = -. La cláusula VALUE. Permite inicializar el valor de un campo independiente. Formato. Literales numéricas VALUE IS Constantes figurativas o Literales no numéricas. Algunos ejemplos: 01 01 CONSTANTES. 05 CT-UNO PIC 9(01) VALUE 1. 05 CT-SALARIO-T PIC 9(06) VALUE 002000. 05 CT-CERO PIC 9(01) VALUE IS ZERO. 05 CT-CEROS PIC 9(05) VALUE IS ZEROES. 05 CT-OPEN PIC X(04) VALUE 'OPEN'. 05 CT-CLOSE PIC X(05) VALUE 'CLOSE'. 05 CT-ESPACIOS PIC X(40) VALUE IS SPACES. SW-FINDEARCH 88 SW-FIN-SI PIC XX VALUE ‘NO’. VALUE ‘SI’. Para dicha cláusula se pueden utilizar las sentencias: ZERO, ZEROS, ZEROES, SPACE, SPACES, QUOTE, QUOTES, HIGH-VALUE, HIGH-VALUES, LOW-VALUE, LOW-VALUES. - COMPUESTOS. Pueden definirse en la WORKING-STORAGE y es obligado su uso para describir archivos ya que se pueden subdividir. Se pueden encontrar bajo el nombre de registros. 35 Imagen 4. Ejemplo de campos compuestos. Características: o Empiezan en el nivel 01, en el Margen A, su nombre y los siguientes niveles deberán codificarse en el Margen B. o Los números de nivel no siempre son consecutivos. o Primero se coloca el número de nivel y posteriormente el nombre del dato. o Para mejor presentación y entendimiento se deberá intercalar con 4 posiciones entre cada subnivel. o Posterior a la clausula PICTURE o PIC se debe especificar el tipo y longitud de cada dato. o Los nombres de cada uno de los datos deberán ser únicos. o En caso de que el nombre del dato no se utilice para ser referenciado se puede utilizar la palabra reservada FILLER. 36 - TABLAS. Es un conjunto de campos que tienen la misma especificación del dato (tipo y longitud) que se nombran igual y que se distinguen con un subíndice que indicará la entrada en particular. Se definen en la WORKING-STORAGE. Ejemplo: se quiere tener la información del número de bajas por mes de los empleados de una fábrica. Para esto definiríamos 12 campos o variables en donde guardaríamos la información de cada mes de la siguiente forma: MOVE 12 TO ENE MOVE 8 TO FEB MOVE 16 TO MAR MOVE 10 TO ABR MOVE 2 TO MAY MOVE 0 TO JUN MOVE 6 TO JUL MOVE 11 TO AGOS MOVE 3 TO SEPT MOVE 1 TO OCT MOVE 4 TO NOV MOVE 1 TO DIC Y definiríamos las variables como sigue: 01 ENE PIC 999. 01 FEB PIC 999. 01 MAR PIC 999. 01 ABR PIC 999. 01 MAY PIC 999. 01 JUN PIC 999. 37 01 JUL PIC 999. 01 AGOS PIC 999. 01 SEPT PIC 999. 01 OCT PIC 999. 01 NOV PIC 999. 01 DIC PIC 999. Con el uso de tablas la información se asignaría de la siguiente manera: Al ser del mismo tipo, numéricas, y tener la misma longitud (3 dígitos) se puede crear una tabla definida de la siguiente manera: 01 MESES. 05 BAJAS PIC 9(3) OCCURS 12 TIMES. Con esta definición tendremos un campo en donde guardar la información, BAJAS, la información se asignaría de la siguiente manera: MOVE 12 TO BAJAS(1) MOVE 8 TO BAJAS(2) MOVE 16 TO BAJAS(3) MOVE 10 TO BAJAS(4) MOVE 2 TO BAJAS(5) MOVE 0 TO BAJAS(6) MOVE 6 TO BAJAS(7) MOVE 11 TO BAJAS(8) MOVE 3 TO BAJAS(9) MOVE 1 TO BAJAS(10) MOVE 4 TO BAJAS(11) MOVE 1 TO BAJAS(12) 38 El subíndice es el que nos permite hacer referencia a cada elemento de la tabla. El resultado final aparentemente es el mismo, con la diferencia de que solo se ha declarado una variable. El subíndice puede ser también una variable. VERBO INITIALIZE Para inicializar un campo o dato de cualquier tipo: independiente, compuesto o tabla, se utiliza el verbo INITIALIZE, en tal caso los campos de tipo alfanuméricos serán inicializados con espacios y los numéricos con ceros. Sintaxis: INITIALIZE nombre-campo 05 WS-CLIENTE. INITIALIZE 10 WS-CODIGO PIC 9(5). 10 WS-NOMBRE PIC X(30). WS-CLIENTE. ó INITIALIZE WS-CODIGO WS-NOMBRE. INSTRUCCIONES IMPERATIVAS Y CONDICIONALES En el lenguaje COBOL se tienen 2 tipos de instrucciones, las imperativas y las condicionales. En el primer caso hablamos de un verbo que realizará una acción y los operandos apropiados que están vinculados a esa acción. En el caso de las instrucciones condicionales nos permiten comprobar la veracidad o falsedad de condiciones. Los verbos imperativos son: Entrada / Salida o ACCEPT, DISPLAY, OPEN, READ, WRITE, CLOSE Transferencia de Datos o MOVE Aritméticos 39 o ADD, SUBTRACT, MULTUPLY, DIVIDE, COMPUTE Control o PERFORM, STOP El verbo ACCEPT nos permite obtener por medio de un SYSIN o del sistema datos utilizados en el programa. Los formatos para el uso de este verbo son: ACCEPT identificador [FROM nombre-nemónico] ACCEPT identificador [FROM DAY, DATE, TIME] Ejemplos: ACCEPT NOMBRE ACCEPT FECHA FROM DATE ACCEPT DIA FROM DAY ACCEPT HORA FROM TIME El verbo DISPLAY nos permite desplegar en pantalla o consola (spool) de salida información. Su formato es: DISPLAY – Identificador 1 o Literal 1 - , - Identificador 2 o Literal 2 Ejemplos: DISPLAY '* ERROR AL ABRIR EL ARCHIVO DE ENTRADA*' DISPLAY '* ESTATUS DE ARCHIVO ' FS-ENTRADA 40 El verbo OPEN permite abrir los archivos que requiere un programa además de indicar al sistema cuáles son los archivos que serán accedidos por el programa e identificar cuáles archivos serán usados para entrada de datos y cuáles serán archivos de salida de datos. Generalmente es codificada al inicio del programa. Su sintaxis es: Archivos de lectura OPEN INPUT Archivos de escritura OPEN OUTPUT nombre-archivo nombre-archivo Ejemplos: OPEN INPUT ENTRADA1 OPEN INPUT ENTRADA2 OPEN OUTPUT SALIDA3 El verbo READ permite leer los registros de un archivo. Su sintaxis: READ nombre-archivo INTO nombre-registro AT END SET END-OF-FILE TO TRUE. Ejemplo: READ ENTRADA1 INTO REG-ENTRADA1 AT END SET FS-ENTRADA1-FIN TO TRUE END-READ. El verbo READ lee el registro del archivo especificado cuyo nombre es el mismo que el asignado en la sección de FD. Los datos del registro son transferidos a través de la sentencia INTO en la definición del registro que ha sido definido en la WS para el archivo. Para 41 controlar el fin de archivo en base a una condición es utilizada la cláusula AT-END. Esto se puede visualizar con mayor detalle en la siguiente tabla. READ ENTRADA1 INTO DATOS-E1 AT END SET ENT1-FIN TO TRUE. DATA DIVISION. FILE SECTION. ************************************** * ARCHIVO DE ENTRADA1 * ************************************** FD ENTRADA1 LABEL RECORD ARE STANDARD BLOCK CONTAINS 0 RECORDS DATA RECORD IS REG-ENTRADA1. 01 REG-ENTRADA1 PIC X(16). WORKING-STORAGE SECTION. 01 ENTRADA-AREA. ************************************** * RECORD LAYOUT * ************************************** 05 DATOS-E1. 10 E1-CAMPOA PIC X(06). 10 E1-CAMPOB PIC X(10). Tabla 1. Codificación del verbo READ y definición de archivos de entrada. El verbo WRITE permite escribir el contenido de la memoria a un dispositivo de salida (archivo, cinta, etc.). Su forma de codificación del verbo se muestra en la siguiente imagen. Sintaxis: WRITE OUTPUT-REC FROM REC-DATA Ejemplo: WRITE REG-SALIDA INTO DATOS-SAL DATA DIVISION. FILE SECTION. ************************************** * ARCHIVO DE SALIDA * ************************************** FD SALIDA LABEL RECORD ARE OMITTED BLOCK CONTAINS 16 RECORDS DATA RECORD IS REG-SALIDA. 01 REG-SALIDA PIC X(16). WORKING-STORAGE SECTION. 01 SALIDA-AREA. ************************************** * REPORTE SALIDA * ************************************** 05 DATOS-SAL. 10 SAL-CAMPOA PIC X(06). 10 SAL-CAMPOB PIC X(10). Tabla 2.Codificación del verbo WRITE y definición de archivos de salida. 42 El verbo CLOSE permite cerrar los archivos de entrada y salida usados durante el proceso del programa. Sintaxis: CLOSE file-name1 Ejemplo: CLOSE INPUT-FILE / OUTPUT-FILE El verbo MOVE coloca una copia del dato contenido en un campo-1 a un campo-2. Sintaxis: MOVE campo-1 TO campo-2 Ejemplo: CAMPOS ELEMENTALES CAMPOS A NIVEL GRUPO MOVE CAMPO-1 TO CAMPO-2 MOVE GRUPO-1 TO GRUPO-2. CAMPO-3 CAMPO-4. Tabla 3. Ejemplos de uso del verbo MOVE. VERBOS ARITMÉTICOS La siguiente Tabla describe claramente el uso de los verbos aritméticos en COBOL. VERBO DESCRIPCIÓN EJEMPLO DE USO ADD campo-1 campo-2 campo-N TO campo-z SUBTRACT campo-1 campo-2 campo-N FROM campo-z ADD Adición de valores. SUBSTRACT Sustracción de valores. MULTIPLY Multiplicación de valores. El resultado es almacenado en los campos especificados por la instrucción BY. DIVIDE División de valores. GIVING Asigna el valor de la operación al campo especificado. 43 MULTIPLY campo-1 BY factor-1 factor-2 factor-N -DIVIDE dividendo BY divisor GIVING cociente. -DIVIDE divisor INTO dividendo-1 dividendo-2. -DIVIDE divisor INTO dividendo GIVING cociente REMAINDER residuo. -ADD campo-1 TO campo-z GIVING campo-suma. -SUBTRACT campo-1 FROM campo-z GIVING campo- ROUNDED Redondea el valor del cálculo de la operación. El valor es redondeado al siguiente superior cuando el valor truncado es mayor o igual a 5. resta. -MULTIPLY campo-1 BY factor-1 GIVING campomult. -DIVIDE dividendo BY divisor GIVING cociente. -DIVIDE divisor INTO dividendo GIVING cociente REMAINDER residuo. ADD campo-1 TO campo-z ROUNDED SUBTRACT campo-X FROM campo-z ROUNDED MULTIPLY campo-1 BY fator GIVING campostore ROUNDED Tabla 4. Definición de verbos aritméticos El verbo COMPUTE y el uso de operadores aritméticos simbólicos permiten escribir instrucciones aritméticas compactas. Al utilizar paréntesis, las operaciones aritméticas que están dentro de ellos se efectúan primero, las más internas son las que tienen prioridad, de izquierda a derecha se ejecutan de acuerdo al siguiente orden: 1. Elevar a una potencia. 2. Multiplicación y División. 3. Suma y Resta Ejemplos. - COMPUTE A = A + B + C - COMPUTE A = (B*(C - D)) 44 El verbo PERFORM tiene como función pasar el control a un párrafo específico. Después de ejecutar las instrucciones de aquel párrafo, el control es devuelto al párrafo que realizó la llamada. En caso de que sea la última sentencia de un párrafo se utilizará UN PUNTO en una línea nueva, en la columna 12 como se muestra en la imagen 5. 1234567890123456 IF [condición] [instrucción ó sentencia] END-IF PERFORM nombre-parrafo . Imagen 5. Definición PERFORM. La cláusula UNTIL es utilizada por el verbo PERFORM para indicar que el párrafo debe ser ejecutado hasta cumplir una determinada condición. Ejemplo de ello se visualiza en la imagen 6. PERFORM nombre-parrafo UNTIL condicion. Ejemplo: PERFORM 2100-INIT-TABLE UNTIL WS-CONTADOR EQUAL TO CTE-CINCO. Imagen 6. Definición sentencia UNTIL. Las instrucciones Condicionales se clasifican en: Condiciones de Relación. Estas condiciones tienen que ver con las comparaciones entre dos ítems mediante los operadores de relación ó relacionales. 45 o Operadores Relacionales: indican la clase de comparación y se pueden usar con símbolos o palabras. = EQUAL TO > GREATER THAN < LESS THAN >= GREATER THAN OR EQUAL TO <= LESS THAN OR EQUAL TO o Se puede usar el NOT para realizar la negación de la expresión condicional sin embargo no es muy recomendable. Condiciones Anidadas. Son condiciones de relación que se anidan una dentro de otra. Esquemáticamente este tipo de relaciones se pueden entender de la siguiente manera: Ejemplo: IF [expresión condicional] [instrucciones o sentencias] ELSE IF [expresión condicional] [instrucciones o sentencias] ELSE [instrucciones o sentencias] END-IF END-IF 46 Las condiciones anidadas se pueden entender como una manera de estructura CASE. El verbo EVALUATE es otra manera de implementar la estructura CASE. Ejemplo: EVALUATE [identificador o TRUE] WHEN [condición-1] [instrucciones o sentencias] WHEN [condición-2] [instrucciones o sentencias] WHEN [condición-n] [instrucciones o sentencias] WHEN OTHER[cuando la condición sea <> 1, 2 ó n] [instrucciones o sentencias] END-EVALUATE Condiciones con Nombre. Permiten determinar validar si la condición es verdadera o falsa. En este tipo de condiciones se usan los switches definidos en el nivel 88. Definiendo un switch. Para aprovechar de una mejor manera las condiciones con switch existe el verbo SET. Formato: • SET {nombre-de-condición-1} TO TRUE SET SW-FIN-SI TO TRUE … IF SW-FIN-SI PERFORM CIFRAS-DE-CONTROL END-IF 47 TEMAS RELACIONADOS AL USO DEL LENGUAJE COBOL PROGRAMACIÓN ESTRUCTURADA Lo que la programación estructurada intenta lograr es que, como su nombre lo dice, la Estructura Interna del programa o componente contemple las siguientes características: - Sencilla. Debe ser fácil de programar. - Comprensible. Que cualquier persona comprenda el flujo del programa desarrollado. - Verificable. Se debe poder comprobar que el programa lleva a cabo el proceso correctamente para el cual fue desarrollado. - Apropiada a la estructura del problema. Debe resolver el problema para el que fue creado. En síntesis, lograr que la estructura del programa modele la estructura natural del problema. TÉCNICAS DE LA PROGRAMACIÓN ESTRUCTURADA ESTRUCTURAS DE CONTROL Las Estructuras de Control determinan el flujo de la información durante la ejecución del programa. Dicho flujo debe ser simple y visible, es decir, que se tenga una sola entrada y una sola salida. 48 SEQUENCE Es la ejecución de dos o más procesos en forma consecutiva. Tomando en cuenta que un proceso es una instrucción o conjunto de instrucciones ligadas entre sí con estructuras de control. PROCESO - A PROCESO -B Imagen 7. SEQUENCE IF-THEN-ELSE Se refiere a la ejecución de uno de dos procesos dependiendo de alguna condición. El único proceso que pudiera estar vacío es el que está situado a la izquierda de la condición. SI CONDICI ÓN PROCESO - C PROCESO - D Imagen 8. IF THEN ELSE CASE Es la ejecución de uno o varios procesos dependiendo de alguna condición. Uno o varios procesos pueden estar vacíos. 49 CONDICION 1 CONDICION 3 CONDICION 2 PROCESO 2 PROCESO 1 PROCESO 3 Imagen 9. CASE WHILE - DO Se refiere a la ejecución de un proceso varias veces mientras se cumpla una condición. Hágase notar que el proceso puede no ser ejecutado cuando al inicio la condición no se cumple. NO CONDICI ÓN PROCESO - E Imagen 10. WHILE DO SALIDA ANORMAL Termina la ejecución de un programa cuando se detecta una condición anormal. Actúa como ‘fusible’ del programa y su funcionamiento es completamente transparente al objetivo del mismo. CONDICI ÓN SI MENSAJ E Imagen 11. SALIDA ANORMAL 50 ABORTA MODULARIDAD La modularidad consiste en dividir el programa en varios grupos de instrucciones llamados módulos/párrafos. Un módulo consta de varias instrucciones, algunas de las cuales pueden ser ‘Ejecuta Módulo’. El programa comienza su ejecución al momento en que se ejecuta el primer módulo ‘Controlar programa’. Cualquier módulo puede ser llamado a ejecución desde uno o varios módulos. Para saber si estamos llevando a cabo un modularidad de forma correcta debemos tomar en cuenta que cada módulo debe tener una sola función (cada módulo genera un solo resultado o efecto identificable) dicha función debe estar completa dentro del mismo módulo, además la división en módulos debe ser de acuerdo a la estructura lógica del problema a resolver y aislar los efectos de las posibles modificaciones al programa. También un módulo debe tener un tamaño que sea ‘fácil de comprender’. Si la función es muy extensa, se subdivide en subfunciones y la función del módulo original no se altera. Sé debe tener un módulo que controle a los módulos generados. La comunicación entre módulos debe ser mínima, clara y bien definida, es decir, se debe contar con un mínimo acoplamiento entre los módulos. Conjuntamente, un módulo debe tener su propia área de trabajo (No se debe compartir) y el nombre de cada uno de ellos debe estar compuesto por un verbo/acción aplicado sobre un sustantivo/objeto claramente identificado. Como ejemplo: Leer-Archivo-Empleados, Conectar-BaseDatos, Imprimir-Totales. Finalmente, cada definición de un módulo debe especificar claramente lo siguiente: - Nombre del Módulo. - ¿Cuál es la función que realizará el módulo? - ¿Cuál es su interfaz externa con otros módulos? 51 Se descompone en Entrada (parámetros de entrada y precondiciones) y Salida (parámetros de salida y post-condiciones). Ejemplo: - Módulo: validar Fecha - Función: verifica que una fecha sea válida. - Entrada: fecha en formato estándar. - Salida: indicador de fecha válida o inválida. ÁRBOL DE MÓDULOS Es un diagrama para representar la jerarquía de los módulos. Cada módulo se representa como un rectángulo y tiene conectados hacia abajo los módulos que serán llamados sólo por él. En la parte inferior se representan, sin estar conectados hacia arriba, los módulos compartidos los cuales no son más que módulos que pueden ser ejecutados por cualquiera de los módulos superiores. La representación de un árbol de módulos se puede observar en la imagen 12. CONTROLAR PROGRAMA 000 INICIAR PROGRAMA PROCESAR PÓLIZAS TERMINAR PROGRAMA 030 010 INGRESAR PÓLIZA CAMBIAR PÓLIZA 040 LEER MOVTO PÓLIZAS EMITIR CIFRAS DE CONTROL 990 ELIMINAR PÓLIZA 050 LEER MAESTRO PÓLIZAS 500 100 060 ESCRIBIR LÍNEA REPORTE ESCRIBIR MAESTRO PÓLIZAS 510 600 ABORTAR PROGRAMA 980 Imagen 12. Ejemplo de árbol de módulos. 52 610 Para entender mejor el deber ser de la estructura anterior a continuación se dará una breve descripción. Obsérvese los módulos 030-060 cada uno de ellos tiene una sola función bien definida y completa, no estaría completa si por ejemplo Procesa Póliza sólo controlara los módulos: Ingresar Póliza y Eliminar Póliza. La comunicación de Ingresar Póliza, Cambiar Póliza y Eliminar Póliza con Procesar Póliza es: cada módulo recibe el Archivo de Movimientos posicionado en el primer registro del movimiento a procesar y regresa el archivo posicionado en el primer registro del siguiente movimiento (o el indicador de fin de archivo). Los lineamientos en cuanto a la numeración de los módulos es: se debe realizar de arriba hacia abajo y de izquierda a derecha, iniciando con 000 e incrementando de 10 en 10, para posteriormente hacerlo de 100 en 100. En resumen para poder desarrollar un programa con cero defectos es necesario tomar en cuenta el siguiente procedimiento: 1.- Entender el requerimiento/especificación del programa. 2.- Diseñar la estructura de módulos (árbol de módulos) del programa. 3.- Diseñar los algoritmos del programa (lógica, definir variables, definir constantes, etc). 4.- Revisar la lógica del programa (pruebas de escritorio). 5.- Codificar el programa. 6.- Evaluar el cumplimiento de criterios de calidad del código. 7.- Depurar la sintaxis del código. 8.- Diseñar las pruebas unitarias del programa. 9.- Ejecutar las pruebas. 10.- Corregir defectos detectados con la prueba unitaria. 53 11.- Evaluar los productos elaborados (verificar que el programa solucione el problema para el que fue desarrollado). 12.- Guardar el programa para así tener controlados los cambios que se le efectúen. Es importante seguir al pie los pasos antes mencionados para evitar más de 3 compilaciones del programa ya que estas conllevan un gasto de recursos que puede resultar costoso. Nota: Las compilaciones no deben utilizarse a fin de encontrar errores, estos deben ser encontrados atendiendo a los pasos del 6 al 10. JCL (JOB CONTROL LANGUAGE) El Sistema Operativo es el encargado de gestionar de forma eficiente todos los recursos de los que dispone un sistema de información. Dentro de sus principales ocupaciones están la administración de: memoria, terminales de trabajo, discos, programas, comunicaciones etc. Para llevar a cabo algunas de estas tareas en el sistema operativo OS/390, es necesario conocer el manejo de JCL’s (Job Control Language), que son un conjunto de instrucciones necesarias para la ejecución de un proceso batch, esto es semejante a un “Batch de D.O.S.” que ejecuta peticiones al sistema operativo. De esta manera el JCL le dice al sistema operativo todos los requerimientos de entrada y salida que se necesitan para ejecutar un proceso o varios en una secuencia determinada (Gestor de trabajos – JES). JCL (Job Control Lenguage), es un lenguaje de programación que permite codificar las instrucciones necesarias para la ejecución de un proceso Batch. Estas instrucciones son interpretadas y ejecutadas por el gestor de trabajos (JES – Job Entry Subsystem). 54 CONCEPTOS GENERALES Job (trabajo). Unidad de trabajo básica independiente. Job Step (paso de Job). Ejecución de un programa dentro de un Job. También se puede hacer referencia como step (paso). El máximo de pasos permitidos en un JCL es de 255. Partes de un JCL: – Cabecera. Información relativa al entorno en donde será ejecutado el Job, características de entorno, tiempo, nivel de mensajes, etc. – Cuerpo. Contiene las sentencias de ejecución de cada programa o utilería a ejecutar. SINTAXIS GENERAL DE UN JCL • La codificación de un JCL debe empezar en las columnas 1 y 2 con //, salvo en algunos casos. • El nombre que identifica cada paso del JCL deberá comenzar con un carácter alfabético de máximo de 8 caracteres a partir de la columna 3. • Los parámetros utilizados en la codificación del JCL deberán ser separados por comas, y la declaración de estos no deberá exceder de la posición 71 • La codificación de comentarios es con //*, los cuales deberán terminar como máximo en la columna 72. • La terminación de un paso es indicada a través de /* en las columnas 1 y 2. 55 Ejemplo: 123456789012345678901234567890123456789012345678901234567890123456789012 //JCLNAME JOB (PBM),'SOFTTEK',CLASS=C,MSGCLASS=C,MSGLEVEL=(1,1) //********************************************************************** //* CREACION DE ARCHIVO DE PRUEBA * //********************************************************************** //P01DE01 EXEC PGM=IEBGENER //SYSTSPRT DD SYSOUT=* //SYSPRINT DD SYSOUT=* //SYSOUT DD SYSOUT=* //SYSUT1 DD * ABC456789112DEF67892123456789312 //SYSUT2 DD DSN=ACCEN.NBAS.PRUEBA, // DCB=(RECFM=FB,LRECL=32,BLKSIZE=0), // DISP=(NEW,CATLG,DELETE) //SYSIN DD * /* A continuación se da una explicación más detallada sobre la formación que contiene de un componente JCL. • Sentencia JOB. Identifica el inicio del Job a ejecutarse. Formato: //Jobname JOB (cuenta),'user',parm1,parm2... Ejemplo: //CREAFILE JOB (ABC),'SOFTTEK',CLASS=C, // MSGCLASS=C,MSGLEVEL=(1,1), // REGION=4096K,NOTIFY=ESBS755, // COND=(0,LT) 56 El jobname(CREAFILE) indica el nombre que se asignará al JCL, puede tener una longitud máxima de 8 caracteres. La sentencia JOB Indica el inicio del Job a ser ejecutado, debe comenzar en la posición 12. Cuenta del JCL. Se debe indicar la cuenta (ABC) a la que es asignada el Job, ya que éste es utilizado para determinar el gasto de recursos que el Job necesita. Usuario del JOB. Máximo 20 caracteres. Puede ser especificado por la instalación. Parámetros de ejecución (parm1, parm2…): - CLASS=x. Indica la cola de ejecución a la cual será asignado el JOB. En caso de no ser indicada, se asigna la predeterminada por la instalación. Algunos valores asignados pueden ser: A – Impresora X – retener mensajes Z – no imprimir mensajes - MSGCLASS=x. Indica la cola de salida (x) a la cual se enviaran los mensajes que se generen durante la ejecución del JOB. - MSGLEVEL=(x,y). Controla la salida de las sentencias y mensajes de salida en el log. Indica la clase de ejecución a la cual se enviaran los mensajes que se generen durante la ejecución del JOB. Valores a asignar: x – Sentencias que se desplegarán en el log del JOB. y – Mensajes que serán desplegados en el JOB. Si esta sentencia es omitida se asigna un valor por default de la instalación. 57 - REGION=nnnn[K][M]. Especifica el máximo de memoria asignada a nivel de todo el JCL. Puede ser expresada en Kilobytes (K) o Megabytes (M). - NOTIFY=aaaaaaa. Específica el usuario de TSO (aaaaaaa) al que se notificará al terminar de ejecutarse el JOB. - COND=(n,a). Específica el código de retorno (n) y la condición (a) para que los pasos del JOB continúen ejecutándose. Condiciones de retorno : GT - Mayor que GE - Mayor o igual que LT - Menor que LE - Menor o igual que EQ - Igual a NE - Distinto de • Sentencia EXEC. Principio de cada paso e identifica el programa o procedimiento a ser ejecutado Formato: //stepname EXEC [PGM][PROC]=programa/procedimiento,parm1,parm2 Ejemplo: //P01DE01 EXEC PGM=BG3C3330,PARM='20010101',COND=(0,EQ) Inicia con el STEPNAME (P01DE01), el cual puede tener una longitud máxima de 8 caracteres. La sentencia EXEC debe iniciar en la posición 12, indica el inicio de cada paso. Se debe indicar si es un programa (PGM) el que se va a ejecutar. 58 Parámetros de ejecución a nivel de la sentencia EXEC. - PARM=valor. Permite informar valores al programa en ejecución. Pueden informarse hasta 100 caracteres como valores de un parámetro. Parámetros para un programa usando PARM DECLARACION EN PROGRAMA DECLARACION EN JCL ************************************************ PPrograma sin DB2 LINKAGE SECTION //P01DE01 EXEC ************************************************ PGM=BG4CINT0,PARM=‘9400MOV’,COND=(0,EQ) LINKAGE SECTION. PPrograma con DB2 01 REG-PARM. //SYSTSIN * 05 PARM-LONG PIC X(2). DSN SYSTEM(DB2D) 05 PARM-TAREA PIC X(4). RUN PROGRAM(BG4CINT0) PLAN(BVDBGPB) 05 PARM-ARCHIVO PIC X(3). PARM('9400MOV') *********************************************** * DD END PROCEDURE DIVISION *********************************************** PROCEDURE DIVISION USING REG-PARM. Tabla 5. Manejo de sentencia PARM - COND=(n,a,[EVEN/ONLY]). Realiza la misma función que en la sentencia JOB, con la diferencia que ésta sólo aplica a nivel de paso, y con algunas condiciones adicionales. Las condiciones: EVEN. Indica que el paso se ejecutará aún cuando algún paso anterior finalice anormalmente. ONLY. Indica que este paso se ejecutará si algún paso ha finalizado anormalmente. 59 • Sentencia DD. Define las entradas y salidas del proceso Formato: //ddname // DD DSN= ____,DISP=_____,UNIT=____, SPACE=_____,VOL=_____,DCB=_____ Ejemplo: //S1DQ4000 DD DSN=APHA.SBAS.DATA.HAQL090, // DISP=(NEW,CATLG,DELETE),UNIT=3390, // SPACE=(CYL,(10,10),RLSE),VOL=SER=SYSWK1, // DCB=(LRECL=137,RECFM=FB,BLKSIZE=1370) - El DDNAME (S1DQ4000) indica el nombre del paso, tiene una longitud máxima de 8 caracteres y éste nombre debe ser único por cada paso. - DD (Data Definition). Describe los archivos que requiere el programa a ser ejecutado. Debe iniciar en la posición 12, codificándose después del DDNAME. Posterior a su codificación, se asignan los parámetros opcionales necesarios para la definición del archivo. PROGRAMA COBOL. SELECT IN-FILE ASSIGN TO E1DQ0001 DEFINICION DE DD //E1DQ0001 DD DSN=ACCEN.SBAS.DATOS Imagen 13. Ejemplo de definición de archivo. 60 Parámetros de la sentencia DD - DSN=namefile. El namefile es el nombre con que el sistema debe localizar o alojar los archivos. Existen diferentes tipos de archivos, los más importantes son: Secuenciales, Particionados, Generacionales (GDG), VSAM, etc. Los nombres que son asignados generalmente a los diferentes tipos de archivos son: o Archivos secuenciales. Máximo 44 caracteres nombre.del.archivo o Archivos particionados. nombre.del.archivo(nom_elemento) o Archivos generacionales. nombre.del.archivo(num_generación) o Archivos temporales. &&nombre - DISP=(ind_1,ind_2,ind_3). El parámetro DISP, tiene tres funciones: El primer indicador nos dice la situación del archivo al inicio de la ejecución. El segundo indicador nos dice que acción se debe de tomar con el archivo si el paso termina correctamente. El tercer indicador nos dice que acción se debe de tomar con el archivo si el paso termina anormalmente. Las diferentes disposiciones de los archivos son: o NEW: El archivo es creado o OLD: El archivo ya existe y mientras se está utilizando ninguna otra tarea puede acceder a dicho archivo. o SHR: El archivo existe y además puede ser compartido. 61 o MOD: Si existe, ninguna otra tarea puede accederlo. En la adición de registros nuevos, obliga al sistema de I/O a posicionarse en el último registro que exista. Si el archivo no existe lo considera NEW. o DELETE: El archivo es borrado. o KEEP: Indica que el archivo debe mantenerse al final del paso. o PASS: Indica que el archivo se utilizará en los pasos posteriores. Se borra al terminar el job. o CATLG: El archivo se guarda y es catalogado. o UNCATLG: El archivo se guarda y no es catalogado. Reglas de uso para parámetros DISP: DISP DELETE KEEP PASS CATLG UNCATLG NEW OLD SHR MOD DELETE KEEP PASS CATLG UNCATLG Imagen 14. Uso de parametros de la sentencia DISP o Si el primer parámetro no es codificado se asume NEW. o Si el segundo parámetro no es codificado se asume DELETE, si en el primer parámetro se informa NEW. o Si el segundo parámetro no es codificado se asume KEEP, sólo si en el primer parámetro se informa OLD. o El tercer parámetro siempre debe ser codificado. 62 - UNIT=[address/type][TAPE][SYSDA]. Especifica un dispositivo de entrada o salida, ya sea a unidad de cinta o disco, volumen o un grupo de discos designados por la instalación (generalmente SYSDA o 3390). - SPACE=([CYL][TRK][nnnn],(ext_primaria,ext_secundaria,[miembros]),[RLSE]). Indica el espacio que debe reservarse en disco para almacenar los datos del archivo. Sólo debe indicarse cuando el archivo es nuevo. Las unidades en las que se mide el espacio son: Cilindros (CYL), Tracks (TRK) o longitud del bloque(nnnn). o El primer subparámetro (extensión primaria), indica el espacio que se reservará para el archivo al momento de crearlo. o El segundo subparámetro (extensión secundaria) es la cantidad de espacio a añadir cada vez que el archivo se llene. Se pueden añadir hasta 15 extensiones secundarias. o El tercer subparámetro (directorio), es principalmente para indicar el espacio a reservar para los miembros a alojar en caso de tratarse de un archivo particionado. o RLSE, indica que al final de la ejecución se libere el espacio no usado por el archivo alojado. - VOL, se utiliza para identificar el disco en el que se encuentra el archivo. Para archivos catalogados no es necesario se codifique esta sentencia. SER, indica el número de serie del disco. Normalmente, tiene el mismo valor que el volumen. Formato: VOL=disco ó VOL=SER=disco. 63 - Data Control Block (DCB). Indica las características de los registros del archivo. La sentencia DCB, puede ser omitida y especificar únicamente los subparámetros de ésta (LREC,RECFM,BLKSIZE). Formato: DCB=(LRECL=__,RECFM=__,BLKSIZE=__) ó LRECL=__,RECFM=__,BLKSIZE=__ LRECL=nnnn. Especifica la longitud del registro. RECFM=nnnn. Indica el formato del bloqueo: o F – Fija FB – Fija bloqueada o V – Variable VB – Variable bloqueado o U - Indefinida FBA – Fijo bloqueado con caracteres ASA BLKSIZE=nnnn. Indica la longitud del bloque. Se calcula multiplicando la longitud del registro por el número de registros contenidos en un bloque. Si el blocksize es omitido o se le asigna el valor 0, el sistema lo calcula. En los sistemas actuales se recomienda informarlo con valor 0 (BLKSIZE=0). UTILERÍAS JCL Las utilerías permiten realizar operaciones con archivos sin tener que codificar un programa. Las principales utilerías usadas son: DFSORT. Esta utilería es usada principalmente para llevar a cabo la organización de los datos contenidos en un archivo. Va a continuación de la sentencia EXEC. EJEMPLO: //ORDENAR EXEC PGM=SORT //SYSOUT DD SYSOUT=* //SYSIN DD * SORT FIELDS=(1,5,CH,A,7,8,CH,D) 64 INCLUDE COND=(1,5,CH,EQ,C'LOPEZ') SUM FIELDS=(14,9,PD) OUTREC FIELDS=(1,100) //SORTIN DD DSN=... //SORTOUT DD DSN=... //SORTWKnn DD UNIT=SYSDA,SPACE=(CYL,1,1)) Las funciones principales de esta utilería son: Ordenación de registros de un archivo Fusión de dos archivos en uno Copia de archivos Eliminación de registros de un archivo Reformateo de registros de un archivo Acumulación de valores de los registros de un archivo. IDCAMS. Es una utilería para gestionar archivos VSAM (Virtual Storage Access Method), aunque también puede ser usada para archivos secuenciales. Un VSAM es un método de acceso a los datos almacenados en un dispositivo de acceso directo. Debe codificarse después de la sentencia EXEC como PGM=IDCAMS. EJEMPLO: //stepname EXEC PGM=IDCAMS //SYSPRINT DD SYSOUT=* //SYSIN DD * ... ... /* 65 Sus funciones principales son: Definir y borrar un archivo VSAM Copiar de un archivo a otro Construir índices alternativos Listar catálogos Imprimir archivos Transferir archivos de un sistema a otro IEBCOPY. Es una utilería que permite copiar archivos, principalmente particionados. Debe codificarse después de la sentencia EXEC como PGM=IEBCOPY. EJEMPLO: //stepname EXEC PGM=IEBCOPY //SYSPRINT DD SYSOUT=* //namefile1 DD DSN=... //namefile2 DD DSN=... //SYSIN DD * ... /* Las funciones principales que tiene asociadas esta utilería son: Copiar miembros de un archivo particionado Copiar un archivo particionado Sobre otro particionado Sobre un secuencial Reemplazar miembros de un particionado. 66 IEBGENER. Es una utilería orientada al tratamiento de archivos secuenciales, pero también puede ser usada para archivos particionados. Debe codificarse después de la sentencia EXEC como PGM=IEBGENER. EJEMPLO: //stepname EXEC PGM=IEBGENER //SYSPRINT DD SYSOUT=* //SYSUT1 DD DSN=... //SYSUT2 DD DSN=... //SYSIN DD DUMMY /* Las funciones principales que tiene asociadas esta utilería son: Crear una copia de un archivo secuencial o crear una copia de un miembro en un archivo particionado Crear un archivo particionado o un miembro a partir de un secuencial Cambiar el blocaje de un archivo TIPOS DE ARCHIVOS ARCHIVOS SECUENCIALES. MÁXIMO 44 CARACTERES Los registros sólo pueden ser procesados en forma secuencial desde el inicio del archivo. Se pueden agregar registros sólo al final del archivo y no entre ds registros ya existentes. 67 Pueden ser almacenados en cualquier tipo de dispositivo (disco, cinta, cartucho, etc). Un archivo puede ser almacenado en varios volúmenes. ARCHIVOS PARTICIONADOS (PDS). Es un conjunto de registros llamados miembros que son escritos en forma secuencial, y registrados con un nombre en el directorio del archivo. Tal directorio es un índice que es usado para localizar un miembro dentro de un PDS, los nombres en el directorio son almacenados en orden secuencial ascendente. Un PDS es comúnmente conocido como Librería o Biblioteca y es almacenado en un solo volumen (DASD – Direct Access Storage Device). ARCHIVOS GENERACIONALES. Un Generational Data Group(GDG), cronológicamente o es un grupo de archivos relacionados funcionalmente. Cada archivo que depende de un GDG es llamado generación. Se utilizan para almacenar diferentes versiones de un solo archivo. EJEMPLO: Nombre lógico Nombre Físico Referencia SALDOS.CTAS(0) SALDOS.CTAS.G0003V00 Última generación SALDOS.CTAS(-1) SALDOS.CTAS.G0002V00 Penúltima generación SALDOS.CTAS(-2) SALDOS.CTAS.G0001V00 Ante-penúltima generación Tabla 6. Ejemplo de versiones de un archivo GDG 68 Dependiendo del número de versiones que sean definidas para el GDG, se deberá hacer referencia a las versiones anteriores con –n, es decir, -1,-2,-3,-4, etc. y a la última generación se le asignará el valor 0. NOTA: El máximo de generaciones permitidas es de 255. ARCHIVOS VSAM. Los archivos VSAM pueden clasificarse de la siguiente forma: ESDS (Entry Sequenced Data Storage): Los registros son almacenados y recuperados en el mismo orden en el que se graban. Sus características son: o No tienen índices ni claves o Los registros se añaden al final del archivo o Sólo pueden ser accedidos en forma secuencial o Son similares a los archivos secuenciales, pero no pueden grabarse en cinta KSDS (Key Sequenced Data Storage): Los registros se recuperan en el orden de un campo definido como clave. Son los más usados. Sus características son: o Necesitan una clave, que debe ser única, para identificar el registro. o La clave se utiliza para insertar el registro en el archivo y recuperarlo después. o Admite claves alternativas (secundarias), no únicas o Admite acceso directo (por clave) o secuencial RRDS (Relative Record Data Storage): Los registros se almacenan en el orden dado por un número de secuencia. Sus características son: o No tienen índices ni claves. o Los registros se añaden según un número asignado de 1 a n, siendo n el número máximo de registros del archivo. 69 o Este número puede ser asignado por el programa del usuario o por el sistema. o Admite acceso directo (por número) o secuencial. DB2 (DATA BASE II) Es una marca comercial, propiedad de IBM, bajo la cual se comercializa un sistema de gestión de base de datos. DB2 versión 9 es un motor de base de datos relacional que integra XML de manera nativa, lo que IBM ha llamado pureXML, que permite almacenar documentos completos dentro del tipo de datos XML para realizar operaciones y búsquedas de manera jerárquica dentro de éste, e integrarlo con búsquedas relacionales. Es una herramienta usada en las DBMS (Sistemas Manejadores de Bases de Datos), corre bajo el sistema operativo MVS de IBM. CARACTERÍSTICAS DE DB2 Utiliza lenguaje SQL (Structure Query Language), para acceder a los datos. En este lenguaje se distinguen dos sublenguajes: Data Definition Language (DDL). Provee la definición o descripción de las tablas de las bases de datos. Manipula la estructura de las tablas. Data Manipulation Language (DML). Realiza la manipulación o procesamiento de las tablas. Permite el acceso, actualización y mantenimiento de los datos. TABLAS Los datos en las bases de datos DB2 están disponibles para un programa de aplicación como un conjunto de tablas. Las tablas son estructuradas en datos de dos dimensiones, compuestas de FILAS y COLUMNAS. 70 El nombre de una tabla está formado por un identificador de la persona que creó la tabla, y de un nombre descriptivo de esta, separados por punto (OWNER.NTABLA). TIPOS DE DATOS Los tipos de datos que puede contener una columna de una tabla son: - - - Cadenas de caracteres EBCDIC: CHAR Cadenas de longitud fija VARCHAR Cadenas de longitud variable Datos numéricos: SMALLINT Enteros binarios de media palabra INTEGER Enteros binarios de una palabra DECIMAL Números decimales FLOAT Números de coma flotante Cadenas de caracteres gráficos: GRAFHIC DBCS (Double Byte Character Data) de longitude VARGRAPHIC DBCS de longitud variable ÍNDICES El DB2 proporciona un mecanismo de acceso a tablas, acceso directo mediante índices. El índice debe ser único. Están basados en los valores de los datos de una o más columnas, y son mantenidos automáticamente por el DB2 cuando se produce un cambio en los datos contenidos en la tabla. Un programa no se refiere a los índices, sino que el DB2 selecciona el índice para acceder a los datos que el programa requiere. 71 El índice de una base de datos es una estructura de datos que mejora la velocidad de las operaciones, permitiendo un rápido acceso a los registros de una tabla en una base de datos. Al aumentar drásticamente la velocidad de acceso, se suelen usar sobre aquellos campos sobre los cuales se hacen frecuentes búsquedas. El índice tiene un funcionamiento similar al índice de un libro, guardando parejas de elementos: el elemento que se desea indexar y su posición en la base de datos. Para buscar un elemento que esté indexado, sólo hay que buscar en el índice dicho elemento para, una vez encontrado, devolver el registro que se encuentre en la posición marcada por el índice. A continuación un ejemplo de cómo se barre una tabla con índices en un programa COBOL: PERFORM VARYING INDICE-X FROM 1 BY 1 UNTIL INDICE-X > 100 CARGA-TABLA-CONTRATOS Descripción: se realiza la carga de los primeros 100 registros de la tabla de contratos. SQL (LENGUAJE DE CONSULTA ESTRUCTURADO) El lenguaje de consulta estructurado (SQL) Es un lenguaje de manipulación de datos, el cual al ser utilizado en combinación con un manejador de base de datos permite acceder y manipular datos, así como definir datos (DB2). Los datos contenidos en las tablas de la Base de datos son accedidos a través de QUERIES, que son sentencias casi en lenguaje inglés. En la imagen 15 se observa claramente la relación entre una terminal, el DB2 y los comandos SQL los cuales permiten el acceso a las tablas solicitadas y devuelven un resultado como respuesta a la terminal que hizo la petición. 72 COMANDOS SQL DB2 TABLA 1 TABLA 2 TABLA 3 TABLAS Imagen 15. Relación DB2, SQL y Terminal COMPONENTES DEL SQL El lenguaje SQL está compuesto por comandos, cláusulas, operadores y funciones de agregado. Estos elementos se combinan en las instrucciones para crear, actualizar y manipular las bases de datos. COMANDOS Existen dos tipos de comandos SQL: - Los DLL que permiten crear y definir nuevas bases de datos, campos e índices. - Los DML que permiten generar consultas para ordenar, filtrar y extraer datos de la base de datos. Tabla 7.Comandos DLL Comando Descripción CREATE Utilizado para crear nuevas tablas, campos e índices DROP Empleado para eliminar tablas e índices 73 Utilizado para modificar las tablas agregando campos o cambiando la ALTER definición de los campos. Tabla 8. Comandos DML. Comando Descripción Utilizado para consultar registros de la base de datos que satisfagan un SELECT criterio determinado Utilizado para cargar lotes de datos en la base de datos en una única INSERT operación. UPDATE Utilizado para modificar los valores de los campos y registros especificados DELETE Utilizado para eliminar registros de una tabla de una base de datos CLÁUSULAS Las cláusulas son condiciones de modificación utilizadas para definir los datos que desea seleccionar o manipular. Tabla 9. Cláusulas de SQL. Cláusula Descripción Utilizada para especificar la tabla de la cual se van a seleccionar los FROM registros 74 Utilizada para especificar las condiciones que deben reunir los registros que WHERE se van a seleccionar GROUP Utilizada para separar los registros seleccionados en grupos específicos BY HAVING Utilizada para expresar la condición que debe satisfacer cada grupo ORDER Utilizada para ordenar los registros seleccionados de acuerdo con un orden BY específico Tabla 10. Operadores lógicos. O Operador Uso Es el "y" lógico. Evalua dos condiciones y devuelve un valor de verdad sólo AND si ambas son ciertas. Es el "o" lógico. Evalúa dos condiciones y devuelve un valor de verdar si OR alguna de las dos es cierta. NOT Negación lógica. Devuelve el valor contrario de la expresión. Tabla 11. Operadores de comparación. Operador < Uso Menor que 75 > Mayor que <> Distinto de <= Menor ó Igual que = Mayor ó Igual que = Igual que BETWEEN Utilizado para especificar un intervalo de valores. LIKE Utilizado en la comparación de un modelo Utilizado para especificar registros de una base de datos In FUNCIONES DE AGREGADO Las funciones de agregado se usan dentro de una cláusula SELECT en grupos de registros para devolver un único valor que se aplica a un grupo de registros. Tabla 12. Funciones SQL de agregado. Función Descripción Utilizada para calcular el promedio de los valores de un campo determinado AVG COUNT Utilizada para devolver el número de registros de la selección SUM Utilizada para devolver la suma de todos los valores de un campo 76 determinado MAX Utilizada para devolver el valor más alto de un campo especificado MIN Utilizada para devolver el valor más bajo de un campo especificado USO DE SQL EN UN PROGRAMA COBOL Dentro de un programa COBOL Las sentencias SQL son precedidas por: EXEC SQL que indica el inicio de la sentencia SQL END-EXEC que indica el final de la sentencia SQL La sintaxis de estas sentencias debe ser codificada al inicio y al final de cada sentencia SQL entre las columnas 12 y 72 del programa COBOL y deben terminar con un punto, a menos que esté contenida dentro de una estructura IF. EJEMPLO: EXEC SQL SELECT * INTO :VARIABLE-EMP FROM EMPLEADOS END-EXEC. VARIABLES HOST Son los campos declarados en la WORKING-STORAGE que permiten comunicarse a COBOL y SQL. Estos campos pueden ser usados directamente entre los dos lenguajes. Las variables Host pueden ser usadas para: • Para realizar INSERT, UPDATE, DELETE de columnas. • Recibir valores de columnas. 77 • Pueden ser usadas en cláusulas WHERE. Ejemplo del uso y declaración de variables Host se puede visualizar en las siguientes Tablas (13 y 14). WORKING-STORAGE SECTION. EXEC SQL SELECT EMP_NOMBRE, EMP_ID, EMP_SALARIO, EMP_COMM INTO :HOST-NOMBRE, :HOST-ID, :HOST-SALARIO, :HOST-COM FROM EMPLEADOS WHERE EMP_NOMBRE = :WS-NOMBRE END-EXEC. 01 CAMPOS-WORK. 05 WS-HOST-VARIABLES. 10 HOST-NOMBRE PIC X(30). 10 HOST-ID PIC X(08). 10 HOST-SALARIO PIC S9(6)V9(2) COMP-3. 10 HOST-COM PIC S9(6)V9(2) COMP-3. Tabla 13. Ejemplo de comunicación entre COBOL y SQL por medio de variables HOST. TABLA EMPLEADOS: EMP_ NOMBRE EMP_ID EMP_SALARIO EMP_COMM JONES 12345678 90,000.00 9,000.00 Tabla 14. Relación entre variables host y campos de una tabla. REGLAS PARA EL USO DE VARIABLES HOST No necesariamente deben ser iguales a los nombres de las columnas. Deben ser definidas en la Working Storage. Cuando son usadas en una sentencia SQL deben ser precedidas por ‘:’. La definición de las variables host debe coincidir con cada una de las columnas definidas en la tabla. La estructura de las variables host sólo pueden contener como máximo un subnivel. 78 La longitud y tipo definidos para las variables Host, debe ser idéntica a la definición de las columnas de la tabla DB2. EJEMPLOS DE MODIFICACIÓN DE TABLAS EN COBOL CON SQL Inserción de registros en una tabla. EXEC SQL INSERT INTO nombre-tabla VALUES (:variable-host1, :variable-host2) END-EXEC Actualización de registros en una tabla. EXEC SQL UPDATE nombre-tabla SET columna1 = :variable-host1, columna2 = :variable-host2 WHERE condición END-EXEC Eliminación de registros en una tabla. EXEC SQL DELETE FROM nombre-tabla WHERE condición END-EXEC ESTÁNDARES DE PROGRAMACIÓN SQL Utilización de Data Definition Leguaje (DDL). La definición y creación de tablas, índices, etc., son responsabilidad del Administrador de Base de Datos. En la manipulación de datos (DML) se deben seguir los siguientes estándares: 79 Codificar las sentencias SQL en el programa COBOL, entre las columnas 12 y 72. Poner punto al final de la sentencia SQL (EXEC SQL y END-EXEC). Si la sentencia SQL se encuentra dentro de un IF no se pondrá punto en la sentencia END-EXEC. Utilizar una sangría de 4 caracteres a la derecha del EXEC SQL. Alinear todos los verbos SQL y cláusulas. Evitar el uso de predicados complejos ‘OR’. Especificar las columnas que sean requeridas únicamente. 80 CAPÍTULO 3. OUTSOURCING E INSTITUCIÓN FINANCIERA VALORES CORPORATIVOS SOFTTEK S. A. DE C. V. RESEÑA HISTÓRICA10 Fundada en 1982, es un proveedor global de servicios orientados a procesos de TI con 30 oficinas en Norteamérica, Latinoamérica, Europa y Asia. Con nueve Centros de Desarrollo Global en México, China, Brasil, Argentina y España. Softtek mejora el tiempo de entrega de soluciones de negocio, reduce costo de las aplicaciones existentes, entrega aplicaciones mejor diseñadas y probadas, y produce resultados predecibles para grandes empresas en más de 20 países. A través de modelos de servicios de entrega On-Site, On-Shore y su marca registrada Global Nearshore™, Softtek ayuda a los CIO’s a incrementar el alineamiento con el negocio. Softtek es el creador y líder de la industria Nearshore. El termino Nearshore fue implementado por la empresa a partir de 1997 con sus primeros clientes en Estados Unidos. Está propuesta otorga los siguientes beneficios al cliente: Proximidad y misma zona horaria Compatibilidad cultural y facilidad para hacer negocios Ahorros en costos La empresa no solo invierte en impulsar a las nuevas generaciones a adentrarse al mundo de las tecnologías de información creando academias para que los egresados de las carreras de informática y afines tengan su primer oportunidad de empleo; también es una empresa socialmente responsable que apoya cualquier movimiento altruista además de fundar 10 Página oficial Valores Corporativos Softtek S.A. de C.V. 2014, http://www.softtek.com/mexico. 81 cánones de acción en sus colaboradores los cuales son básicamente valores que rigen a la organización, tales como la apertura, la autodeterminación, el compromiso, la confianza, el respeto, entre muchos más. Todo esto convierte a Softtek en una de las mejores empresas en el ramo y una gran oportunidad para hacer una carrera dentro de esta institución. DESARROLLO DEL CAPITAL HUMANO Para Softtek, desde siempre ha sido una prioridad contar con personas capaces pero sobretodo que estén a gusto con las labores que desempeñan día tras día, es por ello que ha buscado la forma de fecundar en cada uno de los que colaboramos con la empresa cánones de acción que nos permitan desarrollarnos como personas y como profesionistas, aunado a esto es importante que adquiramos el conocimiento necesario para llevar a cabo dichas labores, y a su vez que aprendamos a aplicar lo que sabemos. Es por ello que Softtek se ha dado la tarea de instruir constantemente a su personal, en mi caso particular a continuación narrare el proceso de capacitación que me formo como programador. CAPACITACIÓN Posterior a mi egreso de la Facultad de Estudios superiores Cuautitlán ingrese, gracias a las publicaciones de la bolsa de trabajo de la Licenciatura en Informática, al proceso de selección de personal para iniciar mi formación como Programador de Software en COBOL. Para obtener un lugar dentro de la Academia de COBOL 2012 se presenta un examen de lógica, el cual contiene ejercicios sobre sucesiones matemáticas y problemas similares a los siguientes: en un rango del 1 al 100 obtener la suma de los números primos, debe realizarse el diagrama de flujo que da solución al problema. Cabe mencionar que gracias al conocimiento 82 que adquirí en temas como diagramación y lógica en mis años de instrucción dentro de la facultad me fue sencillo resolver cada problema, dando como resultado una calificación satisfactoria y la oportunidad de ingresar a la academia. La capacitación consta de 5 semanas abordando temas como Programación Estructurada la cual nos ayuda a realizar un mejor análisis y desarrollo de diagramas de flujo y así obtener un programa con cero defectos; DB2 (sistema de gestión de base de datos), SQL (lenguaje de consulta estructurado) y JCL (Lenguaje de Control de Trabajos) los cuales como ya sabemos se relacionan con el desarrollo de programas en COBOL. Una vez contemplados los tópicos necesarios para programar en COBOL entramos en materia y realizamos las siguientes prácticas: Programa que lee un archivo de entrada y realiza un reporte de empleados por planta. Programa que lee 2 archivos de entrada y realiza un match de dichos archivos obteniendo un reporte de empleados por planta. Programa que lee un archivo y realiza un reporte de empleados, por planta, banco y número de cuenta. Enfatizando sobre el desarrollo de programas para Entidades Financieras, tema que trataremos más adelante, en su mayoría se solicita la realización de reportes para tener un control de las transacciones que los cuentahabientes ejecutan día con día, por esto los ejercicios efectuados en la academia se enfocan a ello. El objetivo de la academia es proveernos de los conocimientos necesarios para enfrentarnos a solicitudes de nuestro usuario, que para el caso que tratamos sería cualquier institución bancaria. 83 En cuanto termina el período de capacitación y se obtiene el resultado de las evaluaciones se encuentran dentro del porcentaje solicitado somos asignados a Fábrica de Software. FABRICA DE SOFTWARE El trabajo en factoría o Fabrica de Software (FSW) está estrechamente ligado al de Diseño y Desarrollo (D&D) dentro de las instalaciones del Cliente (El Banco), tema sobre el cual hablaremos más adelante. Como paso consecutivo a la capacitación el colaborador es asignado como Programador dentro de la FSW para realizar la Atención de Requerimientos provenientes del Área de D&D del respectivo cliente . La fábrica de software se encuentra dividida en Equipos de Trabajo conformados por programadores quienes son dirigidos por un Líder quien es encaminado por un Delivery Manager que se mantiene en contacto directo con el Infiltrado, este es la persona encargada del contacto con el D&D del Banco para recibir las especificaciones relacionadas a un determinado proyecto. En resumen el camino correcto que se sigue para atender un requerimiento es el que se enlista a continuación y del cual puede visualizarse con mayor detalle la relación entre una institución bancaria y el outsourcing en la Imagen 16: 1.- El usuario de negocio (Persona Interna del Banco) tiene una necesidad en relación a mejorar algún proceso o la creación de uno nuevo, 2.- El usuario de negocio da a conocer al Business Project (BP) o Socio de Negocio dicha necesidad, y este recrea la información del usuario y se la hace saber al D&D 84 3.- El D&D se encarga de realizar el análisis de dicha petición para redactar los documentos necesarios que serán enviados por medio del Gestor de Factorías a la Fábrica de Software que atenderá la petición. 4.- Una vez seleccionada la FSW el D&D se mantiene en contacto con el Infiltrado que pertenece a la factoría en cuestión y le envía la solicitud de atención de requerimientos para que sea llevada a cabo. INSTITUCIÓN BANCARIA OUTSOURCING GESTOR DE FSW LÍDER EQUIPO DE PROGRAMADORES BD ÁREA D&D METODOLOGÍAS, ESTÁNDARES Y PROCESOS DE DESARROLLO DEL CLIENTE METODOLOGÍAS Y PROCESOS DE DESARROLLO DE LA CONSULTORA Imagen 16. Modelo de relación entre FSW e Institución Bancaria. La asignación dentro de la Fábrica de Software tiene una duración aproximada de 3 a 4 meses, durante los cuales realice las siguientes actividades: Modificar líneas de código en un JCL Inhibir líneas de código en un programa COBOL Realizar un programa COBOL que genere un reporte. 85 Las 2 primeras se trataron de modificaciones sencillas ya que los D&D envían el código tal y como desean sea agregado, inhibido o modificado, por lo que los programadores debemos efectuar es el análisis de impacto que conlleva el cumplir con las modificaciones requeridas e informar si existe alguna afectación negativa al componente. En el caso del programa que genera un reporte el proceso es más delicado, ya que se debe seguir una serie de pasos para realizarlo: análisis, diseño, construcción y pruebas para que este cumpla con las expectativas del cliente. Una vez que finaliza la atención del requerimiento ya sean modificaciones, componentes nuevos, etc., se realizan pruebas solo en los casos en que sean solicitadas por el D&D y se envían evidencias de ellas, los códigos de programa y los documentos que avalan el cierre de la solicitud. SERVICIOS QUE OFRECE Softtek ofrece: - SERVICIOS Servicios Relacionados a Aplicaciones BPO Soporte de Infraestructura de TI Productos de Software y servicios relacionados 86 PRINCIPALES COMPETIDORES Hoy en día el mercado de los servicios y consultoría IT se ha incrementado. De acuerdo a un estudio realizado; en 2010 este sector amplio su tamaño un 9.3%; en 2011 lo hizo un 9.8% y, para finales de ese año se estima que hubo un aumento del 12%11. De acuerdo con la Encuesta Anual de Consultoría IT 2012, conducida por Netmedia Research, las empresas de IT a las que las organizaciones recurren en mayor medida para contratar todo tipo de servicios de consultoría son Ernst & Young, Deloite, Neoris, IBM Global Services, PricewaterhouseCoopers, Gartner y Accenture (en ese orden). En relación a las encuestas realizadas por Select, la consultoría es el segmento con mayor demanda, por los beneficios que presenta al convertirse en valor agregado y generador de ganancias para los proveedores. No sin antes tomar en cuenta que, dichas consultorías deben ofrecer: calidad de excelencia en el servicio y especialización en las prácticas que ofrecen. El porcentaje de empresa que contratarían este servicio se logra apreciar en la siguiente imagen. Imagen 17. La gráfica representa el porcentaje de empresas que contratarían consultoría en el año. 11 Fabiola González, “Es el año de la especialización”, 2012. 87 Francisco Leyva, Director de Diseño y Desarrollo de BBVA Bancomer12, comenta que, el mercado de consultoría IT en México ha forzado mucho los precios y con ello se redujo la calidad del servicio. La institución bancaria cuenta con 4 pilares en consultoría IT dedicadas al área de Diseño y Desarrollo, las cuales son: Accenture, Everis, Hildebrando y Softtek. Por el momento cabe mencionar que, al analizar el nivel de servicio recibido, Leyva considera que Accenture se destaca por su capacidad para ejecutar; Softtek e Hildebrando sobresalen por su habilidad para proveer recursos con mucha oportunidad, y Everis se diferencia por brindar una aproximación más cercana al cliente. Prosigue, una de las grandes áreas de oportunidad es la especialización: “Las consultoras se han empezado a querer meter en todo; no percibo una diferenciación clara”, expone. La Encuesta Anual de Consultoría IT 2012 también calificó, en niveles de “muy malo” a “muy bueno” (de 1 a 5 puntos), el servicio recibido en diversos temas, como apego al alcance del proyecto, manejo de presupuestos o satisfacción de los usuarios. Si bien las 15 compañías evaluadas se ubican en la media de entre 3 y 4.5 puntos de calificación, destaca el hecho de que el compromiso de puntualidad en la entrega de servicios fue el que más bajo promedio obtuvo. Coca Cola FEMSA actualmente prefiere apoyarse en los servicios de consultoría internos de proveedores de software y redes con que sostiene su infraestructura IT, como SAP y Cisco, o bien en casas de consultoría más económicas, como es el caso de Hasar, Logos o Disa (para elementos commodity, como la implementación). 12 Fabiola González, “Es el año de la especialización”, 2012. 88 Este resultado se obtiene solicitando al mercado elegir, entre un listado de 15 organizaciones del rubro de los servicios y consultoría IT, la primera, segunda y tercera compañía que, en su caso particular, elegirían como las principales, las 3 mejores consultoras que se eligieron se muestran en la imagen 18. El resultado surge de la asignación de valores a cada una de las firmas consultoras, dependiendo su posición y el número de veces que fueron mencionadas. 13 Imagen 18. Dentro del mismo estudio se definió el top de las 3 mejores consultoras, y este fue el resultado. En resumen, para que una consultoría IT figure entre las más destacadas para las organizaciones que requieren de este servicio, debe cumplir con parámetros como: apego al alcance del proyecto, administración de cambios a lo largo del mismo, asignar recursos de acuerdo a lo contratado, compromiso de puntualidad en la entrega, satisfacción de los usuarios y manejo de presupuesto entre otros. Softtek, Servicios Corporativos, S. A. de C. V. se reconoce por ofrecer un servicio de calidad y mejora para el cliente. Terminal en línea 13 Fabiola González, “Es el año de la especialización”, 2012. 89 DESARROLLO DE ACTIVIDADES EN LA ENTIDAD BANCARIA ÁREA DE DISEÑO Y DESARROLLO Una institución financiera se apoya del Outsourcing para atender diversas actividades dentro del comercio, para nuestro caso en particular existe el Área de Diseño y Desarrollo la cual desarrolla las siguientes actividades: - Proporciona soluciones y servicios de información con calidad y seguridad a los clientes apoyando las estrategias de la Corporación. - Contribuye a la obtención de rendimiento atractivo para los accionistas a través de la utilización de tecnología adecuada y oportuna, en forma eficaz, apoyando así el desarrollo económico de la comunidad. En resumen, el área de diseño y desarrollo, como su nombre lo indica, desarrolla soluciones aplicativas que permiten al cliente participar en cualquier negocio, sin restricciones, con la mejor oportunidad, calidad y mejor coste de todo el mercado. El siguiente organigrama permite identificar el lugar que ocupa el área de D&D dentro de un institución bancaria. 90 ORGANIGRAMA DEL ÁREA DE DISEÑO Y DESARROLLO ÁREA D&D BANCO DIRECCIÓN D&D CANALES DIRECCIÓN D&D MEDIOS DE PAGO DIRECCIÓN INFRAESTRUC TURA DIRECCIÓN AFILIACIÓN DIRECCIÓN PROYECTOS Esta es, a grandes rasgos, la distribución del área, sin embargo la dirección de nuestro interés, debido a que en ella me encuentro laborando, es la Dirección Diseño y Desarrollo Medios de Pago. MEDIOS DE PAGO Diariamente los clientes de cualquier institución financiera realizan millones de transacciones por segundo, por ende se manejan grandes cantidades de datos en un lapso tan corto, lo que con nos lleva a mencionar que; aún a pesar del uso de nuevas tecnologías y lenguajes de programación (podríamos llamarlos modernos o nuevos) como JAVA para el desarrollo de programas que sean capaces de realizar estos procesos de forma “rápida”; hoy en día el COBOL se sigue utilizando como motor para el desarrollo de dichas aplicaciones 91 gracias a los beneficios que ofrece, los cuales se han mencionado en apartados anteriores acerca del leguaje COBOL. Cuando nos referimos a transacciones estas pueden ser: pagos en ventanilla, compras con tarjeta de débito o de crédito, devoluciones de compra, aclaraciones a solicitud del cliente, operaciones por medios móviles, online o ventanillas; justamente la Dirección de Medios de Pago es la encargada de controlar el flujo de información que se ejecuta cada que un cliente lleva a cabo una operación. El siguiente organigrama hace mención de la subdirección de tarjetas de crédito específicamente ya que es una de las divisiones que tiene actualmente medios de pago y la cual es el área en donde ejerzo labor actualmente. ORGANIGRAMA DIRECCIÓN D&D MEDIOS DE PAGO SUBDIRECCIÓN COMERCIOS SUBDIRECCIÓN FACTURACIÓN SUBDIRECCIÓN PRODUCTOS 92 SUBDIRECCIÓN TDC FUNCIONES COMO D&D Como D&D dentro de la Dirección Medios de Pago mis funciones han sido: desarrollar nuevos proyectos y atención de incidentes que se presentan como resultado de una falla en algún proceso. DESARROLLO DE PROYECTOS Para el desarrollo de nuevos proyectos se requiere en primera instancia que surja la necesidad de mejorar (modificar) algún proceso existente o implementar uno nuevo, para tales casos existe un proceso, es decir, una serie de pasos a seguir para obtener un resultado satisfactorio. GESTIÓN DE INICIATIVAS En primera instancia el usuario o cliente (Ejecutivo) debe enviar el requerimiento de lo que desea que se realice al BP quien se encarga de interpretar la petición del usuario y enviar como respuesta un documento denominado Modelo de Solución que como su nombre lo dice detalla la solución al problema y ofrece un plan de trabajo donde se desglosan las actividades a realizar y el tiempo que tomara cada una en llevarse a cabo. Una vez que el usuario aprueba la solución se envía la documentación al Área de Diseño y Desarrollo encargada para que revise el Modelo de Solución y el Plan de Trabajo, posteriormente dicha área devuelve el documento aprobatorio, realiza la petición de la Fábrica de Software que atenderá el requerimiento y comienza la siguiente fase del proyecto. ANÁLISIS En base a la solución ofrecida por el BP, nosotros como D&D debemos analizar los requisitos especificados como: el flujo de información del proceso, el impacto hacia otros componentes, accesos a Bases de Datos, archivos de entrada y salida necesarios para su 93 ejecución, horarios de ejecución, si se trata de un nuevo proceso incluso pueden existir componentes con un funcionamiento similar y es recomendable tomarlos como base para evitar retrabajo, es lo que llamamos reutilización de código. Cuando hablamos de una modificación a algún proceso debe tomarse en cuenta la afectación que provocará cambiar ciertas líneas de código, longitud de archivos, accesos a Tablas, etc. A su vez dentro de esta fase se definen: componentes, interfaz de usuario (si el proceso es Batch o Línea), Bases de datos (accesos o nuevas tablas), planeación y diseño de pruebas, y plan de instalación. DISEÑO Posteriormente comienza la fase de diseño donde se realiza justamente el diseño de las estructuras de control o diagramas de flujo del programa nuevo o la narración de la modificación. Es decir, en este punto se realizan los documentos que detallan los requisitos de modificación o de desarrollo de un nuevo programa, se debe tomar en cuenta que al escribir dicho documento no se utilizará de ninguna forma código. Ejemplo de solicitud de un párrafo dentro de un programa nuevo sería: Párrafo Inicio. En este párrafo se realiza la inicialización de variables y apertura de archivos de entrada y salida. Ejemplo de solicitud de modificación: Dentro del párrafo Proceso-Especifico, eliminar la inicialización de la variable FECHA-OPERA. A su vez inhibir la definición de dicha variable. Los programadores deben tener el conocimiento necesario para interpretar estas especificaciones a código COBOL. 94 CONSTRUCCIÓN En cuanto una vez aprobadas las fases de análisis y diseño, el plan de trabajo y de instalación, el Gestor de Factoría elije la Fábrica de Software (FSW) que deberá atender el requerimiento. Es aquí donde el área de Diseño y Desarrollo se pone en contacto con el Infiltrado o Facilitador, quien es el intermediario entre D&D y FSW, y por medio de él envía el catálogo de requisitos para la construcción de componentes o su respectiva modificación. PRUEBAS En cuanto la factoría termina la construcción de componentes, son entregados al Área de D&D para su revisión y aprobación. Posterior a ello, el D&D lleva a cabo las pruebas necesarias para verificar y validar el correcto funcionamiento de los programas, que estos cumplan con el objetivo para el que fueron creados o modificados y a su vez comprobar que no existe afectación alguna para con otros procesos de los cuales pudieran existir dependencias. La ejecución de las pruebas sirven para asegurar el funcionamiento de cada uno de los componentes y deben respaldarse las evidencias de ellas: En tablas, archivos, pantallas, etc. INSTALACIÓN Para poder instalar un componente se debe obtener el VoBo del Usuario que lo solicito, es decir, la fase de pruebas no ofrece la evidencia de que todo se realizó correctamente y que no habrá afectación alguna a ningún proceso. El producto final del desarrollo del proyecto es instalado para que pueda utilizarse productivamente, es decir, con casos reales, con información de todos los clientes del Banco, ya sea en cajeros automáticos, solicitudes en ventanilla, uso de practicaja, operaciones en línea, etc. 95 ATENCIÓN DE INCIDENCIAS Como en todo proyecto no siempre todo es “color rosa”, aunque si es desarrollado adecuadamente no debería existir problema alguno, sin embargo en cualquier negocio el cliente no siempre tiene claro qué es lo que solicita y al expresarlo quizá no se dé a entender lo suficiente como para obtener el resultado deseado. Por desgracia muchas veces se da fin a un proyecto y al ejecutarse con información real, da como resultado un error, un descuadre de información, el envío de información errónea en un reporte, etc. Es en este momento donde se presentan incidentes productivos que deben atenderse al instante, no existen planes de atención, instalación, implementación, ni ningún procedimiento a seguir, simplemente se debe analizar el resultado y error y dar una solución a dicho problema. Se modifican componentes, tablas, archivos o cualquier componente que afecte la ejecución de procesos dependientes. 96 CONCLUSIONES Es curioso y quizá hasta molesto, escuchar en algunas conversaciones que COBOL es un lenguaje “muerto”. Sin embargo, como ya distinguimos durante el desarrollo de este trabajo, es un lenguaje universal que muchas empresas aún utilizan. A pesar de la creencia de que COBOL está en desuso, la realidad es que casi todos los sistemas que requieren gran capacidad de procesamiento por lotes (Batch), tanto las entidades bancarias como otras grandes empresas con sistemas mainframes lo siguen utilizando. Actualmente, podemos decir que para este lenguaje no existe ninguna limitación. La orientación a objetos, la programación orientada a bases de datos, la programación en la web, entre muchas más, son opciones disponibles para COBOL que hacen de éste lenguaje una opción totalmente viable. Que un lenguaje pueda garantizar esto, sobre todo para uno de 50 años de existencia en un mundo en el que las novedades duran sólo algunos meses es más que suficiente para ofrecerle un lugar preferente como principal opción en el entorno de los lenguajes de programación. Dentro de la institución financiera en la que me encuentro laborando me he percatado que, las aplicaciones hechas con COBOL suelen ser de gran tamaño y la mayoría contienen más de un millón de líneas de código. Las aplicaciones en COBOL también tienen una larga duración temporal asegurando que un programa no se quedará anticuado con la aparición de un nuevo lenguaje u otro programa, existen aplicaciones que llevan utilizándose durante períodos de entre 10 y 30 años. Además de que las áreas críticas de negocios, finanzas y seguros, son procesados mediante aplicaciones desarrolladas en COBOL. 97 Ventaja principal del uso de aplicaciones hechas en COBOL es que estas suelen mover y utilizar grandes cantidades de datos lo cual nos permite mencionar archivos de bases de datos de terabytes de peso. No se puede discriminar la iniciativa de que los jóvenes de hoy tengan la oportunidad de aprender COBOL, las instituciones educativas a nivel profesional deben plantear seriamente la idea de adicionar la enseñanza de este lenguaje a sus planes de estudio como ventaja ante la amplia demanda que existe hoy en día de programadores COBOL, en mi personal punto de vista es una gran oportunidad de crecimiento laboralmente hablando. Actualmente siguen existiendo decenas de usuarios COBOL e instituciones que capacitan a individuos en el aprendizaje de dicho lenguaje, como es el caso de los servicios de consultoría los cuales ofrecen recursos humanos a instituciones principalmente financieras para desempeñar actividades en el área del COBOL. Nuestro lenguaje en cuestión evoluciona constantemente, en especial por la cantidad de aplicaciones que hoy siguen funcionando y que superan en número a los demás lenguajes gracias a tanta difusión en el pasado y ello propicia su continua evolución. Bill Curtis, ahora jefe de análisis de software y la empresa de medición de CAST, ha dicho que los bancos deben quedarse con las antiguas aplicaciones COBOL ya que estas no tienen los problemas de seguridad y desarrollo que aparecen con los nuevos lenguajes como Java, no están divididos en módulos más pequeños y su funcionamiento es sumamente complejo. Además, al tratarse de sistemas antiguos hay muy poca gente cuyos conocimientos técnicos permitan detectar y resolver rápidamente los problemas que surgen. “Los programas COBOL son inmensamente complejos, el tamaño de sus módulos tiene 600 líneas de código. Mientras que el tamaño de un módulo Java tiene 30 líneas de código”, ha declarado. "En COBOL existe una fuerte correlación entre el tamaño del sistema 98 y de la densidad de los defectos. Es exponencial, cuanto mayor es el sistema, más alta es la densidad de los defectos en cada cien líneas14", ha puntualizado. El científico considera que el problema de la industria financiera es que los sistemas se crearon hace años y muchos operan con poca comprensión de por qué ha sido diseñado de esta manera. Se puede pensar en migrar estos programas a JAVA, sin embargo esto daría como resultado un largo período de cifras altas de errores generados por los sistemas sin mencionar las pérdidas económicas. ¿Podría lograrse? Sí, si los bancos dedicaran gran parte de su tiempo a analizar y conocer perfectamente su funcionamiento. Para finalizar, cito palabras de Bill Gates: "No sé qué lenguajes habrá en el futuro, pero seguro que COBOL estará todavía allí". 14 Computer World, “Los bancos seguirán con COBOL porque Java no es la solución a sus problemas”, Junio 2013, http://www.computerworldmexico.mx/Articulos/29353.htm. 99 REFERENCIAS DIGITALES Bancomer, G. F. (s.f.). Pagina Oficial. Recuperado http://www.bancomer.com.mx/nuestrom/nuemu_perco_main.html Commons, L. C. (s. http://www.consultorioCOBOL.com/ f.). Consultorio COBOL.Recuperado el el 2012, de 2012, de Cruz, M. E. (07 de 11 de 2011). Entre 60% y 80% de las empresa utilizan COBOL. Recuperado el 2012, de http://www.addictware.com.mx/index.php/software-propietario/1973-entre-60-y-80-delas-empresas-utilizan-COBOLFito, M. (11 de 01 de 2011). COBOL más vivo que nunca. Recuperado el 2012, de http://addictware..com.mx/index.php/blog/946-COBOL-mas-vivo-que-nunca México PC World. (14 de 11 http://www.pcworld.com.mx/Articulos/19480.htm de 2011). Recuperado el 2012, de Montes, A. (s. f.). COBOL en español. Recuperado el 2012, de http://www.esCOBOL.com/modules.php?op=modload&name=Forums&file=viewtopic&topic=3269&f orum=1 News.com, E. (24 de 10 de 2011). Red de Negocios. Recuperado el 2012, de http://www.infocomercial.com/n/80-de-las-empresas-utilizan-el-lenguaje-COBOL_147491.php Ranchal, J. (13 de 04 de 2009). COBOL 50 años de camino. Recuperado el 2012, de http://www.muycomputer.com/2009/04/13/actualidadnoticiasCOBOL-50-anos-de-camino_we9erk2xxdcrxrraqqwycx3cdosuovw60-r1qpalb3fcgzlbgdwfzezgomknrcoa Valores Corporativos Softtek, S. A. (s. f.). Página Oficial. Recuperado el 2012, de http://www.softtek.com/mexico/ 100 BIBLIOGRAFICAS COBOL, R. d. (2011). JCL Básico, Introducción al mundo del JCL o cómo hacer copy/paste con “sentidiño”. García, A. E. Manual Práctico de SQL. Joyanes, L. (1993). Metodología de la programación estructurada. McGraw Hill. Merelo, T. H. (1989). COBOL con programación estructurada. Madrid: Paraninfo. Palacios, J. M. (1995). TSO para Desarrolladores. 101 GLOSARIO BANCO PROMEX: Un banco con fuerte presencia en la región centro y occidente del país y se consolida la mayor institución financiera de México. VERIFICAR: Que el producto sea correcto. VALIDAR: Que realice las funciones para las cuales se codifico correctamente. TICS: Tecnologías de la Información y la Comunicación. MAINFRAME: Computadora central. Es una gran computadora potente y costosa, usada principalmente por grandes compañías para el procesamiento de grandes cantidades de datos. TECNOLOGIA CLIENTE-SERVIDOR: Modelo de aplicación distribuida en el que las tareas se reaparten entre los proveedores de recursos o servicios, llamados servidores, y los demandantes, llamados clientes. COMPILADOR: Programa informático que traduce un programa escrito en un lenguaje de programación a otro lenguaje de programación, generando un programa equivalente que la máquina será capaz de interpretar. GARTNER GROUP: Es una empresa consultora y de investigación de las tecnologías de la información con sede en Stamford, Connecticut, Estados Unidos. Hasta 2001 era conocida como Gartner Group. VSE: Un nuevo estándar para las empresas o áreas de sistemas del sector público o privado. 102 OS/2: Sistema operativo de IBM que intentó suceder a DOS como sistema operativo de las computadoras personales. VMS: Un sistema de memoria virtual, una tarea del sistema operativo en la que se usa un espacio de intercambio (swap) para que los procesos crean que hay más memoria RAM que la disponible. O simplemente VMS sistema operativo de Hewlett-Packard, originalmente creado por Digital Equipment Corporation (DEC) para sus mini-computadoras VAX. UNISYS: Compañía mundial de tecnología de la información que diseña, construye y gestiona entornos de misión crítica tanto para compañías comerciales como para instituciones gubernamentales. INDEXACION DE DATOS: Estructura de datos que mejora la velocidad de las operaciones, permitiendo un rápido acceso a los registros de una tabla en una base de datos. Al aumentar drásticamente la velocidad de acceso, se suelen usar sobre aquellos campos sobre los cuales se hacen frecuentes búsquedas. NEARSHORE: Es un tipo de subcontratación o externalización de una actividad con salarios más bajos que en el propio país, que se encuentra relativamente cerca en la distancia o la zona horaria (o ambos). El cliente espera beneficiarse de una o varias de las siguientes construcciones de proximidad: geográficas, temporales, culturales, lingüísticas, económicas, políticas, o de vínculos históricos. BPO: Business Process Outsourcing (BPO) es la subcontratación de funciones de procesos de negocios en proveedores de servicios, ya sea internos o externos a una compañía, usualmente en lugares de menores costos. BPO en español se traduce como "Externalización de Procesos de Negocios". 103 FORTUNE 500: Es una lista publicada de forma anual por la revista Fortune listando las 500 mayores empresas estadounidenses de capital abierto a cualquier inversor (es decir, no solo empresas cotizadas) según su volumen de ventas. EBCDIC: (Extended Binary Coded Decimal Interchange Code) es un código estándar de 8 bits usado por computadoras mainframe IBM. IBM adaptó el EBCDIC del código de tarjetas perforadas en los años 1960 y lo promulgó como una táctica customer-control cambiando el código estándar ASCII. EBCDIC es un código binario que representa caracteres alfanuméricos, controles y signos de puntuación. Cada carácter está compuesto por 8 bits = 1 byte, por eso EBCDIC define un total de 256 caracteres. COMMIT: En el contexto de la Ciencia de la computación y la gestión de datos, commit (acción de comprometer) se refiere a la idea de consignar un conjunto de cambios "tentativos, o no permanentes". Un uso popular es al final de una transacción de base de datos. Una sentencia COMMIT en SQL finaliza una transacción de base de datos dentro de un sistema gestor de base de datos relacional (RDBMS) y pone visibles todos los cambios a otros usuarios. El formato general es emitir una sentencia BEGIN WORK, una o más sentencias SQL, y entonces la sentencia COMMIT. Alternativamente, una sentencia ROLLBACK se puede emitir, la cual deshace todo el trabajo realizado desde que se emitió BEGIN WORK. Una sentencia COMMIT publicará cualquiera de los savepoints (puntos de recuperación) existentes que puedan estar en uso. En términos de transacciones, lo opuesto de commit para descartar los cambios "en tentativa" de una transacción, es un rollback. 104 QUERY: Es una sentencia SQL usada para acceder los datos de las tablas en una Base de datos. 105