Documentos exposicion
lunes, 17 de febrero de 2014
Extreme Programming
El
Extreme Programming (XP) es un método para desarrollar software basado en cinco
valores: simplicidad, comunicación, retroalimentación, coraje y respeto.
Funciona al unir todo el equipo de trabajo en la presencia de simples
prácticas.
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.
Simplicidad
La
simplicidad es el corazón de XP. Aplicando el principio de simplicidad afecta
todo lo que haces, y profundamente impacta en tu habilidad de implementar
satisfactoriamente XP. Al enfocarse en diseños simples minimizas el riesgo de
utilizar mucho tiempo diseñando ambientes de trabajos sofisticados que el
cliente quizás no requiera.
El
mantener el código simple hace que los cambios sean más fáciles aun cuando los
requerimientos inevitablemente cambien. Al enfocarse en soluciones
simples a los problemas de hoy minimizamos el costo de los cambios mediante
pase el tiempo.
La
teoría tradicional argumenta que el hacer cambios en algún software incrementa
conforme el tiempo de vida del proyecto aumente. Así como es diez veces más
difícil arreglar un error cuando estás en la fase de diseño, y 100 veces más
difícil durante la fase de programar.
El enfoque de XP reconoce que el costo cambia generalmente como uno esperaría, pero este incremento no es inevitable. Si constantemente refactorizas y mantienes tu código simple, puedes evitar de esta manera el incremento de complejidad.
Comunicación
La
comunicación viene de muchas formas. Para programadores, el código se comunica
mejor cuando es simple. Es por esto que XP se enfoca en mantener el código
simple. Una buena manera de describir código es utilizando comentarios, sin
embargo es más
confiable
auto-documentar.
Las
pruebas unitarias son otra forma de comunicación. XP requiere que se escriban pruebas
unitarias para la gran mayoría del código en un sistema. Las pruebas unitarias
comunican el diseño de una clase efectivamente, ya que estas pruebas
demuestran ejemplos concretos de cómo utilizar la funcionalidad de la clase.
Existe
una comunicación constante entre el cliente y los programadores. XP requiere un
cliente en el sitio de trabajo para transmitir los requerimientos al equipo de
trabajo. El cliente decide qué características son más importantes, y
siempre está disponible para responder preguntas.
Retroalimentación
XP
fomenta tener ciclos de lanzamiento cortos, generalmente no mayor a dos
semanas.
Con
un ciclo de lanzamiento corto, el cliente es capaz de evaluar cada nueva
característica a la par que esta es desarrollada, minimizando la necesidad de
rehacer y haciendo que los programadores se enfoquen en que es lo más
importante para el cliente. De esta forma los clientes pueden estar tranquilos
de que pueden cancelar el proyecto en cualquier momento y tener un sistema que
trabaje con las características que más les importaban.
Coraje
El
tener coraje significa tomar las decisiones difíciles cuando sea necesario. Si
una característica no funciona, arreglarla. Si parte del código no aspira a ser
mejor, mejorarlo.
Los
conceptos antes mencionados se pueden ver cómo simplemente sentido común,
entonces, ¿Por qué se requiere tener coraje para implementar XP?
Para
los gerentes, el concepto de programación en pares puede ser difícil de aceptar,
ya que pareciera que la productividad se vería reducida en 50% ya que
solo la mitad de los programadores están escribiendo código en un determinado
tiempo. De esta forma se requiere de coraje para confiar en que la programación
en pares mejora la calidad sin reducir la velocidad del proyecto.
Enfocarse
en la simplicidad es una de las facetas más difíciles de XP. Se necesita de
coraje para implementar la característica que el cliente está pidiendo para hoy
utilizando un enfoque simple, porque probablemente quieras construir flexibilidad
para hacer frente a las características de mañana también.
El
coraje es una virtud difícil de aplicar. Nadie quiere equivocarse o romper una
promesa. Aunque, la única manera de recuperarse de un error es admitirlo y
arreglarlo. Desarrollar software es desafiante, pero enfrentarse a ese desafío
en lugar de evitarlo nos lleva a un mejor software.
Respeto
El
respeto se manifiesta de varias formas. Los miembros del equipo se respetan los
unos a otros, porque los programadores no pueden realizar cambios que hacen que
las pruebas existentes fallen o que demore el trabajo de sus compañeros. Los
miembros respetan su trabajo porque siempre están luchando por la alta calidad
en el producto y buscando el diseño óptimo o más eficiente para la solución a
través de la refactorización del código. Los miembros del equipo respetan el
trabajo del resto no haciendo menos a otros, una mejor autoestima en el equipo
y elevando el ritmo de producción en el equipo.
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.
- Programación por parejas: se recomienda que las tareas de desarrollo se lleven a cabo por dos personas en un mismo puesto. 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 interacció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.
- Refactorización 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 la refactorización 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 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 en 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.
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.
Programación en Parejas
Cómo
se ha mencionado antes, los equipos de trabajo de XP trabajan en parejas. Este
par de programadores comporten una misma computadora, teclado y mouse (es buena
idea tener dos monitores para que de esta forma ambos programadores puedan ver
claramente la pantalla, pero no es forzosamente necesario). Los escritorios
deben de estar configurados de tal forma que dos personas puedan sentarse lado
a lado cómodamente y todo el equipo de trabajo debe de trabajar en la misma
sala.
La
forma de trabajar en parejas es la siguiente:
1.-
Escoges un requerimiento del usuario para tu siguiente trabajo
2.-
Pides ayuda de otro programador
3.-
Ambos trabajan en una pequeña parte de funcionalidad
*
Se intenta trabajar en tareas pequeñas que tomen un par de horas
*
Después de finalizar la tarea, escoges un compañero diferente.
Al
emparejar programadores, los principiantes pueden ganar una valiosa experiencia
de los expertos.
La
programación en pareja es crucial porque XP requiere de un nivel muy alto de
disciplina para poder ser satisfactorio. El programador que tiene el control
del teclado, tiene un nivel de detalle muy fino sobre el código, y el que no, mientras
tiene tiempo de pensar en el problema a un nivel más alto de abstracción. El
observador debe siempre buscar maneras de simplificar el código, y pensar sobre
adicionales pruebas unitarias.
Inspecciones de Código
Las
inspecciones de código son una gran técnica para validar la calidad del código.
En proyectos típicos, los programadores trabajan por su cuenta por varias
semanas, y después presentan su código a un grupo de compañeros para una
reunión de inspección formal.
Las
inspecciones de códigos son una herramienta valiosa, los equipos de XP no se
basan en inspecciones formales de códigos, primeramente porque todo el código
es constantemente revisado ya que es desarrollado por pares de programadores.
Ya que los programadores cambian de compañeros y trabajan en diferentes partes
del sistema, el código es constantemente mejorado y refactorizado por personas
adicionales al autor original.
Pruebas Unitarias
Las
pruebas unitarias son pruebas escritas por los programadores para probar la
funcionalidad de una pequeña parte de alguna aplicación.
La
XP no puede ser realizada sin utilizar las pruebas unitarias. Las pruebas
unitarias ayudan a construir confianza de que el código funciona correctamente.
De igual forma las pruebas unitarias también proveen de seguridad, permitiendo
que un par de programadores hagan cambios en una parte del código sin miedo, ya
que esto permite verificar que el código funciona previo a alguna modificación,
y si después de la modificación con sus pruebas unitarias también funcionan
quiere decir que se ha cambiado el código y se ha mantenido el funcionamiento
correcto de todo lo que ya se había realizado antes.
Ciclo de Vida
de XP
El ciclo de vida de XP se
enfatiza en el carácter interactivo e incremental del desarrollo, una iteración
de desarrollo es un período de tiempo en el que se realiza un conjunto de
funcionalidades determinadas que en el caso de XP corresponden a un
conjunto de historias de usuarios.
Las iteraciones son relativamente cortas ya que se piensa que entre más rápido se le entreguen desarrollos al cliente, más retroalimentación se va a obtener y esto va a representar una mejor calidad del producto a largo plazo. Existe una fase de análisis inicial orientada a programar las iteraciones de desarrollo y cada iteración incluye diseño, codificación y pruebas, fases superpuestas de tal manera que no se separen en el tiempo.
Fase de la 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.
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 del planeamiento: se priorizan las historias de usuario y se acuerda el alcance del release. Los programadores estiman cuánto esfuerzo requiere cada historia y a partir de allí se define el cronograma. La duración del cronograma del primer release no excede normalmente dos meses. La fase de planeamiento toma un par de días. Se deben incluir varias iteraciones para lograr un release. El cronograma fijado en la etapa de planeamiento se realiza a un número de iteraciones, cada una toma de una a cuatro semanas en ejecución. La primera iteración crea un sistema con la arquitectura del sistema completo. Esto es alcanzado seleccionando las historias que harán cumplir la construcción de la estructura para el sistema completo. El cliente decide las historias que se seleccionarán para cada iteración. Las pruebas funcionales creadas por el cliente se ejecutan al final de cada iteración. Al final de la última iteración el sistema está listo para producción.
Fase de producción: requiere prueba y comprobación extra del funcionamiento del sistema antes de que éste se pueda liberar al cliente. En esta fase, los nuevos cambios pueden todavía ser encontrados y debe tomarse la decisión de si se incluyen o no en el release actual. Durante esta fase, las iteraciones pueden ser aceleradas de una a tres semanas. Las ideas y las sugerencias pospuestas se documentan para una puesta en práctica posterior por ejemplo en la fase de mantenimiento. Después de que se realice el primer release productivo para uso del cliente, el proyecto de Xp debe mantener el funcionamiento del sistema mientras que realiza nuevas iteraciones.
Fase de mantenimiento: requiere de un mayor esfuerzo para satisfacer también las tareas del cliente. Así, la velocidad del desarrollo puede desacelerar después de que el sistema esté en la producción. La fase de mantenimiento puede requerir la incorporación de nueva gente y cambiar la estructura del equipo.
Fase de muerte: 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.
Roles
Programador
·
Pieza básica en
desarrollos XP
·
Más responsabilidad
que en otros modos de desarrollo
·
Responsable sobre el
código
·
Responsable sobre el
diseño (refactorización, simplicidad)
·
Responsable sobre la
integridad del sistema (pruebas)
·
Capacidad de
comunicación
·
Acepta críticas
(código colectivo)
Cliente
·
Pieza básica en
desarrollos XP
·
Define
especificaciones
·
Influye sin controlar
·
Confía en el grupo de
desarrollo
·
Define pruebas
funcionales
Encargado de Pruebas
·
Apoya al cliente en la
preparación/realización de las pruebas funcionales
·
Ejecuta las pruebas
funcionales y publica los resultados
Encargado de Seguimiento (Tracker)
·
Recoge, analiza y
publica información sobre la marcha del proyecto sin afectar demasiado el proceso
·
Supervisa el
cumplimiento de las estimaciones en cada iteración
·
Informa sobre la
marcha de la iteración en curso
·
Controla la marcha de
las pruebas funcionales, de los errores reportados, de las responsabilidades aceptadas y de las pruebas
añadidas por los errores
encontrados
·
Entrenador (Coach)
·
Experto en XP
·
Responsable del proceso en su conjunto
·
Identifica las desviaciones y reclama atención sobre las mismas
·
Guía al grupo de forma indirecta (sin dañar su seguridad ni confianza)
·
Interviene directamente si es necesario
·
Atajar rápidamente el problema
Consultor
·
Apoya al equipo XP en
cuestiones puntuales
Jefe del Proyecto
·
Favorece la relación
entre usuarios y desarrolladores
·
Confía en el equipo
XP
·
Cubre las necesidades
del equipo XP
·
Asegura que alcanza
sus objetivos
Ventajas
·
Estar preparados para
el cambio, significa reducir su coste.
·
Planificación más
transparente para nuestros clientes, conocen las fechas de entrega de funcionalidades.
·
Permitirá definir en
cada iteración cuales son los objetivos de la siguiente
·
Permite tener
realimentación de los usuarios muy útil.
·
La presión esta a lo
largo de todo el proyecto y no en una entrega final
·
Desventajas
·
Es recomendable
emplearlo solo en proyectos a corto plazo.
·
Altas comisiones en
caso de fallar
·
Requiere de un buen
trabajo en equipo
·
No funciona si los
programadores están separados geográficamente
·
No se ha probado que
XP funcione para sistemas con problemas de escalabilidad.
Conclusión
No existe algo conocido como “la mejor metodología”. Se deben de tener en
cuenta los recursos con los que se
cuentan, y el enfoque del proyecto ya que, en el caso de XP valora el trabajo
en equipo más que nada, y funciona bien cuando los requerimientos no son del
todo claro o son cambiantes. De la misma manera, si cierto proceso de
desarrollo con el cual se ha estado trabajando antes funciona bien, es sabio
seguir trabajando con el mismo, sin embargo, se pueden utilizar algunas ideas
de la XP dentro de otras metodologías.
Bibliografía
Victor Villafuerte R. Extreme Programming (2009).
Consultado Febrero, 17, 2014 en www.extremeprogramming.host56.com .
O’Reilly
& Associates, Inc. Extreme Programming Pocket Guide (2003)
Eric M.
Burke & Brian M. Coyner. Java Extreme Programming Cookbook (2003)
Don
Wells. Extreme Programming (2008). Consultado Febrero, 17.
2014 en:
Suscribirse a:
Entradas (Atom)



