“Change Request System”

Tesina

Para cumplir la acreditación de las estadías profesionales y contar con los créditos necesarios para obtener el grado de Ingeniero en Informática

Autor: Irving Adrián Perea Aguilar ​

Asesor académico: Lic. José Giovanni Ortega Tostado ​

Asesor externo: Lic. Elisa Becerra Ulloa ​

Organismo Receptor: Tata Consultancy Services, Ltd. ​

Mazatlán, Sinaloa a 11 de diciembre de 2015

AGRADECIMIENTOS

Con todo el amor del universo y por sobre todas las cosas, a mi madre y a mi padre, que entre la adversa incertidumbre de verme crecer y evolucionar, resintieron caídas incluso más fuertes que las mías, pero con sus espíritus grandes y sus almas soñadoras, estuvieron siempre ahí para darme la mano, ayudarme a levantar y seguir avanzando.

Al espacio, al tiempo y a los acontecimientos que me pusieron el día de hoy en el lugar en el que estoy, pues no quisiera estar en ningún otro lado.

A todos mis amigos (tanto a los pasajeros como a los de planta), que no hicieron mi vida más fácil, pero fácilmente la hicieron mucho más llevadera; con su elocuencia humorística y su desdén hacia las cosas que los adultos consideran importantes, hicieron de lo que va de mi existencia, la broma más larga y graciosa que alguien pudiera contarte.

Quiero hacer, además, una mención especial a una criatura muy particular (cuyo nombre preferiría no recordar para nada) quien me motivó a reflexionar mis días con ​ ​ mucho más detenimiento, y logró que reviviera (de forma bastante dolorosa) mi ilusión en la vida, en el color, en las flores, en el cielo, en la magia y en el amor.

Y por último, pero no por eso menos relevante, me agradezco a mí mismo; ya que sin mí, ni siquiera este absurdo texto habría sido posible. RESUMEN

“Change Request System” Irving Adrián Perea Aguilar Ingeniería en Informática Universidad Politécnica de Sinaloa Mazatlán, Sinaloa. Diciembre, 2015. Asesor académico: Lic. José Giovanni Ortega Tostado Asesor Externo: Ing. Jaime Ramírez González Organismo receptor: Tata Consultancy Services, Ltd.

El contenido del presente trabajo, aborda de manera profunda el proyecto del desarrollo de un sistema de solicitudes de cambios, cuya función principal es que los usuarios o empleados dentro de una organización envíen sus peticiones de requerimientos específicos a un administrador para su correspondiente aprobación; esto con el fin de realizar cambios en el funcionamiento actual de un sistema o forma de trabajo, para lograr de esta forma un mejor desempeño en el área de trabajo de dichos usuarios.

Primeramente se plantea el panorama general de la organización y las funciones y servicios que actualmente realiza. Seguido de esto, el marco teórico de referencia y las tecnologías que fueron implementadas para la realización del presente proyecto, así como la historia y generalidades de éstas. Además, se realiza una descripción previa del estado del arte para este tipo de sistemas, y el uso que reciben. Y para cerrar, se describen algunas conclusiones respecto al proceso de realización del proyecto, y las expectativas finales para el período de implementación del sistema dentro de un entorno de trabajo real. ÍNDICE GENERAL

I. RESEÑA EMPRESARIAL……………………………………………………………1

1.1. Acerca de Tata Consultancy Services, Ltd………………………………1 1.1.1. Misión……………………………………………………………...2 1.1.2. Visión……………………………………………………………....2 1.1.3. Objetivo…………………………………………………………....2 1.1.4. Valores…………………………………………………………….3 1.2. TCS en México……………………………………………………………...3 1.3. Servicios que ofrece………………………………………………………..4 1.3.1. Servicios de TI…………………………………………………....5 1.3.2. Consultoría………………………………………………………..5 1.3.3. Servicios industriales y de ingeniería…………………………..6

II. MARCO TEÓRICO…………………………………………………………………...7

2.1. Introducción………………………………………………………………....7 2.2. Tecnologías implementadas……………………………………………....7 2.2.1. Java………………………………………………………………..8 2.2.1.1. Historia de Java………………………………………...8 2.2.1.2. La plataforma de Java………………………………....9 2.2.1.3. Entornos de desarrollo para Java…………………..11 2.2.1.4. El proceso de edición y compilación………………..12 2.2.1.5. La codificación de programas Java………………...13 2.2.1.6. El proceso de desarrollo de software……………....14 2.2.2. Eclipse…………………………………………………………...16 2.2.2.1. Perspectivas, editores y vistas……………………...16 2.2.3. Hibernate………………………………………………………...18 2.2.4. JavaServer Pages……………………………………………....20 2.2.5. Oracle…………………………………………………………….21 2.2.5.1. Historia………………………………………………...21 2.2.5.2. Características………………………………………..22 2.2.5.3. Estructura Lógica……………………………………..22 2.2.5.4. Estructura Física……………………………………...24 2.2.5.5. Comparativa entre Oracle, MySQL y SQL Server...25 2.2.5.6. Versiones……………………………………………...25 2.2.6. Servidores web………………………………………………….26 2.2.6.1. Apache………………………………………………...29 2.2.6.2. Uso de Apache………………………………………..30 2.2.6.3. Configuración de Apache……………………………31 2.2.6.4. Licencia de Apache…………………………………..31 2.2.7. ………………………………………………….32 2.2.7.1. Historia…………………………………………………33 2.2.7.2. Entorno………………………………………………...33 2.2.7.3. Estructura de directorios……………………………..34

III. ESTADO DEL ARTE………………………………………………………………35

3.1. Descripción………………………………………………………………...35 3.1.1. Subprocesos…………………………………………………….36 3.1.2. Evaluación de cambios………………………………………...37

IV. CHANGE REQUEST SYSTEM………………………………..…………………38

4.1. Análisis de requerimientos……………………………………………….38 4.2. Modelo de prototipos……………………………………………………..38 4.2.1. Etapas para la elaboración del modelo de prototipo………..40 4.2.2. Ciclo de vida de un sistema basado en prototipo…………...40 4.2.3. Ventajas del modelo de prototipo……………………………..42 4.2.4. Desventajas del modelo de prototipo………………………...42 4.3. Herramientas CASE……………………………………………………....43 4.3.1. Ejemplos de herramientas CASE……………………………..45 4.4. Funcionalidades del sistema…………………………………………….46 4.5. Interfaz gráfica…………………………………………………………….47

V. CONCLUSIONES…………………………………………………………...... 49

5.1. Resultados………………………………………………………………....49 5.2. Dificultades………………………………………………………………...49 5.3. Futuros lanzamientos……………………………………………………..50 5.4. Conclusión…………………………………………………………………50

BIBLIOGRAFÍA………………………………………………………………………………...51

GLOSARIO……………………………………………………………………………………..52

ÍNDICE DE FIGURAS

1.1.A. Logotipo de TCS………………………………………………………………....1 ​ ​ 2.2.1.1.A. Diagrama de portabilidad Java…………………………………………….9 2.2.6.A. Diagrama de funcionamiento de servidores web………………………....28 3.1.A. Diagrama de un change request……………………………………………...35 4.2.1.A. Etapas del Modelo de prototipo…………………………………………….40 4.2.2.A. Ciclo de vida del prototipo…………………………………………………...41 4.5.A. Inicio de sesión de usuarios…………………………………………………...47 4.5.B. Formato básico de catálogo…………………………………………………...47 4.5.C. Apariencia básica de tabla…………………………………………………….48 4.5.D. Formato de creación y búsqueda de usuarios……………………………...48

ÍNDICE DE TABLAS

2.2.5.5.A. Tabla comparativa entre bases de datos………………………………..25

I. RESEÑA EMPRESARIAL

1.1. Acerca de Tata Consultancy Services, Ltd.

Tata Consultancy Services (TCS) fue fundada en 1968, siendo parte del Grupo ​ Tata, el conglomerado industrial más grande de la India. La empresa, reconocida ​ por su espíritu vanguardista e innovador, ha jugado un papel muy importante a la hora de ayudar a que la industria de software de India adquiera reconocimiento mundial. TCS es líder en Servicios de Información, BPO y Consultoría; a la vez ofrece resultados reales a empresas de nivel mundial, garantizando un nivel de

[1] certeza inigualable .​ ​

A través de su Modelo de Entrega en Red Global (Global Network Delivery Model ​ TM), reconocido como el parámetro por excelencia en servicios de software, la ​ empresa brinda asesoramiento integral en materia de Tecnología de la Información (TI) y Outsourcing. ​ ​

Figura 1.1.A Logotipo de TCS

1

1.1.1. Misión

Ofrecer soluciones integradas y tecnologías de avanzada para el manejo de la información, que satisfagan las necesidades de nuestros clientes a través de los mejores recursos tecnológicos y de calidad internacional.

1.1.2. Visión

Ofrecer soluciones integradas y tecnologías de avanzada para el manejo de la información, que satisfagan las necesidades de nuestros clientes a través de los mejores recursos tecnológicos y de calidad internacional.

1.1.3. Objetivo

Alcanzar resultados de negocios reales que permitan a la vez mantener y transformar operaciones empresariales de una forma eficaz. Proporcionar un nivel de certeza que ningún otro competidor puede igualar, gracias a que cumplimos con los requerimientos dentro de los plazos y presupuestos previstos aplicando los más altos estándares de calidad, además de obtener la mayor eficiencia y capacidad de respuesta para el cliente, pudiendo desplazar las inversiones hacia iniciativas estratégicas en lugar de funciones tácticas.

