Herramientas para la mejora del proceso de desarrollo de aplicaciones J2EE

Preview:

DESCRIPTION

Jornadas de Conocimiento Libre y Web 2.0 Universidad de Cádiz 12 de Noviembre de 2009 http://softwarelibre.uca.es/jornadasweb

Citation preview

Iván Ruiz RubeDepartamento de Lenguajes y Sistemas Informáticos

Universidad de Cádiz

Herramientas para la mejora del proceso de desarrollo de aplicaciones J2EE.

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

Recommended