miércoles, 29 de octubre de 2008

Planning de iteración en XP

XP se caracteriza por ser un proceso iterativo con ciclos o iteraciones que varían desde una a tres semanas, los ciclos cortos proveen una mejor adaptación al cambio y retroalimentación frecuente. La planificación es una tarea donde participan el/los clientes y desarrolladores, inicia con la redacción de historias de usuario por parte del cliente en colaboración con los desarrolladores, se necesita de la colaboración de los mismos para evitar la dependencia entre historias y asegurarse un tamaño correcto de la historia de usuario. Las historias son redactadas en lenguaje natural de forma breve sobre una tarjeta de papel que pueda caber en el bolisllo de la camisa.

El cliente asigna una prioridad a cada historia de usuario, para esto se pueden utilizar diferentes escalas de prioridad, se empleo una escala basada en los números del uno al cinco, donde uno representaba el valor más bajo de prioridad y cinco el valor más alto.

Los desarrolladores ordenan las historias de usuario en función a la complejidad de desarrollo, el orden va de la menos compleja a la más compleja. Seguido a esto los desarrolladores definen los puntos de complejidad a cada historia de usuario, a la menos compleja se le asignan dos puntos de complejidad. A las siguientes se les asigna el punto de complejidad en función a cuantas veces más compleja es la historia de usuario en relación con la historia de usuario menos compleja de la lista.

El siguiente paso, es calcular el numero de puntos de complejidad, que representa la máxima cantidad de trabajo que puede realizarse durante la iteración, para calcular los puntos de complejidad, es necesario estimar el tiempo necesario para implementar la historia de usuario más sencilla en unidades de días de trabajo por par de programación.

Pc= (2 * Dt * Np) / Te
Donde
Pc: Puntos de complejidad,
Dt: total de dias habiles de trabajo durante la iteración,
Np: numero de pares de programadores que trabajan en la iteración,
Te: Tiempo estimado de la h.u. menos compleja. (en días - par de programación)

El siguiente paso es negociar con el cliente el plan de iteración, de tal manera que el cliente pueda obtener el mayor valor posible sin sobrepasar el número de puntos de complejidad posibles durante la iteración. Aquí se ve la utilidad de tener las historias en tarjetas, son manipulables por varias personas del equipo, pueden ser movidas de atrás adelante para la asignación de prioridades o complejidades.

El resultado de la planificación es el plan de iteración que consiste en una lista ordenada de historias de usuario a implementar durante la iteración. Al cumplir el orden, se asegura que el cliente recibirá aproximadamente el valor prometido en el plan de iteración.

La iteración finaliza con una reunión entre el cliente y el equipo de desarrollo, la misma, se lleva a cabo el último día de la iteración. En la reunión se informan los avances de la iteración y se corren los tests de aceptación de las historias de usuario, en el caso nuestro los test fueron automatizados empleando como herramienta base el JUnit, las historias de usuario que satisfacen sus tests de aceptación cambian de estado a “aceptada”. El futuro de las historias que no satisfacen los tests es definido en la planificación de la siguiente iteración.

A veces el tiempo entre iteraciones, tiempo entre la reunión de finalización de una iteración y la reunión de planificación de la próxima iteración, es largo, generalmente por indisponibilidad de tiempo por parte del cliente, como equipo de desarrollo nos preguntamos ¿Qué hacer durante este tiempo? Se trato de utilizar el tiempo disponible para alguna de las siguientes tareas:

  • Codificar la implementación de una historia de usuario que se considere importante para el cliente,

  • Hacer cambios necesarios para pasar los tests de aceptación que fallaron,

  • Investigar el uso de algún API, framework o herramienta,

  • Hacer pequeñas mejoras en el proyecto.

No hay comentarios: