Вы находитесь на странице: 1из 56

Herramientas para la mejora del proceso

de desarrollo de aplicaciones J2EE.

Iván Ruiz Rube


Departamento de Lenguajes y Sistemas Informáticos
Universidad de Cádiz
Agenda

> Introducción
> Control del Código Fuente
> Gestión del Proyecto
> Construcción del Producto
> Gestión del Conocimiento
> Repositorio de Componentes
> Aseguramiento de la Calidad
> Integración Continua
> Resumen
Agenda

> Introducción
> Control del Código Fuente
> Gestión del Proyecto
> Construcción del Producto
> Gestión del Conocimiento
> Repositorio de Componentes
> Aseguramiento de la Calidad
> Integración Continua
> Resumen
Introducción (I)

> Complejidad del desarrollo software


– Tecnología variable (nuevos frameworks, librerías, etc.)
– Requisitos cambiantes (como siempre)
– Rotación elevada de personal experto
– Naturaleza de las aplicaciones web
– Cliente impaciente

> Buenas Prácticas aprendidas de la experiencia


– Reutilización del software y del conocimiento
– Gestión ágil del proyecto
– Automatización de tareas repetitivas
– Aplicar reglas y estilos de codificación
– Énfasis en las pruebas
– Entregas continuas al cliente
Introducción (II)

> Objetivo: Mejorar el proceso y el producto software


– Emplear estándares
– Aplicar una metodología (ágil o tradicional)
– Usar herramientas de soporte (basadas en buenas prácticas)

> ¿Que vamos a ver hoy?


– Comentaremos escenarios problemáticos
– Describiremos herramientas de ayuda
– Breve demostración de las herramientas
– Al final, estaremos ante un entorno de desarrollo “maduro”
Agenda

> Introducción
> Control del Código Fuente
> Gestión del Proyecto
> Construcción del Producto
> Gestión del Conocimiento
> Repositorio de Componentes
> Aseguramiento de la Calidad
> Integración Continua
> Resumen
Control del Código Fuente (I)

> Problemas
– ¿Donde almaceno el código fuente?
– ¿Cómo unificar el código de varios programadores?
– ¿Qué ocurre cuando varias personas modifican los mismos ficheros?
– ¿Cómo puedo gestionar diferentes versiones del software?
– Ha ocurrido un desastre... ¿puedo recuperar una versión concreta?
– ¿Puedo evitar accesos no autorizados?

> Solución: Sistema de control de versiones (SCM)


– Subversion
– CVS
– Git
– Mercurial
– Monotone
– Source Safe (MS)
– …
Control del Código Fuente (II)

SUBVERSION
> Características
– Modelo basado en cliente/servidor
– Soporta diferentes protocolos de acceso: SVN, SVN+SSH,
HTTP, HTTPS y FILE
– Existen distintos clientes: TortoiseSVN, Subclipse, Subversive
> Utilidades
– Descarga del proyecto (checkout)
– Actualización del proyecto (update)
– Actualización del repositorio (commit)
– Comparar versiones (diff)
– Fusionar cambios (merge)
– Limpiar (cleanup)
– ...
Control del Código Fuente (III)
Control del Código Fuente (IV)
Control del Código Fuente (V)
Agenda

> Introducción
> Control del Código Fuente
> Gestión del Proyecto
> Construcción del Producto
> Gestión del Conocimiento
> Repositorio de Componentes
> Aseguramiento de la Calidad
> Integración Continua
> Resumen
Gestión del Proyecto (I)

> Problemas
– ¿Como saber quien es el responsable de cada tarea?
– ¿Como controlar los “incurridos” del proyecto?
– ¿Cómo llevar el seguimiento de las tareas?
– ¿Como controlar las incidencias del proyecto (en producción)?
– ¿Que características y que parches se han incluido en la versión x.y.z del
software?
– ¿Como planificar los trabajos?

> Solución: Software de gestión integrada de proyectos


– Redmine
– Trac
– DotProject
– Jira
– TFS + Project (MS)
– …
Gestión del Proyecto (II)

REDMINE
> Características
– Aplicación web construida con RoR
– Gestión multiproyecto y con múltiples versiones
– Interfaz muy facil e intuitiva
– Páginas de usuarios personalizadas y envío de emails

> Utilidades
– Planificación (básica) mediante diagramas de Gantt
– Gestión de tareas: estado, responsable, “target version”, fechas de
inicio/fin, porcentaje de avance, incurridos, etc.
– Seguimiento de tareas mediante consultas personalizadas
– Roadmap del proyecto
– Integración con SCM
– Noticias, Foros, Wikis
– ...
Gestión del Proyecto (III)
Gestión del Proyecto (IV)
Gestión del Proyecto (V)
Gestión del Proyecto (VI)
Agenda