2

1.1.4. Valores

Los valores que distinguen a TCS, son:

● Responsabilidad ● Honestidad ● Compromiso ● Respeto ● Integridad ● Excelencia

1.2. TCS en México

TCS México comienza sus operaciones en la ciudad de México en el año 2003, para abrir en 2007 su GDC en Guadalajara y en 2009 en Querétaro. Desde su comienzo se brindaron servicios avanzados y especializados de TI, consultoría, testing, desarrollo de software, tercerización de procesos de negocios, centro de contacto, soluciones de infraestructura de TI, servicios industriales y de ingeniería, y soluciones basadas en productos exclusivos de TCS tanto para clientes existentes como potenciales.

México es parte fundamental de TCS Latinoamérica, brazo de negocios de Tata Consultancy Services que opera a lo largo de toda la región latinoamericana, operando en Centros de Entrega Global (GDC), en Argentina, Brasil, Chile, Colombia, Ecuador, Perú y Uruguay. Cuenta con centros de servicios de tercerización de procesos de negocios en Chile y Uruguay. La operación hoy en día tiene 3 modernos centros: El de Guadalajara es el más antiguo, y fue inaugurado por el presidente de México C. Felipe Calderón en 2007; otro se encuentra también

3

en Guadalajara; y el tercero en la ciudad de Querétaro. 2007 y 2009 fueron respectivamente sus fechas de apertura.

Todos estos Centros de Entrega Globales cuentan con certificación en altos niveles de calidad y servicio. Asimismo, la empresa cuenta con un sistema interno IQMS, alineado a estándares internacionales; ISO 9001, ISO 20000, ISO 27000, TL 9000, así como modelos CMMI Nivel 5, el estándar de calidad más alto de la industria. Además operan cumpliendo los estándares más altos de infraestructura y seguridad: física, de redes, personal, y de sistemas.

Muchos factores hacen de México un eslabón muy importante en la estrategia de expansión de TCS en la región. Entre ellos, la cercanía en distancia y husos horarios con los Estados Unidos, la estabilidad política y económica, y un alto nivel de sus profesionales universitarios.

Hoy son cientos los profesionales que vuelcan su talento, pasión y compromiso, con el objetivo de hacer crecer día a día la operación. Todos ellos cumplen funciones diferentes pero complementarias a la estrategia de la organización.

Algunos de los principales clientes de TCS son: Aeroméxico, IMSS, Bank of ​ America, GE, JCI, Ceridian, Verizon, Banco Santander, BAC Credomatic, Banco Interamericano de Desarrollo, Banamex y América Móvil. ​

1.3. Servicios que ofrece

La amplia gama de servicios que ofrece TCS, van desde lo general hasta lo específico. Todos estos servicios se extienden en distintas ramas que abarcan tanto a la industria automotriz, hotelera, aeroespacial, de transporte y tecnologías de información; entre las más destacadas, se encuentran:

4

1.3.1. Servicios de TI

Para lograr una máxima flexibilidad, rapidez y eficiencia es importante contar con una estrategia de TI sólida. Las ofertas de servicios de TI de TCS ayudan a las empresas a aprovechar al máximo sus inversiones de TI, desde la prestación de soluciones de integración de sistemas, servicios de desarrollo y gestión de aplicaciones hasta prueba de soluciones.

Se ofrecen servicios de:

● Desarrollo personalizado de aplicaciones ● Gestión de aplicaciones ● Migración y reingeniería ● Integración de sistemas ● Pruebas (testing) ● Ingeniería de rendimiento

Los servicios de TI de TCS permiten acelerar los tiempos de comercialización, mejoran los costos y facilitan tanto eficiencia energética como una mayor productividad.

1.3.2. Consultoría

● Consultoría de negocios, que incluye gestión de procesos comerciales, gestión de cambios y gestión de programas. ● Consultoría en TI, que incluye arquitectura y tecnología, gestión de riesgo de información, servicios de infraestructura, gestión de procesos y servicios de TI, estrategia y dirección de TI, gestión de datos maestros, soluciones de ingeniería del rendimiento y garantía y pruebas de calidad.

5

1.3.3. Servicios industriales y de ingeniería

Durante más de dos décadas, TCS ha brindado soluciones de ingeniería a través de de varios sectores, permitiendo a los clientes fomentar la innovación de productos, mejorar las eficiencias operativas y disminuir el tiempo de comercialización para sus productos.

● Soluciones de desarrollo de productos nuevos (NPD) ● Soluciones y servicios de planta ● Soluciones de gestión del ciclo de vida de los productos (PLM) ● Soluciones tecnológicas geoespaciales

Los servicios de ingeniería de TCS abarcan los sectores siguientes:

● Aeroespacial y defensa ● Automotriz ● Ciencias de la vida y dispositivos médicos ● Alta tecnología ● Telecomunicaciones ● Energía ● Recursos: metales y minería ● Servicios públicos ● Movimiento de tierra y equipos agrícolas ● Maquinaria de potencia ● Venta minorista ● Bienes de consumo empaquetados ● Transporte

6

II. MARCO TEÓRICO

2.1. Introducción

La implementación de tecnologías avanzadas para la gestión y mejoramiento del manejo de diversas actividades, procesos y funciones que las empresas requieren realizar en períodos cortos para prevenir de manera casi total la interrupción de las actividades económicas que llevan a cabo, ha llevado a las corporaciones a desarrollar nuevas y más viables alternativas que aceleren la forma en la que éstas realizan cambios y transformaciones en sus áreas de trabajo y en las diversas zonas y departamentos que las conforman.

Por ello, se realizan actualmente una gran variedad de aplicaciones y sistemas que beneficien de forma directa tanto en el rendimiento, como en la calidad de los servicios y productos que se ofrecen, utilizando medios tecnológicos para lograr que todos estos objetivos sean alcanzados.

2.2. Tecnologías implementadas

Para la realización de este proyecto, se usaron tecnologías que combinan bases de datos, lenguajes de programación orientados a objetos y herramientas web, que en conjunto realizan en su totalidad los procesos necesarios tanto para la creación de las IU, como las funciones de back­end.

7

2.2.1. Java

2.2.1.1. Historia de Java

Java es un lenguaje de programación desarrollado por Sun Microsystems. Java fue presentado en la segunda mitad del año 1995 y desde entonces se ha convertido en un lenguaje de programación muy popular.

Java es un lenguaje muy valorado porque los programas Java se pueden ejecutar en diversas plataformas con sistemas operativos como Windows, Mac OS, o Solaris. James Gosling, el director del equipo de trabajo encargado de desarrollar Java, hizo realidad la promesa de un lenguaje independiente de la plataforma. Se buscaba diseñar un lenguaje que permitiera programar una aplicación una sola vez que luego pudiera ejecutarse en distintas máquinas y sistemas operativos. Para conseguir la portabilidad de los programas Java se utiliza un entorno de ejecución para los programas compilados.

Este entorno se denomina Java Runtime Environment (JRE). Es gratuito y ​ está disponible para los principales sistemas operativos. Esto asegura que el

[2] mismo programa Java puede ejecutarse en Windows, Mac OS, Linux o Solaris .​ ​

8

Figura 2.2.1.1.A. Diagrama de portabilidad Java

“Write Once, Run Anywhere”, que podría traducirse como “programar una ​ sola vez y después ejecutar los programas en cualquier sistema operativo”, era el objetivo del equipo de desarrollo de Java. Esta idea resume el concepto de portabilidad. Los programas Java son portables, es decir, independientes de la plataforma, porque pueden ejecutarse en cualquier computadora o dispositivo móvil, independientemente del sistema operativo que tengan instalado: Un programa Java puede ejecutarse en un ordenador de mesa, una computadora portátil, una tableta, un teléfono, un reproductor de música o en cualquier otro dispositivo móvil con cualquier sistema operativo.

2.2.1.2. La plataforma de Java

Los programas Java se compilan a un lenguaje intermedio, denominado Bytecode. Este código es interpretado por la máquina virtual de Java del entorno de ejecución (JRE) y así se consigue la portabilidad en distintas plataformas.

9

El JRE es una pieza intermedia entre el código Bytecode y los distintos sistemas operativos existentes en el mercado. Un programa Java compilado en Bytecode se puede ejecutar en sistemas operativos como Windows, Linux, Mac Os, Solaris, BlackBerry OS, iOs o Android utilizando el entorno de ejecución de Java (JRE) apropiado.

Una de las características más importantes de los lenguajes de programación modernos es la portabilidad. Como se ha comentado antes, un programa es portable cuando es independiente de la plataforma y puede ejecutarse en cualquier sistema operativo y dispositivo físico.

Los programas Java son portables porque se ejecutan en cualquier plataforma. Sucede algo parecido con las fotografías o los ficheros PDF. Las fotografías con formato JPEG son portables porque un archivo JPEG lo podemos visualizar con distintos visores de fotos y en dispositivos como ordenadores, tabletas o teléfonos. El formato JPEG es un estándar para almacenar archivos de imagen. Todas las imágenes JPEG tienen el mismo formato y los visores de fotos están diseñados para mostrar las imágenes con este formato. De forma similar, los archivos PDF (Portable Document Format) son portables. El formato PDF fue desarrollado por Adobe Systems con la idea de que estos archivos se pudieran ver en cualquier dispositivo que tenga instalado Adobe Acrobat Reader, el software de visualización de documentos PDF.

La portabilidad de Java ha contribuido a que muchas empresas hayan desarrollado sus sistemas de comercio electrónico y sus sistemas de información en Internet con Java.

