XP - Universidad Austral

Anuncio
eXtreme Programming1
Parte del Trabajo de Grado “Adecuación de la metodología de desarrollo Extreme
Programming a proyectos llevados a cabo en la materia Laboratorio III de la
Facultad de Ingeniería de la Universidad Austral” de Lucila Ana Cuccaro Goggi
1
Índice General
Motivación del trabajo de grado ....................................................................................... 3
ntroducción a las metodologías Ágiles ............................................................................. 6
Historia de las metodologías Ágiles ............................................................................. 6
Manifiesto Ágil ............................................................................................................. 7
Los 12 principios ágiles ................................................................................................ 8
Distintas Metodologías ágiles ..................................................................................... 10
Introducción a eXtreme Programming ........................................................................... 14
Su creador: “Kent Beck” ............................................................................................ 14
Descripción de la Metodología: XP detallado ............................................................ 15
Actividades de Xp ...................................................................................................... 16
Escuchar.................................................................................................................. 16
Diseñar .................................................................................................................... 16
Codificar ................................................................................................................. 16
Hacer pruebas ......................................................................................................... 17
Proceso XP ................................................................................................................. 17
Prácticas XP ................................................................................................................ 18
El juego de la planificación .................................................................................... 18
Entregas pequeñas .................................................................................................. 18
Metáfora.................................................................................................................. 19
Diseño simple ......................................................................................................... 19
Pruebas ................................................................................................................... 19
Refactorización (Refactoring) ................................................................................ 19
Programación en parejas ......................................................................................... 20
Propiedad colectiva del código ............................................................................... 20
Integración continua ............................................................................................... 20
40 horas por semana ............................................................................................... 21
Cliente on-site ......................................................................................................... 21
Estándares de programación ................................................................................... 21
Artefactos XP ............................................................................................................. 23
Las Historias de Usuario ........................................................................................ 23
Task Cards .............................................................................................................. 23
CRC Card ............................................................................................................... 24
Roles XP ..................................................................................................................... 24
Programador ........................................................................................................... 24
Cliente..................................................................................................................... 25
Encargado de pruebas (Tester) ............................................................................... 25
Encargado de seguimiento (Tracker) ...................................................................... 25
Entrenador (Coach)................................................................................................. 25
Consultor ................................................................................................................ 26
Gestor (“Big boss”) ................................................................................................ 26
Casos de estudio en los que se utilizo “Extreme Programming” ............................... 26
Bibliografía ..................................................................................................................... 31
Glosario .......................................................................................................................... 33
2
Motivación del trabajo de grado
La creación de software o desarrollo de sistemas es una tarea altamente
compleja. Debido a esta complejidad con el transcurso del tiempo se han desarrollado
numerosas metodologías de desarrollo que afectan las distintas dimensiones del proceso
de desarrollo.
Por una parte podemos encontrar aquellas metodologías más tradicionales que
hacen hincapié principalmente en el control del proceso, estableciendo cuidadosamente
las actividades involucradas, los distintos artefactos que se deben producir y las
herramientas que han de ser utilizadas para producir dichos artefactos. Estas propuestas
metodológicas han demostrado ser altamente efectivas en numerosos proyectos e
inclusive, en ocasiones, necesarias; pero por desgracia también han presentado varios
problemas en muchos otros proyectos. Ante dichos problemas se han propuesto
diferentes alternativas para combatir estos inconvenientes.
Una de ellas fue la introducción de nuevas actividades en los procesos de
desarrollo. Otra alternativa fue la introducción de más artefactos y restricciones
teniendo en cuenta los puntos débiles en cada proyecto. Pero el resultado de llevar a
cabo estas acciones fue la obtención de un proceso de desarrollo más engorroso y
complejo que incluso, en algunos casos, podía llegar a limitar la habilidad del equipo a
la hora de trabajar en el desarrollo del proyecto.
Otra posible solución planteada posteriormente fue centrarse en otros aspectos
del desarrollo como por ejemplo el factor humano o equipo involucrado en el proceso
de desarrollo así como en el software a desarrollar.
A partir de esta solución que hoy en día es considerada como una filosofía,
nacen las metodologías ágiles. Esta filosofía brinda mayor valor a los individuos
involucrados, así como a la colaboración con el cliente y al desarrollo incremental del
software basado en iteraciones que constan de un corto plazo.
En la actualidad este enfoque esta mostrando una alta efectividad en proyectos
con requerimientos muy cambiantes y en aquellos casos en lo que se exige reducir
notablemente los tiempos de desarrollo pero sin descuidar la alta calidad del producto.
Apoyadas en esta filosofía nacen las metodologías ágiles, las cuales están
revolucionando la forma de producir software y a la vez generando un amplio debate
entre sus seguidores, gente innovadora en el área de desarrollo y aquellos que por
convencionalismo o escepticismo no las ven como una alternativa viable para el
desarrollo de aplicaciones.
En este marco centraremos nuestro estudio para analizar la más importante y
utilizada en el mercado laboral de estas metodologías ágiles de las software factories,
“Extreme Programming”.
En el presente trabajo se estudiará en que consiste esta metodología analizando
sus valores, estructura, artefactos y conceptos; y se realizara un estudio detallado de
como adaptar dicha metodología a la materia Laboratorio III de la Facultad de
Ingeniería de la Universidad Austral.
Junto con lo anteriormente mencionado, este trabajo tiene como objetivos
introducir a los alumnos en una metodología utilizada en la actualidad y servir de guía
de consulta a los mismos a la hora de trabajar con dicha metodología.
El trabajo comienza con la presentación de los lineamientos necesarios para
trabajar con XP y RUP; continúa con la comparación entre dichas metodologías y la
adecuación de la metodología XP a la cursada de la materia Laboratorio III y concluye
con una reflexión sobre el estudio realizado.
3
Historia de los procesos de desarrollo
El modelo más antiguo de desarrollo era el de codificar y probar. Este modelo
fue utilizado en los inicios del desarrollo de software. Dicho modelo fue el que
predominó en la década de los años 60.
Éste estaba basado en requerimientos ambiguos y sin especificaciones puntuales.
Constaba en implementar el código y, a continuación, pensar sobre los requerimientos,
el diseño y el mantenimiento.
Para sistemas pequeños este modelo resultó ser útil, pero cuando los sistemas se
presentaban con una mayor complejidad resultaba muy peligroso, ya que no
proporcionaba medios de evaluación de la calidad o de identificación de riesgos.
Su principal falla se presentaba si se estaba a punto de terminar de codificar y se
descubría que el diseño era incorrecto ya que en dichas condiciones, no había otra
solución más que desechar el trabajo realizado y comenzar de nuevo. Esto resultaba
muy elevado en costos de los recursos y tiempos de desarrollo.
Posteriormente, en la década del 70, propuesto por Winston Royce2, surgió el
denominado “modelo en cascada”. Dicho modelo sirvió como base para la formulación
del análisis estructurado, el cual fue uno de los precursores en el camino hacia la
aplicación de prácticas estandarizadas dentro de la ingeniería de software.
El modelo en cascada, buscaba ordenar el proceso de desarrollo de una forma
fácil de implementar. Este modelo tuvo una gran aceptación. La principal ventaja que
brindaba con respecto al anterior, el modelo de implementación y prueba, era que ya se
contaba con cierta disciplina en el desarrollo de sistemas; se introducen la planeación y
administración, y se deben controlar dichas actividades; es decir, debía existir alguien
que vigile que el grupo de desarrollo realmente cumpla con lo que se había planeado.
Este modelo se basaba en el desarrollo de etapas (análisis, diseño, codificación,
pruebas y mantenimiento) las cuales cuentan con una entrada y una salida predefinida.
El proceso de desarrollo toma la forma de una cascada ya que se requiere la finalización
de la etapa anterior para comenzar con la siguiente.
La principal desventaja del modelo en cascada era que no es flexible con
respecto a los cambios. Esto exigía que se tengan que especificar completamente todos
los requerimientos al comienzo del proyecto lo que puede durar meses o incluso años
antes de tener el software funcionando. Una vez que se iniciaba el desarrollo no se
permitía cambio alguno a los requerimientos, por lo que el usuario no podía ver la
aplicación hasta que ya estuviese totalmente construida. Se corría asimismo con el
riesgo de no cubrir sus necesidades.
“Conforme se fueron descubriendo las deficiencias del modelo en cascada,
fueron surgiendo diversos procesos denominados iterativos que fueron mejorando
muchas de las fallas del modelo en cascada. Como especialización de este modelo
surgen los procesos iterativos como el “modelo en espiral”, “el modelo iterativo e
incremental”, “el modelo basado en prototipo”, “el modelo MBASE” (Model-Based
Architecture and Software Engineering3) y finalmente el de mayor renombre de ellos el
“Rational Unified process”(RUP)”.4
2
http://en.wikipedia.org/wiki/Winston_W._Royce
http://en.wikipedia.org/wiki/MBASE
4
http://www.qualitrain.com.mx/index.php/Procesos-de-software/Evolucion-de-losprocesos-de-desarrollo-Primera-parrte/Page-3.html
3
4
Estos modelos hicieron un gran aporte en la historia del desarrollo al basar el
mismo en iteraciones y la construcción de la aplicación en forma progresiva, agregando
funcionalidad paulatinamente.
Las iteraciones eran tomadas de esta forma como un mini - proyecto, el cual está
compuesto por todas las fases del desarrollo (requerimientos, análisis, diseño,
implementación y pruebas). Los incrementos en la aplicación están dados por la
funcionalidad que se va agregando al software en cada una de sus iteraciones.
Los modelos iterativos fomentan el cambio en forma temprana y proponen un
control de cambio disciplinado que permite al usuario ajustar sobre el desarrollo sus
requerimientos.
A mediados de los años 90 como parte de una reacción contra los modelos muy
estructurados y estrictos, extraídos del modelo de desarrollo en cascada nacen las
metodologías ágiles.
“El proceso originado del uso del modelo en cascada era visto como burocrático,
lento, degradante e inconsistente con las formas de desarrollo de software que realmente
realizaban un trabajo eficiente. Inicialmente, los métodos ágiles fueron llamados
métodos de "peso liviano". En el año 2001, miembros prominentes de la comunidad se
reunieron en Sonwbird, Utah, y adoptaron el nombre de "Metodologías ágiles". Poco
después, algunas de estas personas formaron la "alianza ágil", una organización sin
fines de lucro que promueve el desarrollo ágil de aplicaciones.”5
Muchos métodos creados similares al ágil fueron introducidos posteriormente a
la familia “Agile” propiamente dicha y aceptada como tal en el año 2001. Entre los más
notables se encuentran: “Scrum(1986), Crystal Clear (cristal transparente),
programación extrema o XP (1996), desarrollo de software adaptativo, feature driven
development, Método de desarrollo de sistemas dinámicos(1995)”6.
A continuación se presenta un gráfico que resume e ilustra la evolución
completa de los desarrollos de software a lo largo del tiempo.
Figura 1 - Evolución histórica de las metodologías de desarrollo
5
6
http://es.wikipedia.org/wiki/Desarrollo_%C3%A1gil_de_software
http://es.wikipedia.org/wiki/Desarrollo_%C3%A1gil_de_software
5
Introducción a las metodologías Ágiles
Frente a los numerosos problemas que se presentaban en el desarrollo de software
en las últimas dos décadas, expertos enunciaron numerosas notaciones de modelado y
herramientas de soporte con la intención de que éstas actuasen como "balas de plata"
para conseguir el éxito en el desarrollo del software. No obstante, las expectativas no
fueron alcanzadas. Esto se debió en gran parte a que otro importante elemento a analizar
y mejorar, la metodología de desarrollo, había sido dejado a un lado. De nada sirvieron
las buenas notaciones y herramientas si no venían de la mano con buenas directivas para
ser aplicadas.
Así, en la década de los años 90 se comenzó a tomar un notable interés en las
metodologías de desarrollo. Hasta no hace mucho tiempo el proceso de desarrollo
llevaba asociado consigo un marcado énfasis en el control del proceso mediante una
rigurosa definición de actividades, roles y artefactos, incluyendo todo lo comprendido
en el modelado y una detallada documentación del proyecto. Este enfoque “tradicional”
para tratar el tema del desarrollo de software resultó ser efectivo y necesario en
proyectos de gran escala o tamaño en cuanto a tiempo y recursos, donde por lo general,
se exigía un alto grado de análisis en el proceso.
Sin embargo este enfoque no resultó ser el mas adecuado para muchos de los
proyectos actuales donde el entorno del sistema es muy cambiante, y en donde se exige
reducir drásticamente los tiempos de desarrollo pero manteniendo un elevado nivel de
calidad. Ante las adversidades que se presentan para utilizar metodologías tradicionales,
con tantas restricciones de tiempo y flexibilidad, muchos equipos de desarrollo se
resignan a prescindir del “buen actuar” de la ingeniería del software y “robusta
documentación”, asumiendo el riesgo que esto conlleva consigo.
En dicho marco, las metodologías ágiles nacen como una respuesta posible para
resolver este problema y llenar así ese vacío metodológico presente. Estas metodologías
especialmente orientadas para proyectos pequeños, constituyen una solución a medida
para entornos con dichas condiciones (proyectos pequeños), aportando una elevada
simplificación que sin embargo, no renuncia a las buenas prácticas esenciales que
aseguran la buena calidad del producto.
Las metodologías “Agile” constituyen, sin duda alguna, uno de los principales
temas mas novedosos en la industria del software, que día a día van acaparando gran
interés en el mercado. Esto se ve reflejado en que están ganando mucho espacio en la
mayoría de los workshops y conferencias de los últimos años.
También cabe destacar que las metodologías Ágiles fueron especialmente
pensadas para proyectos con distintas características que se ajustan a un amplio rango
de proyectos de distintas industrias de desarrollo de software.
Historia de las metodologías Ágiles
En el mes de febrero del año 2001, 17 expertos reconocidos de la industria del
software, incluyendo algunos de los creadores o impulsores de metodologías de
software, se reunieron en Utah-EEUU para discutir varias cuestiones relacionados con
el desarrollo de aplicaciones informáticas. En dicha reunión nace el término “ágil” que
abarcaba una serie de principios y valores que serán explicados con mayor detalle a
continuación.
6
El objetivo de dicha reunión fue esbozar los valores y principios que deberían
permitir a los equipos involucrados en un proyecto desarrollar sus tareas de forma
rápida y respondiendo a los cambios que puedan surgir a lo largo de todo el ciclo de
vida del proyecto.
Pretendían brindar una alternativa a los procesos de desarrollo de software
tradicionales, que se caracterizaban por ser rígidos y dirigidos por la documentación que
se genera en cada una de las actividades desarrolladas.
Tras esta reunión se creó “The Agile Alliance”, una organización, sin fines de
lucro que se dedica a promover los conceptos relacionados con el desarrollo ágil de
software y ayuda a las organizaciones para que adopten dichos conceptos en sus
procesos. El punto de partida de dichos valores y principios fue el Manifiesto Ágil. Este
documento resume la filosofía “ágil”7.
Manifiesto Ágil
Los creadores del manifiesto Ágil son:
Kent Beck
Mike Beedle
Arie van Bennekum
Alistair Cockburn
Ward Cunningham
Martin Fowler
James Grenning
Jim Highsmith
Andrew Hunt
Ron Jeffries
Jon Kern
Brian Marick
Robert C. Martin
Steve Mellor
Ken Schwaber
Jeff Sutherland
Dave Thomas
El manifiesto Ágil establece que se valora:
- Al individuo y las interacciones del equipo de desarrollo sobre el proceso y las
herramientas.
- Desarrollar software que funciona más que conseguir una buena documentación.
- La colaboración con el cliente más que la negociación de un contrato.
- Responder a los cambios más que seguir estrictamente un plan.
Al individuo y las interacciones del equipo de desarrollo sobre el proceso y las
herramientas.
Este principio es probablemente el más importante de todos los principios del
manifiesto. Sabemos que los procesos constituyen una gran ayuda al trabajo de
desarrollo junto con las herramientas a la hora de mejorar la eficiencia. Sin embargo,
son las personas con una correcta actitud y conocimiento técnicos quienes hacen posible
junto con dichos procesos y herramientas, alcanzar los resultados esperados. La gente
constituye el factor clave de éxito en un proyecto de desarrollo de software. Es más
importante construir un buen equipo que construir el entorno adecuado. Lo ideal es que
una vez que se cuente con el quipo adecuado de desarrollo, éste sea quien establezca el
7
www.willydev.net/descargas/prev/TodoAgil.pdf
7
entorno necesario para desarrollarse cómodamente.
Desarrollar software
documentación.
que
funciona
más
que
conseguir
una
buena
Si es posible, se aconseja desarrollar un prototipo o módulos del sistema final
desarrollados para poder ver sobre ellos como han de comportarse las funcionalidades
esperadas. Esto brinda una retroalimentación muy rica que estimula la generación de
ideas que no habrían sido posibles de concebir en una primera instancia. Difícilmente se
podrá conseguir un documento que contenga requisitos detallados antes de comenzar el
proyecto. Los documentos deben ser un soporte que permita la transferencia del
conocimiento, registre información histórica, y que cubra las cuestiones legales o
normativas en aquellos casos que esto sea necesario; pero son menos importantes que
los productos finales en buen funcionamiento. Los documentos no pueden sustituir, ni
pueden ofrecer la riqueza y generación de valor que se logra con la comunicación
directa entre las personas y a través de la interacción con los prototipos. Por eso,
siempre que sea posible debe preferirse, y reducir al mínimo indispensable el uso de
documentación que genera trabajo que no aporta un valor directo al producto final. Los
documentos deben ser de poco tamaño y no ir más allá de lo fundamental. Deben ser
claros y concisos.
La colaboración con el cliente más que la negociación de un contrato.
Como hemos dicho anteriormente, las metodologías ágiles están principalmente
enfocadas en proyectos en los que los requerimientos del producto son muy difíciles de
definir con detalle en los inicios del proyecto o se cree que los mismos irán cambiando
por la velocidad del entorno de desarrollo y del mismo negocio sobre el cual están
pensados. Los contratos con el cliente no son mas que una formalidad que establece
lineamientos sobre como deben comportarse las distintas partes que lo integran. El
desarrollo ágil ve al cliente como un miembro más del equipo, que se integra y colabora
en el grupo de trabajo. Se propone que exista una interacción constante entre el cliente y
el equipo de desarrollo ya que es precisamente esta colaboración la que asegure el éxito
del proyecto y determine la velocidad con el cual el mismo será desarrollado.
Responder a los cambios más que seguir estrictamente un plan.
Aquí se nos está diciendo que debemos valorar más la capacidad de respuesta
frente a los cambios que puedan surgir por encima de la capacidad de seguimiento y
aseguramiento de planes establecidos con anterioridad. En la actualidad es muy común
encontrarse con entornos inestables, que tienen como factor inherente al cambio y la
evolución rápida y continua. Es importante analizar como el quipo responde en dicho
entorno y la preparación con la que cuenta para responder a los cambios que se
presenten. La planificación en un proyecto no debe ser estricta sino flexible y abierta ya
que la habilidad de responder a estos cambios, ya sean cambios de requerimientos, de
tecnología, o en el equipo a cargo del proyecto, son los que determinarán también el
éxito o fracaso del proyecto.
Los 12 principios ágiles
Basados en los valores anteriores enunciados se han formulado los doce principios
que componen el manifiesto ágil. Estos son características comunes que deben tener
8
todos los procesos ágiles y que los diferencian de los procesos tradicionales.
1. La prioridad es satisfacer al cliente mediante tempranas y continuas entregas
de software que le aporte un valor.
Este principio establece que se deben realizar pequeñas entregas al cliente para
que éste vaya viendo el estado del proyecto y pueda comunicar su satisfacción o
descontento frente a las expectativas sobre el sistema. Las entregas realizadas a las
pocas semanas de empezado el proyecto, facilitan la comprensión de los requerimientos
del cliente. El cliente luego decide si pone en marcha dicho software con la
funcionalidad que ahora éste le proporciona o simplemente lo revisa e informa los
posibles cambios que desea que se realicen.
2. Dar la bienvenida a los cambios. Se capturan los cambios para que el cliente
tenga una ventaja competitiva.
Los cambios de requerimientos son algo inevitable en todo proyecto de desarrollo.
Dichos cambios deben ser vistos como algo positivo por parte del equipo. Esta actitud
lleva al equipo a adquirir nuevos conocimientos, y a la vez, a lograr una mayor
satisfacción por parte del cliente. Este principio implica además que la estructura del
software debe ser flexible para poder incorporar los cambios sin demasiado costo
añadido y sin que estos cambios corrompan el software o partes del mismo ya
producidas. Hace que las componentes de software se vuelvan reutilizables y mas
independientes entre sí.
3. Entregar frecuentemente software que funcione desde un par de semanas a
un par de meses, con el menor intervalo de tiempo posible entre entregas.
Este principio nos dice que debemos tratar de hacer entregas pequeñas en cortos
plazos y no dejar pasar grandes intervalos de tiempo entre una entrega y la siguiente.
Este principio hace énfasis en la entrega de componentes de software en lugar de
componentes de planificación o documentación, ya sea de análisis o de diseño.
4. La gente del negocio y los desarrolladores deben trabajar juntos a lo largo del
proyecto.
La interacción con el cliente constituye una pieza clave del desarrollo del
proyecto. Este principio nos dice que tanto cliente como equipo deben trabajar
conjuntamente para facilitar la comunicación y asegurar así el éxito del proyecto.
5. Construir el proyecto en torno a individuos motivados. Darles el entorno y el
apoyo que necesitan y confiar en ellos para conseguir finalizar el trabajo.
Las mitologías ágiles establecen que las personas asignadas al proyecto
constituyen el principal factor de éxito. Todo los demás (proceso, entorno, gestión, etc.)
pasan a estar en segundo plano. Si cualquiera de ellos tiene un efecto negativo sobre los
individuos debe ser cambiado. Es muy importante que las personas se encuentren en un
ambiente cómodo ya que esto contribuirá a que desarrollen sus tareas correctamente
obteniendo un mayor rendimiento.
6. El diálogo cara a cara es el método más eficiente y efectivo para comunicar
información dentro de un equipo de desarrollo.
Los miembros del equipo deben hablar entre ellos y con el cliente constantemente.
Si bien pueden existir otras formas de comunicación como los documentos, no toda la
información necesaria estará comprendida en ellos. Es por esto que la comunicación
oral debe ser la principal forma de comunicación.
9
7. El software que funciona es la medida principal de progreso.
El estado de un proyecto no se puede medir por la documentación generada o la
fase en la que el mismo se encuentre. Sólo el código generado y en funcionamiento
serán los que dirán efectivamente en que estado se encuentra el proyecto.
8. Los procesos ágiles promueven un desarrollo sostenible. Los promotores,
desarrolladores y usuarios deberían ser capaces de mantener una paz
constante.
Este principio nos dice que debe mantenerse un ritmo constante de desarrollo
durante todo el proyecto en lugar de tratar de desarrollar lo más rápido posible. Esto
asegurará una mayor calidad en el producto final.
9. La atención continua a la calidad técnica y al buen diseño mejora la agilidad.
Un buen diseño nos llevará a la producción de un código más claro y robusto, lo
cual constituye la clave para avanzar más rápidamente en el proyecto.
10. La simplicidad es esencial.
Un código simple y de alta calidad siempre es más sencillo de leer y adaptar a los
cambios que puedan surgir. Siempre debe intentarse tomar el camino más simples que
consistente con los objetivos perseguidos.
11. Las mejores arquitecturas, requisitos y diseños surgen de los equipos
organizados por sí mismos.
Los requerimientos son entregados al equipo quedando todos sus miembros al
tanto de los mismos. El equipo es quien decide la mejor forma de organizarse, de
acuerdo a los objetivos que se persigan asignando a cada miembro la tarea que mejor se
adapte a su perfil.
12. En intervalos regulares, el equipo reflexiona respecto a cómo llegar a ser
más efectivo, y según esto ajusta su comportamiento.
Debido a los constantes cambios del entorno, el equipo también debe adaptarse al
nuevo escenario de forma continua para poder realizar las modificaciones necesarias
para poder trabajar correctamente y conseguir buenos resultados. Puede realizar
cambios en su organización, sus reglas, sus convenciones, sus relaciones, etc., y de ésta
forma seguir siendo ágil.
Distintas Metodologías ágiles
Aunque los creadores e impulsores de las metodologías ágiles más populares han
suscrito el manifiesto ágil y coinciden con los principios enunciados anteriormente,
cada metodología tiene características propias y hace hincapié en algunos aspectos más
específicos. A continuación se resumen dichas metodologías ágiles, dejando el análisis
más detallado de XP para la siguiente sección.
10
Extreme Programming: “XP”
Es el proceso ágil más popular y utilizado de todas las metodologías ágiles. Esta
metodología pone mayor énfasis en la colaboración, en la rápida y temprana entrega de
componentes de software y en prácticas de desarrollo simples. Sus prácticas
establecidas “core” son: un equipo trabajando en un mismo ambiente, pair programming
(programación de a pares), uso constante de y la promoción del desarrollo orientado al
testing (realizar pruebas antes de programar). Hablaremos de xp con mayor detalle a lo
largo del trabajo.
Scrum
Metodología desarrollada por Ken Schwaber, Jeff Sutherland y Mike Beedle. La
misma establece un marco para el “management” o gestión de proyectos, que ha sido
empleado con éxito durante los últimos 10 años. Se encuentra principalmente dirigida
para proyectos que cuentan con un rápido cambio de requerimientos o requerimientos
inestables que presentan difícultades a la hora de ser definidos. Sus principales
características son el desarrollo de software iterativo y las reuniones diarias. El
desarrollo iterativo establece que el desarrollo de software se debe realizar mediante
iteraciones, denominadas sprints, que son de corta duración, aproximadamente de unos
30 días. El resultado de cada sprint es un incremento ejecutable que se muestra al
cliente junto con el resto de los stakeholders. Las reuniones diarias se realizan a lo largo
de todo el proyecto se realizan reuniones diarias que poseen una duración de
aproximadamente 15 minutos. En ellas participa todo el equipo de desarrollo junto con
el cliente o un representante del mismo quienes conjuntamente coordinan e integran el
proyecto.
Crystal Methodologies
Las metodologías “Crystal” para el desarrollo de software se caracterizan por
estar focalizadas en las personas que componen el equipo de desarrollo, de quienes
depende el verdadero éxito del proyecto; así como en la reducción al máximo del
número de artefactos producidos en un tiempo determinado. Las mismas fueron
desarrolladas por Alistair Cockburn. Esta metodología ve al desarrollo de software
como “un juego cooperativo de invención y comunicación, limitado por los recursos a
utilizar”8. El equipo de desarrollo constituye una pieza clave en el proceso, por lo que
han de ser invertidos grandes esfuerzos en mejorar sus habilidades y destrezas (tanto
conocimientos técnicos como aptitudes personales); así como tener políticas bien
definidas de trabajo grupal. Estas políticas dependerán del tamaño del equipo,
estableciéndose una clasificación por colores, por ejemplo Crystal Clear en el caso que
el equipo cuente con un número de entre 3 y 8 miembros; y Crystal Orange en el caso
que este compuesto por un número de entre 25 y 50 miembros.
8
http://www.willydev.net/descargas/prev/TodoAgil.pdf
11
Dynamic Systems Development Method: “DSDM”
Define el marco para desarrollar un proceso de producción de software. Nace en
1994 con el objetivo de crear una metodología RAD unificada. Sus principales
características son: es un proceso iterativo e incremental y el equipo de desarrollo y el
usuario trabajan juntos. Propone cinco fases: estudio de viabilidad, estudio del negocio,
modelado funcional, diseño y construcción, y finalmente implementación. Las tres
últimas son iterativas, además de existir realimentación a todas las fases.
Adaptive Software Development: “ASD”
Esta metodología fue impulsada por Jim Highsmith. Se encuentra inspirada en
sistemas de alta complejidad que cuenta con una fuerte adaptabilidad y métodos de
desarrollo con rápida aplicación. Sus principales características son que es iterativo,
orientado a las componentes de software más que a las tareas y tolerante a los cambios.
El ciclo de vida que propone esta formado por tres fases principales: especulación,
colaboración y aprendizaje. En la primera de ellas el proyecto es iniciado y se planifican
las funcionalidades o características que tendrá el software; en la segunda se desarrollan
dichas funcionalidades y finalmente en la tercera se revisa la calidad de lo
implementado, y se lo entrega al cliente. La revisión de las componentes sirve para
aprender de los errores y volver a iniciar el ciclo de desarrollo contando con un mayor
conocimiento por parte de todos los integrantes del equipo.
Feature-Driven Development: “FDD”
Esta metodología creada por Jeff De Luca y Peter Coad establece que el
desarrollo debe originarse a partir del domino o modelo de negocio. Define un proceso
iterativo que consta de 5 pasos: desarrollar un modelo general, crear la lista de
características o funcionalidades que debe tener el sistema, realizar un plan de
desarrollo acorde a la lista de funcionalidades, realizar el diseño para dichas
funcionalidades, y finalmente, implementar dichas funcionalidades.
Las iteraciones son cortas, de una plazo de hasta 2 semanas. Se concentra en las fases de
diseño e implementación del sistema, partiendo de una lista de requerimientos
principales que debe reunir el software.
Lean Development : “LD”
“Lean Development” es un metodología pensada por Bob Charette’s a partir de
su trabajo realizado en proyectos relacionados con la industria automotriz japonesa en la
década de los 80. Fue utilizada en numerosos proyectos del área de telecomunicaciones
en toda Europa. En ella, los cambios se consideran riesgos, pero si se manejan
adecuadamente se pueden convertir en oportunidades que mejoren la productividad del
equipo así como la calidad del producto. Su principal característica es introducir un
mecanismo para implementar dichos cambios sin que impacte de forma negativa en las
componentes previamente desarrolladas del sistema.
A continuación se presenta una tabla en la que se compara las distintas
aproximaciones ágiles en base a tres parámetros: vista del sistema como algo cambiante,
12
tener en cuenta la colaboración entre los miembros del equipo y características más
específicas de la propia metodología (CM) como son los resultados, la simplicidad, la
excelencia técnica, adaptabilidad, etc.
También incorpora como referencia no ágil el Capability Madurity Model
(“CMM”).
Los valores más altos representan una mayor agilidad.
9
Figura 3 – Tabla de Ranking de agilidad
Como se puede observar en la Figura 3, todas las metodologías ágiles tienen una
significativa diferencia del índice de agilidad respecto a CMM y entre ellas destacan
ASD, Scrum y XP como las más ágiles a nivel general. Asimismo se puede observar
que XP, ASD y Scrum presentan los mayores valores con respecto a la adaptación de
los cambios dentro del sistema. Lo mismo ocurre con la colaboración y los resultados
obtenidos en donde se les suma a la lista Crystal.
Ahora bien, si observamos la grilla verticalmente, podremos notar que XP y ASD
son las metodologías con mayor nivel de agilidad de todas ya que poseen cinco de los
sietes aspectos analizados con el mayor valor posible de agilidad. Luego con un nivel
inferior pero aún así elevado de agilidad les siguen Cristal y Scrum.
Como podemos ver XP presenta notables ventajas con respecto a las otras
metodologías de desarrollo y son estas ventajas las que precisamente lo posesionan
fuertemente dentro de la familia Agile así como en el actual mercado de la informática.
9
http://www.cyta.com.ar/ta0502/v5n2a1.htm
13
Introducción a eXtreme Programming
A continuación realizaremos un detallado estudio de la metodología Extreme
Programming. La misma constituye el más destacado de los procesos ágiles de
desarrollo de software, es la metodología más utilizada en el mercado laboral y cuenta
con una notable adaptación y flexibilidad frente a los distintos tipos de proyecto.
Su creador: “Kent Beck”
10
Figura 4 - Kent Beck, Autor de XP
Aunque la creación de la metodología “XP” es atribuida tanto a Kent Beck como
a Ron Jeffries y Ward Cinningham, se hable de Beck como el padre y mayor
influenciador de la misma. Kent Beck también creó, junto con Erich Gamma el
framework de pruebas unitarias para Java conocido como “JUnit”. Es el fundador y
director de “Three Rivers Institute” (TRI). Su carrera combina la práctica de desarrollo
de software con reflexión, innovación y comunicación.
Es el author/co-author de numerosos libros como: “Implementation Patterns”11,
“Extreme Programming Explained: Embrace Change 2nd Edition”12, “Contributing to
Eclipse”13, “Test-Driven Development: By Example”14, “Planning Extreme
Programming”15, “Smalltalk Best Practice Patterns”16, and the “JUnit Pocket Guide”17.
10
http://images.google.com.ar
2008. Implementation Patterns. Addison-Wesley.
12
1999. Extreme Programming Explained: Embrace Change. Addison-Wesley.
13
2003. Contributing to Eclipse: Principles, Patterns, and Plugins. With Erich Gamma.
Addison-Wesley.
14
2002. Test-Driven Development: By Example. Addison-Wesley. Winner of the Jolt
Productivity Award.
15
2000. Planning Extreme Programming. With Martin Fowler. Addison-Wesley.
16 1996. Smalltalk Best Practice Patterns. Prentice Hall.
17
2004. JUnit Pocket Guide. O'Reilly.
11
14
Obtuvo sus títulos en Computer Science (Ciencias de la computación) en la
Universidad de Oregon. Sus actividades de negocio incluyen: contract programming
utilizando Java/Eclipse, writing, consulting y presentación de workshops con su
compañera Cynthia Andres.
En la actualidad Beck divide su tiempo entre la escritura, la programación y el
entrenamiento.
Su contribución al desarrollo de software incluye patrones, el redescubrimiento
de:
Test-first programming
Es una metodología basada en las pruebas unitarias como parte vital y buena
práctica del desarrollo de software. La misma establece que previamente a realizar la
implementación del sistema deben realizarse dichas pruebas y sólo teniendo la totalidad
de ellas aprobadas podrá comenzarse entonces a desarrollar el código fuente.
Esta metodología cuenta con la particularidad de ser a su vez parte de otras
metodologías (XP y TDD “Test driven Development”).
xUnit
Es un framework de pruebas conducido por código que ha llegado a conocerse
colectivamente y tomado gran importancia en los últimos tiempos. Dicho framework
esta basado en un diseño de Kent Beck, implementado originalmente para Smalltalk.
Actualmente, se encuentra disponible para muchos lenguajes de programación y
plataformas de desarrollo.
Finalmente, su mayor aporte al mundo de la informática: “Extreme
Programming”, metodología de la cual hablaremos con mayor detalle posteriormente.
Descripción de la Metodología: XP detallado
Extreme Programming es una metodología ágil basada en cuatro principios:
simplicidad, comunicación, retroalimentación y valor.
Al hablar de simplicidad, nos referimos a la simplicidad aplicada a todos los
aspectos del proyecto, desde la forma de trabajar en sí, plasmada en los procesos y las
prácticas aplicadas al implementar las soluciones, así como a la simplicidad del código
que facilita su lectura, corrección y extensión entre los distintos programadores.
En cuanto a la comunicación, XP plantea que debe existir una comunicación
fluida entre todos los participantes del proyecto lo cual mejorará tantos los tiempos del
proyecto así como la calidad del producto.
Con respecto a la retroalimentación, XP nos dice que debe existir una
retroalimentación continua entre el cliente y el equipo de desarrollo, lo cual facilitará en
forma notable el trabajo y desarrollo del proyecto.
Extreme Programming es una metodología 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.
15
XP se define como una metodología especialmente adecuada para proyectos en
donde los requisitos aún son muy ambiguos o imprecisos, cambian rápidamente, o
donde existe un alto riesgo técnico.
Los principios y prácticas son principios y prácticas de sentido común,
usualmente aplicados en numerosas metodologías, pero aquí se diferencian en que son
llevados al extremo, de ahí proviene su nombre “Extreme Programming”.
A continuación presentaremos las características esenciales de XP.
Actividades de Xp
La metodología cuenta con cuatro actividades básicas y esenciales: escuchar,
diseñar, codificar y hacer pruebas. A continuación se describen las mismas.
Escuchar
Beck menciona en una frase que los programadores no lo conocen todo, y sobre
todo desconocen muchas cosas que las personas de negocios piensan que son
interesantes.
Al realizar las pruebas sobre el sistema es necesario preguntar si los resultados
obtenidos son los deseados, es decir, se debe preguntar al cliente si era precisamente lo
obtenido lo que él estaba buscando por parte del software. Es necesario escuchar por
parte de los clientes cuáles son los problemas que presenta su negocio. Se debe tener
una escucha activa, explicando lo que es fácil y lo que es difícil de obtener a la hora de
desarrollar el sistema. La retroalimentación entre ambas partes (cliente y equipo de
desarrollo) será la que brindará la mayor ayuda a todos a la hora de entender los
problemas existentes a resolver. Es por ello que el equipo del proyecto debe estar
continuamente atento a lo que el cliente esta diciendo y debe hacerse escuchar por parte
del mismo a la hora de proponer nuevas soluciones.
Diseñar
El diseño moldea la estructura que ordenará la lógica de la aplicación. Un correcto
diseño brinda la posibilidad de que el sistema crezca con cambios en un solo lugar, lo
hace extensible y reutilizable. Los diseños deben de ser sencillos, si alguna parte del
sistema es de desarrollo complejo, lo apropiado es dividirla en varias partes. Si hay
fallas en el diseño o malos diseños, estas deben ser corregidas cuanto antes porque de lo
contrario se verán plasmadas en el producto disminuyendo su calidad o en ocasiones, no
cumpliendo los requerimientos para los cuales ha sido creado el producto.
Codificar
El proceso de codificación se basa en plasmar las ideas y funcionalidades del
16
sistema a través del código. En programación, el código expresa la interpretación del
problema en término de los programadores. De esta forma podemos utilizar el código
para comunicar, para hacer comunes las ideas y también para aprender y mejorar el
nivel de los mismos recursos involucrados en el desarrollo del proyecto. El código es el
idioma de comunicación de los programadores. Es por ellos que se recomienda que el
mismo sea sencillo y legible para todos los integrantes del equipo.
Hacer pruebas
Todas las características del software que muestran su correcto funcionamiento
deben ser demostradas mediante pruebas. Las pruebas brindan la oportunidad de saber
si lo implementado es lo que en verdad se tenía en mente por parte del cliente. Las
pruebas son las que nos indican que el trabajo, es decir el propio sistema se encuentra
funcionando en perfectas condiciones. Cuando no es posible pensar en ninguna prueba
que pueda originar una falla en el sistema, entonces se da por finalizado el proceso de
testing o prueba del sistema. Es importante destacar que a la hora de realizar las pruebas
es importante la objetividad de dichas pruebas y que las mismas sean realizadas desde el
punto de vista del usuario. Es por ello que es recomendable que no sean realizadas por
los mismos programadores. Recordemos que al hablar de pruebas en este apartado
hacemos referencia a pruebas de testeo posterior al desarrollo del código y no a las
pruebas unitarias realizadas previamente al desarrollo.
Resumiendo las actividades de Xp: Debe codificarse porque sin código no hay
programas, se deben hacer pruebas de testeo porque sin pruebas no es posible
determinar si se ha acabado de codificar, se debe escuchar, porque si no hay escucha no
existe forma de saber que codificar ni probar, y finalmente se tiene que diseñar para
poder codificar, probar y prestar una mejor atención para poder focalizar la escucha en
los puntos críticos o poco definidos del proyecto.
Proceso XP
Un proyecto XP tiene éxito cuando el equipo de desarrollo cumple con todos las
expectativas del cliente, es decir el producto final realiza todo aquello para lo que fue
pensado. Para poder llevar a cabo esto, el cliente debe seleccionar el valor de negocio a
implementar (funcionalidad) basándose en la habilidad del equipo para medir la
funcionalidad que puede entregar dentro de un determinado período de tiempo. Es decir,
el cliente prioriza las funcionalidades y las agrupa acorde a la capacidad del equipo y la
importancia que éstas poseen para él.
El ciclo de desarrollo de una iteración 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 que presenta el equipo junto con el entorno de desarrollo.
4. El programador construye ese valor de negocio.
17
5. Se vuelve al paso 1.
En todos los “release” o iteraciones tanto el programador como el cliente
aprenden de sus errores. El desarrollador no debe ser presionado para hacer una mayor
cantidad de trabajo que la estimada previamente, ya que no sólo se perderá calidad en el
software o no se cumplirán los plazos; sino que también podría haber una
desmotivación en el mismo y su rendimiento en las próximas iteraciones podría llegar a
disminuir. 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.
Prácticas XP
Uno de los principales análisis que se realiza en XP es el estudio de la reducción
de los costos que acarrean los cambios a lo largo de todo el proyecto. Se trata de
llevarlos a valores de forma tal que el diseño evolutivo funcione óptimamente. XP
apuesta por un crecimiento lento del costo del cambio con un comportamiento
asintótico; es decir, trata de reducir los costos de la mayor forma posible hasta llevarlos
a su valor mínimo y que estos permanezcan constantes en dicho valor. Esto es posible
de conseguir 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 constituyan un resultado de valor para el negocio. Una entrega no debería
tardar más 3 meses.
18
Metáfora
En XP no se enfatiza la definición temprana de una arquitectura estable para el
sistema. Dicha arquitectura se asume en forma evolutiva. Los posibles inconvenientes
que se generarán 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. Martín Fowler18 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. Esta práctica simplemente nos dice que a la hora de abordar un
problema complejo, debemos atacar al mismo estableciendo una analogía entre dicha
problemática y una historia o situación que nos permita visualizarla y resolverla con una
mayor facilidad.
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”. 19
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 Martín20
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
18
http://martinfowler.com/
http://www.cyta.com.ar/ta0502/v5n2a1.htm
20
http://www.objectmentor.com/omTeam/martin_r.html
19
19
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á.
Programación en parejas
Toda la producción de código debe realizarse con trabajo en parejas de
programadores.
Las principales ventajas de introducir este estilo de programación son:
- Una gran cantidad de errores son detectados conforme son introducidos los
distintos módulos desarrollados. Se realizan 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 es menor (continua discusión de
ideas de los programadores).
- Los problemas de programación se resuelven más rápidamente.
- 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 la información y la
dinámica del equipo.
- Los programadores disfrutan más su trabajo.
Dichos beneficios se consiguen después de varios meses de practicar la
programación en parejas. Se estima que este lapso de tiempo varía de 3 a 4 meses.
Propiedad colectiva del código
Esta práctica establece que cualquier programador puede tener acceso y cambiar
cualquier parte del código en cualquier momento que así lo desee. 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. Varios expertos de la informática afirman
que el desarrollo de un proceso disciplinado y automatizado es esencial para un
proyecto controlado. De esta forma, el equipo de desarrollo está más preparado para
20
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
Esta práctica establece que se debe trabajar un máximo de 40 horas por semana.
No se deben asimismo trabajar 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 on-site
En esta práctica se establece que el cliente debe estar presente y disponible en
todo momento para el equipo de desarrollo. 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 de esta forma, 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. En caso de que el cliente no cuente con dicha disponibilidad necesaria, se
recomienda lo siguiente: 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. El mérito de XP es integrarlas de una forma efectiva y
complementarlas con otras ideas desde la perspectiva del negocio, los valores humanos
21
y el trabajo en equipo.
A continuación se presenta un gráfico que muestra como funciona el circuito de
una iteración así como el refuerzo que ejercen las prácticas entre sí.
21
Figura 5 - Interacción entre las prácticas de XP
Inicialmente se realiza un “Release Plan” el cual esta determinado por la
cantidad de “User stories” que integrarán la iteración. Éste junto con las fallas
encontradas y el proyecto de velocidad de la próxima iteración se integran para
confeccionar el Plan de Iteración. Recordemos que en el caso de la primera iteración las
fallas encontradas y el plan de la próxima iteración serán vacíos. Una vez finalizado el
plan de iteración se procede a desarrollar las funcionalidades o “user stories”
establecidas para dicha iteración. Así se obtiene la primera versión de la aplicación.
Luego se testea el trabajo realizado y se documentan las fallas encontradas y se reinicia
el proceso entero con los problemas a resolver (Bugs), nuevas funcionalidades y se
guardan las tareas no completadas para la instancia de la planificación de Plan.
21
http://www.extremeprogramming.org/
22
Artefactos XP
Las Historias de Usuario
Las historias de usuario son la técnica utilizada en XP para especificar los
requisitos del software. Estas constituyen el artefacto más importante de XP. 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 del proyecto las historias de usuario pueden romperse en varias historias de
usuario, 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 solo 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 (customer
story and task card) 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 de cosas por
terminar y comentarios.
Una de los 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?
Desafortunadamente no existe una respuesta tajante a este interrogante. Jeffries dice que
depende de la complejidad del sistema aunque establece que debe haber al menos una
historia por cada característica importante del mismo, y propone realizar una o dos
historias por programador en un período de un mes. Si se tienen menos, probablemente
sea conveniente dividir las historias en varias; si se tienen más, por el contrario, lo
mejor es disminuir el detalle y agruparlas. Para efectos de planificación, las historias
pueden ser de una a tres semanas en tiempo de programación (para no superar el
tamaño de una iteración, recordemos que en XP las iteraciones son de corta duració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.
Task Cards
Como hemos mencionado anteriormente las historias de usuario se encuentran
compuestas por distintas tareas. Para brindar información acerca de las mismas, se
utilizan las denominadas “Task Cards”.Si bien tampoco existe una plantilla o template
específico para las mismas se recomiendan que contengan la siguiente información: el
numero de tarea, la historia de usuario a la que hacen referencia, el nombre de la tarea,
el tipo de tarea (si es de desarrollo, de corrección, de mejora, o algún otro tipo de tarea
específico), los puntos estimados, una fecha de inicio, una fecha de finalización, el
23
programador responsable de ella, y una breve descripción de la tarea (en que consiste la
misma).
CRC Card
Estas tarjetas pueden ser también denominadas: tarjetas de clase-responsabilidadcolaboración. Estas tarjetas se dividen en tres secciones que contienen la información
del nombre de la clase, sus responsabilidades y sus colaboradores.
Una clase es cualquier persona, cosa, evento, concepto, pantalla o reporte. Las
responsabilidades de una clase son las cosas que conoce y las que realiza, sus atributos
y métodos. Los colaboradores de una clase son las demás clases con las que trabaja en
conjunto para llevar a cabo sus responsabilidades.
En la práctica conviene tener pequeñas tarjetas de cartón, que se llenarán y que
son mostradas al cliente, de manera que se pueda llegar a un acuerdo sobre la validez de
las abstracciones propuestas.
Los pasos a seguir para llenar las tarjetas son los siguientes:
- Encontrar clases
- Encontrar responsabilidades
- Definir colaboradores
- Disponer las tarjetas
Para encontrar las clases debemos pensar qué cosas interactúan con el sistema (en
nuestro caso el usuario), y qué cosas son parte del sistema, así como las pantallas útiles
a la aplicación (un despliegue de datos, una entrada de parámetros y una pantalla
general, entre otros). Una vez que las clases principales han sido encontradas se procede
a buscar los atributos y las responsabilidades. Para esto se puede formular la siguiente
pregunta: ¿Qué sabe la clase? y ¿Qué hace o como queremos que se comporte la clase?
Finalmente se buscan los colaboradores dentro de la lista de clases que se tenga es decir
quienes queremos que interactúen con cada clase.
Roles XP
Según Kent Beck existen los siguientes distintos roles involucrados en un
desarrollo basado en la metodología extreme programming:
Programador
El programador es el encargado de escribir las pruebas unitarias y producir el
código de la aplicación. El código debe ser legible por los distintos programadores del
equipo y es recomendable una buena comunicación, coordinación y colaboración entre
24
los distintos programadores y los otros miembros del equipo.
Cliente
El cliente es el encargado de escribir las historias de usuario y las pruebas
funcionales para validar su implementación. Además, es quien prioriza las historias de
usuario y decide cuáles han de ser implementadas en cada una de las iteraciones
centrándose en el mayor valor que éstas le brindan al negocio. Al hablar de cliente
hacemos referencia al cliente propiamente dicho o a su representante en aquellos casos
que el propio cliente no pueda realizar dichas tareas.
Encargado de pruebas (Tester)
Los “testers” son aquellos que colaboran con el cliente para escribir las pruebas
funcionales, ejecuta las pruebas regularmente, difunde los resultados obtenidos por
dichas pruebas con el equipo y en ocasiones toma las decisiones de las herramientas que
se utilizarán para realizar las pruebas de la aplicación.
Encargado de seguimiento (Tracker)
El tracker es el encargado de verificar el cumplimiento o grado de acierto entre las
estimaciones realizadas y el tiempo real dedicado al proyecto. Él es quien comunica los
resultados al resto del equipo para que luego los mismos puedan mejorar las 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 con los que se
cuenta. El es el que estará a cargo de la determinación de si es necesario realizar algún
cambio general en el ambiente para lograr los objetivos planteados de cada iteración por
parte el equipo.
Entrenador (Coach)
Es “coach” es el responsable del proceso global. Es quien posee mayores
conocimientos sobre el proceso de la metodología (extreme programming) y quien
provee las guías a los miembros del equipo de forma que se apliquen correctamente
todas las prácticas XP y se siga el proceso adecuadamente.
25
Consultor
El 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. Los consultores son llamados en ocasiones especiales donde existe alguna
problemática (ya sea técnica o de lógica del negocio) que el equipo no puede resolver.
Gestor (“Big boss”)
El “Big boss” es el intermediario entre el cliente y los programadores, ayuda a que
el equipo trabaje efectivamente creando las condiciones adecuadas para esto. Su labor
esencial es de coordinación.
Casos de estudio en los que se utilizo “Extreme Programming”
A continuación se presentan algunos casos de estudio en los que se ha utilizado la
metodología. Los mismos atacan distintas problemáticas que se dan normalmente en un
proyecto de desarrollo de software. Estos artículos han sido seleccionados por la
magnitud de la problemática que atacaban y por la importancia que aportaban para el
análisis de la implementación de la metodología XP a la materia Laboratorio III de la
universidad.
The impact of Agile Methods on Software Project Management
(El impacto de los métodos ágiles en la gestión de proyectos)
Tema principal: Este artículo trata sobre el estudio de los distintos factores:
personas, proyecto y proceso, para evaluar la conveniencia de la utilización de XP como
metodología de desarrollo considerando el impacto que la misma metodología podría
provocar en el management o gestión de un proyecto.
Para realizar dicho estudio se han tenido en cuenta también los requerimientos,
staff y factores externos (propios del negocio) para evaluar estas cuestiones.
Que nos dice: En este artículo se establece que con respecto al personal
involucrado en el proyecto:
Desarrolladores: Pueden no adaptarse al ambiente agile lo cual influye notablemente en
su rendimiento a la hora de desempeñar sus tareas. Esto se debe a que la falta
documentación complica el trabajo.
Testers: El testing debe ser automatizado entonces requiere de una skill o habilidad
nueva por parte del tester(un conocimiento mínimo en lo que es codificación).
Poject leaders: Los líderes del proyecto deben integrar al equipo en la toma de
decisiones.
Managers: Tener una mayor relación con el cliente, indicar el avance del proyecto.
Customers: El cliente debe tener un mayor compromiso con el proyecto y su desarrollo.
Debe tener compromiso, conocimiento, colaborar, debe ser representativo y con poder
26
suficiente.
Excecutive Management: La estimación de costos es compleja, no se puede garantizar
las fechas de entrega, y en ocasiones las funcionalidades.
Con respecto a los procesos estable:
Planning: Es muy complejo planear, suele hacerse ligeramente y en el momento Ej.:
reuniones de scrum.
Documentación: Escasa para ahorrar esfuerzo. Información es comunicada
informalmente. Luego se complica también el mantenimiento.
Development Process: Principios ágiles fuerzan a cambiar varios procesos
(refactorización, reviews, etc.)
Con respecto al proyecto, establece que la metodología está orientada a proyectos con
requerimientos “ligeros” es recomendable utilizar la metodología.
Conclusiones: En conclusión, las metodologías ágiles ofrecen un razonable ajuste
para el alto nivel de cambio que posee todo proyecto, mas precisamente para la
incertidumbre que puede presentarse en el mismo. Existen algunos principios que
utilizados en las correctas circunstancias, reducen notablemente el riesgo en el proyecto
y brindan una mayor productividad y calidad al mismo tiempo. Sin embargo las
metodologías ágiles no son apropiadas para todo tipo de proyectos. Un líder de proyecto
debe tener en cuenta las características del mismo para asegurar que una metodología
ágil sea indicada para el mismo. Los impactos de la utilización de la misma en la gente,
los procesos y el proyecto deben ser considerados y analizados de antemano.
On the effectiveness of pair programming
(Sobre la efectividad de la programación en parejas)
Tema principal: En este artículo se estudia la efectividad de la programación de a
pares desde el punto de vista de la duración del proyecto, el tiempo, el esfuerzo y la
calidad del producto.
Que nos dice: El estudio muestra que gracias a la programación de a pares, en
varios casos, se alcanza a producir más en la mitad del tiempo. También muestra que los
programadores están más contentos, y mejora el trabajo en equipo, el conocimiento del
equipo es mayor y la transferencia de conocimientos crece notablemente.
Conclusión: Como conclusión, el caso de estudio muestra que a la hora de
analizar si la programación de a pares es indicada o no, la respuesta es “Depende”.
Debe tenerse en cuenta la experiencia de los programadores tanto como la
complejidad del sistema y las tareas a desarrollar.
Investigating the impact of Personality Types on Comunnication and
collaboration viability in Pair Programming - an empirical study
(Investigando el impacto de los tipos de personalidad en la comunicación y colaboración en la
Programación de a pares – Un caso de estudio empírico)
Tema principal: El articulo trata de 2 experimentos controlados que investigan
el impacto de la personalidad y el temperamento de los desarrolladores en la
27
comunicación, colaboración, y efectividad de un par dentro de un equipo.
El estudio esta basado en experimentos que cuenta con dos pares de
programadores: uno de personalidades diferentes y otro con personalidades similares.
Lo que se evaluara es la efectividad en cuanto a performance medida con
comunicación, velocidad, productividad y satisfacción del cliente y la elaboración
medida por la satisfacción de los desarrolladores, conocimientos adquiridos y
participación.
Se plantea la hipótesis de que la personalidad no afectará el rendimiento de las
parejas.
Que nos dice: Las estadísticas mostraron que el rendimiento no solo es
afectado por la formación de las parejas sino que el rendimiento del equipo formado por
desarrolladores de personalidades con más diferencias, era mayor al equipo compuesto
por programadores con personalidades similares.
La comunicación es mayor y por ende el intercambio de información también.
Esto acarrea como consecuencia un mayor rendimiento y comprensión entre los
desarrolladores que se ve plasmado en el producto final y la calidad del mismo.
Conclusión: Basándonos en los resultados obtenidos, podemos decir que una
buena práctica para las compañías sería la de evaluar la personalidad de los
desarrolladores a la hora de formar un equipo para aumentar su productividad y de esta
forma tener un revenuew (o beneficio) mayor formando parejas con recursos de
personalidades distintas entre sí.
Introducing Agile Methods: Three years of experience
(Introduciendo los métodos ágiles: Tres años de experiencia)
Tema principal: Este artículo trata de un estudio de 3 años de experiencia
trabajando con metodologías ágiles en ámbitos académicos. Su objetivo es evaluar cual
es el punto de vista de los estudiantes y como éste varía acorde al curso al que ellos
asisten. Se evalúan estudiantes de distintos niveles y cursos diferentes de distintas
universidades.
Se les realiza una encuesta de 20 preguntas entre otras acerca de si se han sentido
cómodos utilizando xp como metodología de desarrollo, si lo recomendarían a su
compañía en el caso de aquellos alumnos que poseen un trabajo, si consideran que la
utilización de xp mejora la productividad y otros aspectos del proceso de desarrollo del
proyecto.
Estas preguntas son realizadas al finalizar el curso y con ellas se sacan
posteriormente las estadísticas que permiten así alcanzar una conclusión.
Que nos dice: El estudio concluye con la observación de que los estudiantes se
han mostrado no solo interesados en la metodología, sino que con un alto agrado al
introducir metodologías ágiles a los cursos y no se observaron notables diferencias entre
lo percibido por los estudiantes de distintos niveles. Asimismo se recomienda
capacitarse y utilizar metodologías ágiles en los cursos para una mejor incorporación de
los estudiantes universitarios en la industria del software.
Conclusión: Según lo visto en este artículo podemos animarnos a decir que
sería una buena práctica la introducción de xp en el ámbito académico ya que los
28
alumnos se mostrarían contentos ante dicho suceso y a la vez contarían con
conocimientos sobre una metodología que de a poco va tomando un importante espacio
en la industria laboral en la que el día de mañana formarán parte.
Extreme Programming from a CMM perspective
(Extreme programming desde una perspective CMM)
Tema principal: El articulo resume la mitología entre XP y SW-CMM
(Software capability maturity model), muestra como XP puede ayudar a las
organizaciones a alcanzar las metas de SW-CMM y luego critica XP desde la
perspectiva CMM.
Que nos dice: El artículo comienza detallando las distintas prácticas y
conceptos de ambos metodologías: XP y CMM. Luego de un detallado análisis
concluye con la señalización de que XP se centra mas en el trabajo técnico y no tanto en
el management, diseño, arquitectura y los riesgos del sistema a nivel general como lo
hace CMM.
Conclusión: Teniendo en cuenta lo señalado por el artículo puede decirse que
extreme programming y SW-CMM se complementan ya que resumiendo, CMM le dice
a la organización que es lo que necesita hacer y XP le dice la forma en la que debe
llevar a cabo aquello que debe hacer, es decir el “como”, siempre teniendo siempre en
cuenta los entornos en los que se trabajará durante el desarrollo del proyecto.
Extreme programming in reducing the rework of requirement change
(Extreme Programming en la reducción del retrabajo de cambio de requerimientos)
Tema principal: Este artículo trata sobre un estudio basado en el análisis de la
reducción del retrabajo o “rework” que los cambios de requerimientos acarean consigo
teniendo siempre en cuenta que estos son inevitables en todo proyecto.
Que nos dice: Una de las principales cláusulas de xp sugiere que se trabaje con
un cliente on-site, lo cual brinda la ventaja de poder reducir el trabajo de los cambios de
requerimientos notablemente.
Este cliente on-site puede predecir a grandes rasgos cuales podrían llegar a ser los
cambios de requerimientos y el trabajo que ellos traerían desde una perspectiva basada
en la lógica del negocio
Los costos de los cambios de requerimientos tienden a incrementarse a lo largo
del ciclo de vida del proyecto (de manera exponencial).
Conclusión: Teniendo en cuenta lo expuesto en el artículo podemos decir que
como el cambio de requerimientos es inevitable, es muy importante tenerlo en cuenta.
La utilización de XP y sus practicas reducen notablemente la cantidad de rework y es
por ello que deben ser consideradas como buenas practicas de desarrollo porque están
enfocadas principalmente en la satisfacción del cliente y poseen una notable flexibilidad
para los cambios que dicho cliente plantea a lo largo del proyecto.
Extreme Programming ha demostrado ser una metodología eficiente, flexible y
desafiante no por sus prácticas, sino por la integración que propone entre ellas. Es una
29
metodología relativamente joven que va ganando mercado día a día y es por ello que
debe ser tenida en cuenta no sólo en la industria laboral sino también en el ámbito
académico. Como toda metodología “nueva” debe ser manejada con cuidado ya que,
como es natural, siempre existirán aquellos que se resistirán al cambio y aquellos que lo
acogerán con gran entusiasmo.
Sin embargo, teniendo en cuenta los artículos analizados, deben considerarse
varios factores a la hora de decidir si es correcto o no implementar xp como
metodología de desarrollo en un proyecto. Deben analizarse los aspectos técnicos como
la naturaleza, complejidad y extensión del proyecto así como los recursos o personas
que integrarán el equipo de desarrollo.
30
Bibliografía
Agile Alliance website: http://www.agilealliance.org
http://c2.com/cgi/wiki?ExtremeProgramming
http://www.extremeprogramming.org/rules/iterative.html
Kent Beck.Extreme Programming Explained. Embrace Change.pdf
Kent Beck and Martin Fowler. Planning Extreme Programming.pdf
Patricio Letelier, Departamento de Sistemas Informáticos y Computación, Universidad
Politécnica de Valencia, letelier[arroba]dsic.upv.es
Manifiesto para el Desarrollo de Software Ágil, http://www.agilemanifesto.org
Martín Fowler. La Nueva Metodología: http://www.programacion.net
Alistair, Desarrollo de Software Ágil,
http://www.amazon.com/exec/obidos/ASIN/0201699699/programacione-20
Jacobson, Ivar; Booch, Grady; Rumbaugh, James. El Proceso Unificado de Desarrollo
de Software.
http://es.wikipedia.org/wiki/Proceso_Unificado
http://www.dybox.cl/metodologia/rup.html. (2/5/05)
Anónimo. Seminario sobre RUP en un entorno empresarial de desarrollo. http://www5.ibm.com/services/learning/es/tairis.nsf/(ExtCourseNr)/RUPS1ES. (2/5/05)
Kruchten, Philippe. The Rational Unified Process: An Introduction, 3rd edition.
Addison Wesley. December 2003.
Larman, Craig. Agile and Iterative Development: A Manager’s guide. Addison Wesley,
2003.
http://www.cyta.com.ar/ta0502/v5n2a1.htm
http://www.slideshare.net/fmmeson/metogologias-de-desarrollo-de-softwaretradicionales-vs-agiles
http://www.qualitrain.com.mx/index.php/Procesos-de-software/Evolucion-de-losprocesos-de-desarrollo-Primera-parrte.html
31
Michael Coram and Shawn Bohner. The Impact of Agile Methods on Software Project
Management. Department of Computer Science , Virginia Polytechnical Institute and
State University ,Blacksburg, Virginia 24061.
Tore Dyba, Erik Arisholm, Dag I.K. Sjoberg, Jo E. Hannay, and Forrest Shull. On the
Effectiveness of Pair Programming.
Panagiotis Sfetsos, Ioannis Stamelos, Lefteris Angelis and Ignatios Deligiannis.
Investigating the impact of Personality Types on Comunnication and collaboration
viability in Pair Programming - an empirical study. Department of Information
Technology, Thessaloniki, Greece.
Grigori Melnik, Frank Maurer .Introducing Agile Methods: Three Years of Experience.
Department of Computer Science,University of Calgary 2500 University Dr. N.W.,
Calgary, Alberta, T2N 1N4, Canada.
Mark C. Paulk. Extreme Programming from a CMM Perspectiva. Software Engineering
Institute.
Xu Bin, Yang Xiaohu, He Zhijun. EXTREME PROGRAMMING IN REDUCING THE
REWORK OF REQUIREMENT CHANGE. College of Computer Science &
Technology, Zhejiang Univ. 310027 Hangzhou, P. R. China
32
Glosario
Proceso de desarrollo: Es el conjunto de técnicas y procedimientos que nos permiten
conocer los elementos necesarios para definir un proyecto de software.
Release / iteración: Es una versión del producto que cumple con determinados
requerimientos.
Software: Es el conjunto de los programas de cómputo, procedimientos, reglas,
documentación y datos asociados que forman parte de las operaciones de un sistema de
computación.
Seniority: Nivel de experiencia y conocimientos de un recurso en un proyecto de
desarrollo. La misma puede ser Junior, Semi Sr. o Senior.
Refactorización: es una técnica de la ingeniería de software para reestructurar un código
fuente, alterando su estructura interna sin cambiar su comportamiento externo.
Rework: (o “retrabado”) es el trabajo excedente que debe realizarse en un proceso de
desarrollo.
Artefacto: producto tangible resultante del proceso de desarrollo de software. Algunos
artefactos como los casos de uso, diagrama de clases u otros modelos UML ayudan a la
descripción de la función, la arquitectura o el diseño del software.
Ad hoc: locución latina que significa literalmente «para esto». Generalmente se refiere a
una solución elaborada específicamente para un problema o fin preciso y, por tanto, no
es generalizable ni utilizable para otros propósitos.
Metodología RAD: (Desarrollo rápido de aplicaciones) Proceso de desarrollo de
software que permite construir sistemas utilizables en poco tiempo.
Model-Based Architecture and Software Engineering: Proceso de desarrollo ideado por
Barry Boehm y Dan Port en la década del 90. El mismo se enfoca principalmente en el
aseguramiento de la consistencia y el refuerzo de los modelos de producto, procesos,
propiedades y éxito del proyecto.
Método de desarrollo de sistemas dinámicos (DSDM): es un método que provee un
framework para el desarrollo ágil de software, apoyado por su continua implicación del
usuario en un desarrollo iterativo y creciente que sea sensible a los requerimientos
cambiantes, para desarrollar un sistema que reúna las necesidades de la empresa en
tiempo y presupuesto. Es uno de los tantos métodos de desarrollo ágil de software y
forma parte de la conocida alianza ágil.
33
Documentos relacionados
Descargar