Sesión 4 del curso Metodologías Ágiles de Desarrollo de Software de la Universidad de Alicante (http://www.dccia.ua.es/dccia/inf/asignaturas/MADS/2013-14)
Domingo GallardoProfesor Titular de Universidad en Universidad de Alicante
1. Valores y prácticas XP
Sesión 4a
Metodologías Ágiles de Desarrollo de Software
Domingo Gallardo, DCCIA, Univ. Alicante
2. Elementos de Extreme Programming
•
•
•
•
•
Valores
Prácticas
Eventos
Artefactos
Roles
Metodologías Ágiles de Desarrollo de Software
Domingo Gallardo, DCCIA, Univ. Alicante
2
3. Las 4 variables en el desarrollo de un
proyecto
•
•
•
•
Tiempo
Alcance (scope)
Recursos
Calidad
Alcance
Calidad
Coste
Tiempo
Extreme Programming Pocket Guide, O’Reilly, 2003
Metodologías Ágiles de Desarrollo de Software
Domingo Gallardo, DCCIA, Univ. Alicante
3
4. La calidad no se negocia
•
Calidad
•
•
•
•
En el código
En su funcionalidad
En los aspectos de UX (User eXperience, interacción con el usuario)
La solución fácil para aumentar la velocidad es bajar la calidad, pero no
es una buena decisión:
•
•
La deuda técnica se acumula (pan para hoy, hambre para mañana)
El cliente presupone un mínimo de calidad en el producto y no va
quedarse satisfecho si no se cumple
Metodologías Ágiles de Desarrollo de Software
Domingo Gallardo, DCCIA, Univ. Alicante
4
5. Historia de XP
•
El origen de Extreme Programming (XP) se encuentra en la
comunidad Smalltalk, en particular en la colaboración
entre Kent Beck y Ward Cunningham a finales de los 80
•
Ambos refinaron sus prácticas durante los 90,
extendiendo la idea de que el desarrollo de software
es un proceso adaptativo y orientado a las personas
•
Kent Beck trabajaba de consultor y aplicó estas técnicas
en multiples proyectos, en concreto el proyecto C3 de
Chrysler (1993-1997) que se puede considerar el proyecto
de creación de XP. Kent Beck acuñó el nombre de Extreme
Programming en 1997.
•
La segunda edición del “libro blanco” de Kent Beck (2004) fue un hito
importante. A partir de ahí se ha popularizado la metodología,
aplicándose en múltiples proyectos y publicándose una abundante
bibliografía.
Metodologías Ágiles de Desarrollo de Software
Domingo Gallardo, DCCIA, Univ. Alicante
5
6. Las pruebas son el elemento
fundamental de XP
•
Si tuviéramos que quedarnos con la enseñanza más importante de XP sería, sin lugar
a dudas, el énfasis en las pruebas, y en concreto, en la práctica de TDD (Test Driven
Development, desarrollo dirigido por las pruebas)
•
Para XP las pruebas son el elemento fundamental del desarrollo, y todos los
desarrolladores deben escribirlas mientras que escriben el código que finalmente irá
a producción
•
Las pruebas se integran en un proceso de integración y construcción continua lo que
lleva a una plataforma muy estable para el desarrollo futuro
•
Este énfasis en las pruebas como parte integral del desarrollo ha sobrepasado a la
propia XP y se ha incorporado en múltiples metodologías y equipos de desarrollo
(aunque no utilicen el resto de prácticas XP)
•
Kent Beck es una de las figuras claves de TDD, con sus libros y el software que ha
desarrollado (jUnit).
Metodologías Ágiles de Desarrollo de Software
Domingo Gallardo, DCCIA, Univ. Alicante
6
7. Las promesas de XP
•
•
•
•
Reducir el riesgo del proyecto
Mejorar la respuesta antes cambios en el negocio
Mejorar la productividad a lo largo de toda la vida del software
Hacer más divertido el trabajo del equipo construyendo el software
Metodologías Ágiles de Desarrollo de Software
Domingo Gallardo, DCCIA, Univ. Alicante
7
8. Reglas de codificación
•
•
•
DTSTTCPW: Do The Simplest Thing That Could Possibly Work
YAGNI: You Aren’t Gonna Need It
OAOO: Once and Only Once
Metodologías Ágiles de Desarrollo de Software
Domingo Gallardo, DCCIA, Univ. Alicante
8
9. 4 valores de XP
•
•
•
•
Comunicación
Retroalimentación (feedback)
Simplicidad
Valentía (courage)
Metodologías Ágiles de Desarrollo de Software
Domingo Gallardo, DCCIA, Univ. Alicante
9
10. La comunicación es clave
Henrik Kniberg, Agile & Lean Software Develompment Slides
Metodologías Ágiles de Desarrollo de Software
10
Domingo Gallardo, DCCIA, Univ. Alicante
11. Principios de XP
•
•
•
•
•
•
•
Humanidad
Economía
Beneficio mutuo
Auto similaridad
Mejora
Diversidad
Reflexión
•
•
•
•
•
•
•
Flujo
Oportunidad
Redundancia
Fallo
Calidad
Pasos de bebé
Responsabilidad aceptada
Metodologías Ágiles de Desarrollo de Software
11
Domingo Gallardo, DCCIA, Univ. Alicante
12. Evolución de XP
•
Dos ediciones del libro de Kent Beck Extreme Programming Explained
•
•
•
Primera edición: 2000
Segunda edición: 2005
Hay cambios significativos entre ambas ediciones, que reflejan la
evolución de XP y su maduración, incorporando algunas prácticas de
otras metodologías
•
•
Primera edición: 12 prácticas principales
Segunda edición: 13 prácticas principales y 11 prácticas secundarias
Metodologías Ágiles de Desarrollo de Software
12
Domingo Gallardo, DCCIA, Univ. Alicante
13. Las 12 prácticas de XP1
Kent Beck, Extreme Programming Explained, Primera edición 2000
Metodologías Ágiles de Desarrollo de Software
13
Domingo Gallardo, DCCIA, Univ. Alicante
14. Prácticas XP2
Kent Beck, Extreme Programming Explained, Segunda edición, 2005
Metodologías Ágiles de Desarrollo de Software
14
Domingo Gallardo, DCCIA, Univ. Alicante
15. 1. Sit Together
•
•
Un espacio abierto en el que todo el equipo pueda trabajar
•
•
El espacio de trabajo debe promover que florezca la comunicación
Una forma de satisfacer la necesidad de espacio privado es limitando
el número de horas de trabajo
Cuantas más reuniones cara-a-cara, más humano y productivo se
convierte el proyecto
Metodologías Ágiles de Desarrollo de Software
15
Domingo Gallardo, DCCIA, Univ. Alicante
16. 2. Whole Team
•
Sensación de equipo
•
•
•
•
Todos somos equipo
Estamos en esto juntos
Apoyamos el trabajo, el crecimiento y el aprendizaje de todos
Los equipos son dinámicos, cuando disminuye el número de cambios en
la BD el administrador ya no es necesario y puede dedicarse a otros
proyectos
Metodologías Ágiles de Desarrollo de Software
16
Domingo Gallardo, DCCIA, Univ. Alicante
17. 3. Informative Workspace
•
Hacer que el espacio de trabajo se empape del proyecto en el que
estamos trabajando
•
Colocar las tarjetas con las historias en las paredes, agrupadas por
estado (más de esto cuando hablemos de Kanban)
•
Colocar también en un lugar visible distintas gráficas de evolución del
proyecto
Metodologías Ágiles de Desarrollo de Software
17
Domingo Gallardo, DCCIA, Univ. Alicante
18. 4. Energized Work
•
Trabajar a pleno rendimiento, pero solo tantas horas como se pueda
ser productivo de forma sostenida
•
Con suficiente cafeína es muy fácil llegar al punto en el que el código
que se escribe quita valor al proyecto y (lo más peligroso) no darse
cuenta de ello
•
•
Es posible aumentar la productividad gestionando mejor el tiempo
Por ejemplo, declarar una franja de dos horas como Tiempo de
Programación, desconectar los e-mails y los móviles y dedicarse sólo
a eso
Metodologías Ágiles de Desarrollo de Software
18
Domingo Gallardo, DCCIA, Univ. Alicante
20. 5. Pair Programming
•
Todo el código que va a producción debe ser escrito con dos personas
sentadas frente a la máquina
•
Pair programming es un diálogo entre dos personas que están simultáneamente
analizando, diseñando, probando e intentando programar mejor
•
Ventajas
•
•
•
•
•
Se mantienen centrados mutuamente
Se clarifican ideas
Se vencen los bloqueos individuales
Se cumplen mejor los estándares del equipo
Consejos
•
•
•
Rotar las parejas
No juntar dos programadores novatos
No invadir el espacio personal del otro (monitores grandes)
Metodologías Ágiles de Desarrollo de Software
20
Domingo Gallardo, DCCIA, Univ. Alicante
21. 6. Stories
•
Escribir las historias en tarjetas pequeñas, indicando un nombre, una
descripción y una estimación del tiempo
•
Es más adecuado hablar de “historias” que de “requisitos” (palabra
con connotaciones de “inmutabilidad” y “permanencia” que no son
compatibles con “abrazar el cambio”)
•
Al estimar cada historia es fácil darse cuenta del coste de cada una de
ellas y podemos combinarlas, priorizarlas
•
Colocar las tarjetas en la pared, en un sitio
visible, no en un programa
Metodologías Ágiles de Desarrollo de Software
21
Domingo Gallardo, DCCIA, Univ. Alicante
22. 7. Weekly Cycle
•
Reunión al comienzo de cada semana
•
Revisión del progreso hasta la fecha, incluyendo si el progreso de la semana previa se
corresponde con lo previsto
•
Hacer que el cliente escoja historias que sumen una semana de tamaño para la
semana actual
•
Fraccionar las historias en tareas, los miembros del equipo se apuntan a las tareas y
las estiman
•
Comenzar la semana escribiendo las pruebas automáticas que se realizarán cuando las
historias estén completas y pasar el resto de la semana implementándolas e
integrándolas en el proyecto
•
Al final de la semana las nuevas historias deben estar disponibles para ser desplegadas
•
La semana es un ciclo corto para poder hacer experimentos del estilo “vamos a usar la
técnica del Pomodoro durante una semana” o “esta semana cambiamos de pareja cada
hora”
Metodologías Ágiles de Desarrollo de Software
22
Domingo Gallardo, DCCIA, Univ. Alicante
23. 8. Quarterly Cycle
•
Es conveniente hacer reuniones con un ciclo superior al semanal para ver
la evolución del proyecto en conjunto
•
Cada 3 meses
• Identificar los cuellos de botella, especialmente los que no están
controlados por el equipo
• Planificar el tema o los temas para el cuatrimestre
• Escoger historias que sumen un trimestre para cumplir con los temas
escogidos
• Centrarse en una visión general de cómo el proyecto encaja en la
organización y del valor que añade
•
Los trimestres también son un buen ciclo para reflexionar sobre el equipo y
proponer y evaluar experimentos que duren más de una semana
Metodologías Ágiles de Desarrollo de Software
23
Domingo Gallardo, DCCIA, Univ. Alicante
24. 9. Slack
•
Trabajar con un cierto colchón que suavice la tensión de cumplir
compromisos imposibles
•
Es importante establecer una atmósfera de confianza en la que los que
piden y los que desarrollan el producto se comunican de forma clara y
honesta
•
Trabajar con plazos no realistas introduce errores inmanejables, mina
la moral y construye relaciones antagonistas
•
Cumplir los compromisos, incluso modestos, elimina desperdicios
(waste), suaviza las tensiones, mejora la credibilidad y construye unas
relaciones basadas en la comunicación honesta
Metodologías Ágiles de Desarrollo de Software
24
Domingo Gallardo, DCCIA, Univ. Alicante
25. 10. Ten-Minute Build
•
10 minutos para construir automáticamente todo el sistema y ejecutar
todos los tests
•
Todo el proceso de build y de paso de las pruebas debería estar
automatizado
•
No comprobar sólo las pruebas de la nueva parte añadida al sistema,
sino todas las anteriores
•
En continuous delivery se va un paso más allá y se automatiza también
el despliegue y el lanzamiento de las nuevas funcionalidades en
producción
Metodologías Ágiles de Desarrollo de Software
25
Domingo Gallardo, DCCIA, Univ. Alicante
26. 11. Continuous Integration
• No dejar pasar más de dos horas sin integrar los cambios que hemos
programado
• La programación en equipo es un problema de “divide, vencerás e integrarás”
• La integración es un paso no predecible que puede costar más que el propio
desarrollo
• Integración síncrona: cada pareja después de un par de horas sube sus
cambios y espera a que se complete el build y se hayan pasado todas las
pruebas sin ningún problema de regresión
• Integración asíncrona: cada noche se hace un build diario en el que se
construye la nueva versión del sistema. Si se producen errores se notifica con
alertas de mails o cambia de color una lámpara de lava
• El sistema resultante debe ser un sistema listo para lanzarse sin demasiados
problemas. Si el objetivo es desplegar una web, hay que desplegar la web (en
el entorno de staging).
Metodologías Ágiles de Desarrollo de Software
26
Domingo Gallardo, DCCIA, Univ. Alicante
27. 12. Test-First Programming
• Antes de escribir cualquier código escribir las pruebas
• Muchas ventajas (las veremos com más detalle cuando hablemos de TDD)
• Las pruebas sirven de especificación y aclaran el alcance del código que tenemos
que escribir
• Cohesión y acoplamiento - si es difícil escribir el test, es una señal de que tenemos
un problema de diseño. El código débilmente acoplado y altamente cohesionado
es más fácil de probar
• Confianza - escribiendo código limpio que funciona y demostrando tus intenciones
con las pruebas construye una relación de confianza con tus compañeros
• Ritmo - es muy fácil perderse durante horas cuando se está programando. Con el
enfoque de test-first, está claro lo que hay que hacer a continuación: o escribimos
una prueba o hacemos que funcione una prueba rota (broken test). El ciclo que se
genera se convierte pronto en algo natural y eficiente: test, code, refactor, test,
code, refactor
Metodologías Ágiles de Desarrollo de Software
27
Domingo Gallardo, DCCIA, Univ. Alicante
28. 13. Incremental Design
•
Diseño gradual, con pasos pequeños y
seguros
•
El diseño no debe hacerse sólo al principio,
sino conforme vamos adquiriendo experiencia
Invertir cada día en el diseño del
sistema, luchando por ver cómo
la parte que estamos construyendo
puede mejorarlo en su conjunto
•
•
Pensar todo el tiempo en el problema
en conjunto, buscando formas de
diseñar mejor todo el sistema. Cuando
tengamos claro un diseño mejor, trabajar
gradual pero continuamente para alinear
el sistema real con este diseño
•
Los equipos XP trabajan duro para crear las condiciones bajo las que el coste de cambiar el software
sea bajo
•
Una regla sencilla para mejorar el diseño: eliminar la duplicación
Metodologías Ágiles de Desarrollo de Software
28
Domingo Gallardo, DCCIA, Univ. Alicante
29. Ejemplo: productos de Google
Henrik Kniberg, Agile & Lean Software Develompment Slides
Metodologías Ágiles de Desarrollo de Software
29
Domingo Gallardo, DCCIA, Univ. Alicante
30. Prácticas secundarias
Team
Business
14. Real Customer Involvement
20. Root-Cause Analysis
15. Team Continuity
21. Negotiated Scope Contract
16. Shrinking Teams
22. Pay-Per-Use
Programming
Deliverying
17. Shared Code
23. Incremental Deployment
18. Code and Test
24. Daily Deployment
19. Single Code Base
Metodologías Ágiles de Desarrollo de Software
30
Domingo Gallardo, DCCIA, Univ. Alicante
31. Lecturas
•
•
Ron Jeffries, What is Extreme Programming, 2003
Capítulo 1 de Kent Beck, Extreme Programming Explained, Second
Edition (2005)
Metodologías Ágiles de Desarrollo de Software
31
Domingo Gallardo, DCCIA, Univ. Alicante