10

El proceso de desarrollo y de mantenimiento de los sistemas resulta menos costoso y las aplicaciones son compatibles con distintos sistemas operativos. La evolución del lenguaje de programación Java ha sido muy rápida. La plataforma de desarrollo de Java, denominada Java Development Kit (JDK), se ha ido ampliando y cada vez incorpora a un número mayor de programadores en todo el mundo. En realidad Java no solo es un lenguaje de programación. Java es un lenguaje, una plataforma de desarrollo, un entorno de ejecución y un conjunto de librerías para desarrollo de programas sofisticados.

2.2.1.3. Entornos de desarrollo para Java

Existen distintos entornos de desarrollo de aplicaciones Java. Este tipo de productos ofrecen al programador un entorno de trabajo integrado para facilitar el proceso completo de desarrollo de aplicaciones, desde el diseño, la programación, la documentación y la verificación de los programas. Estos productos se denominan IDE (Integrated Development Environment).

Existen entornos de distribución libre como: NetBeans, Eclipse o BlueJ. Entre los productos comerciales están JBuilder o JCreator Pro.

Para utilizar un entorno de desarrollo es necesario instalar el Java Runtime Environment (JRE) apropiado para el sistema operativo. El JRE se descarga de la página de Oracle Java.

11

2.2.1.4. El proceso de edición y compilación

En Java, al igual que en otros lenguajes de programación, se sigue el siguiente proceso: edición del código fuente, compilación y ejecución. Los programas Java se desarrollan y se compilan para obtener un código denominado Bytecode que es interpretado por una máquina virtual de Java (Java Virtual Machine).

La edición del programa fuente se realiza escribiendo el programa Java en un editor de texto como el Bloc de notas o utilizando un entorno integrado de desarrollo. El código fuente se almacena en un fichero de tipo .java. La compilación se realiza con el compilador Java javac o utilizando un entorno integrado de desarrollo. Durante el proceso de compilación se verifica que el código fuente cumple la definición léxica, sintáctica y semántica de Java. Esto significa que el compilador comprueba que el código fuente se compone de palabras válidas en Java y que los comandos Java tienen la forma sintáctica correcta.

Si durante el proceso de compilación el compilador detecta los errores que ha cometido el programador y le informa de los problemas que ha encontrado para que pueda corregirlos. Si durante la compilación no se detectan errores, se genera un fichero de tipo class en Bytecode. Una vez finalizado el proceso de compilación se puede ejecutar el programa. Para esto, es necesario que la máquina virtual de Java interprete el código Bytecode y ejecute la aplicación.

12

2.2.1.5. La codificación de programas Java

El estilo de programación o codificación de los programas Java es muy importante. La legibilidad de un programa determina en buena medida que se haya desarrollado correctamente y que el producto final sea eficiente.

Legibilidad > Corrección > Eficiencia

Legibilidad. Un programa Java debe ser fácil de leer y entender, incluso para una persona que no ha participado en el desarrollo del programa. La legibilidad es un aspecto muy importante porque facilita el mantenimiento del software, la corrección de errores o la modificación de la funcionalidad de la aplicación con menor coste.

Corrección. Un programa debe hacer lo que debe hacer, ni más, ni menos. Esto es lo que se entiende por corrección. Un programa debe cumplir rigurosamente los requisitos funcionales y técnicos de la fase de especificación. Durante la fase de prueba se verifica que el programa funciona correctamente y que cumple los requisitos técnicos y funcionales.

Eficiencia. La eficiencia se refiere al tiempo que un programa tarda en ejecutarse y a los recursos que consume. Cuanto más rápido sea un programa y utilice menos memoria o disco duro, el diseño es mejor. La eficiencia no es un problema que deba atender cuando se aprende a programar. Ahora lo mejor es utilizar los mecanismos de optimización propios de los compiladores. La eficiencia se debe analizar sólo cuando un programa funciona correctamente y cumple con los requisitos técnicos definidos.

13

2.2.1.6. El proceso de desarrollo de software

El proceso de desarrollo de los programas Java no difiere de la mayoría de los lenguajes de programación. Es necesario seguir un conjunto de pasos para desarrollar correctamente un producto software.

La Ingeniería del Software estudia los distintos procesos de desarrollo de software. El IEEE define Ingeniería del Software como la aplicación sistemática, disciplinada y cuantificable de un proceso de desarrollo, operación y mantenimiento de un producto software.

El proceso clásico de desarrollo de software es ampliamente utilizado por su sencillez. Este proceso se compone de las siguientes fases: especificación, diseño, codificación, prueba y mantenimiento.

Especificación. En esta fase se decide la funcionalidad, las características técnicas de una aplicación y sus condiciones de uso. En esta fase es necesario responder a las siguientes preguntas:

● ¿Para qué se va a utilizar la aplicación? ● ¿Cuáles son las necesidades funcionales de los usuarios? ● ¿Cuál es el perfil de los usuarios de la aplicación? ● ¿En qué plataforma se ejecutará la aplicación? ● ¿Cuáles son sus condiciones de operación? ● ¿Cómo se va a utilizar?

Diseño. En esta fase se utiliza toda la información recogida en la fase de especificación y se propone una solución que responda a las necesidades del usuario y se pueda desarrollar.

14

En esta fase se define la arquitectura de la aplicación. Es necesario detallar la estructura y la organización del programa y cómo se relacionan las distintas partes de la aplicación.

Codificación. Esta fase consiste en la programación en Java de las especificaciones de diseño de la fase anterior. Durante esta fase de codificación o implementación se aplican normas de programación para facilitar la legibilidad de los programas Java.

Prueba. En esta fase se compila y se ejecuta la aplicación para verificar ​ que cumple con los requisitos funcionales y técnicos definidos en la fase de especificación. Si el programa no cumple con todos los requisitos, se puede deber a errores de diseño o de programación. En tal caso, es necesario corregir los errores que se hayan detectado y repetir de nuevo el proceso de diseño y codificación. Durante la fase de prueba se verifica que la aplicación cumple con los criterios de calidad establecidos en el proyecto: facilidad de uso, corrección, eficiencia, integridad, fiabilidad, flexibilidad, facilidad de mantenimiento, facilidad de prueba, portabilidad, capacidad de reutilización e interoperabilidad.

Una vez que la aplicación se ha probado y cumple con los requisitos establecidos, entonces se pone en funcionamiento y comienza la fase de operación para que sea utilizada para el fin con el que ha sido desarrollada.

Mantenimiento. Una vez que la aplicación se ha puesto en operación da comienzo la fase de mantenimiento. En esta fase se corrigen errores de funcionamiento de la aplicación, se modifica la funcionalidad o se añaden las nuevas funcionalidades que demandan los usuarios. La fase de mantenimiento es la de mayor duración, pues pueden pasar muchos años desde el inicio de la operación hasta que el producto es retirado.

15

2.2.2. Eclipse

Eclipse es una plataforma de desarrollo, diseñada para ser extendida de forma indefinida a través de plug­ins. Fue concebida desde sus orígenes para convertirse en una plataforma de integración de herramientas de desarrollo. No tiene en mente un lenguaje específico, sino que es un IDE genérico, aunque goza de mucha popularidad entre la comunidad de desarrolladores del lenguaje Java usando el plugin JDT que viene incluido en la distribución estándar del IDE.

2.2.2.1. Perspectivas, editores y vistas

En Eclipse el concepto de trabajo está basado en las perspectivas, que no es otra cosa que una preconfiguración de ventanas y editores, relacionadas entre sí, y que nos permiten trabajar en un determinado entorno de trabajo de forma óptima.

Gestión de proyectos: el desarrollo sobre Eclipse se basa en los proyectos, que son el conjunto de recursos relacionados entre sí, como puede ser el código fuente, documentación, ficheros configuración, árbol de directorios. El IDE nos proporcionará asistentes y ayudas para la creación de proyectos. Por ejemplo, cuando creamos uno, se abre la perspectiva adecuada al tipo de proyecto que estemos creando, con la colección de vistas, editores y ventanas preconfiguradas por defecto.

Depurador de código: se incluye un potente depurador, de uso fácil e intuitivo, y que visualmente nos ayuda a mejorar nuestro código. Para ello sólo debemos ejecutar el programa en modo depuración (con un simple botón). De nuevo, tenemos una perspectiva específica para la depuración de código, la

16

perspectiva depuración, donde se muestra de forma ordenada toda la información necesaria para realizar dicha tarea.

Extensa colección de plug­ins: están disponibles en una gran cantidad, unos publicados por Eclipse, otros por terceros. Al haber sido un estándar de facto durante tanto tiempo (no el único estándar, pero sí uno de ellos), la colección disponible es muy grande. Los hay gratuitos, de pago, bajo distintas licencias, pero casi para cualquier cosa que nos imaginemos tenemos el plug­in adecuado.

Plug­in JDT: Dado el extenso uso que se le da, me permito dedicarle un ​ apartado específico. Es el plugin encargado del soporte del IDE al lenguaje Java, incluido en la versión estándar de Eclipse por defecto que no está concebido para dar soporte a un lenguaje determinado.

La perspectiva: formada por dos vistas: Outline y Package Explorer. ​ ​ ​ La vista Outline se encarga de mostrar el esquema de la clase que tenemos ​ ​ abierta en el editor activo en ese momento. Una cuestión muy interesante es que cuando tenemos una vista activa, se visualizan en la barra de herramientas iconos extra, que nos permitirán el acceso rápido a las funciones más usadas de dicha vista. El coloreado de código en el editor es una característica muy interesante, realizando para ello el reconocimiento sintáctico de todas aquellas palabras que son reservadas en el lenguaje Java. Asimismo nos permite completar el código automáticamente (code completion), con sugerencias ​ ​ dependientes del contexto, lo cual nos permitirá escribir código más rápidamente.

