Sei sulla pagina 1di 9

CI-4713 Ingeniería de Software II – Trimestre Abril/Julio 2009

DESARROLLO ÁGIL DE SOFTWARE – CASO PROGRAMACIÓN EXTREMA - XP

I. INTRODUCCIÓN

Se entiende como Desarrollo ágil de software a un paradigma de Desarrollo de Software


basado en procesos ágiles. Los procesos ágiles de desarrollo de software, conocidos
anteriormente como metodologías livianas, intentan evitar los tortuosos y burocráticos caminos
de las metodologías tradicionales enfocándose en la gente y los resultados.

Es un marco de trabajo conceptual de la ingeniería de software que promueve iteraciones en el


desarrollo a lo largo de todo el ciclo de vida del proyecto. Existen muchos métodos de desarrollo
ágil; la mayoría minimiza riesgos desarrollando software en cortos lapsos de tiempo. El software
desarrollado en una unidad de tiempo es llamado una iteración, la cual debe durar de una a
cuatro semanas. Cada iteración del ciclo de vida incluye: planificación, análisis de
requerimientos, diseño, codificación, revisión y documentación. Una iteración no debe agregar
demasiada funcionalidad para justificar el lanzamiento del producto al mercado, pero la meta es
tener un demo (sin errores) al final de cada iteración. Al final de cada iteración el equipo vuelve
a evaluar las prioridades del proyecto.

Los métodos ágiles enfatizan las comunicaciones cara a cara en vez de de la documentación.
La mayoría de los equipos ágiles están localizados en una simple oficina abierta, a veces
llamadas "plataformas de lanzamiento" (bullpen en inglés). La oficina debe incluir revisores,
diseñadores de iteración, escritores de documentación y ayuda y directores de proyecto. Los
métodos ágiles también enfatizan que el software funcional es la primera medida del progreso.
Combinado con la preferencia por las comunicaciones cara a cara, generalmente los métodos
ágiles son criticados y tratados como "indisciplinados" por la falta de documentación técnica.

Las metodologías ágiles, como es el caso de XP, forman parte del movimiento de desarrollo ágil
de software, que se basan en la adaptabilidad de cualquier cambio como medio para aumentar
las posibilidades de éxito de un proyecto.
De forma que una metodología ágil es la que tiene como principios que:
• Los individuos y sus interacciones son más importantes que los procesos y las
herramientas.
• El software que funciona es más importante que la documentación exhaustiva.
• La colaboración con el cliente en lugar de la negociación de contratos.
• La respuesta delante del cambio en lugar de seguir un plan cerrado.
Se puede decir que, este movimiento empezó a existir a partir de febrero de 2001, cuando se
reunieron los representantes de cada una de estas metodologías y terminaron poniendo en
común sus ideas en una declaración conjunta.
Aunque no es posible extendernos aquí sobre este aspecto, creemos importante al menos
reseñar una de las asunciones más importantes e innovadoras que hace XP frente a la mayoría
de los métodos conocidos, y es la referida al coste del cambio. En efecto, siempre ha sido una
verdad universal el hecho de que el coste del cambio en el desarrollo de un proyecto se
incrementaba exponencialmente en el tiempo, como indica la figura 1:

1 de 9
CI-4713 Ingeniería de Software II – Trimestre Abril/Julio 2009

Fig. 1. Costo del cambio durante el ciclo de vida

II. EXTREME PROGRAMMING XP

La programación extrema o eXtreme Programming (XP) es un enfoque de la ingeniería de


software formulado por Kent Beck, autor del primer libro sobre la materia, “Extreme
Programming Explained: Embrace Change” (1999). Es el más destacado de los procesos ágiles
de desarrollo de software. Al igual que éstos, 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. Los defensores de XP consideran que los cambios de requisitos sobre la
marcha son un aspecto natural, inevitable e incluso deseable del desarrollo de proyectos. Creen
que ser capaz de adaptarse a los cambios de requisitos en cualquier punto de la vida del
proyecto es una aproximación mejor y más realista que intentar definir todos los requisitos al
comienzo del proyecto e invertir esfuerzos después en controlar los cambios en los requisitos.

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.