> Introducción
> Control del Código Fuente
> Gestión del Proyecto
> Construcción del Producto
> Gestión del Conocimiento
> Repositorio de Componentes
> Aseguramiento de la Calidad
> Integración Continua
> Resumen
Construcción del Producto (I)

> Problemas
– ¿Cómo generar la estructura de directorios del proyecto?
– ¿Como gestionar la compilación y el empaquetado?
– ¿Cómo gestionar dependencias con librerías de terceros?
– ¿Cómo introducir meta-información del proyecto en el código?
– ¿Como hacer fácilmente un sitio web del proyecto?

> Solución: Project Management Framework


– Maven
– Ant + Ivy
– …
Construcción del Producto (II)

APACHE MAVEN
> Características
– Estándar de facto en la construcción de proyectos JEE
– Metainformación en Project Object Model (POM.XML)
– Convención sobre configuración (estructura de directorios, versionado,cv)
– Ciclo de vida basado en fases y goals (acciones)
– Extensible mediante plugins
– Herramienta de consola, aunque existen plugins para IDEs (m2Eclipse, IAM,
mavenide)
– Inconvenientes: 1. Curva de aprendizaje. 2. Al ser un modelo nuevo, los
proyectos anteriores debe “renovarse”

> Utilidades
– Descarga automática de dependencias (evitar el jar-hell)
– Maven Site: Generación de un sitio web con información del proyecto,
changelogs, javadocs, fuentes, resultados de las pruebas, etc.
– Empaquetados condicionados al entorno
– Ejecución de tests previos a despliegues
– ...
Construcción del Producto (III)
Construcción del Producto (IV)
Construcción del Producto (V)
Construcción del Producto (VI)
Construcción del Producto (VII)
Agenda

> Introducción
> Control del Código Fuente
> Gestión del Proyecto
> Construcción del Producto
> Gestión del Conocimiento
> Repositorio de Componentes
> Aseguramiento de la Calidad
> Integración Continua
> Resumen
Gestión del Conocimiento (I)

> Problemas
– ¿Cómo redactar de forma colaborativa documentos de
trabajo?
– ¿Cómo proporcionar ayudas para la solución de problemas?
– ¿Cómo plasmar el conocimiento?
– ¿Cómo acceder rápidamente al conocimiento?

> Solución: Sistema de edición colaborativa (WIKI)


– MediaWiki
– MindTouch Wiki
– Confluence
– XWiki
– …
Gestión del Conocimiento (II)

MEDIAWIKI
> Características
– CMS colaborativo construido en PHP
– Edición basada en artículos e hiperenlaces
– Histórico de versiones y búsquedas “fulltext” sobre los artículos
– Soporta multitud de plugins (extensiones) para mejorar el sistema

> Utilidades
– Definir modelos de arquitecturas y frameworks de desarrollo.
– Catálogo de librerías
– Documentación de proyectos (requisitos, análisis)
– FAQs y TIPs
– ...
Gestión del Conocimiento (III)
Gestión del Conocimiento (IV)
Agenda

> Introducción
> Control del Código Fuente
> Gestión del Proyecto
> Construcción del Producto
> Gestión del Conocimiento
> Repositorio de Componentes
> Aseguramiento de la Calidad
> Integración Continua
> Resumen
Repositorio de Componentes (I)

> Problemas
– ¿Reutilizamos código a nivel de proyecto?
– ¿Reutilizamos código entre diferentes proyectos?
– ¿Donde almacenamos el activo de componentes (jars) de la
organización?
– ¿Donde almacenamos los componentes de terceros?

> Solución: Repositorios de componentes


– Artifactory
– Nexus
– Archiva
– …
Repositorio de Componentes (II)

ARTIFACTORY
> Características
– Repositorio basado en web y construido en Java
– Compatible 100% Maven
– Admite diferentes motores de bases de datos
– Interfaz de usuario sencilla y agradable
– Seguridad basada en grupos y usuarios, además de integración con LDAP.
– Copias de seguridad

> Utilidades
– Permite desplegar artefactos manualmente (via web)
– Admite el despliegue remoto de artefactos
– Funciona como proxy de repositorios en Internet
– Búsqueda de artefactos dentro de los repositorios
– ...
Repositorio de Componentes (III)
Repositorio de Componentes (IV)
Repositorio de Componentes (V)
Repositorio de Componentes (VI)
Agenda