17

Se podrá configurar el formateo de código, la forma de escribir los comentarios, incluyendo comentarios para la posterior creación del Javadoc. ​ ​ Podemos generar los esqueletos de clase automáticamente, generación de métodos getters y setters de manera automática, y un largo etcétera de

[3] funcionalidades, que a día de hoy nos parecen típicos, pero muy útiles .​ ​

2.2.3. Hibernate

Hibernate es una herramienta ORM completa que ha conseguido en un tiempo récord una excelente reputación en la comunidad de desarrollo posicionándose claramente como el producto Open Source líder en este campo ​ gracias a sus prestaciones, buena documentación y estabilidad. Es valorado por muchos incluso como solución superior a productos comerciales dentro de su enfoque, siendo una muestra clara de su reputación y soporte la reciente integración dentro del grupo JBoss que seguramente generará iniciativas muy interesantes para el uso de Hibernate dentro de este servidor de aplicaciones.

Se empezó a desarrollar hace algo unos años por Gavin King siendo hoy Gavin y Christian Bauer los principales gestores de su desarrollo. Hibernate parte de una filosofía de mapear objetos Java "normales", también conocidos en la comunidad como "POJOs" (Plain Old Java Objects), no contempla la posibilidad ​ ​ de automatizar directamente la persistencia de Entity Beans tipo BMP (es decir, generar automáticamente este tipo de objetos), aunque aún así es posible combinar Hibernate con este tipo de beans utilizando los conocidos patrones

[4] para la delegación de persistencia en POJOs .​ ​

Una característica de la filosofía de diseño de Hibernate ha de ser destacada especialmente, dada su gran importancia: puede utilizar los objetos Java definidos por el usuario tal cual, es decir, no utiliza técnicas como

18

generación de código a partir de descriptores del modelos de datos o manipulación de bytecodes en tiempo de compilación (técnica conocida por su amplio uso en JDO), ni obliga a implementar interfaces determinados, ni heredar de una superclase.

Las razones que hacen que el uso de Hibernate sea muy importante son:

● Simplicidad y flexibilidad: necesita un único fichero de configuración en ​ tiempo de ejecución y un documento de mapeo para cada aplicación. Este fichero puede ser el estándar de Java o un fichero XML. También se tiene la alternativa de realizar la configuración de forma programática. El uso de frameworks de persistencia, hacen que la aplicación dependa del framework. Hibernate no crea esa dependencia adicional. Los objetos persistentes en la aplicación no tienen que heredar de una clase de Hibernate u obedecer a una semántica específica. Tampoco necesita un contenedor para funcionar.

● Completo: ofrece todas las características de orientación a objetos, ​ incluyendo la herencia, tipos de usuario y las colecciones. Además, también proporciona una capa de abstracción SQL llamada HQL. Las sentencias HQL son compiladas por el framework de Hibernate y cacheadas para su posible reutilización.

● Prestaciones: uno de las grandes confusiones que aparecen al utilizar ​ este tipo de frameworks es creer que las prestaciones de la aplicación se ven muy mermadas. Este no es el caso de Hibernate. La clave en este tipo de situaciones es si se realizan el número mínimo de consultas a la base de datos. Muchos frameworks de persistencia actualizan los datos de los objetos incluso cuando no ha cambiado su estado. Hibernate sólo lo

19

hace si el estado de los objetos ha cambiado. El cacheado de objetos juega un papel importante en la mejora de las prestaciones de la aplicación. Hibernate acepta distintos productos de cacheado, tanto de código libre como comercial.

2.2.4. JavaServer Pages

JavaServer Pages (JSP) es una tecnología basada en el lenguaje Java que permite incorporar contenido dinámico a las páginas web. Los archivos JSP

[5] combinan HTML con etiquetas especiales y fragmentos de código Java .​ ​

El código fuente de una página JSP puede contener:

● Directivas: Indican información general de la página, como puede ser importación de clases, página a invocar ante errores, si la página forma parte de una sesión, etc. ● Declaraciones: Sirven para declarar métodos o variables. ​ ● Scriptlets: Código Java embebido. ​ ● Expresiones: Expresiones Java que se evalúan y se envían a la salida. ​ ● Tags JSP: Etiquetas especiales que interpreta el servidor. ​

JSP tiene bastantes ventajas frente a otras orientaciones, como ASP o PHP. Al ser JSP una especificación, podemos elegir entre diversas implementaciones, comerciales o gratuitas, sin tener que depender de un proveedor en particular. Quizá la ventaja fundamental es que tenemos toda la potencia del lenguaje Java a nuestro alcance, con sus ventajas como

[6] reutilización, robustez, multiplataforma, etc .​ ​

20

2.2.5. Oracle

Oracle, la Primera Base de Datos Diseñada para Grid Computing, es un ​ ​ sistema de gestión de base de datos relacional fabricado por Oracle Corporation. ​ ​ Oracle es básicamente un herramienta cliente/servidor para la gestión de base de datos la gran potencia que tiene y su elevado precio hace que solo se vea en empresas muy grandes y multinacionales, por norma general. Oracle Corporation es una de las mayores compañías de software del mundo. Sus productos van desde bases de datos hasta sistemas de gestión. Cuenta además, con herramientas propias de desarrollo para realizar potentes aplicaciones, como Oracle Designer. ​

2.2.5.1. Historia

Oracle surge a finales del año 1970 del nombre de Relational Software a ​ partir de un estudio sobre SGBD (Sistemas Gestores de Base de Datos) Computer World definió este estudio como uno de los más completos jamás escritos sobre bases de datos. usaba la filosofía de las bases de datos relacionales, algo que por aquella época era todavía desconocido. La tecnología Oracle se encuentra prácticamente en todas las industrias alrededor del mundo. Oracle es la primera compañía de software que desarrolla e implementa software para empresas 100 por ciento activado por Internet a través de toda su línea de productos: base de datos, aplicaciones comerciales y herramientas de desarrollo de aplicaciones y soporte de decisiones. Oracle garantiza el funcionamiento de sus bases de datos, que en caso de caídas del servidor compensa económicamente con cifras cercanas a las 7 cifras.

21

2.2.5.2. Características

Desarrollado sobre Oracle Database, Oracle Content Database ha sido ​ ​ diseñada para que las organizaciones puedan controlar y gestionar grandes volúmenes de contenidos no estructurados en un único repositorio con el objetivo de reducir los costes y los riesgos asociados a la pérdida de información.

2.2.5.3. Estructura lógica

Se divide en unidades de almacenamiento lógicas: Tablespaces. Cada BD ​ ​ estará formada por uno o más tablespaces (al menos existe el tablespace ​ SYSTEM, catálogo del sistema). Cada tablespace se corresponde con uno o más ​ ​ ​ ficheros de datos, como lo son:

● Tablas: Es la unidad lógica básica de almacenamiento. Contiene filas y columnas (como una matriz) y se identifica por un nombre.

● Columnas: Las columnas también tienen un nombre y deben especificar un tipo de datos. Una tabla se guarda dentro de un tablespace (o varios, en el caso de las tablas particionadas).

● Usuarios: Es la indicación del nombre y el password de la cuenta ​ (esquema) que se está creando.

● Esquemas: Es una colección de objetos lógicos, utilizados para organizar de manera más comprensible la información y conocidos como objetos del esquema. Una breve descripción de los objetos que lo componen es la siguiente.

22

● Índices: Un índice es una estructura creada para ayudar a recuperar datos de una manera más rápida y eficiente. Un índice se crea sobre una o varias columnas de una misma tabla. De esta manera, cuando se solicita recuperar datos de ella mediante alguna condición de búsqueda (cláusula where de la sentencia), ésta se puede acelerar si se dispone de algún índice sobre las columnas­objetivo.

● Clusters: Un cluster es un grupo de tablas almacenadas en conjunto físicamente como una sola tabla que comparten una columna en común. Si a menudo se necesita recuperar datos de dos o más tablas basado en un valor de la columna que tienen en común, entonces es más eficiente organizarlas como un cluster, ya que la información podrá ser recuperada en una menor cantidad de operaciones de lectura realizadas sobre el disco.

● Vistas: Una vista implementa una selección de varias columnas de una o diferentes tablas. Una vista no almacena datos; sólo los presenta en forma dinámica. Se utilizan para simplificar la visión del usuario sobre un conjunto de tablas, haciendo transparente para él la forma de obtención de los datos.

● Secuencias: El generador de secuencias de Oracle se utiliza para generar números únicos y utilizarlos, por ejemplo, como claves de tablas. La principal ventaja es que libera al programador de obtener números secuenciales que no se repitan con los que pueda generar otro usuario en un instante determinado.

23

● Disparadores, Triggers: Un trigger es un procedimiento que se ejecuta ​ ​ ​ ​ en forma inmediata cuando ocurre un evento especial. Estos eventos sólo pueden ser la inserción, actualización o eliminación de datos de una tabla.

● Sinónimos: Los sinónimos son objetos del sistema que apuntan a otros objetos. Implementan alias de tablas, vistas, secuencias o unidades de programas. Por lo general se utilizan para esconder ciertos detalles del objeto que representan al usuario final.