II.1 POSTURAS A FAVOR Y EN CONTRA


La mejor manera de reflejar las diferentes posturas sobre las preferencias de la Programación
Extrema es hacer referencia a una encuesta realizada por IBM el octubre del año 2000, donde
se formulaba precisamente la opinión de profesionales sobre el método de programación que
nos ocupa (Fig. 2).
A. Lo he probado y no me gusta nada
B. Es una mala idea, no puede funcionar nunca
C. Es una buena idea, pero no funcionará.
D. Lo he probado y me gusta mucho

2 de 9
CI-4713 Ingeniería de Software II – Trimestre Abril/Julio 2009

Fig. 2. Opiniones sobre XP

Con el poco tiempo que hace que existe esta metodología, ya se ha generado un gran alboroto
en la comunidad de ingeniería del software. Hay opiniones de todos los gustos de quienes lo
prueban.

Las opiniones negativas mayoritarias alegan lo siguiente:


• Los programadores tienen un acusado sentimiento de posesión del código y esta postura
no encaja con la filosofía de XP.
• También se ve un fuerte sentimiento para respectar las 40 horas semanales, y X.P. no lo
garantiza.
• Los jefes de proyecto también expresan su recelo con este método tan poco tradicional.
En cambio una visión más optimista dice que:
• XP. sólo funcionará con gente buena, es decir, profesionales que son capaces de hacer
un buen diseño, sencillo y a la vez fácilmente ampliable.
• Por otro lado se ha de recalcar que XP no ha inventado ningún método nuevo,
sencillamente ha recogido métodos ya existentes y los ha agrupado, y ha comprobado
que funcionen. Y para terminar, mencionar que el creador de XP asegura que se
garantiza un rato si más no divertido.

II.2 PRINCIPIOS.

La Programación Extrema se basa en 12 principios básicos agrupados en cuatro categorías:

Retroalimentación a escala fina.


• El principio de pruebas: se tiene que establecer un período de pruebas de aceptación del
programa (llamado también período de caja negra) donde se definirán las entradas al
sistema y los resultados esperados de estas entradas. Es muy recomendable automatizar
estas pruebas para poder hacer varias simulaciones del sistema en funcionamiento. Para
hacer estas simulaciones automatizadas, se pueden utilizar Ambientes de Prueba (Unit

3 de 9
CI-4713 Ingeniería de Software II – Trimestre Abril/Julio 2009

testing frameworks). Un buen ejemplo de un ambiente de prueba es el JUnit para Java


(www.junit.org/index.htm). Otros ambientes de pruebas para otros lenguajes como C, C++,
JavaScript, XML y servicios Web, pueden encontrarse en
www.xprogramming.com/software.htm.
• Proceso de planificación: en esta fase, el usuario tendrá que escribir sus necesidades,
definiendo las actividades que realizará el sistema. Se creará un documento llamado
Historias del usuario (User Stories). Entre 20 y 80 historias (todo dependiendo de la
complejidad del problema) se consideran suficientes para formar el llamado Plan de
Liberación, el cual define de forma específica los tiempos de entrega de la aplicación para
recibir retroalimentación por parte del usuario. Por regla general, cada una de les Historias
del usuario suelen necesitar de una a tres semanas de desarrollo.
Son muy importantes y tienen que ser una constante las reuniones periódicas durante esta
fase de planificación. Estas pueden ser a diario, con todo el equipo de desarrollo para
identificar problemas, proponer soluciones y señalar aquellos puntos a los que se les ha de
dar más importancia por su dificultad o por su punto crítico.
• El cliente en el sitio: se le dará poder para determinar los requerimientos, definir la
funcionalidad, señalar las prioridades y responder las preguntas de los programadores. Esta
fuerte interacción cara a cara con el programador disminuye el tiempo de comunicación y la
cantidad de documentación, junto con los altos costes de su creación y mantenimiento. Este
representante del cliente estará con el equipo de trabajo durante toda la realización del
proyecto.
• Programación en parejas: uno de los principios más radicales y en el que la mayoría de
gerentes de desarrollo pone sus dudas. Requiere que todos los programadores XP escriban
su código en parejas, compartiendo una sola máquina. De acuerdo con los experimentos,
este principio puede producir aplicaciones más buenas, de manera consistente, a iguales o
menores costes.

