Entornos para el desarrollo de grandes aplicaciones de gestión de redes Virgilio Gilart Iglesias1 y Alfonso Capella D’alton1 1 Departamento de Tecnología Informática y Computación, Universidad de Alicante AP. 99, 03080, Alicante, España {vgilart, acapella}@dtic.ua.es http://www.ua.es/i2rc Resumen. Como consecuencia de la globalización de la economía y la evolución de los sistemas logísticos y de telecomunicaciones, han surgido nuevos modelos de negocio para los que las arquitecturas tradicionales no ofrecen una solución adecuada. La apertura de mercados a nivel mundial y la dispersión de las propias empresas precisan de arquitecturas de aplicación distribuidas, segmentadas en múltiples niveles y con amplias capacidades de interconexión e interoperabilidad. En este contexto, surgen plataformas empresariales, como J2EE y .NET, que satisfacen los requerimientos de los nuevos modelos de negocio emergentes. Dichas plataformas introducen una complejidad tecnológica que hace necesaria la adopción de un entorno de trabajo, metodológico y sistemático, sostenido por una infraestructura adecuada. En este artículo proponemos un modelo de trabajo junto con las tecnologías y herramientas más adecuadas que dé soporte a la creación y mantenimiento de grandes aplicaciones y servicios capaces de cubrir estas necesidades al tiempo que aprovechan el verdadero potencial que ofrece Internet. Introducción Internet se ha convertido en un medio que ha cambiado la forma de comprender los negocios empresariales [1]. Las organizaciones encuentran en este entorno nuevos modelos de competencia —relaciones entre empresas, formas de captar clientes e introducción en nuevos mercados— que, por su elevado coste, estaban reservados únicamente a las grandes corporaciones. Todas estas transformaciones llevan asociadas la aparición de nuevos requerimientos, no contemplados por los modelos de software tradicionales, y que, por lo tanto, obligan a adoptar nuevas estrategias para adaptar los procesos de negocio y sistemas software — reingeniería de procesos. Para la mayoría de las organizaciones la resistencia a los cambios suele ser elevada e incluso a veces traumática [1]. Esto se debe principalmente al esfuerzo que requiere abandonar la cultura empresarial creada, a la complejidad de integración de los sistemas heredados que contienen información de vital importancia para la organización, a la modificación de las infraestructuras establecidas y a la creación de procesos de aprendizaje y formación de sus empleados. Sin embargo, a pesar de estas dificultades, la aparición de nuevas empresas que se adaptan con rapidez a estas tecnologías fuerza al resto a evolucionar hacia estos entornos [1]. Las arquitecturas tradicionales no proporcionan una solución global a las necesidades planteadas por los nuevos modelos de negocio puesto que muchos de los requerimientos que plantean no formaban parte de su diseño: estándares que faciliten la integración entre aplicaciones y diferentes dispositivos [3,4], escalabilidad que permita que las aplicaciones crezcan a la vez que crece el negocio [2,4], flexibilidad frente a las nuevas tecnologías y sistemas de computación ubicua [3,4], seguridad en entornos no fiables y proclives a ataques [7], portabilidad a diferentes sistemas [4]. Para llenar este hueco aparece una nueva generación de plataformas software basadas en componentes sobre arquitecturas distribuidas (n-niveles), que ofrecen una solución completa que permite abordar los nuevos modelos de negocio y que aprovechan el entorno tecnológico que propone Internet [1]. Ante los nuevos modelos de desarrollo y enfoques empresariales surge la necesidad de reemplazar muchas de las prácticas de gestión de proyectos convencionales y requerimientos técnicos por nuevos enfoques. Éstos deben combinar técnicas de éxito, procedentes de experiencias anteriores, con avances tecnológicos en la ingeniería del software [5]. Al igual que las aplicaciones creadas para los nuevos modelos empresariales, las infraestructuras sobre las que se sustenta el desarrollo de dichas aplicaciones deben ser flexibles y escalables para adaptarse a los cambios derivados de los nuevos modelos. Las nuevas plataformas de desarrollo software establecen una serie de roles y filosofías de trabajo derivadas de su arquitectura de n-niveles que permiten la realización de proyectos de manera horizontal [6]. Cada rol tiene un cometido específico que en ciertas etapas del ciclo de vida del software podrán desempeñar de forma paralela mientras que, en otras, deberán hacerlo en cascada. El trabajo en grupo para este tipo de modelos resulta imprescindible y la sincronización de las tareas específicas de cada rol, determinante [4]. En este artículo se propone un marco de trabajo que dé cobertura a la creación y mantenimiento de aplicaciones para los nuevos modelos empresariales basados en componentes distribuidos. Modelo de Entornos Hemos definido el entorno de trabajo para el desarrollo de un producto software como el conjunto de circunstancias y estados en los que se puede encontrar dicho producto a lo largo de su ciclo de vida. Tras este análisis, basado en la experiencia de los componentes del Grupo de Redes – perteneciente a la unidad singular de investigación redes de computadores e informática industrial del Departamento de Tecnología y Computación de la Universidad de Alicante –, hemos definido un modelo del entorno de trabajo que nos proporciona una serie de elementos lógicos, relacionados con el estado del software en un determinado momento y asociado a un conjunto de funciones y roles, con el que abordar los proyectos realizados con las plataformas empresariales mencionadas anteriormente. Figura 1. Modelo de entonos. En la figura 1 se muestra los elementos que componen el modelo y la interacción que existe entre ellos. A continuación se explica cada elemento y sus principales funciones dentro del marco propuesto. El repositorio software El elemento, posiblemente, más importante de nuestro modelo es el Repositorio Software. Podemos definir un repositorio como un almacén, común a un grupo de trabajo, de elementos software necesario para el desarrollo de aplicaciones y la gestión de proyectos. El repositorio software se compone de dos partes bien diferenciadas. - Herramienta de control de versiones - Servidor de archivos distribuidos Con la herramienta de control de versiones tenemos ciertas ventajas para desarrollar aplicaciones: - Control de versiones del software - Facilita el trabajo en grupo - Comparación entre versiones - Facilita los desarrollos de versiones en paralelo Con el servidor de archivo conseguimos tener centralizados todos los documentos de especial interés para el desarrollo de aplicaciones y nos facilita la localización del software necesario para el desarrollo. La justificación principal de estos dos elementos se basa en el grado de cambio que tendrán los archivos almacenados en ambos y que se define a continuación. Repositorio Software Servicio de control de versiones Sistema de archivos distribuidos Figura 2. Elementos del Repositorio Software. Sistema de archivos distribuido El sistema de archivos distribuido nos proporciona la infraestructura necesaria para el almacenamiento de documentos tecnológicos y software que no van a sufrir modificaciones por parte del grupo de trabajo. La documentación almacenada está relacionada con la tecnología que se ha ido utilizando en el desarrollo de proyectos. Existen periodos de autoformación en los cuales se debe buscar información de interes en la red – Internet. En este proceso se debería considerar si la información encontrada puede ser de utilidad para el grupo y para uno mismo. Es una forma de tenerla localizada y compartirla con el resto del equipo. Por otra parte se encuentran las aplicaciones software utilizadas dentro del grupo y de los entornos de trabajo. Utilizar un sistema de archivos distribuidos permite una fácil localización de las herramientas con los cuales se debe trabajar y por lo tanto una mejora de la productividad. Con esta filosofía se pretende evitar los costes de tiempo que supone: la descarga de software de terceros por múltiples usuarios, pérdida de documentación de interés, perdida de software almacenados en diversos dispositivos… Control de versiones Por otra parte existe una serie de archivos – código fuente, documentación, políticas de trabajo – que son susceptibles de a ser modificadas en algún momento. Normalmente estos archivos han sido generados por el equipo y por lo tanto pueden evolucionar y ser mejorados. Estos archivos deben ser compartidos por el conjunto del grupo en función del rol al que pertenezcan. Para ello existen una serie de herramientas de control de versiones imprescindibles a la hora de montar cualquier entorno de desarrollo de medio o alto nivel. En el desarrollo de aplicaciones las herramientas de control de versiones son de gran utilidad para conocer el estado del código fuente en cada momento, proporcionándonos las siguientes ventajas: centralización del código fuente y documentación relacionada con los proyectos, controlar la versión o estado del software que se está desarrollando, regresar a versiones anteriores en caso de errores, facilitar el trabajo en paralelo entre diferentes versiones, control completo de la evolución del software, proporcionar mecanismos para la automatización de tareas de paso de entornos – políticas de etiquetado, facilitar el conocimiento del autor de cada versión y las modificaciones realizadas. Los entornos Podemos definir un entorno, dentro de nuestro marco de trabajo, como la infraestructura necesaria para acometer las tareas específicas requeridas por el producto software, en función del estado en el que se encuentra. En nuestro modelo un producto software sufre una evolución de manera que, en un momento dado, puede encontrase en uno de los siguientes estados: - Desarrollo Integración Demostración Preproducción Producción - Estabilidad + Estabilidad Cada estado define un nivel de estabilidad del software, y la secuencia de estados representa la evolución del producto software desde su fase más temprana – toma de requerimientos – hasta su puesta en funcionamiento – deployment o despliegue en producción. Figura 3. Evolución del producto a través de los distintos entornos del modelo. Estos cinco estados nos definirán los entornos de trabajo que vamos a describir para el desarrollo de nuestras aplicaciones, y cada entorno se centrará en un subconjunto específico de las tareas de creación y mantenimiento de la aplicación. El entorno de desarrollo. El entorno de desarrollo conlleva el abanico más amplio de tareas, que abarca desde el comienzo del ciclo de vida del software – toma de requerimientos – hasta la obtención de una versión minimamente estable de la aplicación, o de un subconjunto de la misma – módulos. En este entorno se llevan acabo las siguientes tareas: • Toma de requerimientos: Una vez hemos concretado las necesidades del cliente y hemos establecido varias reuniones con este fin, es aconsejable documentarlo, de manera que todo el equipo pueda tener una visión global del proyecto – requerimientos funcionales. Este documento se podrá ir completando en posteriores entrevistas puesto que nunca quedan resueltas desde un principio las necesidades funcionales del sistema. En esta fase suele ser necesario usar herramientas de documentación y toma de requerimientos. • Análisis de arquitectura y Diseño técnico: Estas son dos de las tareas más importantes del desarrollo software y que pueden determinar el éxito o fracaso de un proyecto. Se deben realizar las siguientes funciones: acuerdo inequívoco de los requerimientos especificados, elección de la tecnología que pueda abarcar las necesidades del proyecto con una adecuada arquitectura y el diseño de los componentes, localización de las fases más criticas, aportando soluciones de contención ante posibles problemas que pudieran aparecer. Además necesitaremos una serie de herramientas que nos permitan realizar estas funciones de forma productiva. • Implementación: Indica el comienzo de la implementación con la tecnología adecuada elegida en la fase de análisis. Si se ha realizado un buen análisis y modelado técnico se reduce considerablemente la complejidad de la implementación. • Pruebas de unidad y módulos: Estas pruebas se deben realizar sobre los módulos y componentes que cada desarrollador vaya finalizando. Se realizan en un entorno local para comprobar su correcto funcionamiento y poder integrarlas para obtener el producto final. De las anteriores tareas podemos deducir las necesidades tanto software como hardware del entorno de desarrollo, teniendo en cuenta la política de trabajo en equipo que decidamos seguir. Desarrollo en paralelo Los nuevos modelos de desarrollo producen un entorno idóneo para el trabajo en grupo. La división en roles dentro de estos modelos permite que se trabaje a dos niveles: en cascada con roles de diferentes niveles – arquitectos, diseñadores técnicos, desarrolladores, equipo de calidad –; en paralelo dentro del mismo ámbito de funciones – diseñadores de interfaces, programadores de lógica –. Se debe distribuir el proceso, responsabilizándose cada uno de un subconjunto de la de módulos de la aplicación. De esta manera, se puede lograr un paralelismo temporal en el desarrollo – cada grupo trabaja sus módulos en paralelo, de forma simultánea –, que minimice el tiempo de desarrollo, siempre que existan suficientes recursos humanos y tecnológicos. Las dependencias entre módulos pueden reducir el paralelismo temporal en la medida en que un grupo debe esperar a que se completen otros módulos para finalizar las tareas. Un buen diseño – que minimiza las dependencias entre módulos – y una buena planificación temporal – que configura el orden y prioridades óptimos para el desarrollo – evitarán en gran medida estos “tiempos muertos”. Política de trabajo El desarrollo de aplicaciones empresarial es, como ya hemos mencionado, complejo y requiere de un elevado número de servicios y sistemas heredados para su realización. En función de cómo distribuyamos los servicios necesarios para el desarrollo y las pruebas podemos encontrarnos diferentes problemáticas. Servicios compartidos En este esquema de trabajo, los distintos equipos de desarrollo comparten los recursos y servicios necesarios para desarrollar las aplicaciones – bases de datos, servicios de directorios, servidores Web y de aplicaciones. De esta forma, en los equipos locales, únicamente tendremos las herramientas necesarias orientadas al desarrollo y no a las pruebas – mejoramos el rendimiento local. En el mundo real surge un problema con este enfoque. Cuando existen varios desarrolladores que quieren realizar las pruebas básicas de sus módulos pueden realizar cambios sobre los datos o las configuraciones de los servicios compartidos o sobrescribir versiones y generar problemas colaterales que no existían y que pueden disminuir la productividad temporal del proyecto. Servicios en el entorno local Cada miembro del equipo de desarrollo tiene localizado en su equipo local las herramientas y servicios necesarios para desarrollar y realizar las pruebas sobre los módulos. El problema que puede surgir con este enfoque es de rendimiento debido a la saturación. En función de la tecnología utilizada y del equipo disponible podemos tener una perdida de rendimiento que se traduzca en una disminución de la productividad. Enfoque mixto Es una solución de compromiso entre las políticas mencionadas anteriormente en función criterios asociados al recurso o servicio que se quiere utilizar: • Estimación de la probabilidad de interferencias. Cuanto menor sea, mejor se adaptará el recurso al enfoque centralizado. • Coste económico del recurso. Cuanto menor sea, más factible es que se instale en el entorno local. • Coste temporal de la instalación/configuración del recurso. A medida que aumenta el tiempo necesario para instalar y configurar el servicio o la aplicación y aumenta el número de equipos locales el coste temporal se multiplica. En este caso es propicio optar por un enfoque centralizado. El entorno de integración En el entorno de integración se lleva a cabo las siguientes tareas: • • Integración de los distintos módulos que componen la aplicación Pruebas de integración En el proceso de integración tiene especial importancia el sistema de control de versiones. Debemos obtener los fuentes etiquetados con la versión estable que deseamos integrar. Cuando los fuentes son obtenidos se compilan y se genera la aplicación con todos los módulos integrados. Llegados a este punto, debemos poner en funcionamiento la aplicación para someterla a las pruebas de integración. Desplegamos la aplicación basándonos en los documentos generados durante el proyecto. Una vez integrada y activada la aplicación, llevaremos a cabo la secuencia de pruebas. El objetivo de estas pruebas es comprobar el funcionamiento de la aplicación como un todo. En ellas, se trata de probar las funcionalidades que debe cumplir el producto, aunque también debe ser probadas las anteriores funcionalidades para evitar que los cambios introducidos alteren inadvertidamente el comportamiento de las mismas. Si la aplicación satisface las pruebas de integración, entonces está lista para su paso al entorno de preproducción – para realizar las pruebas de calidad – y al entorno de demostración – para permitir el acceso al cliente. En el caso en el que se produzca un error en estas pruebas debemos generar una incidencia – se debe crear una política de gestión de incidencias – y emitirla al encargado del módulo en el cual se produjo. El entorno de preproducción En el entorno de preproducción se lleva a cabo las pruebas finales de la aplicación antes de su paso final al entorno de producción, donde se pondrá en funcionamiento en un escenario real. Para ello, en primer lugar se transfiere la aplicación una vez ha sido validada en el entorno de integración – a ser posible de una forma automatizada. El equipo de calidad, someterá la aplicación a un conjunto exhaustivo de pruebas, de diversos tipos: • Funcionales y estructurales • De rendimiento • De tolerancia a fallos • De seguridad Si estas pruebas, conocidas como de aceptación, resultan satisfactorias, entonces la aplicación está ya lista para su paso al entorno de producción. Si alguna de las pruebas falla debemos seguir el protocolo creado para la gestión de incidencias. El entorno de producción El entorno de producción contiene en todo momento la versión activa de la aplicación. Los usuarios finales tienen acceso a la aplicación implantada en este entorno, de modo que resulta indispensable planificar y adoptar las medidas de seguridad oportunas, en consonancia con la importancia de la información que maneja el sistema. Por otra parte, este entorno también contiene los datos reales, información que es preciso salvaguardar frente a posibles pérdidas mediante la aplicación sistemática de una política de copias de seguridad. También debemos proteger los datos frente a exposición o usos fraudulentos de los mismos, restringiendo su acceso exclusivamente al personal de confianza que administra el sistema. La aplicación se despliega en el entorno de producción procedente de la versión existente en el entorno de preproducción. La subida debería producirse de forma automática para evitar, en la medida de lo posible, la introducción de errores. El entorno de demostración Este entorno tiene dos funciones: posibilitar al cliente el acceso a la aplicación que se está desarrollando y mostrar los productos existentes con el fin de atraer a posibles clientes. La aplicación se transferirá desde el entorno de integración con un proceso similar a la subida a preproducción. Pasos entre entornos Este proceso es uno de los puntos más importantes en el ciclo de vida del software. Debe contar con una serie de procedimientos y protocolos que se cumplan siempre que se produzca un cambio de entorno. Es un proceso crítico que se debe ser mejorado con la experiencia. Vamos a dividir los pasos de entornos en tareas más pequeñas para describir todo el proceso. Desarrollo a Integración Este es el proceso menos crítico de los que se deben llevar a cabo. En este paso participan los siguientes elementos: • • • • Desarrolladores Documentos de despliegue Sistemas de control de versiones Responsable del paso de entorno. Los desarrolladores son los responsables de subir los módulos al sistema de control de versiones y etiquetarlos correctamente conforme a las políticas que se hayan definido. Los documentos de despliegue son muy necesarios puesto que ayudan a tener un control de qué archivos han sido modificados en la versión del proyecto. Si bien puede parecer redundante, puesto que si se ha etiquetado correctamente se tendría localizado, es una buena solución como medida de seguridad que nos evite tener imprevistos. El sistema de control de versiones es necesario puesto que el entorno de integración obtendrá de ahí los archivos que hayan sido modificados. Tener un responsable para esta tarea se hace indispensable para canalizar, a través de una única persona, el proceso de obtención de los archivos modificados. Este rol debe ser asumido por uno de los componentes del proyecto. El proceso es sencillo y consta de los siguientes pasos: • • • • Los desarrolladores deben subir sus módulos correspondientes al sistema de control de versiones. Estos deben ser etiquetados siguiendo la política de etiquetado de la organización. Una vez que se hayan subido todos los módulos el responsable de la integración deberá obtener dichos archivos, seleccionándolos por la etiqueta correspondiente, y actualizarlos en el entorno de integración. Una vez actualizados los archivos en el entorno de integración se procederá a compilar el proyecto y a instalarlo, siguiendo el documento de despliegue. Integración a Preproducción Una vez que el proyecto ha sido validado mediante las pruebas de integración, se etiqueta el proyecto para pasarlo a preproducción. En este paso no se utilizará el sistema de control de versiones. El contenido del entorno de integración se subirá a preproducción. Al igual que en el caso anterior habrá un responsable encargado de desplegar el proyecto en el entorno de preproducción utilizando el documento de despliegue. Dicho documento indica que módulos se deben subir y cual es la localización correspondiente a cada módulo. Preproducción a Producción Este paso es el más crítico de todos. La tarea a realizar es idéntica al paso anterior. Si ha habido algún problema de subida de entorno – por ejemplo, olvidarse subir archivos – debe producirse en el entorno anterior y se debe quedar resuelto antes de llegar a este punto. Caso de estudio: marco de trabajo para el Grupo de Redes Repositorio software Como mencionamos anteriormente, el repositorio software presta dos servicios: el sistema de control de versiones y el sistema de archivos distribuidos. Control de versiones mediante CVS Como herramienta de control de versiones, utilizamos el sistema CVS [8] – Concurrent Versions System, o Sistema de Versiones Concurrentes. Se trata de una aplicaión de software libre ampliamente difundido. En nuestro caso utilizamos el esquema cliente/servidor de manera que todas las versiones de archivos fuente y configuración para cada proyecto se encuentran centralizadas en un servidor. Para un uso más ágil y cómodo del mismo, empleamos clientes con interfaces gráficos de usuario, como WinCVS – para Windows – o Cervisia – disponible para Linux. Por otra parte, en el caso de que necesitemos trabajar con servidores CVS a través de redes inseguras, el sistema admite el empleo de protocolos de transporte seguros (SSL), que cifran la información. A la hora de gestionar los archivos de un proyecto mediante CVS, creamos un módulo por cada proyecto: un módulo CVS es un elemento jerárquico, similar a un directorio, que contiene un conjunto de versiones de archivos. De esta manera, podemos gestionar los permisos de los usuarios CVS restringiendo el acceso a los módulos en función del proyecto asignado y su rol. A fin de organizar los distintos archivos del proyecto, crearemos una estructura de directorios dentro del módulo correspondiente, donde situaremos cada archivo en función de su categoría: • Requerimientos • Diseño • Implementación • Despliegue • Documentación Debido a que la información contenida en el repositorio es sumamente importante y crítica para nuestro negocio, debemos nombrar un administrador del mismo. El administrador velará por la integridad y coherencia del repositorio, y otorgará a cada usuario/grupo permisos para acceder a los módulos que esté desarrollando. Por supuesto, es imprescindible salvaguardar la información del repositorio mediante una política de copias de seguridad con una frecuencia suficiente: En nuestro caso, optamos por realizar una copia diaria, de forma automatizada, en las horas nocturnas cuando no hay actividad y los desarrolladores ya han incorporado los archivos correspondientes al trabajo diario. Política de etiquetado Una correcta utilización de un sistema de control de versiones requiere definir una política de etiquetado. De esta manera podremos realizar seguimientos y localizar versiones concretas del proyecto. Constituye la clave para el paso de aplicaciones entre distintos entornos. Dicha política se traduce en una nomenclatura específica para las etiquetas. Tabla 1. Política de etiquetado. Entorno Sintaxis de la etiqueta Desarrollo DR_NombreProyecto_VersiónProyecto Integración IR_NombreProyecto_VersiónProyecto Preproducción PR_NombreProyecto_VersiónProyecto Producción FR_NombreProyecto_VersiónProyecto Significado del prefijo Development Release Integration Release Preproduction Release Final Release Sistema de archivos distribuido: SMB Para compartir archivos comunes, que no precisan de control de versiones – tales como instaladores, documentación externa, etc. – ofrecemos, dentro del repositorio software, un servicio de archivos en red de tipo SMB [9]. Este servicio resulta muy cómodo y práctico pues permite trabajar con los directorios compartidos como si se tratase de unidades locales a la máquina cliente y ofrece una alta compatibilidad entre sistemas Linux y Windows. Ambos servicios se encuentran instalados sobre servidores Linux en nuestro entorno de trabajo. Entorno de desarrollo En nuestro entorno de desarrollo, seguimos una política de trabajo local, donde cada desarrollador posee su propia máquina, en la cuál instala todos los servicios y herramientas requeridos para llevar a cabo sus actividades de manera que sea completamente autosuficiente. No obstante, en determinadas situaciones habilitaremos servidores externos para prestar servicios comunes a todos los usuarios de un entorno. Es el caso del servicio de directorio Active Directory [10]. Dicho servicio es compartido entre todos los usuarios en los entornos de desarrollo e integración – política mixta. Figura 4. Esquema de nuestro entorno de desarrollo. De forma estándar, configuramos las máquinas de desarrollo con el siguiente software: Tabla 2. Configuración estándar de software para las máquinas de desarrollo. Sistema operativo Windows XP ó 2003 Suite ofimática MS-Office Cliente de correo electrónico y agenda MS-Office Outlook Servidor de directorio OpenLDAP y Active Directory Servidor de B.D. MySQL y SQL Server Servidor Web Apache Tomcat Servidor de aplicaciones JBoss Herramienta de modelado software ArgoUML / Poseidon for UML Herramienta de modelado de datos DBDesigner IDE (entorno integrado de desarrollo) Eclipse + plugins Herramienta de generación automática Ant Compilador J2EE SDK Intérprete/Máquina virtual J2EE Runtime Environment/Java Virtual Machine Generación de archivos históricos (logs) Log4Java Cliente de directorio Softerra LDAP Browser / Administrador de Active Directory Cliente de B.D. (administración) MySQL Administrator Cliente de B.D. (navegador) MySQL Browser Cliente Web Microsoft Internet Explorer / Netscape Navigator Cliente CVS WinCVS Editor XML Cooktop Para permitir un funcionamiento ágil del sistema, teniendo en cuenta la carga que suponen los anteriores servicios y aplicaciones, utilizaremos configuraciones hardware de características equivalentes o superiores a las siguientes: Tabla 3. Configuración hardware mínima para las máquinas de desarrollo. Procesador Memoria RAM Disco Interfaz de red Pentium III o Athlon XP 512 MB 40 GB Ethernet 100 Mbps Entorno de integración En este entorno obtendremos los archivos – correspondientes a la versión que queremos compilar – del CVS. Debemos contar con las herramientas necesarias para obtener de una forma sencilla los archivos, para compilarlos y para ejecutar la aplicación. Para las pruebas de integración será necesario poner en funcionamiento la aplicación, por tanto serán necesarios los servidores de base de datos, de directorio, Web y de aplicaciones, así como la máquina virtual de Java. Además, necesitaremos un cliente CVS para obtener del repositorio la versión correspondiente de los archivos fuente que componen la aplicación. Figura 5. Esquema del entorno de integración. En cuanto al conjunto de datos utilizado para las pruebas, se trata de datos ficticios para evitar problemas con la información sensible. Tabla 4. Configuración software para el entorno de integración. Sistema Operativo Cliente CVS Servidor de aplicaciones Servidor Web Servidor de directorio Servidor de B.D. Compilador Intérprete/Máquina virtual Herramienta para generación automática Generación de archivos históricos (logs) Linux Servicia JBoss Apache Tomcat OpenLDAP y Active Directory MySQL J2EE SDK J2EE Runtime Environment Ant Log4Java Tabla 5. Configuración hardware mínima para el entorno de integración. Procesador Memoria RAM Disco Interfaz de red Pentium III o Athlon XP 512 MB 40 GB Ethernet 100 Mbps Entorno de preproducción. En este entorno se llevan a cabo las pruebas de aceptación del producto, las últimas realizadas antes de pasar la aplicación al entorno de producción. Por este motivo, el entorno de preproducción debe contener la infraestructura necesaria para ejecutar la aplicación. Para ello será necesario el servidor de aplicaciones, servidor Web, de base de datos y de directorio. La carga de datos en este entorno debe ser similar a la de producción para poder realizar pruebas de rendimiento reales. Figura 6. Esquema del entorno de preproducción. Tabla 4. Configuración software para el entorno de preproducción. Sistema Operativo Cliente CVS Servidor de aplicaciones Servidor Web Servidor de directorio Servidor de B.D. Compilador Intérprete/Máquina virtual Herramienta para generación automática Generación de archivos históricos (logs) Windows WinCVS JBoss Apache Tomcat Active Directory MySQL J2EE SDK J2EE Runtime Environment Ant Log4Java Tabla 5. Configuración hardware para el entorno de integración. Procesador Memoria RAM Disco Interfaz de red Xeon 1 GB 140 GB Ethernet 1 Gbps / 100 Mbps Entorno de producción. En nuestro entorno de producción utilizamos una configuración hardware/software idéntica a la de preproducción, garantizando en la medida de lo posible un comportamiento similar de la aplicación en ambos entornos. Por otra parte, en este entorno los usuarios finales tienen acceso a la aplicación, por tanto adoptamos las medidas de seguridad oportunas para evitar ataques o usos ilegítimos del sistema. Figura 7. Esquema del entorno de producción. Tabla 4. Configuración software para el entorno de preproducción. Sistema Operativo Cliente CVS Servidor de aplicaciones Servidor Web Servidor de directorio Servidor de B.D. Compilador Intérprete/Máquina virtual Herramienta para generación automática Generación de archivos históricos (logs) Windows WinCVS JBoss Apache Tomcat Active Directory MySQL J2EE SDK J2EE Runtime Environment Ant Log4Java Tabla 5. Configuración hardware para nuestro entorno de integración – servidores Proliant. Procesador Memoria RAM Disco Interfaz de red Xeon 1 GB 140 GB Ethernet 1 Gbps / 100 Mbps Conclusiones Los nuevos modelos empresariales requieren aplicaciones dotadas de las siguientes características: • Seguridad. • Robustez y fiabilidad. • Tolerancia a fallos. • Escalabilidad. • Flexibilidad. • Interoperabilidad. • Mantenimiento y gestión. Con el objetivo de soportar estas características, que suponen una complejidad tecnológica considerable, surgen plataformas como J2EE y .NET, que ofrecen las infraestructuras básicas necesarias para crear tales aplicaciones. Para que dicha construcción tenga lugar de forma ordenada y rigurosa, encajando las piezas adecuadas en los lugares clave, necesitamos ayudarnos de una serie de guías de diseño. Entre estas se encuentran los patrones de diseño, que ofrecen soluciones a problemas basados en la experiencia de terceros. Por último, como productores de aplicaciones, deseamos que éstas se construyan al ritmo adecuado, aprovechando al máximo los recursos humanos y tecnológicos disponibles, optimizando los costes y la calidad del producto. Para lograr estos objetivos, necesitamos un modelo de trabajo bien definido que soporte las diversas fases del proceso software y contemple las herramientas y tecnologías utilizadas en dicho proceso. Este modelo debe evolucionar para incorporar la experiencia obtenida en cada nuevo desarrollo. Se trata, en definitiva, de un concepto análogo al de los patrones de diseño de aplicaciones, pero orientado a las políticas y metodologías de trabajo. En este artículo hemos propuesto un modelo de trabajo genérico que ofrece soporte a la creación y mantenimiento de aplicaciones utilizando plataformas empresariales. Para simplificar nuestro modelo, lo hemos dividido en entornos asociados a las fases del ciclo de vida del software, estableciendo políticas de paso de la aplicación entre los entornos. Esta división permite adaptar cada entorno a las necesidades específicas de la aplicación en cada estado concreto de su ciclo de vida, sin perder por ello la visión global del proyecto. Finalmente, hemos aplicado el modelo genérico a un caso práctico, especificando el modelo concreto que utilizamos para desarrollar proyectos en el Grupo de Redes, utilizando la plataforma J2EE. Referencias 1. P. Harmon, M. Rosen y M. Guttman. Developing E-business Systems and Architectures: A Manager’s Guide. Ed: Morgan Kaufmann Publishers, 2001. 2. J.L. Weaver, K. Mukhar y J. Crume. Begining j2EE 1.4: From novice to professional. Ed: Apress, 2004. 3. U. Hansmann, L.Merk, M.S. Nicklous y T. Stober. Pervasive Computing, second edition. Springer, 2003 4. Sing, I, Stearns, B, Jonson, M: Design Enterprise Applications with J2EE Plantaform, Second Edition. Ed: Addison-Wesley, 2002 5. Royce, W.: Software project management. Ed.Addison-Wesley, 1999. 6. Bodoff, S., Green, D., Haase, K., Jendrock, E., Pawlan, M., Stearns, B.: The J2EE tutorial. Ed. Addison-Wesley, 2002. 7. Gong, L.: Inside Java 2 paltform security. Ed. Addison-Wesley, 1999. 8. http://www.cvshome.org 9. Eckstein, R., Collier-Brown, D., Kelly, P.: Using Samba. Ed. O’Reilly, 1999. 10. Allen, R.: Active Directory Cookbook for Windows Server 2003 and Windows 2000. Ed. O’Reilly, 2003.