● Segmento de Rollback: son áreas lógicas de la base de datos que contienen información de las transacciones que se encuentran en curso y que aún no han sido confirmadas o deshechas.

2.2.5.4. Estructura física

Una BD tiene uno o más ficheros de datos. Estos ficheros son de tamaño fijo y se establecen en el momento en que se crea la base de datos o en el momento en el que se crean tablespaces. Los datos del fichero de datos son leídos cuando se necesitan y situados en una caché de memoria compartida para que el próximo acceso a los mismos sea más rápido.

24

2.2.5.5. Comparativa entre Oracle, MySQL y SQL Server

Base de Oracle MySQL SQL Server datos

Interfaz GUI, SQL SQL GUI, SQL, Otros

Soporte C, C#, C++, Java, C, C#, C++, Java, Java, Ruby, Ruby Ruby Python, VB, .NET y PHP

Sistema Windows, Linux, Windows, Linux, Windows Operativo Solaris, HP­UX, OS OS X, FreeBSD, X, AIX Solaris

Licencia Propietario Código Libre Propietario Figura 2.2.5.5.A. Tabla comparativa entre bases de datos

2.2.5.6. Versiones

● Oracle 5 y Oracle 6: Fueron las dos primeras versiones de Oracle, quedando aún rezagadas por las versiones sucesoras. ● Oracle 7: La base de datos relacional componentes de Oracle Universal Server. Posee además las versiones 7.1, 7.1.2, y 7.1.3.

● Oracle 7 Parallel: Ofrece a los usuarios un método seguro y administrable para incrementar la performance de sus bases de datos existentes introduciendo operaciones en paralelo y sincrónicas dentro de sus ambientes informáticos.

● Oracle 8: Incluye mejoras de rendimiento y de utilización de recursos. Independiente de que se necesite dar soporte a decenas de miles de usuarios y cientos de terabytes de datos, o se disponga de un sistema mucho más pequeño, pero igualmente crítico, todos se benefician del

25

rendimiento de Oracle 8. Este soporta aplicaciones de procesamiento de transacciones online (OLTP) y de data warehousing mayores y más exigentes.

● Oracle 9: Se incorporaron funcionalidades de administración muy útiles, ​ como es la gestión de undo (como alternativa a los rollback segments de la 8i), la gestión automática de la SGA (área de memoria de la BD), el flashback query, las tablas externas, etc.

● Oracle 10: Proporciona mejores resultados al automatizar las tareas administrativas, ofreciendo seguridad líder en el sector y características para el cumplimiento regulatorio, y posibilitando la mayor disponibilidad.

● Oracle 11: Es una base de datos de características completas para pequeñas y medianas empresas que requieren el desempeño, la disponibilidad y la seguridad de la base de datos número uno del mundo a un bajo costo. Disponible en un solo servidor o en servidores en cluster con hasta cuatro procesadores, es la opción segura para desarrollar e implementar de manera económica las aplicaciones de la base de datos.

2.2.6. Servidores web

Para el uso de servidores web, es necesario comprender algunos conceptos básicos y su funcionamiento:

● Servidor: Programa ejecutado en una máquina que responde a ​ solicitudes de otros programas llamados clientes.

26

● Cliente: Programa que solicita información al servidor para mostrarla al ​ usuario.

● Servidor web: Recibe solicitudes HTML de los clientes web. ​

● Cliente web: Solicita información al servidor web. Se les suele llamar navegadores.

● Dirección IP: Número de cuatro dígitos separados por puntos (x.x.x.x) para identificar a un equipo en una red TCP/IP lo cual permite su localización.

● Nombres de dominio: Usados para facilitar al usuario recordar sitios web a los que pretende acceder.

● Resolución de nombres: Traduce direcciones IP a un nombre de ​ dominio o viceversa ya que para los usuarios es más fácil de recordar nombres. ○ www.google.com > nombre de dominio ○ 173.194.115.80 > dirección IP

● Servidor DNS: Máquina servidora de traducción de nombres. Es necesario dar de alta el nombre de dominio registrado en un servidor DNS.

● Puerto: Para diferenciar las peticiones de los múltiples clientes además de la dirección IP se usa un número de puerto entre 1 y 65535. Cada servicio que corre en una máquina tiene asignado uno o más de esos números. Hay usos predeterminados para estos números. Si no se

27

especifica se entiende el que se usa por defecto. El fichero /etc/services muestra los puertos predeterminados para cada servicio.

● Socket: Elemento de programación que permite a dos máquinas comunicarse a través de una red, mediante el uso de la IP de origen, la IP de destino y el número de puerto. Se crea un socket cuando hay una conexión entre el cliente y el servidor.

● Protocolo: lenguaje por el cual se comunican el cliente y servidor. ​

Figura 2.2.6.A. Diagrama de funcionamiento de servidores web

28

2.2.6.1. Apache

El servidor HTTP Apache es un servidor web HTTP de código abierto, para plataformas (BSD, GNU/Linux, etc.), Microsoft Windows, Macintosh y otras, que implementa el protocolo HTTP/1.12 y la noción de sitio virtual. Cuando comenzó su desarrollo en 1995 se basó inicialmente en código del popular NCSA HTTPd 1.3, pero más tarde fue reescrito por completo. Su nombre se debe a que alguien quería que tuviese la connotación de algo que es firme y enérgico pero no agresivo, y la tribu Apache fue la última en rendirse al que pronto se convertiría en gobierno de EEUU, y en esos momentos la preocupación de su grupo era que llegasen las empresas a civilizar el paisaje que habían creado los primeros ingenieros de internet. Además Apache consistía solamente en un conjunto de parches a aplicar al servidor de NCSA. En inglés, a patchy server (un ​ servidor "parcheado") suena igual que Apache Server.

El servidor Apache es desarrollado y mantenido por una comunidad de usuarios bajo la supervisión de la Apache Software Foundation dentro del proyecto HTTP Server (httpd).

Apache presenta entre otras características altamente configurables, bases de datos de autenticación y negociado de contenido, pero fue criticado por la falta de una interfaz gráfica que ayude en su configuración.

Apache tiene amplia aceptación en la red: desde 1996, Apache, es el servidor HTTP más usado. Jugó un papel fundamental en el desarrollo fundamental de la World Wide Web y alcanzó su máxima cuota de mercado en ​ 2005 siendo el servidor empleado en el 70% de los sitios web en el mundo, sin embargo ha sufrido un descenso en su cuota de mercado en los últimos años.

29

(Estadísticas históricas y de uso diario proporcionadas por Netcraft). En 2009 se convirtió en el primer servidor web en alojar más de 100 millones de sitios web.

La mayoría de las vulnerabilidades de la seguridad descubiertas y resueltas tan sólo pueden ser aprovechadas por usuarios locales y no remotamente. Sin embargo, algunas se pueden accionar remotamente en ciertas situaciones, o explotar por los usuarios locales malévolos en las disposiciones de

[7] recibimiento compartidas que utilizan PHP como módulo de Apache .​ ​

2.2.6.2 Uso de Apache

Apache es usado principalmente para enviar páginas web estáticas y dinámicas en la World Wide Web. Muchas aplicaciones web están diseñadas asumiendo como ambiente de implantación a Apache, o que utilizarán características propias de este servidor web.

Apache es el componente de servidor web en la popular plataforma de aplicaciones LAMP, junto a MySQL y los lenguajes de programación PHP/Perl/Python (y ahora también Ruby).

Este servidor web es redistribuido como parte de varios paquetes propietarios de software, incluyendo la base de datos Oracle y el IBM ​ WebSphere application server. Mac OS X integra apache como parte de su ​ propio servidor web y como soporte de su servidor de aplicaciones WebObjects. ​ ​ Es soportado de alguna manera por Borland en las herramientas de desarrollo Kylix y Delphi. Apache es incluido con Novell NetWare 6.5, donde es el servidor web por defecto, y en muchas distribuciones Linux.

30

Apache es usado para muchas otras tareas donde el contenido necesita ser puesto a disposición en una forma segura y confiable. Un ejemplo es al momento de compartir archivos desde una computadora personal hacia Internet. Un usuario que tiene Apache instalado en su escritorio puede colocar arbitrariamente archivos en la raíz de documentos de Apache, desde donde pueden ser compartidos.

Los programadores de aplicaciones web a veces utilizan una versión local de Apache con el fin de previsualizar y probar código mientras éste es desarrollado.

Microsoft Internet Information Services (IIS) es el principal competidor de Apache, así como Sun Java System de Sun Microsystems y un anfitrión de otras aplicaciones como Zeus Web Server. Algunos de los más grandes sitios web del mundo están ejecutándose sobre Apache. La capa frontal (front­end) del motor de búsqueda Google está basado en una versión modificada de Apache, denominada Google Web Server (GWS). Muchos proyectos de Wikimedia también se ejecutan sobre servidores web Apache.

2.2.6.3. Configuración de Apache

La mayor parte de la configuración se realiza en el fichero apache2.conf (Ubuntu) o httpd.conf (Otros). Cualquier cambio en este archivo requiere reiniciar el servidor, o forzar la lectura de los archivos de configuración nuevamente.

2.2.6.4. Licencia de Apache

La licencia de software bajo la cual el software de la fundación Apache es distribuido es una parte distintiva de la historia de Apache HTTP Server y de la

31

comunidad de código abierto. La Licencia Apache permite la distribución de derivados de código abierto y cerrado a partir de su código fuente original.

La Free Software Foundation no considera a la Licencia Apache como ​ compatible con la versión 2 de la GNU General Public License (GPL), en la cual el software licenciado bajo la Apache License no puede ser integrado con software distribuido bajo la GPL:

“Este es software libre pero es incompatible con la GPL. La Apache Software License es incompatible con la GPL porque tiene un requerimiento específico que no está incluido en la GPL: tiene ciertos casos de terminación de patentes que la GPL no requiere. No consideramos que dichos casos de terminación de patentes son inherentemente una mala idea, pero a pesar de ello son incompatibles con la GNU GPL.”

Sin embargo, la versión 3 de la GPL incluye una provisión (Sección 7e) que le permite ser compatible con licencias que tienen cláusulas de represalia de patentes, incluyendo a la Licencia Apache. El nombre Apache es una marca registrada y puede ser sólo utilizada con el permiso expreso del dueño de la marca.

2.2.7. Apache Tomcat

Apache Tomcat (también llamado Jakarta Tomcat o simplemente Tomcat) funciona como un contenedor de servlets desarrollado bajo el proyecto Jakarta en la Apache Software Foundation. Tomcat implementa las especificaciones de los servlets y de JavaServer Pages (JSP) de Oracle Corporation (aunque creado por Sun Microsystems).

32

2.2.7.1. Historia

Tomcat empezó siendo una implementación de la especificación de los servlets comenzada por James Duncan Davidson, que trabajaba como arquitecto de software en Sun Microsystems y que posteriormente ayudó a hacer al proyecto de código abierto y en su donación a la Apache Software Foundation.

Duncan Davidson inicialmente esperaba que el proyecto se convirtiese en software de código abierto y dado que la mayoría de los proyectos de este tipo tienen libros de O'Reilly asociados con un animal en la portada, quiso ponerle al proyecto nombre de animal. Eligió Tomcat (gato), pretendiendo representar la capacidad de cuidarse por sí mismo, de ser independiente.

2.2.7.2. Entorno

Tomcat es un contenedor web con soporte de servlets y JSPs. Tomcat no es un servidor de aplicaciones, como JBoss o JOnAS. Incluye el compilador Jasper, que compila JSPs convirtiéndolas en servlets. El motor de servlets de Tomcat a menudo se presenta en combinación con el servidor web Apache.

Tomcat puede funcionar como servidor web por sí mismo. En sus inicios existió la percepción de que el uso de Tomcat de forma autónoma era sólo recomendable para entornos de desarrollo y entornos con requisitos mínimos de velocidad y gestión de transacciones. Hoy en día ya no existe esa percepción y Tomcat es usado como servidor web autónomo en entornos con alto nivel de tráfico y alta disponibilidad.

Dado que Tomcat fue escrito en Java, funciona en cualquier sistema operativo que disponga de la máquina virtual Java.

33

2.2.7.3. Estructura de directorios

La jerarquía de directorios de instalación de Tomcat incluye:

● bin ­ arranque, cierre, y otros scripts y ejecutables. ​ ● common ­ clases comunes que pueden utilizar Catalina y las aplicaciones web. ● conf ­ ficheros XML y los correspondientes DTD para la configuración de Tomcat. ● logs ­ logs de Catalina y de las aplicaciones. ​ ● server ­ clases utilizadas solamente por Catalina. ​ ● shared ­ clases compartidas por todas las aplicaciones web. ​ ● webapps ­ directorio que contiene las aplicaciones web. ​ ● work ­ almacenamiento temporal de ficheros y directorios. ​

34

III. ESTADO DEL ARTE

3.1. Descripción

Un change request es un documento que contiene una solicitud de ajuste ​ ​ para un sistema específico; es de suma importancia en el proceso de gestión de cambios dentro de una organización.

Un change request establece lo que necesita lograrse, y detalla de forma ​ ​ simple los instrumentos necesario para llevar a cabo el proceso que se requiere. Algunos elementos importantes, son el ID del usuario, el deadline y un indicador ​ de cuándo debe realizarse el cambio; de manera opcional, debe aclararse el tipo de cambio que va a realizarse en función al dominio para el que este cambio se va a aplicar.

Figura 3.1.A. Diagrama de un change request

35

3.1.1. Subprocesos

Soporte a la gestión de cambios Proveer plantillas y orientación para la autorización de cambios, y facilitar información sobre cambios activos y proyectados a los encargados de otros procesos de Gestión de Servicios de TI.

Registro y pre evaluación de solicitudes de cambio

Descartar aquellas Solicitudes de Cambio que no contengan toda la información necesaria para su evaluación o que no resulten viables.

Clasificación de solicitudes de cambio

Verificar que la prioridad de un Cambio propuesto haya sido determinada de forma correcta por el proponente y determinar el nivel de autoridad adecuado para aprobar o rechazar determinadas Solicitudes de Cambio.

Evaluación de solicitudes de cambio urgentes

Autorizar, ajustar o rechazar una Solicitud de Cambio Urgente lo antes posible. Se recurre a este proceso cuando los procedimientos regulares de Gestión de Cambios no son aplicables, dada la acción inmediata requerida en casos de emergencia.

36

3.1.2. Evaluación de Cambios

Gestor de cambios Autorizar o rechazar un cambio propuesto, así como asegurar una programación preliminar y la incorporación del mismo al Calendario de Cambios.

Programación de cambios

Acordar la programación preliminar para la implementación de cambios y asignar responsabilidad por la implementación de los mismos a la Gestión de Proyectos y la Gestión de Ediciones.

Revisión post­implementación

Evaluar la implementación de cambios y los resultados obtenidos, de manera que se constate la presencia del historial completo de actividades para referencia futura, y asegurar que se hayan analizado errores y aprendido lecciones.

37

IV. CHANGE REQUEST SYSTEM

4.1. Descripción del sistema

Debido a la naturaleza del proceso de desarrollo, y al acuerdo de confidencialidad firmado con la compañía, sólo pueden ser compartidos ciertos datos relacionados con el desarrollo de esta aplicación, y debido a ello, sólo se mostrarán algunas metodologías, pantallas y funciones consideradas como de dominio público, y que no afectan de forma directa con los procesos internos de ​ la empresa ni la información correspondiente a las actividades que aquí se realizan.

4.2. Modelo de prototipos

El modelo de prototipos permite que todo el sistema, o algunos de sus partes, se construyan rápidamente para comprender con facilidad y aclarar ciertos aspectos en los que se aseguren que el desarrollador, el usuario, el cliente estén de acuerdo en lo que se necesita así como también la solución que se propone para dicha necesidad y de esta forma minimizar el riesgo y la incertidumbre en el desarrollo, este modelo se encarga del desarrollo de diseños para que estos sean analizados y prescindir de ellos a medida que se adhieran nuevas especificaciones, es ideal para medir el alcance del producto, pero no se asegura su uso real.

Este modelo principalmente se lo aplica cuando un cliente define un conjunto de objetivos generales para el software a desarrollarse sin delimitar detalladamente los requisitos de entrada procesamiento y salida, es decir cuando el responsable no está seguro de la eficacia de un algoritmo, de la adaptabilidad

38

del sistema o de la forma en que interactúa el hombre y la máquina. Este modelo se encarga principalmente de ayudar al ingeniero de sistemas y al cliente a entender de mejor manera cuál será el resultado de la construcción cuando los requisitos estén satisfechos.

El paradigma de construcción de prototipos tiene tres pasos:

● Escuchar al cliente. Recolección de requisitos. Se encuentran y definen los objetivos globales, se identifican los requisitos conocidos y las áreas donde es obligatorio más definición. ● Construir y revisar la maqueta (prototipo). ● El cliente prueba la maqueta (prototipo) y lo utiliza para refinar los requisitos del software.

Este modelo es útil cuando:

● El cliente no identifica los requisitos detallados. ● El responsable del desarrollo no está seguro de la eficiencia de un algoritmo, sistema operativo o de la interface hombre­máquina.

39

4.2.1. Etapas para la elaboración del modelo de prototipo

Figura 4.2.1.A. Etapas del Modelo de prototipo

4.2.2. Ciclo de vida de un sistema basado en prototipo

Una maqueta o prototipo de pantallas muestra la interfaz de la aplicación, su cara externa, pero dicha interfaz está fija, estática, no procesa datos. El prototipo no tiene desarrollada una lógica interna, sólo muestra las pantallas por las que irá pasando la futura aplicación.

40

Por su parte, el prototipo funcional evolutivo desarrolla un comportamiento que satisface los requisitos y necesidades que se han entendido claramente. Realiza, por tanto, un un proceso real de datos, para contrastarlo con el usuario. Se va modificando y desarrollando sobre la marcha, según las apreciaciones del cliente. Esto ralentiza el proceso de desarrollo y disminuye la fiabilidad, puesto que el software está constantemente variando, pero, a la larga, genera un producto más seguro, en cuanto a la satisfacción de las necesidades del cliente.

Cuando un prototipo se desarrolla con el sólo propósito de precisar mejor las necesidades del cliente y después no se va a aprovechar ni total ni parcialmente en la implementación del sistema final se habla de un prototipo desechable. Para que la construcción de prototipos sea posible se debe contar con la participación activa del cliente.

Figura 4.2.2.A. Ciclo de vida del prototipo

41

4.2.3. Ventajas del modelo de prototipo

Este modelo es útil cuando el cliente conoce los objetivos generales para el software, pero no identifica los requisitos detallados de entrada, procesamiento o salida. También ofrece un mejor enfoque cuando el responsable del desarrollo del software está inseguro de la eficacia de un algoritmo, de la adaptabilidad de un sistema operativo o de la forma que debería tomar la interacción humano­máquina.