Proceso continuo en lugar de por lotes.


• Integración continua: permite al equipo hacer un rápido progreso implementando las
nuevas características del software. En lugar de crear builds (o versiones) estables de
acuerdo a un cronograma establecido, los equipos de programadores XP pueden reunir su
código y reconstruir el sistema varias veces al día. Esto reduce los problemas de integración
comunes en proyectos largos y estilo cascada.
• Refactoring: permite a los equipos de programadores XP mejorar el diseño del sistema a
través de todo el proceso de desarrollo. Los programadores evalúan continuamente el
diseño y recodifican lo necesario. La finalidad es mantener un sistema enfocado a proveer el
valor de negocio mediante la minimización del código duplicado y/o ineficiente.
• Entregas pequeñas: colocan un sistema sencillo en producción rápidamente que se
actualiza de forma rápida y constante permitiendo que el verdadero valor de negocio del
producto sea evaluado en un ambiente real. Estas entregas no pueden pasar las 2 o 3
semanas como máximo.

Entendimiento compartido.
• Diseño simple: se basa en la filosofía de que el mayor valor de negocio es entregado por el
programa más sencillo que cumpla los requerimientos. Simple Design se enfoca en
proporcionar un sistema que cubra las necesidades inmediatas del cliente, ni más ni menos.
Este proceso permite eliminar redundancias y rejuvenecer los diseños obsoletos de forma
sencilla.

4 de 9
CI-4713 Ingeniería de Software II – Trimestre Abril/Julio 2009

• Metáfora: desarrollada por los programadores al inicio del proyecto, define una historia de
como funciona el sistema completo. XP estimula historias, que son breves descripciones de
un trabajo de un sistema en lugar de los tradicionales diagramas y modelos UML (Unified
Modeling Language). La metáfora expresa la visión evolutiva del proyecto que define el
alcance y propósito del sistema.
Las tarjetas CRC (Clase, Responsabilidad y Colaboración) también ayudarán al equipo a
definir actividades durante el diseño del sistema. Cada tarjeta representa una clase en la
programación orientada a objetos y define sus responsabilidades (lo que ha de hacer) y las
colaboraciones con las otras clases (cómo se comunica con ellas).
• Propiedad colectiva del código: un código con propiedad compartida. Nadie es el
propietario de nada, todos son el propietario de todo. Este método difiere en mucho a los
métodos tradicionales en los que un simple programador posee un conjunto de código. Los
defensores de XP argumentan que mientras haya más gente trabajando en una pieza,
menos errores aparecerán.
• Estándar de codificación: define la propiedad del código compartido así como las reglas
para escribir y documentar el código y la comunicación entre diferentes piezas de código
desarrolladas por diferentes equipos. Los programadores las han de seguir de tal manera
que el código en el sistema se vea como si hubiera estado escrito por una sola persona.

Bienestar del programador.


• La semana de 40 horas: la programación extrema sostiene que los programadores
cansados escriben código de menor cualidad. Minimizar las horas extras y mantener los
programadores frescos, generará código de mayor calidad. Como dice Beck, está bien
trabajar tiempos extra cuando es necesario, pero no se ha de hacer durante dos semanas
seguidas.

II.3 CARACTERÍSTICAS FUNDAMENTALES.


