Metodología XP
PROGRAMACIÓN EXTREMA (EXTREME PROGRAMMING, XP)
Es una metodología ágil centrada en potenciar las relaciones interpersonales como
clave para el éxito en desarrollo de software, promoviendo el trabajo en
equipo, preocupándose por el aprendizaje de los desarrolladores, y propiciando
un buen clima de trabajo. XP se basa en
realimentación continua entre el cliente y el equipo de desarrollo,
comunicación fluida entre todos los
participantes, simplicidad en las soluciones implementadas y coraje para
enfrentar los cambios. XP se define como especialmente adecuada para proyectos
con requisitos imprecisos y muy cambiantes, y donde existe un alto riesgo
técnico.
Los
principios y prácticas son de sentido
común pero llevadas al extremo, de ahí proviene su nombre. Kent Beck, el
padre de XP, describe la filosofía de XP en sin cubrir los detalles técnicos y
de implantación de las prácticas. Posteriormente, otras publicaciones de
experiencias se han encargado de dicha tarea. A continuación presentaremos las
características esenciales de XP
organizadas en los tres apartados siguientes: historias de usuario, roles,
proceso y prácticas
Las
Historias de Usuario
Las
historias de usuario son la técnica utilizada en XP para especificar los
requisitos del software. Se trata de tarjetas de papel en las cuales el cliente
describe brevemente las características que el sistema debe poseer, sean
requisitos funcionales o no funcionales.
El
tratamiento de las historias de usuario
es muy dinámico y flexible, en cualquier momento historias de usuario
pueden romperse, reemplazarse por otras más específicas o generales, añadirse
nuevas o ser modificadas. Cada historia de usuario es lo suficientemente
comprensible y delimitada para que los programadores puedan implementarla en
unas semanas.
Respecto
de la información contenida en la historia de usuario, existen varias
plantillas sugeridas pero no existe un consenso al respecto. En muchos casos
sólo se propone utilizar un nombre y una descripción o sólo una descripción,
más quizás una estimación de esfuerzo en días. Beck en su libro presenta un
ejemplo de ficha en la cual pueden reconocerse los siguientes contenidos:
fecha, tipo de actividad (nueva, corrección, mejora), prueba funcional, número
de historia, prioridad técnica y del cliente, referencia a otra historia
previa, riesgo, estimación técnica, descripción, notas y una lista de
seguimiento con la fecha, estado cosas por terminar y comentarios.
Una de las interrogantes (que también se
presenta cuando se utilizan casos de uso) es ¿cuál es el nivel de granularidad
adecuado para una historia de usuario? La respuesta no es tajante. Jeffries,
dice que depende de la complejidad del sistema, debe haber al menos una
historia por cada característica
importante, y propone realizar una o dos
historias por programador por mes. Si se tienen menos, probablemente sea
conveniente dividir las historias, si se tienen más lo mejor es disminuir el
detalle y agruparlas. Para efectos de planificación, las historias pueden ser
de una a tres semanas de tiempo de programación
(para no superar el tamaño de una iteración).
No hay que preocuparse si en un
principio no se identifican todas las
historias de usuario. Al comienzo de cada iteración estarán registrados los
cambios en las historias de usuario y según eso se planificará la siguiente
iteración.
Las historias de usuario son descompuestas en
tareas de programación y asignadas a los programadores para ser implementadas
durante una iteración.
Roles
XP
Aunque en otras fuentes de información
aparecen algunas variaciones y extensiones de roles XP, en este apartado
describiremos los roles de acuerdo con la propuesta original de Beck.
El programador escribe las pruebas unitarias y produce el código del
sistema. Debe existir una comunicación y coordinación adecuada entre los
programadores y otros miembros del equipo.
Cliente
El cliente escribe las historias de
usuario y las pruebas funcionales para
validar su implementación. Además, asigna la prioridad a las historias de usuario y decide cuáles se
implementan en cada iteración centrándose
en aportar mayor valor al negocio. El cliente es sólo uno dentro del
proyecto pero puede corresponder a un interlocutor que está representando a
varias personas que se verán afectadas por el sistema.
Encargado de pruebas (Tester) Laboratorio de
Sistemas de Información. Departamento de Sistemas Informáticos y Computación.
El encargado de pruebas ayuda al cliente a
escribir las pruebas funcionales. Ejecuta las pruebas regularmente, difunde los
resultados en el equipo y es responsable de las herramientas de soporte para
pruebas.
Encargado de seguimiento (Tracker)
El encargado de seguimiento proporciona
realimentación al equipo en el proceso XP. Su responsabilidad es verificar el
grado de acierto entre las estimaciones realizadas y el tiempo real dedicado,
comunicando los resultados para mejorar futuras estimaciones. También realiza
el seguimiento del progreso de cada iteración y evalúa si los objetivos son
alcanzables con las restricciones de tiempo y recursos presentes. Determina
cuándo es necesario realizar algún cambio para lograr los objetivos de cada
iteración.
Entrenador (Coach)
Es responsable del proceso global. Es
necesario que conozca a fondo el proceso XP para proveer guías a los miembros
del equipo de forma que se apliquen las prácticas XP y se siga el proceso
correctamente.
Consultor
Es un miembro externo del equipo con un conocimiento específico en algún tema
necesario para el proyecto. Guía al equipo para resolver un problema
específico.
Gestor (Big boss)
Es el vínculo entre clientes y programadores,
ayuda a que el equipo trabaje efectivamente creando las condiciones adecuadas.
Su labor esencial es de coordinación.
Proceso XP
Un proyecto XP tiene éxito cuando el cliente selecciona el valor de
negocio a implementar basado en la habilidad del equipo para medir la
funcionalidad que puede entregar a través del tiempo. El ciclo de desarrollo
consiste (a grandes rasgos) en los siguientes pasos :
1. El cliente define el valor de negocio a
implementar.
2. El programador estima el esfuerzo
necesario para su implementación.
3. El cliente selecciona qué construir, de
acuerdo con sus prioridades y las restricciones de tiempo.
4. El programador construye ese valor de
negocio.
5. Vuelve al paso 1.
En todas las iteraciones de este ciclo tanto
el cliente como el programador aprenden. No se debe presionar al programador a
realizar más trabajo que el estimado, ya que se perderá calidad en el software
o no se cumplirán los plazos. De la misma forma el cliente tiene la obligación
de manejar el ámbito de entrega del producto, para asegurarse que el sistema
tenga el mayor valor de negocio posible con cada iteración.
El ciclo de vida ideal de XP consiste de seis
fases : Exploración, Planificación de la
Entrega (Release), Iteraciones, Producción,
Mantenimiento y Muerte del Proyecto.
Fase I: Exploración Laboratorio de Sistemas
de Información. Departamento de Sistemas Informáticos y Computación.
En esta fase, los clientes plantean a grandes
rasgos las historias de usuario que son de interés para la primera entrega del
producto. Al mismo tiempo el equipo de desarrollo se familiariza con las
herramientas, tecnologías y prácticas que se utilizarán en el proyecto.
Se prueba la tecnología y se exploran las
posibilidades de la arquitectura del sistema construyendo un prototipo. La fase
de exploración toma de pocas semanas a pocos meses, dependiendo del tamaño y
familiaridad que tengan los programadores con la tecnología.
Fase II: Planificación de la Entrega
En esta fase el cliente establece la
prioridad de cada historia de usuario, y correspondientemente, los
programadores realizan una estimación
del esfuerzo necesario de cada una de ellas. Se toman acuerdos sobre el contenido de la primera
entrega y se determina un cronograma en conjunto con el cliente. Una entrega
debería obtenerse en no más de tres meses. Esta fase dura unos pocos días.
Las estimaciones de esfuerzo asociado a la
implementación de las historias la establecen los programadores utilizando como
medida el punto. Un punto, equivale a una semana ideal de programación. Las
historias generalmente valen de 1 a 3 puntos. Por otra parte, el equipo de
desarrollo mantiene un registro de la “velocidad” de desarrollo, establecida en
puntos por iteración, basándose principalmente en la suma de puntos
correspondientes a las historias de usuario que fueron terminadas en la última
iteración.
La planificación se puede realizar basándose
en el tiempo o el alcance. La velocidad del proyecto es utilizada para
establecer cuántas historias se pueden
implementar antes de una fecha determinada o cuánto tiempo tomará implementar
un conjunto de historias. Al planificar por tiempo, se multiplica el número de
iteraciones por la velocidad del proyecto, determinándose cuántos puntos se
pueden completar. Al planificar según alcance del sistema, se divide la suma de
puntos de las historias de usuario seleccionadas entre la velocidad del
proyecto, obteniendo el número de iteraciones necesarias para su
implementación.
Fase III: Iteraciones
Esta fase incluye varias iteraciones sobre el
sistema antes de ser entregado. El Plan de Entrega está compuesta por iteraciones
de no más de tres semanas. En la primera iteración se puede intentar establecer una arquitectura del sistema que pueda ser utilizada durante
el resto del proyecto. Esto se logra escogiendo las historias que fuercen la
creación de esta arquitectura, sin embargo, esto no siempre es posible ya que
es el cliente quien decide qué historias se implementarán en cada iteración
(para maximizar el valor de negocio). Al final de la última iteración el
sistema estará listo para entrar en producción.
Los elementos que deben tomarse en
cuenta durante la elaboración del Plan
de la
Iteración son: historias de usuario no abordadas, velocidad del proyecto,
pruebas de aceptación no superadas en la iteración anterior y tareas no
terminadas en la iteración anterior. Todo el trabajo de la iteración es
expresado en tareas de programación, cada una de ellas es asignada a un
programador como responsable, pero llevadas a cabo por parejas de
programadores. Wake, proporciona algunas guías útiles para realizar la
planificación de la entrega y de cada iteración.
Fase IV: Producción Laboratorio de Sistemas
de Información. Departamento de Sistemas Informáticos y Computación.
La fase de producción requiere de pruebas
adicionales y revisiones de rendimiento antes de que el sistema sea trasladado
al entorno del cliente. Al mismo tiempo, se deben tomar decisiones sobre la
inclusión de nuevas características a la versión actual, debido a cambios
durante esta fase.
Es posible que se rebaje el tiempo que toma
cada iteración, de tres a una semana. Las ideas que han sido propuestas y las
sugerencias son documentadas para su posterior implementación (por ejemplo,
durante la fase de mantenimiento).
Fase V: Mantenimiento
Mientras la primera versión se encuentra en
producción, el proyecto XP debe mantener el sistema en funcionamiento al mismo
tiempo que desarrolla nuevas iteraciones. Para realizar esto se requiere de
tareas de soporte para el cliente. De esta forma, la velocidad de desarrollo
puede bajar después de la puesta del sistema en producción. La fase de
mantenimiento puede requerir nuevo personal dentro del equipo y cambios en su
estructura.
Fase VI: Muerte del Proyecto
Es cuando el cliente no tiene más historias
para ser incluidas en el sistema. Esto requiere que se satisfagan las
necesidades del cliente en otros aspectos como rendimiento y confiabilidad del
sistema. Se genera la documentación final del sistema y no se realizan más
cambios en la arquitectura. La muerte del proyecto también ocurre cuando el
sistema no genera los beneficios esperados por el cliente o cuando no hay
presupuesto para mantenerlo.
Prácticas XP
La principal suposición que se realiza en XP
es la posibilidad de disminuir la mítica curva exponencial del costo del cambio
a lo largo del proyecto, lo suficiente para que el diseño evolutivo funcione.
XP apuesta por un crecimiento lento del costo del cambio y con un
comportamiento asintótico. Esto se
consigue gracias a las tecnologías disponibles para ayudar en el desarrollo de
software y a la aplicación disciplinada de las prácticas que describiremos a
continuación.
El juego de la planificación
Es un espacio frecuente de comunicación entre
el cliente y los programadores. El equipo técnico realiza una estimación del
esfuerzo requerido para la
implementación de las historias de usuario y los clientes deciden sobre el
ámbito y tiempo de las entregas y de cada iteración. Esta práctica se puede
ilustrar como un juego, donde existen dos tipos de jugadores: Cliente y
Programador. El cliente establece la prioridad de cada historia de usuario, de
acuerdo con el valor que aporta para el negocio. Los programadores estiman el
esfuerzo asociado a cada historia de usuario. Se ordenan las historias de
usuario según prioridad y esfuerzo, y se define el contenido de la entrega y/o
iteración, apostando por enfrentar lo de más valor y riesgo cuanto antes. Este
juego se realiza durante la planificación de la entrega, en la planificación de cada iteración y
cuando sea necesario reconducir el proyecto.
Entregas pequeñas
La idea es producir rápidamente
versiones del sistema que sean
operativas, aunque obviamente no cuenten con toda la funcionalidad pretendida
para el sistema pero si que Laboratorio de Sistemas de Información.
Departamento de Sistemas Informáticos y Computación. constituyan un resultado
de valor para el negocio. Una entrega no debería tardar más 3 meses.
Metáfora
En XP no se enfatiza la definición temprana
de una arquitectura estable para el sistema.
Dicha arquitectura se asume evolutiva y los
posibles inconvenientes que se generarían por no contar con ella explícitamente
en el comienzo del proyecto se solventan con la existencia de una metáfora. El
sistema es definido mediante una metáfora o un conjunto de metáforas
compartidas por el cliente y el equipo de desarrollo. Una metáfora es una historia compartida que describe cómo debería
funcionar el sistema. Martin Fowler explica que la práctica de la metáfora
consiste en formar un conjunto de nombres que actúen como vocabulario para
hablar sobre el dominio del problema. Este conjunto de nombres ayuda a la
nomenclatura de clases y métodos del sistema.
Diseño simple
Se debe diseñar la solución más simple que
pueda funcionar y ser implementada en un momento determinado del proyecto. La
complejidad innecesaria y el código extra debe ser removido inmediatamente.
Kent Beck dice que en cualquier momento el diseño adecuado para el software es
aquel que: supera con éxito todas las pruebas, no tiene lógica duplicada,
refleja claramente la intención de implementación de los programadores y tiene
el menor número posible de clases y métodos.
Pruebas
La producción de código está dirigida por las
pruebas unitarias. Las pruebas unitarias son establecidas antes de escribir el código y son ejecutadas
constantemente ante cada modificación del sistema. Los clientes escriben las
pruebas funcionales para cada historia de usuario que deba validarse. En este
contexto de desarrollo evolutivo y de
énfasis en pruebas constantes, la automatización para apoyar esta actividad es
crucial.
Refactorización (Refactoring)
La refactorización es una actividad constante
de reestructuración del código con el objetivo de remover duplicación de
código, mejorar su legibilidad,
simplificarlo y hacerlo más flexible para facilitar los posteriores cambios. La
refactorización mejora la estructura interna del código sin alterar su
comportamiento externo. Robert Martin, señala que el diseño del sistema de
software es una cosa viviente. No se puede imponer todo en un inicio, pero en
el transcurso del tiempo este diseño evoluciona conforme cambia la
funcionalidad del sistema. Para mantener un diseño apropiado, es necesario
realizar actividades de cuidado continuo durante el ciclo de vida del proyecto.
De hecho, este cuidado continuo sobre el diseño es incluso más importante que el
diseño inicial. Un concepto pobre al
inicio puede ser corregido con esta actividad continua, pero sin ella, un buen
diseño inicial se degradará. Laboratorio de Sistemas de Información.
Departamento de Sistemas Informáticos y Computación.
Programación en parejas
Toda la producción de código debe realizarse
con trabajo en parejas de programadores.
Según Cockburn y Williams en un estudio
realizado para identificar los costos y beneficios de la programación en
parejas [4], las principales ventajas de introducir este estilo de programación
son: muchos errores son detectados conforme son introducidos en el código
(inspecciones de código continuas), por
consiguiente la tasa de errores del producto final es más baja, los diseños son
mejores y el tamaño del código menor (continua discusión de ideas de los
programadores), los problemas de programación se resuelven más rápido, se
posibilita la transferencia de conocimientos de programación entre los miembros
del equipo, varias personas entienden las diferentes partes sistema, los
programadores conversan mejorando así el flujo de información y la dinámica del
equipo, y finalmente, los programadores disfrutan más su trabajo. Dichos
beneficios se consiguen después de varios meses de practicar la programación en
parejas. En los estudios realizados por Cockburn y Williams este lapso de tiempo
varía de 3 a 4 meses.
Propiedad colectiva del código
Cualquier programador puede cambiar cualquier
parte del código en cualquier momento. Esta práctica motiva a todos a contribuir con nuevas ideas en todos los
segmentos del sistema, evitando a la vez que algún programador sea imprescindible para
realizar cambios en alguna porción de código.
Integración continua
Cada pieza de código es integrada en el
sistema una vez que esté lista. Así, el sistema puede llegar a ser
integrado y construido varias veces en
un mismo día. Todas las pruebas son ejecutadas y tienen que ser aprobadas para que el nuevo código sea
incorporado definitivamente. La integración continua a menudo reduce la
fragmentación de los esfuerzos de los desarrolladores por falta de comunicación
sobre lo que puede ser reutilizado o compartido. Martin Fowler en [7] afirma
que el desarrollo de un proceso disciplinado y automatizado es esencial para un
proyecto controlado, el equipo de desarrollo está más preparado para modificar
el código cuando sea necesario, debido a la confianza en la identificación y
corrección de los errores de integración. 40 horas por semana Se debe trabajar
un máximo de 40 horas por semana. No se trabajan horas extras en dos semanas
seguidas. Si esto ocurre, probablemente está ocurriendo un problema que debe
corregirse. El trabajo extra desmotiva al
equipo. Los proyectos que
requieren trabajo extra para intentar cumplir con los plazos suelen al final
ser entregados con retraso. En lugar de esto se puede realizar el juego de la
planificación para cambiar el ámbito del proyecto o la fecha de entrega.
Cliente in-situ.
El cliente tiene que estar presente y
disponible todo el tiempo para el equipo. Gran parte del éxito del proyecto XP
se debe a que es el cliente quien conduce constantemente el trabajo hacia lo
que aportará mayor valor de negocio y los programadores pueden resolver de
manera inmediata cualquier duda
asociada. La comunicación oral es más efectiva que la escrita, ya que esta
última toma mucho tiempo en generarse y puede tener más riesgo de ser mal
interpretada. Jeffries indica que se debe pagar un precio por perder la
oportunidad de un cliente con alta disponibilidad.Algunas Laboratorio de
Sistemas de Información. Departamento de Sistemas Informáticos y Computación. Recomendaciones
propuestas para dicha situación son las siguientes: intentar conseguir un
representante que pueda estar siempre disponible y que actúe como interlocutor
del cliente, contar con el cliente al menos en las reuniones de planificación, establecer visitas
frecuentes de los programadores al cliente para validar el sistema, anticiparse
a los problemas asociados estableciendo llamadas telefónicas frecuentes y
conferencias, reforzando el compromiso de trabajo en equipo.
Estándares de programación
XP enfatiza la comunicación de los
programadores a través del código, con lo cual es indispensable que se sigan
ciertos estándares de programación (del equipo, de la organización u otros
estándares reconocidos para los lenguajes de programación utilizados). Los
estándares de programación mantienen el
código legible para los miembros del equipo, facilitando los cambios.
Comentarios respecto de las prácticas:
El mayor beneficio de las prácticas se
consigue con su aplicación conjunta y equilibrada puesto que se apoyan unas en
otras. La mayoría de las prácticas propuestas
por XP no son novedosas sino que en alguna forma ya habían sido
propuestas en ingeniería del software e incluso demostrado su valor en la práctica
(ver para un análisis histórico de ideas y prácticas que sirven como
antecedentes a las utilizadas por las
metodologías ágiles). El mérito de XP es integrarlas de una forma
efectiva y complementarlas con otras ideas desde la perspectiva del negocio, los
valores humanos y el trabajo en equipo.
CONCLUSIONES
No existe una metodología universal para
hacer frente con éxito a cualquier proyecto de desarrollo de software. Toda
metodología debe ser adaptada al contexto del proyecto (recursos técnicos y
humanos, tiempo de desarrollo, tipo de sistema, etc.
Históricamente, las metodologías
tradicionales han intentado abordar la mayor cantidad de situaciones de
contexto del proyecto, exigiendo un
esfuerzo considerable para ser adaptadas, sobre todo en proyectos pequeños y
con requisitos muy cambiantes. Las metodologías ágiles ofrecen una solución
casi a medida para una gran cantidad de proyectos que tienen estas
características. Una de las cualidades más destacables en una metodología ágil
es su sencillez, tanto en su aprendizaje como en su aplicación, reduciéndose
así los costos de implantación en un equipo de desarrollo. Esto ha llevado
hacia un interés creciente en las metodologías ágiles. Sin embargo, hay que
tener presente una serie de inconvenientes y restricciones para su aplicación,
tales como: están dirigidas a equipos pequeños o medianos (Beck sugiere que el
tamaño de los
equipos se limite de 3 a 20 como máximo,
otros dicen no más de 10 participantes), el entornofísico debe ser un ambiente
que permita la comunicación y colaboración entre todos los miembros del equipo
durante todo el tiempo, cualquier resistencia del cliente o del equipo de
desarrollo hacia las prácticas y principios puede llevar al proceso al fracaso (el clima de
trabajo, la colaboración y la relación contractual son claves), el uso de
tecnologías que no tengan un ciclo rápido de realimentación o que no soporten
fácilmente el cambio, etc.
Es importante probar su aplicación móvil antes de lanzarla. Antes de que los usuarios obtengan una experiencia, debes asegurarte de que puede cumplir sus requisitos. Suavidad, eficiencia y alto rendimiento son algunas de las cosas que debe tener en cuenta al realizar las pruebas. Las pruebas le permitirán desempolvar todos los recovecos y hacer de su aplicación siendo un programadores en Mexico una sólida herramienta empresarial que pueda conectar su negocio con sus clientes.
ResponderEliminar