> Introducción
> Control del Código Fuente
> Gestión del Proyecto
> Construcción del Producto
> Gestión del Conocimiento
> Repositorio de Componentes
> Aseguramiento de la Calidad
> Integración Continua
> Resumen
Aseguramiento de la Calidad (I)

> Problemas
– ¿Cómo mejorar la calidad de mi código?
– ¿Cómo automatizar las pruebas?
– ¿Cómo asegurar que los programadores usen unas mismas
guías de estilos?
– ¿Que partes de mi código son mas difíciles de mantener?
– Vamos a hacer refactoring... ¿por donde empiezo?

> Solución:
– Análisis Estático: PMD, CheckStyle, Findbugs, ... Sonar
– Análisis Dinámico: JUnit, HttpUnit, JMeter, ...
Aseguramiento de la Calidad (II)

SONAR
> Características
– Aplicación web que integra a varias herramientas de análisis opensource.
– Soporta diferentes métricas clasificadas en: eficiencia, mantenibilidad,
portabilidad, fiabilidad y usabilidad.
– Actualización de métricas en cada build de los proyectos

> Utilidades
– Analiza el código fuente generando informes, métricas, diagramas, etc.
– Presenta resultados a diversos niveles: proyecto, paquete, clase y
método.
– Permite visualizar el código fuente donde se incumplen las normas de
codificación
– Muestra tendencias en la calidad del código, cobertura de test unitarios,
hotspots, clouds, etc.
– ...
Aseguramiento de la Calidad (III)
Aseguramiento de la Calidad (IV)
Aseguramiento de la Calidad (V)
Aseguramiento de la Calidad (VI)
Agenda

> Introducción
> Control del Código Fuente
> Gestión del Proyecto
> Construcción del Producto
> Gestión del Conocimiento
> Repositorio de Componentes
> Aseguramiento de la Calidad
> Integración Continua
> Resumen
Integración Continua (I)

> Problemas
– ¿Cómo reducir los tiempos de integración?
– ¿Como ejecutar pruebas de regresión?
– ¿Como detectar los fallos rápidamente?
– ¿Como disponer de un entorno de pruebas siempre
actualizado?

> Solución: Herramientas de Integración Continua (CI)


– Hudson
– Continuum
– CruiseControl
– …
Integración Continua (II)

HUDSON
> Características
– Sistema de CI basado en web
– Gracias a sus plugins, permite adaptarse fácilmente a las necesidades de
cada organización
– No está ligado a proyectos Maven (aunque es recomendable)
– Soporte de seguridad completo (conexión con LDAP)
– Integración con sistemas externos: svn, redmine, sonar, etc.
– Construcción distribuida

> Utilidades
– Permite crear tareas automáticas (cron) de construcción
– Notificaciones via email
– Posibilidad de despliegue en repositorios de componentes (artifactory)
– Permite desplegar proyectos en servidores de aplicaciones (tomcat)
– ...
Integración Continua (III)
Integración Continua (IV)
Integración Continua (V)
Agenda

> Introducción
> Control del Código Fuente
> Gestión del Proyecto
> Construcción del Producto
> Gestión del Conocimiento
> Repositorio de Componentes
> Aseguramiento de la Calidad
> Integración Continua
> Resumen
Resumen (I)

> Necesidad de emplear un sistema de control de versiones


(como SUBVERSION) para gestionar correctamente el
código fuente.
> En entornos grandes o medianos es indispensable el uso de
una herramienta de gestión de proyectos (como REDMINE)
para llevar el seguimiento del desarrollo.
> Es preciso contar con algún sistema (como MAVEN) que
permita automatizar ciertas tareas como la gestión de
dependencias, empaquetados y despliegues, así como
generar un portal web del proyecto.
> Mantener una base de conocimiento mediante algún sistema
WIKI (como MEDIAWIKI) es muy importante de cara a la
mejora continua del equipo.
Resumen (II)

> Para gestionar de forma efectiva la reutilización de


componentes software, es necesario disponer de un
repositorio local de artefactos (como ARTIFACTORY)
> Desarrollar código de calidad es fundamental para asegurar
aspectos como la mantenibilidad y la eficiencia del software.
Así pues, el disponer de un entorno centralizado de métricas
(como SONAR), nos ayudará a mejorar el producto que
desarrollemos.
> Los sistemas de integración continua (como HUDSON) son
vitales para detectar errores tempranos, y disponer siempre
de un software actualizado en algún entorno de pruebas.
Resumen (III)
Herramientas para la mejora del proceso
de desarrollo de aplicaciones J2EE.

ivan.ruiz@uca.es

Вам также может понравиться