Especialista Universitario Java Enterprise
© 2009-2010 Depto. Ciencia de la Computación e IA
Metodologías de Desarrollo Java EE
Sesión 1: Metodologías Ágiles Modelado Ágil
Metodologías de Desarrollo Java EE © 2009-2010 Depto. Ciencia de la Computación e IA Metodologías Ágiles -
Especialista Universitario Java Enterprise
Metodologías Ágiles Puntos a tratar
• Ciclo de Vida Clásico• Desarrollo Iterativo e Incremental• Manifiesto Ágil• Principios• Conceptos• Entorno Ágil• Un ejemplo de metodología ágil: Scrum
Metodologías de Desarrollo Java EE © 2009-2010 Depto. Ciencia de la Computación e IA Metodologías Ágiles -
Especialista Universitario Java Enterprise
Introducción• Las nuevas metodologías deben dejar de lado los
formalismos de metodologías clásicas para guiarse por los resultados a corto/medio plazo, pero sin perder de vista la calidad.
• Existe una tendencia a la pérdida de la formalidad y el rigor, buscando el equilibrio entre una documentación extensa respecto a una documentación útil.
• Durante los últimos 5 años han ido apareciendo diferentes metodologías, conocidas como ágiles, que dan mayor valor al individuo, a la colaboración con el cliente y al desarrollo incremental del software con iteraciones muy cortas.
Metodologías de Desarrollo Java EE © 2009-2010 Depto. Ciencia de la Computación e IA Metodologías Ágiles -
Especialista Universitario Java Enterprise
Ciclo de Vida Clásico
• Modelo secuencial o en cascada
Metodologías de Desarrollo Java EE © 2009-2010 Depto. Ciencia de la Computación e IA Metodologías Ágiles -
Especialista Universitario Java Enterprise
Problemas del Ciclo de Vida Clásico• Las iteraciones son costosas e implican rehacer trabajo
debido a la producción y aprobación de documentos. • Aunque son pocas iteraciones, es normal congelar parte
del desarrollo y continuar con las siguientes fases. • Los problemas se suelen encontrar en las fases finales, lo
que lleva a que sean ignorados o corregidos de una forma poco elegante.
• Existe una alta probabilidad de que el software no cumpla con los requisitos del usuario.
• Inflexible a la hora de evolucionar para incorporar nuevos requisitos.• No responde a los cambios en los requisitos.
Metodologías de Desarrollo Java EE © 2009-2010 Depto. Ciencia de la Computación e IA Metodologías Ágiles -
Especialista Universitario Java Enterprise
Realidad
El software es moldeable y la única constante en los proyectos es el cambio
Metodologías de Desarrollo Java EE © 2009-2010 Depto. Ciencia de la Computación e IA Metodologías Ágiles -
Especialista Universitario Java Enterprise
Desarrollo Iterativo I• Implica la programación y prueba de sistemas parciales
mediante ciclos repetitivos, de modo que los cambios son "fácilmente" asimilados
• El desarrollo comienza incluso antes de que todos los requisitos hayan sido detallados.
• El elemento clave para aclarar y refinar las especificaciones, que no dejan de cambiar y/o evolucionar, es la retroalimentación.
• Las rápidas iteraciones de desarrollo, la retroalimentación y adaptación del software permiten refinar los requisitos y el diseño.
Metodologías de Desarrollo Java EE © 2009-2010 Depto. Ciencia de la Computación e IA Metodologías Ágiles -
Especialista Universitario Java Enterprise
Desarrollo Iterativo II• El resultado de cada iteración es un trozo de sistema que
está probado, integrado y que se puede utilizar• Cada iteración incluye su propias fases de análisis de
requisitos, diseño, implementación y prueba.
Metodologías de Desarrollo Java EE © 2009-2010 Depto. Ciencia de la Computación e IA Metodologías Ágiles -
Especialista Universitario Java Enterprise
Iteraciones Timeboxed• Iteraciones donde se fija la duración y no se permite
modificarla.• La duración total de un proyecto también puede ser
timeboxed.• Si las peticiones (el ámbito) para la iteración no se pueden
implementar dentro del timebox• en vez de alargar la finalización de la iteración, se debe
reducir el ámbito (recolocando las peticiones con menor prioridad de nuevo en la lista de peticiones)
para que el sistema parcial siga creciendo y finalice en un estado estable y probado en la fecha final.
Metodologías de Desarrollo Java EE © 2009-2010 Depto. Ciencia de la Computación e IA Metodologías Ágiles -
Especialista Universitario Java Enterprise
Movimiento Ágil• Las metodologías ágiles promueven• desarrollo evolutivo • plazos de entrega cortos y timeboxed• planificación dinámica y adaptativa,• entregas incrementales,• prácticas que incentivan la agilidad
respuesta rápida y flexible al cambio.
• Su lema es:
"abrazar los cambios“(embrace change)
Metodologías de Desarrollo Java EE © 2009-2010 Depto. Ciencia de la Computación e IA Metodologías Ágiles -
Especialista Universitario Java Enterprise
Dilbert...
Metodologías de Desarrollo Java EE © 2009-2010 Depto. Ciencia de la Computación e IA Metodologías Ágiles -
Especialista Universitario Java Enterprise
Agile Alliance• En 2001 un grupo de expertos interesados en los métodos
iterativos y ágiles se reunieron para encontrar un fondo común.
• De aquí nació la Alianza Ágil (www.agilealliance.com) con un manifiesto y una serie de principios.
• El manifiesto y los principios han sido, y son, la base de las metodologías ágiles• la gestión ágil de proyectos, el modelado ágil, las técnicas ágiles,
etc... son una consecuencia de dicha reunión.
Metodologías de Desarrollo Java EE © 2009-2010 Depto. Ciencia de la Computación e IA Metodologías Ágiles -
Especialista Universitario Java Enterprise
Manifiesto Ágil• Individualidades e interacciones
frente a procesos y herramientas• Software que funciona
frente documentación comprensible• Colaboración del cliente
frente a la negociación de un contrato• Respuesta al cambio
frente al seguimiento estricto de un planning
www.agilemanifesto.org
Metodologías de Desarrollo Java EE © 2009-2010 Depto. Ciencia de la Computación e IA Metodologías Ágiles -
Especialista Universitario Java Enterprise
Individualidades e interacciones...... frente a procesos y herramientas
• La gente, y su interacción, es el principal factor de éxito de un proyecto software.• Si se sigue un buen proceso de desarrollo, pero el equipo falla, el
éxito no está asegurado• Si el equipo funciona es más fácil conseguir el objetivo final,
aunque no se tenga un proceso bien definido.• Es más importante construir un buen equipo que construir
el entorno.• Muchas veces se comete el error de construir primero el entorno y
esperar que el equipo se adapte automáticamente.• Es mejor crear el equipo y que éste configure su propio entorno de
desarrollo en base a sus necesidades.
Metodologías de Desarrollo Java EE © 2009-2010 Depto. Ciencia de la Computación e IA Metodologías Ágiles -
Especialista Universitario Java Enterprise
Software que funciona...... frente documentación comprensible
• Partiendo de que el software sin documentación es un desastre, la regla a seguir es:• no producir documentos a menos que sean necesarios de
forma inmediata para tomar un decisión importante• Demasiada documentación es peor que poca• Los 2 mejores documentos para transferir la información a
nuevos integrantes son el código fuente y el propio equipo• Es el software producido por el equipo lo que utilizará el
usuario, y no la documentación
Metodologías de Desarrollo Java EE © 2009-2010 Depto. Ciencia de la Computación e IA Metodologías Ágiles -
Especialista Universitario Java Enterprise
Colaboración del cliente...... frente a la negociación de un contrato
• Un contrato que especifica los requisitos, la planificación y el coste del proyecto falla por su base.• en la mayoría de los casos, los términos especificados pierden todo
el sentido antes de que el proyecto se complete.
• Los mejores contratos son aquellos que determinan que el cliente y el equipo de desarrollo deben trabajan juntos.
• Los proyectos exitosos implican la retroalimentación del cliente a un ritmo constante.
Metodologías de Desarrollo Java EE © 2009-2010 Depto. Ciencia de la Computación e IA Metodologías Ágiles -
Especialista Universitario Java Enterprise
Respuesta al cambio...... frente al seguimiento de un planning estricto
• La habilidad de responder a los cambios determina el éxito del proyecto.
• El curso de un proyecto software no se puede predecir a largo plazo• existen demasiadas variable a tener en cuenta. • no somos suficientemente buenos para estimar el coste de un
proyecto a largo plazo• Solución = resolución descendiente de la planificación
• planificaciones detalladas para las siguientes semanas (saber)• planificaciones menos detalladas para los siguientes meses
(conocer)• planificaciones rudimentarias para las posteriores (ligera idea)
Metodologías de Desarrollo Java EE © 2009-2010 Depto. Ciencia de la Computación e IA Metodologías Ágiles -
Especialista Universitario Java Enterprise
Principios Ágiles• Son 12 características que diferencian un proceso ágil de
uno tradicional.• El objetivo de estos principios se divide en 2:• Ayudar a las personas a que comprendan mejor de que
trata el desarrollo de software ágil• Determinar si un desarrollador esta siguiendo una
metodología ágil o no• Cabe destacar que estos principios no especifican un
método• definen un conjunto de guías que debe cumplir cualquier
enfoque que quiera estar bajo el paraguas "ágil"
Metodologías de Desarrollo Java EE © 2009-2010 Depto. Ciencia de la Computación e IA Metodologías Ágiles -
Especialista Universitario Java Enterprise
Principios Ágiles I1. Nuestra mayor prioridad es satisfacer al cliente
mediante la entrega temprana y continua de software con valor. Un proceso es ágil si a las pocas semanas de empezar ya
entrega software que funcione aunque sea rudimentario. El cliente decide si pone en marcha dicho software con la
funcionalidad que ahora le proporciona o simplemente lo revisa e informa de posibles cambios a realizar.
Metodologías de Desarrollo Java EE © 2009-2010 Depto. Ciencia de la Computación e IA Metodologías Ágiles -
Especialista Universitario Java Enterprise
Principios Ágiles II2. Aceptamos que los requisitos cambien, incluso en etapas
tardías del desarrollo. Los procesos Ágiles aprovechan el cambio para proporcionar ventaja competitiva al cliente. Actitud que deben adoptar los miembros del equipo de desarrollo. Los cambios en los requisitos son algo positivo.
Les va a permitir aprender más, a la vez que logran una mayor satisfacción del cliente
Implica que la estructura del software debe ser flexible para poder incorporar los cambios sin demasiado coste añadido.
Orientación a Objetos, uso de patrones de diseño
Metodologías de Desarrollo Java EE © 2009-2010 Depto. Ciencia de la Computación e IA Metodologías Ágiles -
Especialista Universitario Java Enterprise
Principios Ágiles III3. Entregamos frecuentemente software que funcione, desde
un par de semanas a un par de meses, con el menor intervalo de tiempo posible entre una entrega y la siguiente. Las entregas al cliente se insiste en que sean software, no
planificaciones, ni documentación de análisis o de diseño.
4. Los responsables de negocio y los desarrolladores trabajamos juntos de forma cotidiana durante todo el proyecto. Las decisiones de negocio están directamente relacionadas con el
desarrollo del proyecto.
Metodologías de Desarrollo Java EE © 2009-2010 Depto. Ciencia de la Computación e IA Metodologías Ágiles -
Especialista Universitario Java Enterprise
Principios Ágiles IV5. Construimos proyectos en torno a individuos motivados.
Darles el entorno y el apoyo que necesitan y confiar en ellos para conseguir el trabajo. La gente es el principal factor de éxito, todo los demás (proceso,
entorno, gestión, etc.) queda en segundo plano. Si cualquiera de ellos tiene un efecto negativo sobre los individuos
debe ser cambiado.
6. El diálogo cara a cara es el método más eficiente y efectivo para comunicar información al equipo de desarrollo y dentro de él. Los miembros de equipo deben hablar entre ellos, éste es el
principal modo de comunicación. Se pueden crear documentos pero no todo estará en ellos, no es
lo que el equipo espera.
Metodologías de Desarrollo Java EE © 2009-2010 Depto. Ciencia de la Computación e IA Metodologías Ágiles -
Especialista Universitario Java Enterprise
Principios Ágiles V7. La medida principal de progreso es el software que
funciona. El estado de un proyecto no viene dado por la documentación
generada o la fase en la que se encuentre, sino por el código generado y en funcionamiento. Un proyecto se encuentra al 50% si el 50% de los requisitos ya están
en funcionamiento.
8. Los procesos ágiles promueven un desarrollo sostenible. Los promotores, desarrolladores y usuarios deberían ser capaces de mantener un ritmo constante. No se trata de desarrollar lo más rápido posible, sino de mantener
el ritmo de desarrollo durante toda la duración del proyecto, asegurando en todo momento que la calidad de lo producido es máxima.
Metodologías de Desarrollo Java EE © 2009-2010 Depto. Ciencia de la Computación e IA Metodologías Ágiles -
Especialista Universitario Java Enterprise
Principios Ágiles VI9. La atención continua a la excelencia técnica y al buen
diseño aumentan la agilidad. Producir código claro y robusto es la clave para avanzar más
rápidamente en el proyecto.
10. La simplicidad (arte de maximizar la cantidad de trabajo no realizado) es esencial. Tomar los caminos más simples que sean consistentes con los
objetivos perseguidos. Si el código producido es simple y de alta calidad será más
sencillo adaptarlo a los cambios que puedan surgir.
Metodologías de Desarrollo Java EE © 2009-2010 Depto. Ciencia de la Computación e IA Metodologías Ágiles -
Especialista Universitario Java Enterprise
Principios Ágiles VII11. Las mejores arquitecturas, requisitos y diseños surgen de
los equipos de trabajo organizados por sí mismos. Todo el equipo es informado de las responsabilidades y éstas
recaen sobre todos sus miembros. Es el propio equipo el que decide la mejor forma de organizarse,
de acuerdo a los objetivos que se persigan.
12. En intervalos regulares, el equipo reflexiona respecto a cómo llegar a ser más efectivo, y según esto ajusta su comportamiento. Puesto que el entorno está cambiando continuamente, el equipo
también debe ajustarse al nuevo escenario de forma continua. Puede cambiar su organización, sus reglas, sus convenciones,
sus relaciones, etc..., para seguir siendo ágil.
Metodologías de Desarrollo Java EE © 2009-2010 Depto. Ciencia de la Computación e IA Metodologías Ágiles -
Especialista Universitario Java Enterprise
Conceptos Ágiles I• Abrazar los cambios
• Afrontar los cambios como aliados (vs enemigos)• Los cambios permiten mayor creatividad y aportan valor más rápido
• Entregas frecuentes• Planificación de muchas entregas con periodos cortos.• Fuerza la implementación de las funciones de mayor prioridad,
entregando valor al cliente rápidamente y emergen los requisitos.• Diseño simple
• Diseñar para la batalla, no para la guerra• Principio KISS (Keep It Simple, Stupid)• Principio YAGNI (You Aren’t Going to Need It)• Realizar el diseño para cubrir el problema actualmente
desarrollado.• Como los cambios son inevitables, planificar para funcionalidades
futuras es malgastar esfuerzos.
Metodologías de Desarrollo Java EE © 2009-2010 Depto. Ciencia de la Computación e IA Metodologías Ágiles -
Especialista Universitario Java Enterprise
Conceptos Ágiles II• Refactorización
• Reestructurar el software para eliminar la duplicación, mejorar la comunicación, simplificar, y añadir flexibilidad sin modificar el comportamiento.
• Principio DRY (Don’t Repeat Yourself)• Rediseño en caliente.
• Desarrollo Dirigido por las Pruebas• 1º escribir prueba, 2º escribir código, 3º ejecutar prueba• Las pruebas de los módulos y de los métodos se realizan
incrementalmente por los desarrolladores y los clientes antes y durante la codificación.
• Fomenta las iteraciones con ciclos cortos• Programación en Parejas
• 2 programadores trabajan codo con codo en un ordenador.• Colaboración continua en el mismo diseño, algoritmo, código y
pruebas.
Metodologías de Desarrollo Java EE © 2009-2010 Depto. Ciencia de la Computación e IA Metodologías Ágiles -
Especialista Universitario Java Enterprise
Conceptos Ágiles III• Conocimiento Tácito
• La agilidad se consigue estableciendo y actualizando el conocimiento del proyecto en las cabezas de los participantes.
• Se evitan los documentos innecesarios (conocimiento explicito)• Retrospectiva
• Reunión post-iteración para evaluar la efectividad del trabajo realizado, métodos utilizados, y estimaciones
• Fomenta el aprendizaje y mejora la estimación para futuras iteraciones
Metodologías de Desarrollo Java EE © 2009-2010 Depto. Ciencia de la Computación e IA Metodologías Ágiles -
Especialista Universitario Java Enterprise
Entorno Ágil I• Integraciones Continuas
• Continua integración (CI) 24/7 de todo el código fuente del sistema. • En cuanto un cambio se sube al gestor de versiones, se construye
el sistema, se despliega sobre el servidor y se ejecutan las pruebas.
• En el caso de que las pruebas fallen, se pueden realizar diversas acciones
• como enviar mails al arquitecto y al último desarrollador que ha subido el cambio al sistema.
• Dentro de un proyecto Java, la media de construcción es de 15 a 30 minutos.
• Nuestro sistema integra los cambios cuanto antes.
Metodologías de Desarrollo Java EE © 2009-2010 Depto. Ciencia de la Computación e IA Metodologías Ágiles -
Especialista Universitario Java Enterprise
Entorno Ágil II
• Herramientas CASE e Ingeniería Inversa• Las herramientas CASE que soportan UML ofrecen:
• Ingeniería Directa generación de código a partir de los diagramas• Ingeniería Inversa generación de diagramas a partir del código.
• Dentro de los proyecto ágiles, las herramientas CASE se utilizan casi exclusivamente para la ingeniería inversa
• ofreciendo mecanismos visuales para la comunicación entre los integrantes del equipo.
• Las herramientas comerciales más utilizadas son Borland Together y Rational Software Architect; mixtas/gratuitas tenemos Omondo y Poseidon UML y StarUML.
• Wiki de Proyecto:• Permiten a los desarrolladores tener un repositorio compartido de
conocimiento• Facilitan la comunicación de actividades y tareas.• Tenemos versiones sencillas como Usemod o más completas como
XWiki o TWiki.
Metodologías de Desarrollo Java EE © 2009-2010 Depto. Ciencia de la Computación e IA Metodologías Ágiles -
Especialista Universitario Java Enterprise
Entorno Ágil III• Habitación Común
• Todos los integrantes del equipo deben compartir una sala común • comunicación directa entre los desarrolladores y cliente.
• Intimidad pueden existir espacios privados separados • Es aconsejable situar la mesas en el centro de la sala, para dejar
las paredes libres• Paredes por Pizarras
• Se necesita utilizar todo el espacio disponible • Mediante las pizarras velleda y rotuladores de pizarra, las paredes
se convierten en otro mecanismo de comunicación.• Cámaras Digitales y Proyectores
• En vez de tener de tomar notas de los modelos diagramados en las paredes, una simple fotografía captura toda la información
• nos permite imprimirla o publicarla en nuestro wiki.• Uso de proyectores donde visualizar las fotografías previas y los
diagramas obtenidos por ingeniería inversa.
Metodologías de Desarrollo Java EE © 2009-2010 Depto. Ciencia de la Computación e IA Metodologías Ágiles -
Especialista Universitario Java Enterprise
Oficina Ágil http://xp123.com/xplor/room-gallery
Metodologías de Desarrollo Java EE © 2009-2010 Depto. Ciencia de la Computación e IA Metodologías Ágiles -
Especialista Universitario Java Enterprise
Comparando...
Costedel
cambio
Tiempo
MetodologíasTradicionales
Metodologías Ágiles
Metodologías de Desarrollo Java EE © 2009-2010 Depto. Ciencia de la Computación e IA Metodologías Ágiles -
Especialista Universitario Java Enterprise
Metodología Ágil• Una metodología es ágil cuando el desarrollo de software
es:• Incremental entregas pequeñas de software, con
ciclos rápidos• Cooperativo cliente y desarrolladores trabajan juntos
constantemente con una cercana comunicación• Sencillo el método en sí mismo es fácil de aprender y
modificar, bien documentado• Adaptable permite realizar cambios en cualquier
momento
Metodologías de Desarrollo Java EE © 2009-2010 Depto. Ciencia de la Computación e IA Metodologías Ágiles -
Especialista Universitario Java Enterprise
Un ejemplo de metodología ágil: Scrum• Desarrollada por Ken Schwaber, Jeff Sutherland y Mike Beedle.
• Define un marco para la gestión de proyectos promoviendo los equipos auto-organizados, con métricas de equipo diarias
• Principales características:• Desarrollo de software mediante iteraciones de 30 días,
denominadas Sprints. El resultado de cada sprint es un incremento ejecutable que se muestra al cliente.
• Reunión diaria de 15 minutos, denominada Scrum, del equipo de desarrollo, desarrollada de pie, frente a la pizarra de tareas, para coordinar e integrar el trabajo del día a día, así como comunicar los problemas encontrados.
• Demo con el cliente al finalizar cada iteración.
Metodologías de Desarrollo Java EE © 2009-2010 Depto. Ciencia de la Computación e IA Metodologías Ágiles -
Especialista Universitario Java Enterprise
Scrum II
Metodologías de Desarrollo Java EE © 2009-2010 Depto. Ciencia de la Computación e IA Metodologías Ágiles -
Especialista Universitario Java Enterprise
Scrum III - Product backlog• Conjunto de
características finales del producto
• Definido y priorizado por el product owner
• Se va modificando conforme avanza el proyecto
• Ejemplo: conjunto de historias de usuario
Backlog item EstimateAllow a guest to make a reservation 3
As a guest, I want to cancel a reservation. 5
As a guest, I want to change the dates of a reservation. 3
As a hotel employee, I can run RevPAR reports (revenue-per-available-room) 8
Improve exception handling 8
... 30
... 50
(Tomado de Mountain Goat Software)
Metodologías de Desarrollo Java EE © 2009-2010 Depto. Ciencia de la Computación e IA Metodologías Ágiles -
Especialista Universitario Java Enterprise
Scrum IV - Sprint• Iteración de desarrollo de un conjunto de características escogidas
(sprint backlog) del producto• Durante el sprint no se puede modificar el backlog• El resultado debe tener calidad final, estar probado y desplegado,
listo para formar parte del producto final• Herramientas fundamentales:
• Pizarra de scrum con la descomposición de las características escogidas en tareas concretas
• Estimación diaria del esfuerzo que queda por hacer: sprint burndown chart
Metodologías de Desarrollo Java EE © 2009-2010 Depto. Ciencia de la Computación e IA Metodologías Ágiles -
Especialista Universitario Java Enterprise
Scrum IV - Equipo de trabajo• No jerárquico, aunque liderado por el scrum
master• Relativamente pequeño (hasta 9 personas)• Multi-funcional: están todos los necesarios
para el desarrollo (diseñadores, desarrolladores, especialistas en BBDD, ...)
• Valores: transparencia y compromiso• Scrum Master
• Responsable de la ejecución de la metodología• Realiza los diagramas de burndown del sprint y
calcula el progreso en el desarrollo• Contacto entre gerencia y equipo de Scrum• Responsable de que la calidad del producto no se
resienta por la urgencia de la entrega
Metodologías de Desarrollo Java EE © 2009-2010 Depto. Ciencia de la Computación e IA Metodologías Ágiles -
Especialista Universitario Java Enterprise
Scrum V - Reunión diaria• Todo el mundo
responde a estas tres preguntas:• ¿Qué hiciste
ayer?• ¿Qué vas a
hacer hoy?• ¿Hay algo que
te impide el trabajo?
Metodologías de Desarrollo Java EE © 2009-2010 Depto. Ciencia de la Computación e IA Metodologías Ágiles -
Especialista Universitario Java Enterprise
Scrum - Diagrama de burndown
(Tomado de Scrum y XP desde las trincheras)
Metodologías de Desarrollo Java EE © 2009-2010 Depto. Ciencia de la Computación e IA Metodologías Ágiles -
Especialista Universitario Java Enterprise
Scrum - Pizarra
Especialista Universitario Java Enterprise
© 2009-2010 Depto. Ciencia de la Computación e IA
¿Preguntas...? (y breve descanso)
Metodologías de Desarrollo Java EE © 2009-2010 Depto. Ciencia de la Computación e IA Metodologías Ágiles -
Especialista Universitario Java Enterprise
Modelado Ágil Puntos a tratar
• Modelado Ágil• Modelo Ágil
• Principios• Centrales y Adiciones
• Prácticas• Centrales y Adicionales
• Artefactos• Escenario Ágil• Trabajando con la Pizarra
Metodologías de Desarrollo Java EE © 2009-2010 Depto. Ciencia de la Computación e IA Metodologías Ágiles -
Especialista Universitario Java Enterprise
Modelado Ágil• Propuesto por Scott Ambler • No tanto como un metodología ágil cerrada en sí misma,
sino como complemento de otras metodologías, sean éstas ágiles o convencionales.
Metodologías de Desarrollo Java EE © 2009-2010 Depto. Ciencia de la Computación e IA Metodologías Ágiles -
Especialista Universitario Java Enterprise
Filosofía AM• Proceso de software basado en prácticas cuyo objetivo es
orientar el modelado de una manera efectiva y ágil.• Promueve el uso de prácticas que fomentan:
• la velocidad• simplicidad• el flujo de creatividad
• Sigue una política de detalle vs tecnología (low-tech, high-touch)
• Uso de procedimientos prácticos en detrimento de técnicos
Metodologías de Desarrollo Java EE © 2009-2010 Depto. Ciencia de la Computación e IA Metodologías Ágiles -
Especialista Universitario Java Enterprise
Valores• Comunicación• Simplicidad• Retroalimentación• Coraje• Humildad
• Hemos de admitir que quizás no lo sepamos todo, que el resto de compañeros tienen cosas que aportar a los proyectos.
Metodologías de Desarrollo Java EE © 2009-2010 Depto. Ciencia de la Computación e IA Metodologías Ágiles -
Especialista Universitario Java Enterprise
¿Qué es un Modelo?• Es una abstracción que describe 1 o más aspectos de un
problema• o de una posible solución a un problema.
• Tradicionalmente, la palabra modelo es sinónimo de 0 o más diagramas anexos a la documentación.
• También son modelos los artefactos no-gráficos:• tarjetas CRC• descripción textual de una o más reglas de negocio• descripción en pseudo-código de un proceso.• ...
Metodologías de Desarrollo Java EE © 2009-2010 Depto. Ciencia de la Computación e IA Metodologías Ágiles -
Especialista Universitario Java Enterprise
Modelo Ágil• Un modelo es una abstracción que describe 1 o más
aspectos de un problema• Un modelo ágil es aquel que es suficientemente bueno. • ¿Cómo saber si un modelo es ágil?
1. Cumple con su propósito comunicar o comprender2. Es comprensible por la audiencia a la que van dirigidos. 3. Es suficientemente preciso. Normalmente no se necesita el
100% de precisión en un modelo. 4. Es suficientemente consistente. 5. Esta suficientemente detallado, dependiendo de la audiencia y
del proyecto. 6. Aporta valor positivo. Es decir, es un modelo que vale la pena
realizar, y que no conlleva más esfuerzos que lo que llega a aportar.
7. Es tan simple como sea posible KISS
Metodologías de Desarrollo Java EE © 2009-2010 Depto. Ciencia de la Computación e IA Metodologías Ágiles -
Especialista Universitario Java Enterprise
Suficientemente Bueno
Metodologías de Desarrollo Java EE © 2009-2010 Depto. Ciencia de la Computación e IA Metodologías Ágiles -
Especialista Universitario Java Enterprise
¿Qué es (y no es) el Modelado Ágil? I• Es una actitud, no un proceso prescriptivo = valores +
principios + prácticas. • Es un suplemento de otras metodologías. AM se debe
complementar con otras metodologías base (XP, RUP, ...) • Es un modo de trabajar en equipo. Fomenta tanto el trato
entre iguales (desarrolladores) como desarrollador-cliente.• No hay "yo" en AM ("There is no I in agile").
• Es efectivo y trata sobre ser efectivo. Ayuda a crear un modelo o proceso cuando se tiene un propósito claro y se comprenden las necesidades de la audiencia• Aplicando los artefactos correctos para afrontar la situación
inmediata, creando los modelos más simples que sea posible• No se ha de hacer más del mínimo que cumpla.
Metodologías de Desarrollo Java EE © 2009-2010 Depto. Ciencia de la Computación e IA Metodologías Ágiles -
Especialista Universitario Java Enterprise
¿Qué es (y no es) el Modelado Ágil? II• Es algo que funciona en la práctica, no una teoría
académica. Las prácticas han sido discutidas desde 2001 en comunidad (www.agilemodeling.com/feedback.htm).
• No es una bala de plata. Es una técnica efectiva para mejorar el desarrollo, no la gallina de los huevos de oro.
• Es para el programador promedio, pero no reemplaza a la gente competente. Se necesitan conocimientos básicos, y cuantas más técnicas de modelado, mejor.
• No es un ataque a la documentación. La documentación debe ser mínima y relevante, pero es obligatoria.
• No es un ataque a las herramientas CASE. El uso de las herramientas más sencillas, en ocasiones supondrá utilizar una hoja de papel o una pizarra, y en otras, una herramienta CASE.
Metodologías de Desarrollo Java EE © 2009-2010 Depto. Ciencia de la Computación e IA Metodologías Ágiles -
Especialista Universitario Java Enterprise
Principios Centrales I1. El software es el principal objetivo
• Los modelos son un medio hacia el fin construir software para el cliente.
• La documentación y el diseño sirven para conseguir este objetivo.• Cualquier actividad que no contribuya a este objetivo debería
cuestionarse, y si no puede justificarse, entonces la evitaremos.
2. Permitir el siguiente esfuerzo es el segundo objetivo• El desarrollo no es una actividad aislada; otros desarrolladores
necesitaran modificar nuestro proyecto cuando ya no estemos.• Debemos garantizar que el sistema es suficientemente robusto
(mediante los modelos y documentación suficientemente necesaria) para admitir mejoras posteriores; debe ser un objetivo, pero no el primordial.
Hay que pensar en los que vengan detrás, ya que podemos volver a ser nosotros de nuevo. Ten siempre un ojo en el futuro.
Metodologías de Desarrollo Java EE © 2009-2010 Depto. Ciencia de la Computación e IA Metodologías Ágiles -
Especialista Universitario Java Enterprise
Principios Centrales II3. Viajar ligero de equipaje
• No crear más modelos de los necesarios, sólo los justos.• Con pocos modelos el equipo perderá su camino, y con
demasiados olvidarán el objetivo principal.• Tener en cuenta que cada modelo que creemos y decidamos
conservar, hemos de mantenerlo hasta el final.• Si tenemos 7 modelos, y ocurre un cambio, hemos de considerar el
impacto del cambio en los 7 modelos. • Si solo decidimos mantener 3 modelos, las cosas se simplifican.
• Además de la cantidad, hemos de vigilar la complejidad de los modelos (cuantos más difíciles, más pesan)
4. Asumir simplicidad.• Mantén los modelos tan simples como puedas, teniendo en cuenta
que la solución más simple es la mejor.• Modela sólo lo que necesitas para hoy y confía en que puedes
remodelar si fuese necesario.
Metodologías de Desarrollo Java EE © 2009-2010 Depto. Ciencia de la Computación e IA Metodologías Ágiles -
Especialista Universitario Java Enterprise
Principios Centrales III5. Abrazar los cambios
• Conforme crezca el conocimiento que tenemos del proyecto, sucederán los cambios y aparecerán nuevos requisitos.
• Tras aceptar los cambios, hay que tener el valor de reconstruir los modelos.
6. Cambio incremental. • Los modelos no tienen porque estar bien a la primera; cambiarán
conforme se desarrolle el proyecto, mediante pequeños cambios.• No es necesario capturar todos los detalles en los modelos.
Cuando se necesiten, se irán añadiendo.
7. Modelar con un propósito• El primer paso es identificar un objetivo para el modelo y a quien va
enfocado (audiencia). • A partir del propósito y la audiencia, desarrollaremos el modelo que
sea suficientemente preciso y suficientemente detallado.
Metodologías de Desarrollo Java EE © 2009-2010 Depto. Ciencia de la Computación e IA Metodologías Ágiles -
Especialista Universitario Java Enterprise
Principios Centrales IV8. Múltiples modelos
• Existen muchas maneras de modelar una solución: elige aquella que mejor encaja con tu situación.
Por ejemplo, los modelos de datos para el equipo de base de datos. • Cuando tengas la oportunidad, expande el conjunto de técnicas
que conoces y aprende nuevas. • UML es un buen punto de partida, pero no es la panacea, existen
otras soluciones.
9. Trabajo de calidad• No hace falta que sea perfecto, solo suficientemente bueno, pero
siempre teniendo en mente la calidad.• Si un modelo no comunica, no es un buen modelo.
Metodologías de Desarrollo Java EE © 2009-2010 Depto. Ciencia de la Computación e IA Metodologías Ágiles -
Especialista Universitario Java Enterprise
Principios Centrales V10. Realimentación rápida
• El tiempo entre una acción y su retroalimentación es crítico.• El hecho de trabajar junto al cliente y realizar actividades de
modelado en grupo permiten obtener retroalimentación casi instantánea.
11. Maximizar el ROI del cliente• Si el modelo que creamos no añade valor ¿para qué crearlo?• Hemos de tener en mente que la documentación del sistema es
una decisión de negocio, no una decisión técnica.• Si el cliente no quiere documentación, es él el que asume los
riesgos que conlleva.
Metodologías de Desarrollo Java EE © 2009-2010 Depto. Ciencia de la Computación e IA Metodologías Ágiles -
Especialista Universitario Java Enterprise
Principios Adicionales1. El contenido es más importante que la representación
• Lo que se dice es más importante que el cómo se dice.• Normalmente malgastamos tiempo mediante un herramienta
CASE cuando un folio es suficiente.• Cualquier modelo tiene múltiples modos de representarlo.
Por ejemplo, la especificación de una GUI se puede crear mediante notas Post-It, folios DIN A3, diagramas en pizarras, mediante una herramienta de prototipado, o mediante un documento formal incluyendo una representación visual y una descripción textual.
2. Comunicación abierta y honesta• Los integrantes del equipo de desarrollo deben expresar sus
ideas, sentimientos, frustraciones y diferentes puntos de vista.• El equipo tomará decisiones con más fundamento mediante el
cultivo de un lugar de trabajo abierto y honesto, donde no se critiquen las comunicaciones.
Metodologías de Desarrollo Java EE © 2009-2010 Depto. Ciencia de la Computación e IA Metodologías Ágiles -
Especialista Universitario Java Enterprise
Prácticas Centrales I1. Colaboración activa del cliente (e interesados)
• Esto requiere que los desarrolladores exhiban flexibilidad con los enfoques y notaciones de modelado.
2. Utilizar las herramientas más simples
• Los desarrollares no-ágiles tienden a modelar en papel o pizarra y luego transcribir los modelos a una herramienta de diseño (de diagramado o CASE).
• Los desarrolladores ágiles no malgastan tiempo de trascripción, y mediante una simple fotografía (ahora que las cámaras digitales están tan baratas) tienen el diagrama almacenado; ya que la mayoría de diagramas son de "usar y tirar".
• Los desarrolladores ágiles utilizarán una herramienta CASE compleja (tipo Borland Together) cuando tenga sentido (por ejemplo, generar el código esqueleto de la aplicación).
Metodologías de Desarrollo Java EE © 2009-2010 Depto. Ciencia de la Computación e IA Metodologías Ágiles -
Especialista Universitario Java Enterprise
Prácticas Centrales II3. Modelar con otros
• Cuando se Modela con un propósito, normalmente se realiza para comprender algo, para comunicar tus ideas a otros, o en búsqueda de una visión conjunta del proyecto.
• Se trata de una actividad de grupo, donde la comunicación amplifica la efectividad del equipo.
4. Poner a prueba con código• Un modelo es una abstracción, y hasta que no se implementa y
prueba, no podemos estar seguros de que sea correcta.• Dentro de un enfoque iterativo, el modelado forma parte del
conjunto de tareas de desarrollo.• Modela, implementa y prueba.
Metodologías de Desarrollo Java EE © 2009-2010 Depto. Ciencia de la Computación e IA Metodologías Ágiles -
Especialista Universitario Java Enterprise
Prácticas Centrales III5. Aplicación de los artefactos correctos
• Los desarrolladores ágiles eligen la herramienta correcta. Existen muchísimos artefactos (www.agilemodeling.com/artifacts): diagramas UML, flujos de datos, modelo de datos conceptual, diagramas de interfaces de usuario, etc...
• Esto implica la necesidad de conocer las ventajas e inconvenientes de cada tipo de artefacto, para poder determinar cuando utilizar o no uno de ellos.
• "Si una imagen vale mil palabras, entonces un modelo vale 1024 líneas de código"
6. Crear diversos modelos en paralelo• Como cada tipo de modelo tiene sus ventajas e inconvenientes, no
existe el modelo perfecto. • Al utilizar diferentes modelos, la expresividad aumenta.
Metodologías de Desarrollo Java EE © 2009-2010 Depto. Ciencia de la Computación e IA Metodologías Ágiles -
Especialista Universitario Java Enterprise
Prácticas Centrales IV7. Iterar sobre otro artefacto
• Cuando al trabajar en un artefacto (caso de uso, CRC, o incluso código fuente) y sientas que estas bloqueado, deja lo que estés haciendo, y trabaja sobre otro artefacto.
• Cada artefacto tiene sus ventajas e inconvenientes, y para desbloquearse, lo mejor es enfocar el mismo problema desde un punto de vista distinto.
8. Modelar en incrementos pequeños• Se sigue el contexto de desarrollo iterativo: modelar, comunicar,
refinar y remodelar. • Modelar lo suficiente y abrazar los cambios.
9. Propiedad colectiva de todos los elementos• Todo el mundo puede trabajar en cualquier modelo, y si fuera
necesario, en cada artefacto del modelo.
Metodologías de Desarrollo Java EE © 2009-2010 Depto. Ciencia de la Computación e IA Metodologías Ágiles -
Especialista Universitario Java Enterprise
Prácticas Centrales V10. Crear contenido simple.
• Todos los elementos del modelo (análisis, arquitectura ..) deben ser simples, pero cumpliendo las necesidades del cliente
• Hemos de tener el coraje para añadir una funcionalidad cuando se nos pida, ni antes ni después.
No se debe añadir aspectos adicionales en los modelos a no ser que sean justificados.
11. Diseñar modelos de manera simple• De todos los posibles diagramas a utilizar, hemos de utilizar un
subconjunto sencillo.• Un modelo simple con un diagrama de clases y la relación entre éstas
suele ser suficiente.• Se pueden realizar muchísimos más diagramas, pero la mayoría de
la veces, no aportan valor.
Metodologías de Desarrollo Java EE © 2009-2010 Depto. Ciencia de la Computación e IA Metodologías Ágiles -
Especialista Universitario Java Enterprise
Prácticas Centrales VI12. Exhibir públicamente los modelos.
• Los modelos deben estar visibles a todos los integrantes en la "pared de modelado".
• Esta pared, ya sea física o mediante un pizarra con pie (incluso una pared virtual dentro del wiki de proyecto), fomenta la comunicación honesta y abierta.
Metodologías de Desarrollo Java EE © 2009-2010 Depto. Ciencia de la Computación e IA Metodologías Ágiles -
Especialista Universitario Java Enterprise
Prácticas Adicionales1. Aplicación de estándares de modelado.
• UML, OMG, ... y de guías de estilo (www.agilemodeling.com/style). 2. Aplicación adecuada de patrones de modelado.
• Algunos patrones, pese a ser la mejor solución, son complejos• Si no son necesarios, es mejor evitar el sobremodelado.
3. Descartar los modelos temporales.• La mayoría de modelos que se crean son temporales, han cumplido su
propósito, pero que ya no aportan ningún valor.• Les tomaremos una foto, y los tiramos a la basura.
4. Formalizar modelos de contrato.• Los contratos de modelado se necesitan cuando nuestro sistema utiliza
información de un sistema externo.• Objetivo minimizar el número de modelos de contratos del sistema
5. Actualizar sólo cuando duela.• Cuando sea absolutamente necesario• La mayoría de las veces no vamos a actualizar nuestro modelos
Metodologías de Desarrollo Java EE © 2009-2010 Depto. Ciencia de la Computación e IA Metodologías Ágiles -
Especialista Universitario Java Enterprise
Especialistas Generalizados• No tienen sentidos los especialistas
que sólo modelan.• ¿Van a modelar durante unos
minutos, y luego esperaran sentados?• Los perfiles útiles son aquellos que
son flexibles para trabajar en varios ámbitos.
• Ambler los denomina Especialistas Generalizados:• Persona con una o más
especialidades junto a habilidades generales en el ciclo completo de desarrollo, que puede tanto codificar como, cuando sea necesario, modelar.
Metodologías de Desarrollo Java EE © 2009-2010 Depto. Ciencia de la Computación e IA Metodologías Ágiles -
Especialista Universitario Java Enterprise
Escenario Ágil• Sea la oficina donde se desarrolla un proyecto, exactamente la
habitación donde se desarrolla el software.• Esta debe tener las paredes limpias (sin decoración), cubiertas con
pizarras blancas de velleda y con material para dibujar y borrar. • Lunes por la mañana, inicio de una iteración de tres semanas. El
equipo de 8 desarrolladores ha decidido dedicar 2 o 3 horas en las paredes para comprender y comunicar mejor sus ideas. Tras ello, comenzarán a programar.
• Se dividen en grupos. El grupo 1 discute el diseño de objetos para el escenario principal de la aplicación.
• En la mitad de una pizarra, realizan un borrador de un diagrama UML de secuencia. No es UML estándar, para eso es un borrador.• Tras 15 minutos, se cambian a la otra mitad de la pizarra y esbozan un
diagrama de clases que complementa el diagrama de secuencia.• Tras 3 horas de tiras y afloja, refinan los 2 diagramas complementarios.
• Finalmente, le hacen fotos digitales a las pizarras, las imprimen y limpian las pizarras.
Metodologías de Desarrollo Java EE © 2009-2010 Depto. Ciencia de la Computación e IA Metodologías Ágiles -
Especialista Universitario Java Enterprise
Trabajando con la Pizarra• Las pizarras son maravillosas, posiblemente, el mejor
invento para un equipo de desarrollo.• Se puede pensar que son buenas para el equipo, para
dentro de la empresa, pero:• ¿y para afuera?• ¿puedo poner diagramas fotografiados de pizarra en la
documentación?
Metodologías de Desarrollo Java EE © 2009-2010 Depto. Ciencia de la Computación e IA Metodologías Ágiles -
Especialista Universitario Java Enterprise
Hacemos la Foto• Para no perder la información, tomamos una fotografía
• Si fuese necesario, podríamos volverla a reproducir en menos de un minuto.
• Claro ejemplo de documentación ágil• la imagen no es bonita, pero es efectiva, y la información no se
pierde.
Metodologías de Desarrollo Java EE © 2009-2010 Depto. Ciencia de la Computación e IA Metodologías Ágiles -
Especialista Universitario Java Enterprise
...y la Limpiamos• Existen un par de problemas con la imagen anterior:
• el tamaño en disco es relativamente grande• cuesta un poco de apreciar porque está muy oscura Whiteboard de
Polyvision
• Al limpiarla, en ocasiones, debido al reflejo del flash puede ser necesario retocar la imagen con un programa de edición .
• Siempre que sea posible, tomar la fotografía sobre una pizarra bien iluminada, de modo que no sea necesario el flash de la cámara.
Metodologías de Desarrollo Java EE © 2009-2010 Depto. Ciencia de la Computación e IA Metodologías Ágiles -
Especialista Universitario Java Enterprise
Ventajas e Inconvenientes de las Pizarras
• Ventajas:• Se trata de un enfoque muy sencillo • Fomenta el trabajo en equipo (una pizarra, muchos
rotuladores)
• Desventajas:• Los diagramas no son permanentes (para eso
tomaremos fotografías)• Su modificación a partir de una imagen es costosa
(implica redibujar el diagrama)• No generan código
Metodologías de Desarrollo Java EE © 2009-2010 Depto. Ciencia de la Computación e IA Metodologías Ágiles -
Especialista Universitario Java Enterprise
Roadmap Para Saber Más• Bibliografía
• Agile & Iterative Development. A Manager's Guide, de Craig Larman. • Agile Software Development. Principles, Patters, and Practices de
Robert C. Martin, • Balancing Agility and Discipline. A Guide for the Perplexed de Barry
Bohem y Richard Turner• Agile Software Development. The Cooperative Game de Alistair
Cockburn. • Agile Modeling de Scott W. Ambler• The Object Primer. Agile Model-Driven Development with UML 2.0 de
Scott W. Ambler• Enlaces
• Wikipedia:http://en.wikipedia.org/wiki/Agile_software_development
• Modelado Ágil por Scott W. Ambler : http://www.agilemodeling.com/
Especialista Universitario Java Enterprise
© 2009-2010 Depto. Ciencia de la Computación e IA
¿Preguntas...?