1ª
Fase: Planificación del proyecto.
....... .......Historias
de usuario: El primer paso de cualquier proyecto que siga la metodología
X.P es definir las historias de usuario con el cliente. Las historias
de usuario tienen la misma finalidad que los casos de uso pero con algunas
diferencias: Constan de 3 ó 4 líneas escritas por el cliente
en un lenguaje no técnico sin hacer mucho hincapié en
los detalles; no se debe hablar ni de posibles algoritmos para su implementación
ni de diseños de base de datos adecuados, etc. Son usadas para
estimar tiempos de desarrollo de la parte de la aplicación que
describen. También se utilizan en la fase de pruebas, para verificar
si el programa cumple con lo que especifica la historia de usuario.
Cuando llega la hora de implementar una historia de usuario, el cliente
y los desarrolladores se reúnen para concretar y detallar lo
que tiene que hacer dicha historia. El tiempo de desarrollo ideal para
una historia de usuario es entre 1 y 3 semanas.
.......Release
planning*: .Después de
tener ya definidas las historias de usuario es necesario crear un plan
de publicaciones, en inglés "Release plan", donde se
indiquen las historias de usuario que se crearán para cada versión
del programa y las fechas en las que se publicarán estas versiones.
Un "Release plan" es una planificación donde los desarrolladores
y clientes establecen los tiempos de implementación ideales de
las historias de usuario, la prioridad con la que serán implementadas
y las historias que serán implementadas en cada versión
del programa. Después de un "Release plan" tienen que
estar claros estos cuatro factores: los objetivos que se deben cumplir
(que son principalmente las historias que se deben desarrollar en cada
versión), el tiempo que tardarán en desarrollarse y publicarse
las versiones del programa, el número de personas que trabajarán
en el desarrollo y cómo se evaluará la calidad del trabajo
realizado. (*Release plan: Planificación de publicaciones).
....... Iteraciones Todo
proyecto que siga la metodología X.P. se ha de dividir en iteraciones
de aproximadamente 3 semanas de duración. Al comienzo de cada
iteración los clientes deben seleccionar las historias de usuario
definidas en el "Release planning" que serán implementadas.
También se seleccionan las historias de usuario que no pasaron
el test de aceptación que se realizó al terminar la iteración
anterior. Estas historias de usuario son divididas en tareas de entre
1 y 3 días de duración que se asignarán a los programadores.
....... Velocidad del proyecto:
La velocidad del proyecto es una medida que representa la rapidez con
la que se desarrolla el proyecto; estimarla es muy sencillo, basta con
contar el número de historias de usuario que se pueden implementar
en una iteración; de esta forma, se sabrá el cupo de historias
que se pueden desarrollar en las distintas iteraciones. Usando la velocidad
del proyecto controlaremos que todas las tareas se puedan desarrollar
en el tiempo del que dispone la iteración. Es conveniente reevaluar
esta medida cada 3 ó 4 iteraciones y si se aprecia que no es
adecuada hay que negociar con el cliente un nuevo "Release Plan".
....... Programación en
pareja: La metodología X.P. aconseja la programación
en parejas pues incrementa la productividad y la calidad del software
desarrollado. El trabajo en pareja involucra a dos programadores trabajando
en el mismo equipo; mientras uno codifica haciendo hincapié en
la calidad de la función o método que está implementando,
el otro analiza si ese método o función es adecuado y
está bien diseñado. De esta forma se consigue un código
y diseño con gran calidad.
....... Reuniones diarias.
Es necesario que los desarrolladores se reúnan diariamente y
expongan sus problemas, soluciones e ideas de forma conjunta. Las reuniones
tienen que ser fluidas y todo el mundo tiene que tener voz y voto.
2ª Fase: Diseño.
....... Diseños simples:
La metodología X.P sugiere que hay que conseguir diseños
simples y sencillos. Hay que procurar hacerlo todo lo menos complicado
posible para conseguir un diseño fácilmente entendible
e impleméntable que a la larga costará menos tiempo y
esfuerzo desarrollar.
....... Glosarios de términos:
Usar glosarios de términos y un correcta especificación
de los nombres de métodos y clases ayudará a comprender
el diseño y facilitará sus posteriores ampliaciones y
la reutilización del código.
....... Riesgos: Si surgen
problemas potenciales durante el diseño, X.P sugiere utilizar
una pareja de desarrolladores para que investiguen y reduzcan al máximo
el riesgo que supone ese problema.
....... Funcionalidad extra:
Nunca se debe añadir funcionalidad extra al programa aunque se
piense que en un futuro será utilizada. Sólo el 10% de
la misma es utilizada, lo que implica que el desarrollo de funcionalidad
extra es un desperdicio de tiempo y recursos.
....... Refactorizar.
Refactorizar es mejorar y modificar la estructura y codificación
de códigos ya creados sin alterar su funcionalidad. Refactorizar
supone revisar de nuevo estos códigos para procurar optimizar
su funcionamiento. Es muy común rehusar códigos ya creados
que contienen funcionalidades que no serán usadas y diseños
obsoletos. Esto es un error porque puede generar código completamente
inestable y muy mal diseñado; por este motivo, es necesario refactorizar
cuando se va a utilizar código ya creado.
.......Tarjetas C.R.C.
El uso de las tarjetas C.R.C (Class, Responsabilities and Collaboration)
permiten al programador centrarse y apreciar el desarrollo orientado
a objetos olvidándose de los malos hábitos de la programación
procedural clásica.
.......Las tarjetas C.R.C representan objetos;
la clase a la que pertenece el objeto se puede escribir en la parte
de arriba de la tarjeta, en una columna a la izquierda se pueden escribir
las responsabilidades u objetivos que debe cumplir el objeto y a la
derecha, las clases que colaboran con cada responsabilidad.
3ª Fase: Codificación.
.......Como ya se dijo en la introducción,
el cliente es una parte más del equipo de desarrollo; su presencia
es indispensable en las distintas fases de X.P. A la hora de codificar
una historia de usuario su presencia es aún más necesaria.
No olvidemos que los clientes son los que crean las historias de usuario
y negocian los tiempos en los que serán implementadas. Antes
del desarrollo de cada historia de usuario el cliente debe especificar
detalladamente lo que ésta hará y también tendrá
que estar presente cuando se realicen los test que verifiquen que la
historia implementada cumple la funcionalidad especificada.
.......La codificación debe hacerse
ateniendo a estándares de codificación ya creados. Programar
bajo estándares mantiene el código consistente y facilita
su comprensión y escalabilidad.
.......Crear test que prueben el funcionamiento
de los distintos códigos implementados nos ayudará a desarrollar
dicho código. Crear estos test antes nos ayuda a saber qué
es exactamente lo que tiene que hacer el código a implementar
y sabremos que una vez implementado pasará dichos test sin problemas
ya que dicho código ha sido diseñado para ese fin. Se
puede dividir la funcionalidad que debe cumplir una tarea a programar
en pequeñas unidades, de esta forma se crearán primero
los test para cada unidad y a continuación se desarrollará
dicha unidad, así poco a poco conseguiremos un desarrollo que
cumpla todos los requisitos especificados.
.......Como ya se comentó anteriormente,
X.P opta por la programación en pareja ya que permite un código
más eficiente y con una gran calidad.
.......X.P sugiere un modelo de trabajo
usando repositorios de código dónde las parejas de programadores
publican cada pocas horas sus códigos implementados y corregidos
junto a los test que deben pasar. De esta forma el resto de programadores
que necesiten códigos ajenos trabajarán siempre con las
últimas versiones. Para mantener un código consistente,
publicar un código en un repositorio es una acción exclusiva
para cada pareja de programadores.
.......X.P también propone un modelo
de desarrollo colectivo en el que todos los programadores están
implicados en todas las tareas; cualquiera puede modificar o ampliar
una clase o método de otro programador si es necesario y subirla
al repositorio de código. El permitir al resto de los programadores
modificar códigos que no son suyos no supone ningún riesgo
ya que para que un código pueda ser publicado en el repositorio
tiene que pasar los test de funcionamiento definidos para el mismo.
.......La
optimización del código siempre se debe dejar para el
final. Hay que hacer que funcione y que sea correcto, más tarde
se puede optimizar.
.......X.P afirma que la mayoría
de los proyectos que necesiten más tiempo extra que el planificado
para ser finalizados no podrán ser terminados a tiempo se haga
lo que se haga, aunque se añadan más desarrolladores y
se incrementen los recursos. La solución que plantea X.P es realizar
un nuevo "Release plan" para concretar los nuevos tiempos
de publicación y de velocidad del proyecto.
.......A la hora de codificar no seguimos
la regla de X.P que aconseja crear test de funcionamiento con entornos
de desarrollo antes de programar. Nuestros test los obtendremos de la
especificación de requisitos ya que en ella se especifican las
pruebas que deben pasar las distintas funcionalidades del programa,
procurando codificar pensando en las pruebas que debe pasar cada funcionalidad.
4ª Fase: Pruebas.
.......Uno de los pilares de la metodología
X.P es el uso de test para comprobar el funcionamiento de los códigos
que vayamos implementando.
.......El uso de los test en X.P es el
siguiente:
.......Se deben crear las aplicaciones
que realizarán los test con un entorno de desarrollo específico
para test.
.......Hay que someter a tests las distintas
clases del sistema omitiendo los métodos más triviales.
.......Se deben crear los test que pasarán
los códigos antes de implementarlos; en el apartado anterior
se explicó la importancia de crear antes los test que el código.
.......Un punto importante es crear test
que no tengan ninguna dependencia del código que en un futuro
evaluará. Hay que crear los test abstrayéndose del futuro
código, de esta forma aseguraremos la independencia del test
respecto al código que evalúa.
.......Como se comentó anteriormente
los distintos test se deben subir al repositorio de código acompañados
del código que verifican. Ningún código puede ser
publicado en el repositorio sin que haya pasado su test de funcionamiento,
de esta forma, aseguramos el uso colectivo del código (explicado
en el apartado anterior).
.......El uso de los test es adecuado para
observar la refactorización. Los test permiten verificar que
un cambio en la estructura de un código no tiene porqué
cambiar su funcionamiento.
.......Test de aceptación. Los test
mencionados anteriormente sirven para evaluar las distintas tareas en
las que ha sido dividida una historia de usuario. Para asegurar el funcionamiento
final de una determinada historia de usuario se deben crear "Test
de aceptación"; estos test son creados y usados por los
clientes para comprobar que las distintas historias de usuario cumplen
su cometido.
.......Al ser las distintas funcionalidades
de nuestra aplicación no demasiado extensas, no se harán
test que analicen partes de las mismas, sino que las pruebas se realizarán
para las funcionalidades generales que debe cumplir el programa especificado
en la descripción de requisitos
Subir al principio