4.2.4. Desventajas del modelo de prototipo

Su principal desventaja es que una vez que el cliente ha dado su aprobación final al prototipo y cree que está a punto de recibir el proyecto final, se encuentra con que es necesario reescribir buena parte del prototipo para hacerlo funcional, porque lo más seguro es que el desarrollador haya hecho compromisos de implementación para hacer que el prototipo funcione rápidamente. Es posible que el prototipo sea muy lento, muy grande, no muy amigable en su uso, o incluso, que esté escrito en un lenguaje de programación poco adecuado.

El cliente ve funcionando lo que para él es la primera versión del prototipo que ha sido construido con "plastilina y alambres", y puede desilusionarse al decirle que el sistema aún no ha sido construido. El desarrollador puede ampliar el prototipo para construir el sistema final sin tener en cuenta los compromisos de

[8] calidad y de mantenimiento que tiene con el cliente .​ ​

42

4.3. Herramientas CASE

Se puede definir a las Herramientas CASE como un conjunto de programas y ayudas que dan asistencia a los analistas, ingenieros de software y desarrolladores, durante todos los pasos del ciclo de vida de desarrollo de un Software.

El empleo de herramientas Case permiten integrar el proceso de ciclo de vida:

● Análisis de datos y procesos integrados mediante un repositorio. ● Generación de interfaces entre el análisis y el diseño. ● Generación del código a partir del diseño. ● Control de mantenimiento.

Entre los beneficios más significativos de las herramientas CASE se enumeran los siguientes:

Facilidad para la revisión de aplicaciones

La experiencia muestra que una vez que las aplicaciones se implementan, se emplean por mucho tiempo. Las herramientas CASE proporcionan un beneficio substancial para las organizaciones al facilitar la revisión de las aplicaciones. Contar con un depósito central agiliza el proceso de revisión ya que éste proporciona bases para las definiciones y estándares para los datos. Las capacidades de generación interna, si se encuentran presentes, contribuyen a modificar el sistema por medio de las especificaciones más que por los ajustes al código fuente.

43

Soporte para el desarrollo de prototipos de sistemas

En general, el desarrollo de prototipos de aplicaciones toma varias formas. En ocasiones se desarrollan diseños para pantallas y reportes con la finalidad de mostrar la organización y composición de los datos, encabezados y mensajes. Los ajustes necesarios al diseño se hacen con rapidez para alterar la presentación y las características de la interface. Sin embargo, no se prepara el código fuente, de naturaleza orientada hacia procedimientos, como una parte del prototipo. Como disyuntiva, el desarrollo de prototipos puede producir un sistema que funcione. Las características de entrada y salida son desarrolladas junto con el código orientado hacia los procedimientos y archivos de datos.

Generación de código

La ventaja más visible de esta característica es la disminución del tiempo necesario para preparar un programa. Sin embargo, la generación del código también asegura una estructura estándar y consistente para el programa (lo que tiene gran influencia en el mantenimiento) y disminuye la ocurrencia de varios tipos de errores, mejorando de esta manera la calidad. Las características de la generación del código permiten volver a utilizar el software y las estructuras estándares para generar dicho código, así como el cambio de una especificación modular, lo que significa volver a generar el código y los enlaces con otros módulos.

44

Mejora en la habilidad para satisfacer los requerimientos del usuario

Es bien conocida la importancia de satisfacer los requerimientos del usuario, ya que esto guarda relación con el éxito del sistema. De manera similar, tener los requerimientos correctos mejora la calidad de las prácticas de desarrollo. Las herramientas CASE disminuyen el tiempo de desarrollo, una característica que es importante para los usuarios. Las herramientas afectan la naturaleza y cantidad de interacción entre los encargados del desarrollo y el usuario. Las descripciones gráficas y los diagramas, así como los prototipos de reportes y la composición de las pantallas, contribuyen a un intercambio de ideas más efectivo.

Soporte interactivo para el proceso de desarrollo

La experiencia ha demostrado que el desarrollo de sistemas es un proceso interactivo. Las herramientas CASE soportan pasos interactivos al eliminar el tedio manual de dibujar diagramas, elaborar catálogos y clasificar. Como resultado de esto, se anticipa que los analistas revisarán los detalles del sistema con mayor frecuencia y en forma más consistente.

4.3.1. Ejemplos de Herramientas CASE

● Microsoft Project ● Rational Rose ● JDeveloper ● MagicDraw ● Visual Paradigm ● Microsoft Visio ● Enterprise Architect

45

4.4. Funcionalidades del sistema

Las funcionalidades básicas del sistema, corresponden a los siguientes módulos:

● Registro de usuarios: Incluye el alta, modificación y asignación de permisos de acceso a los diversos empleados de la compañía.

● Levantamiento de Change Request: En esta sección se harán las peticiones por parte de los usuarios para la realización de cambios en el sistema o la instalación de nuevo software.

● Listado de software: Es un catálogo que contiene todo el software disponible para instalar en las estaciones de trabajo, las arquitecturas correspondientes, los períodos que comprenden las licencias de cada uno de estos mismos softwares y los sistemas operativos a los que corresponden.

● Inventario: Este catálogo almacena la información de las estaciones de trabajo y establece la relación que tienen con los empleados de la compañía.

● Aprobaciones: Aquí se almacenan y gestionan los niveles de aprobación y el estado en el que se encuentran los change requests asignados a las diversas estaciones de trabajo y los softwares que se hayan solicitado.

● Historial de cambios: Es un catálogo en forma de registro de todos los movimientos, peticiones y aprobaciones que se han hecho a lo largo del

46

tiempo dentro de todos los departamentos correspondientes y sus diversas estaciones de trabajo.

4.5. Interfaz gráfica

Figura 4.5.A. Inicio de sesión de usuarios

Figura 4.5.B. Formato básico de catálogo

47

Figura 4.5.C. Apariencia básica de tabla

Figura 4.5.D. Formato de creación y búsqueda de usuarios

48

V. CONCLUSIONES

5.1. Resultados

Dado a que el proyecto concluyó en una versión de prueba para usuarios finales, aún está propenso a recibir retroalimentación y reportes de fallas o errores por parte de los mismos usuarios. Sin embargo, al contar ahora con un método por el cual los empleados puedan realizar solicitudes de cambios de forma más directa y contando con un seguimiento apropiado, se aceleraron procesos relativos al cumplimiento de objetivos de las actividades designadas para cada sector, lo que promueve un mejor desarrollo de los proyecto, y un aumento significativo en la calidad de cada módulo.

5.2. Dificultades

Las principales dificultades con las cuáles el equipo de trabajo se enfrentó durante la realización del proyecto y las actividades subsecuentes de ello fueron, en primera instancia, la falta de conocimientos técnicos en áreas muy específicas de algunos módulos. Esto llevó como consecuencia a un pequeño retraso en el desarrollo de las actividades necesarias para la conclusión del sistema. Para ello, fue necesaria asesoría e instrucción relativa a esas tecnologías de las que el equipo carecía y se pudieron sobrellevar situaciones que no llevaron a mayores.

49

5.3. Futuros lanzamientos

Para futuros lanzamientos y mejoras del sistema, se pretende realizar una mejor interfaz gráfica, mucho más adaptable a dispositivos móviles y portátiles para facilitar el uso del sistema en cualquier entorno de trabajo, y agilizar así aún más el proceso de peticiones.

5.4. Conclusión

Actualmente son necesarias las implementaciones de sistemas que faciliten y automaticen los procesos que se requiere llevar a cabo por parte de las personas que integran una corporación, sobre todo cuando se trata de multinacionales en las que no pueden permitirse detener procesos de producción, y en los que es necesario llevar a cabo ajustes y cambios de manera rápida y efectiva.

El acercamiento que utilizamos para poder resolver el problema que la empresa estaba enfrentando fue el apropiado, y el enfoque logró alcanzar en su totalidad el objetivo, ya que se cumplieron los requerimientos solicitados para la realización de este proyecto, sin excepción.

50

BIBLIOGRAFÍA

[1] Historia de Tata Consultancy Services Limited. (2015, Diciembre). [En línea]. Disponible en: http://www.tcs.com/worldwide/es/es/acerca­de­TCS/Pages/default.aspx ​

[2] Martínez, Jorge, “Fundamentos de programación en Java”, Facultad de Informática, Universidad Complutense de Madrid, Editorial EME, 1999, pp. 2­3.

[3] Asociación Española de Programadores Informáticos, “Introducción al IDE Eclipse”, 2012, pp. 8­13

[4] Suárez, Héctor, “Manual Hibernate”, Java Hispano, 2003, pp. 4­6.

[5] Muñoz, Mario y Fernández, Norberto, “JSP (I)”, Departamento de Ingeniería Telemática, 2006, pp. 1­3

[6] García, Juan, “Introducción a JSP”, Colegio de Informáticos de Madrid, 2004, cap. 1.

[7] About the Apache HTTP Server Project (En inglés). (2015, Diciembre). [En línea]. Disponible en: http://httpd.apache.org/ABOUT_APACHE.html ​

[8] Brenton J., García G. y Rojas I., “Reseña del Modelo de Prototipo y Herramientas Case”, 2011, pp. 130­135, 148­150

51

GLOSARIO

Back­end: hace referencia al estado final de un proceso, en el que se lleva a cabo el ​ mecanismo que el usuario final no suele tener acceso.

BD: Base de datos. ​

BPO: Subcontratación de Procesos de Negocios, del inglés: Business Process Outsourcing, es la subcontratación de funciones del proceso de negocio en proveedores de servicios, ya sea internos o externos a la empresa, usualmente menos costosos o más eficientes y eficaces.

