Desarrollo ágil II: Programación Extrema
by Ricardo Gil on August 6, 2007
¿Qué es Programación Extrema, eXtreme Programming o XP?
Wikipedia: es un enfoque de la ingeniería de software formulado por Kent Beck. La programación extrema se diferencia de las metodologías tradicionales principalmente en que pone más énfasis en la adaptabilidad que en la previsibilidad. Se puede considerar la programación extrema como la adopción de las mejores metodologías de desarrollo de acuerdo a lo que se pretende llevar a cabo con el proyecto, y aplicarlo de manera dinámica durante el ciclo de vida del software.
programacionextrema.org: La Programación Extrema es uno de los llamados procesos o metodologías ágiles (ProcesoAgil) de desarrollo de software. Consiste en un conjunto de prácticas (ver LasPracticas) que a lo largo de los años han demostrado ser las mejores prácticas de desarrollo de software, llevadas al extremo, fundamentadas en un conjunto de valores (LosValores).
Deigote’s Blog: La programación extrema es una metodología de ingeniería de software para el desarrollo del mismo, que hace énfasis en los siguientes aspectos: satisfacción del cliente y trabajo en equipo.
¿Cómo funciona?
La programación extrema está compuesta por una serie de prácticas y actividades.
Las prácticas que componen la programación extrema se pueden agrupar en cuatro grandes bloques: plan, diseño, codificación y pruebas. Sin embargo, estos bloques no deben realizarse en orden, si no que cada uno consta de una serie de actividades, y todas ellas se irán realizando de manera evolutiva.
- Las actividades son las siguientes:
-
- Planificacion
- Se escriben user stories, cuya idea principal es describir un caso de uso en dos o tres líneas con terminología del cliente (de hecho, se supone que deben ser escritos por el mismo), de tal manera que se creen test de aceptación para el user storie y permita hacer una estimación de tiempo de desarrollo del mismo.
- Se crea un plan de lanzamiento (release planning), que debe servir para crear un calendario que todos puedan cumplir y en cuyo desarrollo hayn participado todas las personas involucradas en el proyecto. Se usará como base los user stories, participando el cliente en la elección de los que se desarrollarán, y según las estimaciones de tiempo de los mismos se crearán las iteraciones del proyecto.
- Se hacen pequeños lanzamientos con mucha frecuencia.
- El desarrollo se divide en iteraciones, cada una de las cuales comienza con un plan de iteración para el que se eligen las user stories a desarrollar y las tareas de desarrollo.
- Las personas cambian de área para evitar cuellos de botella y fomentar la propiedad colectiva del código.
- Se cambia el proceso lo que sea necesario para adaptarlo a tu proyecto.
-
- Diseño
- Se eligen los diseños más simples que funcionen.
- Se elige una metáfora del sistema para que el nombrado de clases, etcétera, siga una misma línea, facilitando la reutilización y la comprensión del código.
- Se escriben tarjetas CRC (class-responsabilities-collaboration) de clase-responsabilidades-colaboración para cada objeto, que permiten abstraerse el pensamiento estructurado y que el equipo de desarrollo al completo participe en el diseño.
- Se “refactoriza sin piedad”. Basicamente, consiste en no tener miedo de cambiar un diseño o eliminar un código que ya no sirve, o al menos que ya no es claramente la mejor solución.
-
- Codificación
- El cliente está siempre disponible, a ser posible cara a cara. La idea es que forme parte del equipo de desarrollo, y esté presente en todas las fases de XP (escribe los user stories con la ayuda de los desarrolladores, participa en la elección de los que entrarán en el plan de lanzamientos, prueba pequeños lanzamientos, participa en las pruebas de funcionalidad…). La idea es usar el tiempo del cliente para estas tareas en vez de para que cree una detalladísima especificación de requisitos, y evitar la entrega de un producto peor que le hará perder tiempo.
- El código se ajustará a unos estándares de codificación, asegurando la consistencia y facilitando la comprensión y refactorización del código.
- Las pruebas unitarias se codifican antes que el código en sí, haciendo que la codificación de este último sea más rápida, y que cuando se afronte la misma se tenga más claro qué objetivos tiene que cumplir lo que se va a codificar.
- La programación del código se realizará en parejas, para aumentar la calidad del mismo. En cada momento, sólo habrá una pareja de programadores integrando código.
- Se integra código y se lanza dicha integración de manera frecuente, evitando divergencias en el desarrollo y permitiendo que todo el mundo trabaje con la última versión del desarrollo. De esta manera, se evitará pasar grandes periodos de tiempo integrando el código al final del desarrollo, ya que las incompatibilidades habrán sido detectadas enseguida.
- Se usa la propiedad colectiva del código, lo que se traduce en que cualquier programador puede cambiar cualquier parte del código. El objetivo es fomentar la contribución de ideas por parte de todo el equipo de desarrollo
- Se deja la optimización para el final
- No se hacen horas extra de trabajo
-
- Pruebas
- Todo el código debe tener pruebas unitarias, y debe pasarlas antes de ser lanzado.
- Cuando se encuentra un error de codificación o bug, se desarrollan pruebas para evitar volver a caer en el mismo.
- Se realizan pruebas de aceptación frecuentemente, publicando los resultados de las mismas. Estas pruebas son generadas a partir de las user stories elegidas para la iteración, y son “pruebas de caja negra”, en las que el cliente verifica el correcto funcionamiento de lo que se está probando. Cuando se pasa la prueba de aceptación, se considera que el correspondiente user storie se ha completado.
Ventajas e inconvenientes
- Ventaja: Cuatro ojos ven más que dos. Al trabajar de dos en dos, el código será de mayor calidad desde el mismo momento de
crearlo y tendrá menos fallos. - Inconveniente: Para un programador experto puede resultar tedioso tener a un novato a su lado permanentemente.
- Ventaja: Los programadores novatos aprenderán de los expertos al emparejarse con ellos.
- Inconveniente: El programador experto no aprende y su trabajo se ve ralentizado.
- Ventaja: Si una pareja realiza un trozo de código susceptible de ser reutilizado en el proyecto, hay dos programadores que lo saben y que lo reutilizarán cuando puedan (ya que saben cómo funciona), enseñándolo a sus nuevos compañeros. De esta manera el conocimiento del código ya hecho se propaga de forma natural entre todos los programadores del equipo.
- Ventaja: El estilo de programación tiende a unificarse.
- Inconveniente: La mejora o cambios en el estilo de programación puede resultar más complejo
¿Cuándo usar XP?
- La programación extrema fue creada pensando en las siguientes circunstancias:
- Proyectos en los que los requisitos tienen altas probabilidades de cambiar con el tiempo (por ejemplo, porque el cliente no tiene claro lo que quiere, o porque el cambio de requisitos está ligado al dominio del problema a resolver).
- Proyectos con alto riesgo (por ejemplo, proyectos con una fecha de entrega que es indispensable cumplir, o proyectos totalmente novedosos para la industria).
- Proyectos con un grupo pequeño de programadores (entre 2 y 12), aunque el equipo completo sea bastante más extenso (incluye a jefes de equipo y representantes de clientes).
La información para el artículo ha sido recopilada de:
Wikipedia: http://es.wikipedia.org/wiki/Programaci%C3%B3n_Extrema
ProgramacionExtrema: http://www.programacionextrema.org
Deigote’s Blog: http://deigote.blogspot.com/2006/03/extreme-programming.html
chuidiang: http://www.chuidiang.com/ood/metodologia/extrema.php
One comment
[...] mi parte sigo dándole vueltas al asunto. ¿Se puede integrar todo en una “metodología” ágil? ¿Podrían convivir ambos procesos simultáneamente o deberían seguir yendo cada uno por su [...]
by Integración de metodología ágiles y diseño centrado en el usuario | elclerigo! on 4 December 2008 at 9:14 am #