XP - Jose Joskowicz D
XP - Jose Joskowicz D
XP - Jose Joskowicz D
eXtreme Programming
Charles Mingus
Indice
Indice........................................................................................................................2
Abstract......................................................................................................................4
1. Introducción...........................................................................................................4
2. Agile Manifesto......................................................................................................5
3. Ciclo de vida de Software en XP..........................................................................6
3.1. Modelo en cascada........................................................................................6
3.2. Modelo incremental........................................................................................6
3.3. Modelo evolutivo.............................................................................................7
3.4. Modelo espiral................................................................................................7
3.5. Modelo XP......................................................................................................7
Fase de exploración...........................................................................................8
Fase de planificación..........................................................................................9
Fase de iteraciones............................................................................................9
Fase de puesta en producción...........................................................................9
4. Reglas y Practicas................................................................................................9
4.1. Planificación...................................................................................................9
Historias de usuarios........................................................................................10
Plan de entregas (“Release Plan”)...................................................................10
Plan de iteraciones (“Iteration Plan”)................................................................11
Reuniones diarias de seguimiento (“Stand-up meeting”)................................11
4.2. Diseño...........................................................................................................11
Simplicidad.......................................................................................................11
Soluciones “spike”............................................................................................11
Recodificación..................................................................................................12
Metáforas..........................................................................................................12
4.3. Desarrollo del código....................................................................................12
Disponibilidad del cliente..................................................................................12
Uso de estándares...........................................................................................13
1. Introducción
Extreme Programming (XP) surge como una nueva manera de encarar proyectos
de software, proponiendo una metodología basada esencialmente en la
simplicidad y agilidad. Las metodologías de desarrollo de software tradicionales
(ciclo de vida en cascada, evolutivo, en espiral, iterativo, etc.) aparecen,
comparados con los nuevos métodos propuestos en XP, como pesados y poco
eficientes. La crítica más frecuente a estas metodologías “clásicas” es que son
demasiado burocráticas. Hay tanto que hacer para seguir la metodología que, a
veces, el ritmo entero del desarrollo se retarda. Como respuesta a esto, se ha visto
en los últimos tiempos el surgimiento de “Metodologías Ágiles”. Estos nuevos
métodos buscan un punto medio entre la ausencia de procesos y el abuso de los
mismos, proponiendo un proceso cuyo esfuerzo valga la pena.
Los métodos ágiles cambian significativamente algunos de los énfasis de las
metodologías “clásicas” [1]:
• Los métodos ágiles son adaptables en lugar de predictivos. Los métodos
“clásicos” tienden a intentar planear una gran parte del proceso del software
en gran detalle para un plazo largo de tiempo. Esto funciona bien hasta que
las cosas cambian. Así que su naturaleza es resistirse al cambio. Para los
métodos ágiles, no obstante, el cambio es bienvenido. Intentan ser
procesos que se adaptan y crecen en el cambio.
• Los métodos ágiles son orientados a la gente y no orientados al proceso. El
objetivo de los métodos “clásicos” es definir un proceso que funcionará bien
independientemente de quien lo utilice. Los métodos ágiles afirman que
ningún proceso podrá nunca maquillar las habilidades del equipo de
desarrollo, de modo que el papel del proceso es apoyar al equipo de
desarrollo en su trabajo.
XP es una de las llamadas metodologías ágiles de desarrollo de software más
exitosas de los tiempos recientes. La metodología propuesta en XP está diseñada
para entregar el software que los clientes necesitan en el momento en que lo
necesitan. XP alienta a los desarrolladores a responder a los requerimientos
cambiantes de los clientes, aún en fases tardías del ciclo de vida del desarrollo [2].
2. Agile Manifesto
En febrero de 2001, en las montañas Wasatch de Utah, se reunieron 17
desarrolladores convencidos de que era necesario un cambio en las metodologías
“clásicas” de desarrollo de software. Entre ellos se encontraban los creadores de
XP, SCRUM, DSDM, Adaptive Software Development, Crystal, Feature-Driven
Development y Pragmatic Programming. Juntos proclamaron lo que se ha dado a
conocer como el “Manifesto for Agile Software Development”, estableciendo en él
cuatro principios [5]:
“Se valora a los individuos y las interacciones sobre los procesos y las
herramientas Se valora a las aplicaciones que funcionan sobre la
documentación exhaustiva Se valora la colaboración del cliente sobre las
negociaciones contractuales Se valora la respuesta al cambio sobre el
seguimiento de un plan
Esto significa que, sin desconocer el valor de los segundos items, se valoran
más los primeros”
Los desarrollos de software ágil, que adoptan los principios del “Agile Manifesto”,
no son anti-metodológicos. Por el contrario, siguen su metodología, diferente a la
de los métodos clásicos de desarrollo. Se trata de lograr un equilibrio, en el que,
por ejemplo, la documentación es concreta y útil, y no burocrática y los planes
existen, pero reconociendo sus limitaciones en el actual mundo en permanente
cambio.
El modelo evolutivo es, en cierta forma, similar al incremental, pero admite que la
especificación no esté completamente determinada al comienzo del ciclo de vida.
Los requerimientos que estén suficientemente detallados al comienzo darán lugar
a un entrega inicial, mientras que los siguientes incrementos serán cambios
progresivos que implementen “deltas” de especificación de requerimientos. El
modelo admite que, si la especificación no es suficientemente clara al principio,
puede desarrollarse un prototipo experimental, que tiene como función validar o
identificar los requisitos del sistema.
3.5. Modelo XP
Por esto, se trata de realizar ciclos de desarrollo cortos (llamados iteraciones), con
entregables funcionales al finalizar cada ciclo. En cada iteración se realiza un ciclo
completo de análisis, diseño, desarrollo y pruebas, pero utilizando un conjunto de
reglas y prácticas que caracterizan a XP (y que serán detalladas más adelante).
Fase de planificación
La planificación es una fase corta, en la que el cliente, los gerentes y el grupo de
desarrolladores acuerdan el orden en que deberán implementarse las historias de
usuario, y, asociadas a éstas, las entregas. Típicamente esta fase consiste en una
o varias reuniones grupales de planificación. El resultado de esta fase es un Plan
de Entregas, o “Release Plan”, como se detallará en la sección “Reglas y
Practicas”.
Fase de iteraciones
Esta es la fase principal en el ciclo de desarrollo de XP. Las funcionalidades son
desarrolladas en esta fase, generando al final de cada una un entregable funcional
que implementa las historias de usuario asignadas a la iteración. Como las
historias de usuario no tienen suficiente detalle como para permitir su análisis y
desarrollo, al principio de cada iteración se realizan las tareas necesarias de
análisis, recabando con el cliente todos los datos que sean necesarios. El cliente,
por lo tanto, también debe participar activamente durante esta fase del ciclo. Las
iteraciones son también utilizadas para medir el progreso del proyecto. Una
iteración terminada sin errores es una medida clara de avance.
4. Reglas y Practicas
La metodología XP tiene un conjunto importante de reglas y prácticas. En forma
genérica, se pueden agrupar en [12], [13]:
4.1. Planificación
Según Martín Fowler (uno de los firmantes del “Agile Manifesto”), los planes en XP
se diferencian de las metodologías tradicionales en tres aspectos [14]:
• Simplicidad del plan. No se espera que un plan requiera de un “gurú” con
complicados sistemas de gerenciamiento de proyectos.
• Los planes son realizados por las mismas personas que realizarán el
trabajo.
• Los planes no son predicciones del futuro, sino simplemente la mejor
estimación de cómo saldrán las cosas. Los planes son útiles, pero
necesitan ser cambiados cuando las circunstancias lo requieren. De otra
manera, se termina en situaciones en las que el plan y la realidad no
coinciden, y en estos casos, el plan es totalmente inútil.
Historias de usuarios
Las “Historias de usuarios” (“User stories”) sustituyen a los documentos de
especificación funcional, y a los “casos de uso”. Estas “historias” son escritas por
el cliente, en su propio lenguaje, como descripciones cortas de lo que el sistema
debe realizar. La diferencia más importante entre estas historias y los tradicionales
documentos de especificación funcional se encuentra en el nivel de detalle
requerido. Las historias de usuario deben tener el detalle mínimo como para que
los programadores puedan realizar una estimación poco riesgosa del tiempo que
llevará su desarrollo. Cuando llegue el momento de la implementación, los
4.2. Diseño
Simplicidad
Un diseño simple se implementa más rápidamente que uno complejo. Por ello XP
propone implementar el diseño más simple posible que funcione. Se sugiere nunca
adelantar la implementación de funcionalidades que no correspondan a la iteración
en la que se esté trabajando.
Soluciones “spike”
Cuando aparecen problemas técnicos, o cuando es difícil de estimar el tiempo
para implementar una historia de usuario, pueden utilizarse pequeños programas
de prueba (llamados “spike”1), para explorar diferentes soluciones. Estos
programas son únicamente para probar o evaluar una solución, y suelen ser
desechados luego de su evaluación.
Recodificación
La recodificación (“refactoring”) consiste en escribir nuevamente parte del código
de un programa, sin cambiar su funcionalidad, a los efectos de hacerlo más
simple, conciso y/o entendible. Muchas veces, al terminar de escribir un código de
programa, pensamos que, si lo comenzáramos de nuevo, lo hubiéramos hecho en
forma diferente, mas clara y eficientemente. Sin embargo, como ya está pronto y
“funciona”, rara vez es reescrito. Las metodologías de XP sugieren recodificar
cada vez que sea necesario. Si bien, puede parecer una pérdida de tiempo
innecesaria en el plazo inmediato, los resultados de ésta práctica tienen sus frutos
en las siguientes iteraciones, cuando sea necesario ampliar o cambiar la
funcionalidad. La filosofía que se persigue es, como ya se mencionó, tratar de
mantener el código más simple posible que implemente la funcionalidad deseada.
Metáforas
Una “metáfora” es algo que todos entienden, sin necesidad de mayores
explicaciones. La metodología XP sugiere utilizar este concepto como una manera
sencilla de explicar el propósito del proyecto, y guiar la estructura y arquitectura
del mismo. Por ejemplo, puede ser una guía para la nomenclatura de los métodos
y las clases utilizadas en el diseño del código. Tener nombres claros, que no
requieran de mayores explicaciones, redunda en un ahorro de tiempo.
Es muy importante que el cliente y el grupo de desarrolladores estén de acuerdo y
compartan esta “metáfora”, para que puedan dialogar en un “mismo idioma”. Una
buena metáfora debe ser fácil de comprender para el cliente y a su vez debe tener
suficiente contenido como para que sirva de guía a la arquitectura del proyecto.
Sin embargo, ésta práctica resulta, muchas veces, difícil de realizar. En un trabajo
realizado en el School of Computer Science del Carnegie Mellon, se cuestiona la
utilidad de su uso [15].
Uso de estándares
Si bien esto no es una idea nueva, XP promueve la programación basada en
estándares, de manera que sea fácilmente entendible por todo el equipo, y que
facilite la recodificación.
Integraciones permanentes
Todos los desarrolladores necesitan trabajar siempre con la “última versión”.
Realizar cambios o mejoras sobre versiones antiguas causan graves problemas, y
retrasan al proyecto. Es por eso que XP promueve publicar lo antes posible las
nuevas versiones, aunque no sean las últimas, siempre que estén libres de
errores. Idealmente, todos los días deben existir nuevas versiones publicadas.
Para evitar errores, solo una pareja de desarrolladores puede integrar su código a
la vez.
Ritmo sostenido
La metodología XP indica que debe llevarse un ritmo sostenido de trabajo.
Anteriormente, ésta práctica se denominaba “Semana de 40 horas”. Sin embargo,
lo importante no es si se trabajan, 35, 40 o 42 horas por semana. El concepto que
se desea establecer con esta práctica es el de planificar el trabajo de manera de
mantener un ritmo constante y razonable, sin sobrecargar al equipo.
Cuando un proyecto se retrasa, trabajar tiempo extra puede ser más perjudicial
que beneficioso. El trabajo extra desmotiva inmediatamente al grupo e impacta en
la calidad del producto. En la medida de lo posible, se debería renegociar el plan
de entregas (“Release Plan”), realizando una nueva reunión de planificación con el
cliente, los desarrolladores y los gerentes. Adicionalmente, agregar más
desarrolladores en proyectos ya avanzados no siempre resuelve el problema.
4.4. Pruebas
Pruebas unitarias
Las pruebas unitarias son una de las piedras angulares de XP. Todos los módulos
deben de pasar las pruebas unitarias antes de ser liberados o publicados. Por otra
parte, como se mencionó anteriormente, las pruebas deben ser definidas antes de
realizar el código (“Test-driven programming”). Que todo código liberado pase
correctamente las pruebas unitarias es lo que habilita que funcione la propiedad
colectiva del código. En este sentido, el sistema y el conjunto de pruebas debe ser
guardado junto con el código, para que pueda ser utilizado por otros
desarrolladores, en caso de tener que corregir, cambiar o recodificar parte del
mismo.
Pruebas de aceptación
Las pruebas de aceptación son creadas en base a las historias de usuarios, en
cada ciclo de la iteración del desarrollo. El cliente debe especificar uno o diversos
escenarios para comprobar que una historia de usuario ha sido correctamente
implementada.
Las pruebas de aceptación son consideradas como “pruebas de caja negra”
(“Black box system tests”). Los clientes son responsables de verificar que los
resultados de éstas pruebas sean correctos. Asimismo, en caso de que fallen
varias pruebas, deben indicar el orden de prioridad de resolución.
Una historia de usuario no se puede considerar terminada hasta tanto pase
correctamente todas las pruebas de aceptación.
Dado que la responsabilidad es grupal, es recomendable publicar los resultados de
las pruebas de aceptación, de manera que todo el equipo esté al tanto de esta
información.
5. Valores en XP
XP se basa en cuatro valores, que deben estar presentes en el equipo de
desarrollo para que el proyecto tenga éxito
Comunicación
Muchos de los problemas que existen en proyectos de software (así como en
muchos otros ámbitos) se deben a problemas de comunicación entre las personas.
La comunicación permanente es fundamental en XP. Dado que la documentación
es escasa, el diálogo frontal, cara a cara, entre desarrolladores, gerentes y el
cliente es el medio básico de comunicación. Una buena comunicación tiene que
estar presente durante todo el proyecto.
Simplicidad
XP, como metodología ágil, apuesta a la sencillez, en su máxima expresión.
Sencillez en el diseño, en el código, en los procesos, etc. La sencillez es esencial
para que todos puedan entender el código, y se trata de mejorar mediante
recodificaciones continuas.
Retroalimentación
La retroalimentación debe funcionar en forma permanente. El cliente debe brindar
retroalimentación de las funciones desarrolladas, de manera de poder tomar sus
comentarios para la próxima iteración, y para comprender, cada vez más, sus
necesidades.
Coraje
Cuando se encuentran problemas serios en el diseño, o en cualquier otro aspecto,
se debe tener el coraje suficiente como para encarar su solución, sin importar que
tan difícil sea. Si es necesario cambiar completamente parte del código, hay que
hacerlo, sin importar cuanto tiempo se ha invertido previamente en el mismo.
6. Aplicabilidad
Por lo general, cada metodología tiene sus escenarios de aplicabilidad. Ninguna
de las metodologías de desarrollo de software son buenas para todos los
proyectos. Para proyectos que requieran varias decenas de desarrolladores, y en
los que las especificaciones estén claramente determinadas desde el comienzo,
los métodos en cascada o espiral pueden ser los más adecuados. Por el contrario,
para proyectos medianos, y en los que las especificaciones no se puedan obtener
hasta luego de comenzado el proyecto, XP puede ser la metodología
recomendada.
Asimismo, XP puede ser utilizado junto con otras prácticas. Un ejemplo de esto se
puede encontrar en [19], donde XP se integra con métodos centrados en la
arquitectura.
XP tampoco es incompatible con sistemas de calidad, como pueden ser ISO 9000
o CMMI. En varios artículos se detallan como pueden complementarse las
prácticas de XP con las prácticas de estos sistemas de gestión de calidad [20],
[21] .
La metodología XP aplica a equipos relativamente pequeños. Si bien no hay un
consenso en el número máximo de desarrolladores, todos parecen coincidir en
números no mayores a 20. Sus propias prácticas así lo requieren, ya que, por
ejemplo, mantener las “Stand-up meeting” con más de 20 personas parece poco
razonable.
Por otro lado, el entorno físico en el que se realizan los desarrollos deben ser
adecuados a la metodología. Escritorios amplios, con un ordenador y dos sillas,
mesas redondas para trabajo en equipo, ambientes que permitan la permanente
comunicación y colaboración, son algunos de los requerimientos de infraestructura
para poder implementar esta metodología.
7. Críticas
Una de las críticas a XP es la dificultad de estimar cuánto va a costar un proyecto.
Dado que el alcance del mismo no está completamente definido al comienzo, y
que la metodología XP es expresamente abierta a los cambios durante todo el
proceso, se torna sumamente difícil poder realizar un presupuesto previo. Para
desarrollos “in house” este punto puede no ser crítico, pero sí lo es especialmente
para empresas desarrolladoras de software, dónde deben presupuestar (y ganar)
proyectos.
Por otro lado, muchas de las prácticas sugeridas por XP son compartibles y
utilizadas, de una u otra forma, en muchas otras metodología. Por ejemplo, tener
un diseño simple, utilizar estándares y mantener un ritmo sostenido de trabajo es
claramente ventajoso, sea cual sea la metodología utilizada. Sin embargo, otras
prácticas pueden ser más discutibles. Pensar únicamente en el diseño de lo que
se debe entregar inmediatamente, sin tener en cuenta lo que deberá realizarse
inmediatamente después, o dentro de poco tiempo, no siempre es la mejor
decisión. Es cierto que muchas veces, por intentar generalizar o prever futuros
casos, se invierte tiempo extra para entregables que quizás no lo requerirían. Sin
embargo, si el análisis fue correctamente realizado, este tiempo extra inicial
redundará en un menor tiempo total. Claro que, si pensamos que siempre existirán
cambios imprevistos, no conviene invertir tiempo en generalizar o prever futuras
funciones. Es una práctica que puede admitir diversos puntos de vista.
8. Conclusiones
En una encuesta realizada sobre 45 proyectos realizados con XP en 2001 [23], se
concluye que:
• Casi todos los proyectos se categorizaron como exitosos.
• El 100% de los desarrolladores encuestados afirmaron que volvería a
utilizar la metodología XP en el siguiente proyecto si fuera apropiado.
• Las frecuentes ausencias del cliente fueron identificadas como el mayor
riesgo en los proyectos.
• Los problemas más comunes fueron “barreras psicológicas”, como por
ejemplo el escepticismo de la línea gerencial, la filosofía de la empresa
desarrolladora que no permitía tener al cliente en sitio, o que algunos
desarrolladores se oponía al trabajo en parejas.
• Los elementos más útiles de XP fueron la propiedad colectiva del código,
las pruebas y la integración continua. Las más críticas fueron la metáfora y
el cliente en sitio.
Una encuesta más reciente, realizada en 2005 [24], presenta como resultados
destacables que el 54.9% de los encuestados dicen tener amplia experiencia en
XP, pero solo el 23.2% lo utiliza en la mayoría de los proyectos. Por otro lado, las
prácticas marcadas como más útiles son el diseño simple, la programación dirigida
por los test y el uso de estándares, en ese orden. Cualquiera de estas prácticas
podría aplicar perfectamente a otras metodologías.
Referencias
1 The new methodology
Martin Fowler
http://martinfowler.com/articles/newMethodology.html
13 de diciembre de 2005