Las características fundamentales del método son:
• Desarrollo iterativo e incremental: pequeñas mejoras, unas tras otras.
• Pruebas unitarias continuas, frecuentemente repetidas y automatizadas, incluyendo
pruebas de regresión. Se aconseja escribir el código de la prueba antes de la codificación.
Véase, por ejemplo, las herramientas de prueba JUnit orientada a Java, DUnit orientada a
Delphi y NUnit para la plataforma.NET. Estas dos últimas inspiradas en JUnit.
• Programación en parejas: se recomienda que las tareas de desarrollo se lleven a cabo
por dos personas en una misma posición. Se supone que la mayor calidad del código
escrito de esta manera -el código es revisado y discutido mientras se escribe- es más
importante que la posible pérdida de productividad inmediata.
• Frecuente integración del equipo de programación con el cliente o usuario. Se
recomienda que un representante del cliente trabaje junto al equipo de desarrollo.
• Corrección de todos los errores antes de añadir nueva funcionalidad. Hacer entregas
frecuentes.
• Refactoring del código, es decir, reescribir ciertas partes del código para aumentar su
legibilidad y mantenibilidad pero sin modificar su comportamiento. Las pruebas han de
garantizar que en el refactoring no se ha introducido ningún fallo.
• Propiedad del código compartida: en vez de dividir la responsabilidad en el desarrollo de
cada módulo en grupos de trabajo distintos, este método promueve el que todo el personal

5 de 9
CI-4713 Ingeniería de Software II – Trimestre Abril/Julio 2009

pueda corregir y extender cualquier parte del proyecto. Las frecuentes pruebas de
regresión garantizan que los posibles errores serán detectados.
• Simplicidad en el código: es la mejor manera de que las cosas funcionen. Cuando todo
funcione se podrá añadir funcionalidad si es necesario. La programación extrema apuesta
que es más sencillo hacer algo simple y tener un poco de trabajo extra para cambiarlo si se
requiere, que realizar algo complicado y quizás nunca utilizarlo.

Fig. 3 Características de la metodología

La simplicidad y la comunicación son extraordinariamente complementarias. Con más


comunicación resulta más fácil identificar qué se debe y qué no se debe hacer. Mientras más
simple es el sistema, menos tendrá que comunicar sobre este, lo que lleva a una comunicación
más completa, especialmente si se puede reducir el equipo de programadores.
En la figura 3 se evidencian estas características.

II. 4 FASES DE LA PROGRAMACIÓN EXTREMA (XP).


1ª Fase: Planificación del Proyecto.
ƒ Historias de usuario.
ƒ Release planning.
ƒ Iteraciones.
ƒ Velocidad del proyecto.
ƒ Programación en pareja.
ƒ Reuniones diarias.
2ª Fase: Diseño.
ƒ Diseños simples.
ƒ Glosarios de términos.
ƒ Riesgos.
ƒ Funcionalidad extra.

6 de 9
CI-4713 Ingeniería de Software II – Trimestre Abril/Julio 2009

ƒ Tarjetas CRC.
3ª Fase: Codificación.
4ª Fase: Pruebas.

III. CICLO DE VIDA DE UN PROYECTO XP


El ciclo de vida de un proyecto XP consiste de seis fases (Fig. 4):

Fig. 4 Ciclo de vida en XP

• Exploració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 de Planeamiento o Planificación de la Entrega (Release)
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

7 de 9
CI-4713 Ingeniería de Software II – Trimestre Abril/Julio 2009

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.
• Iteraciones
Esta fase incluye varias iteraciones sobre el sistema antes de ser entregado. El Plan de Entrega
está compuesto 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.
• Producció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).
• 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.
• 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.

IV. ROLES EN 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.
Programador
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.

8 de 9
CI-4713 Ingeniería de Software II – Trimestre Abril/Julio 2009

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)
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.

BIBLIOGRAFÍA Y ENLACES
Letelier, P., Penadés, M.C: “Métodologías ágiles para el desarrollo de software: eXtreme Programming
(XP)”. Laboratorio de Sistemas de Información. Departamento de Sistemas Informáticos y Computación.
Facultad de Informática. Universidad Politécnica de Valencia. Disponible en
http://www.willydev.net/descargas/masyxp.pdf
Programación Extrema, disponible en http://www.programacionextrema.org/
Manifiesto ágil, disponible en http://es.wikipedia.org/wiki/Manifiesto_%C3%81gil

9 de 9