Estrategia Maven para la automatización del desarrollo de software mediante componentes reutilizables, generadores y acople a nuevos proyectos María Consuelo Franky
Alvaro Javier Infante
Pontificia Universidad Javeriana
Heinsohn Business Technology
[email protected]
[email protected]
Cámara de Comercio de Bogotá – Centro Empresarial Chapinero
XXXIII Salón de Informática ACIS
Agenda 1.
Contexto: el proyecto Lion (universidad - empresa - Colciencias)
2.
Estrategias generales para lograr reutilización y automatización en los proyectos de software
3.
Otra estrategia para lograr reutilización y automatización basada en Maven
4.
Reutilización de componentes mediante Maven
5.
Generación de nuevos proyectos mediante Maven
6.
Página Web de un proyecto mediante Maven
7.
Automatización del acople de componentes a un nuevo proyecto
8.
Conclusiones
pag. 2
XXXIII Salón de Informática ACIS
1. Contexto: el proyecto Lion (universidad - empresa - Colciencias)
pag. 3
XXXIII Salón de Informática ACIS
Proyecto Lion •
«Soporte al desarrollo de aplicaciones empresariales mediante frameworks de generación»
•
Realizado por el grupo SIDRe (Pontificia Universidad Javeriana) y Heinsohn Business Technology con cofinanciación de Colciencias
•
Objetivo: Aumentar la automatización y productividad de la empresa (sector de software) pag. 4
XXXIII Salón de Informática ACIS
•
Participantes en el proyecto Lion: Persona
U. Javeriana
María Consuelo Franky
Investigador principal
Leonardo Giral Jaime Pavlich
Contraparte en Heinsohn Coinvestigador
Alvaro Infante Luisa Barrera
Heinsohn
Asesor por parte de HBT desarrolladores
Andrea Barraza Cristian Fernández (antes: Rubén Betancur)
desarrolladores
Angee Zambrano pag. 5
XXXIII Salón de Informática ACIS
Motivación •
No basta con la simple reutilización de componentes
estandarización
para lograr beneficios de disminución en tiempos y costos en el desarrollo de nuevos proyectos
•
También se requiere que esos componentes se puedan acoplar de manera rápida y simple.
•
En últimas se busca la automatización en el acople de componentes a un nuevo proyecto para evitar que los desarrolladores tengan que seguir procedimientos manuales
•
Estrategia basada en Maven logra tal reutilización y automatización en el acople
reutilización
automatización
Mayor agilidad en los proyectos
pag. 6
XXXIII Salón de Informática ACIS
Estado inicial Framework Lion: Componentes de funcionalidades comunes para los proyectos Java EE C1 seguridad
C3 proceso Batch
C2 auditoría
acople manual podía tardar 1 a 3 semanas de trabajo
nuevo proyecto Java EE pag. 7
XXXIII Salón de Informática ACIS
Estado final Componentes de funcionalidades comunes para los proyectos Java EE bajo estructura Maven C1 seguridad
C2 auditoría
LionWizard
C3 proceso Batch
acople en solo algunas horas
nuevo proyecto Java EE (bajo estructura Maven) pag. 8
XXXIII Salón de Informática ACIS
2. Estrategias generales para lograr reutilización y automatización en los proyectos de software
pag. 9
XXXIII Salón de Informática ACIS
Reutilización y automatización mediante servicios web •
Contexto: integración de aplicaciones existentes para implantar procesos de negocio
aplicación Java
problema: heterogeneidad de las aplicaciones solución: exponer funcionalidad de cada aplicación como servicios web que atienden pedidos bajo un protocolo estándar
•
Los servicios web son componentes reutilizables con los siguientes beneficios Disponibles para cualquier aplicación cliente independiente de su tecnología
aplicación .NET
http-SOAP
Aplicación cliente (PHP)
No hay que acoplarlos a las aplicaciones clientes
•
Costo de los servicios web como componentes Overhead de invocarlos
pag. 10
XXXIII Salón de Informática ACIS
Reutilización y automatización mediante generadores de componentes •
Generador de un componente Genera código fuente Lo acopla a un proyecto destinatario Ejemplo: generador de un módulo de seguridad para Java EE
•
Técnicas para construir generadores de código Técnica de plantillas: • reemplazan propiedades por valores en archivos plantillas para obtener el código fuente que será colocado como un archivo fuente en el proyecto destinatario
Técnica de Expresiones Regulares: • Indican patrones para buscar en el proyecto destinatario y reemplazarlos por código fuente tomado de un proyecto modelo pag. 11
XXXIII Salón de Informática ACIS
proyecto destinatario generador de módulo de seguridad basado en Exp. Reg. proyecto modelo con módulo de seguridad
•
proyecto destinatario ahora con módulo de seguridad
Ventajas de los generadores de código el conjunto de generadores constituye un framework de generación Materializan buenas prácticas de la empresa con mejora continua Favorece la reutilización de componentes generadores por múltiples proyectos
•
Desventajas Costo de mantener y de depurar las plantillas o las Expresiones Regulares pag. 12
XXXIII Salón de Informática ACIS
Reutilización y automatización mediante el desarrollo dirigido por Modelos (MDA-MDE) •
Desarrollo de proyectos de software basándose en diseños expresados en un lenguaje de modelado requiere definición del lenguaje mediante un meta-modelo que puede ser textual y/o gráfico el modelo puede incluir componentes reutilizables y se expresa de forma independiente a la tecnología se requiere transformador por cada tecnología contemplada que genere el código fuente a partir del modelo
•
Ventajas poder expresar una sola vez el diseño de un proyecto a través de un modelo y luego obtener su implementación en múltiples tecnologías el desarrollo de los proyectos se simplifica y es más mantenible
•
Costo definición de lenguajes de modelado y construcción de transformadores
pag. 13
XXXIII Salón de Informática ACIS
Reutilización y automatización mediante Líneas de Productos de Software •
Ingeniería de dominio busca elementos reutilizables que deben ser expuestos como activos con interfaces bien definidas establece las relaciones de composición y de dependencias que hay entre esos activos
•
Ingeniería de la aplicación se centra en la elaboración de productos utilizando los activos
•
Ventajas es fácil lograr nuevos productos mediante composición de los activos
•
Costo adecuación de los activos previamente existentes para lograr tener las interfaces requeridas por la Línea de Productos
pag. 14
XXXIII Salón de Informática ACIS
3. Otra estrategia para lograr reutilización y automatización basada en Maven (aplicada en el proyecto Lion)
pag. 15
XXXIII Salón de Informática ACIS
Facilidades generales de Maven •
Permite realizar las tareas del ciclo de vida de los proyectos compilación, empaque, pruebas, publicación en un servidor, etc. disponibilidad de plugins para realizar cada tarea
•
Permite declarar y administrar las dependencias de librerías que tiene un proyecto archivo pom.xml : declara dependencias y características de un proyecto las librerías para Maven son artefactos identificados por nombre, grupo y versión residen en repositorios universales en sitios de Internet o en repositorios propios de la empresa que utiliza tales artefactos. pag. 16
XXXIII Salón de Informática ACIS
El archivo pom.xml (Project Object Model) de un proyecto indica sus dependencias Describe todo lo relacionado al proyecto: nombre, versión, paquetes, dependencias, módulos, y mucho mas
Coordenadas, relaciones multimódulo, dependencias.
Tareas del ciclo de vida: localización de directorios, plugins para manejar las fases del ciclo de vida, etc.
Documentación del proyecto
Perfiles (profiles) para adaptar el proyecto a diferentes ambientes de ejecución
Tomado de: Sonatype Company. 2008. “Maven: The Definitive Guide”. O'Reilly. 2008
pag. 17
XXXIII Salón de Informática ACIS
•
Ejemplo de un pom.xml: coordenadas del proyecto
dependencias de librerías (para fases específicas del ciclo de vida)
•
Todo pom.xml hereda de un super pom.xml que indica repositorios de librerías, plugins disponibles para cada fase del ciclo de vida, etc. pag. 18
XXXIII Salón de Informática ACIS
Organización estándar de un proyecto Maven
src/main/java
Fuentes de la aplicación o librería
src/main/resources
Recursos de la aplicación
src/main/filters
Archivos de filtro
src/main/assembly
Descriptores de ensamblaje
src/main/config
Archivos de configuración
src/main/webapp
Fuentes de aplicación Web
src/test/java
Fuentes de pruebas
src/test/resources
Recursos de las pruebas
src/test/filters
Archivos de filtro para pruebas
src/site
Sitio web de la documentación del proyecto
pag. 19
XXXIII Salón de Informática ACIS
Un solo comando Maven ejecuta muchas tareas del ciclo de vida de un proyecto •
Los goals de los plugins se ejecutan en las fases asociadas, invocando el comando: mvn install
•
Equivalente al comando mvn
plugin
resources compiler resources compiler surefire jar : jar
: : : : :
resources compile testResources testCompile test
goal Tomado de: Sonatype Company. 2008. “Maven: The Definitive Guide”. O'Reilly. 2008
pag. 20
XXXIII Salón de Informática ACIS
Proyecto Maven multi-módulo
Super POM Módulo padre Submódulo 1 (web)
Submódulo 2 (negocio)
Submódulo 3 (persistencia)
•
Cada módulo o submódulo tiene un pom.xml donde indica sus coordenadas
•
El módulo padre indica la lista de submódulos y cada submódulo indica las coordenadas de su padre
•
Las declaraciones de dependencias y de plugins del módulo padre son heredadas por los submódulos pag. 21
XXXIII Salón de Informática ACIS
4. Reutilización de componentes mediante Maven
pag. 22
XXXIII Salón de Informática ACIS
Reutilización de componentes de negocio con Maven •
Si un componente es simplemente una librería se puede registrar como artefacto Maven con coordenadas Se registra en el repositorio Maven de la empresa El pom.xml de un proyecto puede referenciar la librería como dependencia
•
Si el componente es un proyecto Maven multi-módulo Genera varios artefactos Maven (por ejemplo varios Jar) que se registran en el repositorio Maven Cada submódulo de un proyecto usuario (también Maven) puede referenciar como dependencias uno o varios de esos artefactos
pag. 23
XXXIII Salón de Informática ACIS
Cómo se potenció la reutilización de componentes en el proyecto Lion •
Ejemplo: componente de seguridad Ofrece varios EJBs de negocio y varias páginas web para soportar casos de uso de seguridad multitenant (autenticación, cambio de contraseña, administración de compañías, perfiles, usuarios, etc.) Se transformó en un proyecto Maven multi-módulo: un módulo padre más un submódulo por cada capa que produce un artefacto Maven Super POM Módulo padre Submódulo WebPages
Submódulo Web
Submódulo Hot
produce un .war con todas las páginas
produce un .jar con los ejb de presentación
produce un .jar con los ejb de negocio
Submódulo Main
produce un .jar con todas las entidades persistentes de negocio
...
pag. 24
XXXIII Salón de Informática ACIS
•
Proyecto que utiliza el componente de seguridad También es proyecto Maven multi-módulo El submódulo correspondiente a una capa declara como dependencia en su pom.xml el artefacto correspondiente del componente de seguridad com.sun.facelets jsf-facelets
dependencia de librería de terceros
com.heinsohn.lion.components.security lion-securityWeb . . . dependencia del submódulo web del componente de seguridad
pag. 25
XXXIII Salón de Informática ACIS
Ventajas para la empresa de utilizar su propio repositorio Maven •
Componentes propios de la empresa En el repositorio Maven de la empresa se registran estos componentes facilitando su reutilización por cualquier proyecto Se organizan las distintas versiones de los componentes y los nuevos proyectos toman siempre la última versión de un componente
•
Librerías utilitarias También se registran en el repositorio Maven de la empresa evitando tener que traerlas de un repositorio remoto El tráfico de librerías se elimina de los repositorios de versiones
pag. 26
XXXIII Salón de Informática ACIS
Arquitectura de repositorios Maven para una empresa: caso de Heinsohn Business Tecnology (HBT) obtener librería de terceros
repositorios remotos
servidor Maven de HBT repositorio Archiva de HBT cache de HBT
proyecto 2
proyecto 1 SNAPSHOT
RELEASE
SNAPSHOT
RELEASE
proyecto 1
versiones RELEASE de otros proyectos
pag. 27
XXXIII Salón de Informática ACIS
5. Generación de nuevos proyectos mediante Maven
pag. 28
XXXIII Salón de Informática ACIS
Generadores de la estructura inicial de un proyecto •
A partir de una aplicación modelo de la empresa, Maven permite construir un arquetipo que es un generador de proyectos
•
Pasos para construir un arquetipo Maven e invocarlo como generador:
Tomado de: http://maven.apache.org/archetype/maven-archetype-plugin/
pag. 29
XXXIII Salón de Informática ACIS
Proyecto Lion: construcción de arquetipos Maven que son generadores de proyectos Java EE •
Proyecto Lion: se partió de un proyecto modelo Java EE con estructura Maven multi-módulo para llegar a un generador que crea proyectos con esa misma estructura.
•
Estructura Maven multi-módulo del proyecto generado
pag. 30
XXXIII Salón de Informática ACIS
6. Página Web de un proyecto mediante Maven
pag. 31
XXXIII Salón de Informática ACIS
Facilidades para generar la documentación completa de un proyecto •
Plugin site de Maven mvn site: genera una página web con la descripción del proyecto utliza un descriptor site.xml que indica • identidad del proyecto • menú de información de submódulos, dependencias, plugins
• enlaces a manuales técnicos pag. 32
XXXIII Salón de Informática ACIS
Ejemplo de página web generada por Maven (proyecto Lion)
pag. 33
XXXIII Salón de Informática ACIS
pag. 34
XXXIII Salón de Informática ACIS
7. Automatización del acople de componentes a un nuevo proyecto
pag. 35
XXXIII Salón de Informática ACIS
Automatización mediante una herramienta •
Herramienta LionWizard
o Permite establecer propiedades de un nuevo proyecto y generarlo (estructura Maven) o En minutos puede acoplar uno o varios componentes al nuevo proyecto (con estructura Maven) o Acople total en máximo algunas horas, contando algunas labores manuales como la publicación en consola pag. 36
XXXIII Salón de Informática ACIS
Pasos en el uso de la herramienta LionWizard a) Establecer propiedades para generar un nuevo proyecto Tipos de Propiedades o Selección del arquetipo de Generación (ej: con o sin módulo de seguridad) o Propiedades del Proyecto Usuario (ej: nombre de la Aplicación) o Propiedades para Seleccionar un perfil de Servidor de aplicaciones y un perfil de BD (ej: JBoss y Postgresql ) o Propiedades del Perfil Seleccionado (ej: versión del Driver de la Base de Datos) pag. 37
XXXIII Salón de Informática ACIS
b) Generación de un nuevo proyecto Java EE para el tipo de servidor y base de datos seleccionados
LionWizard
nuevo proyecto Java EE (bajo estructura Maven) pag. 38
XXXIII Salón de Informática ACIS
•
Estructura Maven multi-módulo del proyecto generado
Propiedades utilizadas para generar el proyecto Histórico de acople de componentes
pag. 39
XXXIII Salón de Informática ACIS
c) Acoplamiento de uno o varios componentes Maven al nuevo proyecto C1 seguridad
C2 auditoría
C3 proceso Batch
LionWizard acople en minutos
proyecto Java EE con componentes acoplados
d) Acople total en máximo algunas horas, contando algunas labores manuales (ej: publicar en la consola) pag. 40
XXXIII Salón de Informática ACIS
•
proyecto generado en funcionamiento (con 2 componentes acoplados)
pag. 41
XXXIII Salón de Informática ACIS
Extensibilidad de la herramienta LionWizard •
Cada nuevo componente que se quiera acoplar al proyecto generado debe aportar un archivo xml con las operaciones de acoplamiento operaciones de agregar en los pom.xml del proyecto referencias a los submódulos del componente como dependencias ej: componente de seguridad
proyecto generado
Módulo padre
Submódulo Hot Submódulo Web Submódulo WebPages
operaciones de modificar descriptores del proyecto
Submódulo Main
pag. 42
XXXIII Salón de Informática ACIS
8. Conclusiones
pag. 43
XXXIII Salón de Informática ACIS
Beneficios de Maven •
Un repositorio Maven permite guardar las versiones de los componentes para lograr su máxima reutilización por parte de los proyectos.
•
Los arquetipos Maven se contruyen a partir de proyectos modelo y permiten generar nuevos proyectos con diferentes estructuras.
•
Maven ofrece facilidades avanzadas como la generación de una página web de un proyecto con toda la documentación.
•
El acople de componentes a un proyecto se puede automatizar cuando todos los elementos tienen estructura Maven. pag. 44
XXXIII Salón de Informática ACIS
Medición de la mejora obtenida con el proyecto Lion •
Cuánto tiempo se demora un proyecto Java EE en acoplar componentes de funcionalidades comunes ? antes del proyecto Lion: proyecto
Core Cartera
# de tiempo total componentes (horas) acoplados
tiempo promedio por componente (horas)
13
278
21
Software Prima media
2
36
18
Core Previsional
4
560
140
después del proyecto Lion: • Acople inicial de 9 componentes en 5 minutos
34 segundos por
componente) • Acople total incluyendo algunas labores manuales: en menos de 1 día (24 horas) menos de 3 horas por componente pag. 45
XXXIII Salón de Informática ACIS
Resultados e impactos del proyecto Lion •
Aumento en la productividad de la empresa, ahorro en costos y tiempos, y mayor competitividad en el mercado.
•
Sinergia universidad-empresa con transferencia de conocimiento de la universidad hacia la empresa y con transferencia tecnológica de la empresa hacia la universidad.
pag. 46
XXXIII Salón de Informática ACIS
Próximo proyecto U. Javeriana - Heinsohn
•
“Desarrollo de nuevos métodos y tecnologías para acelerar la construcción de software: un enfoque basado en modelos (MDE) y frameworks de generación avanzados” diseño de los proyectos de software mediante modelos que incluyen componentes reutilizables transformación a código fuente de tecnologías específicas
pag. 47
XXXIII Salón de Informática ACIS
Bibliografía •
Sobre Maven: Sonatype Company. 2008. Maven: The Definitive Guide. O'Reilly. 2008
•
Sobre el proyecto Lion: Franky, M. C., and Pavlich-Mariscal, J. A. Improving Implementation of Code Generators: A Regular-Expression Approach. In CLEI 2012: XXXVIII Conferencia Latinoamericana en Informática (Medellín, Colombia, Oct. 2012) . IEEE Catalog Number: CFP1225S-ART. 2012 Maria Consuelo Franky, Jaime A. Pavlich-Mariscal, Leonardo Giral, Alvaro Javier Infante, Andrea Barraza-Urbina, Luisa Barrera, Angee Zambrano, Cristián Fernández, and Rubén Darío Betancur, " Achieving Software Reuse and Integration in a Large-scale Software Development Company: Practical Experience of the Lion Project", submitted to IET Software in July 9, 2013.
pag. 48
XXXIII Salón de Informática ACIS
•
Sobre estrategias para lograr reutilización y automatización en los proyectos de software: Rosen, M., et al. Applied SOA: Service-Oriented Architecture and Design Strategies.Wiley Publishing, Inc. 2008. Friedl, J. Mastering Regular Expressions. O'Reilly. 2002. Mellor, S., Scott, K., Uhl, A. , and Weise, D. MDA Distilled, Principles of Model Driven Architecture, Addison-Wesley Professional. 2004. Kelly S., and Tolvanen, J.-P. Domain-specific modeling. Wiley-IEEE. 2008. Pohl, K. , Böckle, G. , and Linden., F. J. v. d. Software Product Line Engineering: Foundations, Principles and Techniques. Springer-Verlag. 2005. Clements, P., and Northrop, L. Software Product Lines : Practices and Patterns. Addison-Wesley Professional. 2001. C. Parra, L. Giral, A. Infante, and C. Cortés. Extractive SPL adoption using multi-level variability modeling. In Proceedings of the 16th International Software Product Line Conference - Volume 2, SPLC 2012, ACM, pages 99-106, New York, NY, USA, 2012. pag. 49