Bytecode: es un código intermedio más abstracto que el código máquina. ​ Habitualmente es tratado como un archivo binario que contiene un programa ejecutable similar a un módulo objeto, que es un archivo binario producido por el compilador cuyo contenido es el código objeto o código máquina.

Caché: es la memoria de acceso rápido de una computadora, que guarda ​ temporalmente los datos recientemente procesados.

CMMi: Modelo de Madurez de la Capacidad Integrado (del inglés: Capability Maturity ​ Model for Integration) es un modelo de procesos que contiene las mejores prácticas de la industria para el desarrollo, mantenimiento, adquisición y operación de productos y servicios.

Código abierto: es la expresión con la que se conoce al software o hardware ​ distribuido y desarrollado libremente. Se focaliza más en los beneficios prácticos que en cuestiones éticas o de libertad que tanto se destacan en el software libre. Para muchos

52

el término “libre” hace referencia al hecho de adquirir un software de manera gratuita, pero más que eso, la libertad se refiere al hecho de poder modificar la fuente del programa sin restricciones de licencia, ya que muchas empresas de software encierran su código, ocultándose y restringiendo los derechos a sí misma.

Consultoría: es un servicio profesional prestado por empresas, o por profesionales en forma individual −conocidas como consultoras o consultores respectivamente− con experiencia o conocimiento específico en un área, asesorando personas, asesorando a otras empresas, a grupos de empresas, a países o a organizaciones en general.

Depuración: es el proceso de identificar y corregir errores de programación. ​

Entity Beans: son componentes de datos que conocen cómo utilizar una unidad de ​ almacenamiento para mantener la información que guardan en forma persistente. Por tanto proporcionan una capa que envuelve el almacenamiento de los datos simplificando la tarea de su acceso y manipulación.

Framework: define, en términos generales, un conjunto estandarizado de conceptos, ​ prácticas y criterios para enfocar un tipo de problemática particular que sirve como referencia, para enfrentar y resolver nuevos problemas de índole similar.

Front­end: La idea general es que el front­end es responsable de recoger entradas de ​ los usuarios, y ser procesadas de tal manera que cumplan las especificaciones para que el back­end pueda usarlas.

GNU GPL: La Licencia Pública General de GNU o más conocida por su nombre en inglés GNU General Public License, es la licencia más ampliamente usada en el mundo del software y garantiza a los usuarios finales (personas, organizaciones, compañías) la libertad de usar, estudiar, compartir (copiar) y modificar el software. Su propósito es

53

declarar que el software cubierto por esta licencia es software libre y protegerlo de intentos de apropiación que restrinjan esas libertades a los usuarios. Esta licencia fue creada originalmente por Richard Stallman fundador de la Free Software Foundation (FSF) para el proyecto GNU.

Grid Computing: es una tecnología innovadora que permite utilizar de forma coordinada todo tipo de recursos (entre ellos cómputo, almacenamiento y aplicaciones específicas) que no están sujetos a un control centralizado.

GUI: La interfaz gráfica de usuario, conocida también como GUI (del inglés graphical ​ user interface), es un programa informático que actúa de interfaz de usuario, utilizando un conjunto de imágenes y objetos gráficos para representar la información y acciones disponibles en la interfaz. Su principal uso, consiste en proporcionar un entorno visual sencillo para permitir la comunicación con el sistema operativo de una máquina o computador.

HQL: se parece a SQL. Sin embargo, comparado con SQL, HQL es completamente ​ orientado a objetos y comprende nociones como herencia, polimorfismo y asociación.

HTML: de HyperText Markup Language («lenguaje de marcas de hipertexto»), hace ​ referencia al lenguaje de marcado para la elaboración de páginas web.

IDE: Un ambiente de desarrollo integrado o entorno de desarrollo interactivo, en inglés ​ Integrated Development Environment, es una aplicación informática que proporciona servicios integrales para facilitarle al desarrollador o programador el desarrollo de software.

IEEE: El Instituto de Ingeniería Eléctrica y Electrónica —abreviado como IEEE, leído ​ i­triple­e en Hispanoamérica o i­e­cubo en España; en inglés Institute of Electrical and

54

Electronics Engineers— es una asociación mundial de ingenieros dedicada a la estandarización y el desarrollo en áreas técnicas.

IQMS: Integrated Quality Management Systems. ​

ISO: La Organización Internacional de Normalización o ISO, nacida tras la Segunda ​ Guerra Mundial, es el organismo encargado de promover el desarrollo de normas internacionales de fabricación (tanto de productos como de servicios), comercio y comunicación para todas las ramas industriales. Su función principal es la de buscar la estandarización de normas de productos y seguridad para las empresas u organizaciones (públicas o privadas) a nivel internacional.

JDO: Java Data Objects proporciona una forma estándar y sencilla de conseguir la ​ persistencia de objetos en la tecnología Java. JDO utiliza una combinación práctica de metadatos XML y bytecodes mejorados para hacer más sencilla la complejidad y al sobrecarga, comparado con otras tecnologías de unión de objetos.

JPEG: Joint Photographic Experts Group, Grupo Conjunto de Expertos en Fotografía, ​ es el nombre de un comité de expertos que creó un estándar de compresión y codificación de archivos e imágenes fijas.

LAMP: es el acrónimo usado para describir un sistema de infraestructura de internet ​ que usa las siguientes herramientas:

● Linux, el sistema operativo; En algunos casos también se refiere a LDAP. ​ ● Apache, el servidor web; ​ ● MySQL/MariaDB, el gestor de bases de datos; ​ ● Perl, PHP, o Python, los lenguajes de programación. ​

55

OLTP: es la sigla en inglés de Procesamiento de Transacciones En Línea (OnLine Transaction Processing) es un tipo de procesamiento que facilita y administra aplicaciones transaccionales, usualmente para entrada de datos y recuperación y procesamiento de transacciones (gestor transaccional). Los paquetes de software para OLTP se basan en la arquitectura cliente­servidor ya que suelen ser utilizados por empresas con una red informática distribuida.

Open Source: es la expresión en inglés para Código Abierto. ​

ORM: es una técnica de programación para convertir datos entre el sistema de tipos ​ utilizado en un lenguaje de programación orientado a objetos y la utilización de una base de datos relacional como motor de persistencia.

Outsourcing: La subcontratación, externalización de la mercadotecnia o tercerización ​ (del neologismo inglés: outsourcing) es el proceso económico empresarial en el que una sociedad mercantil transfiere los recursos y las responsabilidades referentes al cumplimiento de ciertas tareas a una sociedad externa, empresa de gestión o subcontratista, que precisamente se dedica a la prestación de diferentes servicios especializados.

PDF: sigla del inglés Portable Document Format, “formato de documento portátil”. Es un ​ formato de almacenamiento para documentos digitales independiente de plataformas de software o hardware. Este formato es de tipo compuesto (imagen vectorial, mapa de bits y texto).

PHP: es un lenguaje de programación de uso general de código del lado del servidor ​ originalmente diseñado para el desarrollo web de contenido dinámico. Fue uno de los primeros lenguajes de programación del lado del servidor que se podían incorporar

56

directamente en el documento HTML en lugar de llamar a un archivo externo que procese los datos. El código es interpretado por un servidor web con un módulo de procesador de PHP que genera la página Web resultante. PHP ha evolucionado por lo que ahora incluye también una interfaz de línea de comandos que puede ser usada en aplicaciones gráficas independientes. Puede ser usado en la mayoría de los servidores web al igual que en casi todos los sistemas operativos y plataformas sin ningún costo.

Plugins: es una aplicación (o programa informático) que se relaciona con otra para ​ agregarle una función nueva y generalmente muy específica. Esta aplicación adicional es ejecutada por la aplicación principal e interactúan por medio de la interfaz de programación de aplicaciones.

También se conoce por los término en inglés, plug­in ("enchufable" o "inserción") o add­on ("añadido"), y como conector o extensión.

POJO: acrónimo de Plain Old Java Object. Es una sigla creada por Martin Fowler, ​ Rebecca Parsons y Josh McKenzie en septiembre de 2000 y utilizada por programadores Java para enfatizar el uso de clases simples y que no dependen de un framework en especial. Este acrónimo surge como una reacción en el mundo Java a los frameworks cada vez más complejos, y que requieren un complicado andamiaje que esconde el problema que realmente se está modelando.

SQL: por sus siglas en inglés Structured Query Language, es un lenguaje declarativo ​ de acceso a bases de datos relacionales que permite especificar diversos tipos de operaciones en ellas.

57

TI: Tecnología de la información (o más conocida como IT por su significado en inglés: ​ information technology) es la aplicación de ordenadores y equipos de telecomunicación para almacenar, recuperar, transmitir y manipular datos, con frecuencia utilizado en el contexto de los negocios u otras empresas.

World Wide Web: la World Wide Web o red informática mundial es un sistema de ​ distribución de documentos de hipertexto o hipermedios interconectados y accesibles vía Internet. Con un navegador web, un usuario visualiza sitios web compuestos de páginas web que pueden contener texto, imágenes, vídeos u otros contenidos multimedia, y navega a través de esas páginas usando hiperenlaces.

XML: en inglés de eXtensible Markup Language (“lenguaje de marcas extensible”), es ​ ​ ​ ​ ​ ​ ​ un lenguaje de marcas desarrollado por el World Wide Web Consortium (W3C) utilizado para almacenar datos en forma legible.

58