Download Estrategia Maven para la automatización del desarrollo de software

Document related concepts
no text concepts found
Transcript
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
<dependencies>
<dependency>
<groupId>com.sun.facelets</groupId>
<artifactId>jsf-facelets</artifactId>
</dependency>
dependencia de librería de
terceros
<dependency>
<groupId>com.heinsohn.lion.components.security</groupId>
<artifactId>lion-securityWeb</artifactId>
</dependency>
. . .
</dependencies>
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
<menu name="Project Modules">
<item name= "NotificationMain" href="../lion-notificationMain/index.html" />
<item name="Notification Hot" href="../lion-notificationHot/index.html" />
<item name="Notification Web" href="../lion-notificationWeb/index.html" />
<item name="Notification Web Pages"
href="../lion-notificationWeb-pages/index.html" />
</menu>
• enlaces a manuales técnicos
<menu name="Manuales">
<item name="Instalacion"
href="PT-INGE-027-Manual_de_instalacion_notification.doc" />
<item name= "Usuario"
href="PT-INGE-028-Manual_de_usuario_notification.doc" />
</menu>
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