Según
Kent Beck
La
programación extrema o eXtreme Programming (XP) es una metodología de
desarrollo de la ingeniería de software formulada por Kent Beck, autor del
primer libro sobre la materia, Extreme Programming Explained: Embrace Change
(1999).Es el más destacado de los procesos ágiles de desarrollo de software. Al
igual que éstos, la programación extrema se diferencia de las metodologías
tradicionales principalmente en que pone más énfasis en la adaptabilidad que en
la previsibilidad.
CARACTERÍSTICAS
DE LA METODOLOGÍA XP
- Se diferencia de las metodologías tradicionales principalmente en que pone más énfasis en la adaptabilidad que en la previsibilidad.
- Se aplica de manera
dinámica durante el ciclo de vida del software.
- Es capaz de adaptarse a
los cambios de requisitos.
- Los individuos e
interacciones son más importantes que los procesos y herramientas.
- Al individuo y las
interacciones del equipo de desarrollo sobre el proceso y las
herramientas.
La
gente es el principal factor de éxito de un proyecto software. Es más importante
construir un buen equipo que construir el entorno. Muchas veces se comete el
error de construir primero el entorno y esperar que el equipo se adapte
automáticamente. Es mejor crear el equipo y que éste configure su propio
entorno de desarrollo en base a sus necesidades.
- Software que funcione
es más importante que documentación exhaustiva.
- Desarrollar software
que funciona más que conseguir una buena documentación.
La
regla a seguir es no producir documentos a menos que sean necesarios de forma
inmediata para tomar un decisión importante. Estos documentos deben ser cortos
y centrarse en lo fundamental.
- La colaboración con el
cliente es más importante que la negociación de contratos.
- La colaboración con el
cliente más que la negociación de un contrato.
Se
propone que exista una interacción constante entre el cliente y el equipo de
desarrollo. Esta colaboración entre ambos será la que marque la marcha del
proyecto y asegure su éxito.
- La respuesta ante el
cambio es más importante que el seguimiento de un plan.
VALORES
DE LA METODOLOGÍA XP
Los
Valores originales de la programación extrema son: simplicidad, comunicación,
retroalimentación (feedback) y coraje. Un quinto valor, respeto, fue añadido en
la segunda edición de Extreme Programming Explained. Los cinco valores se
detallan a continuación:
- Simplicidad:
La
simplicidad es la base de la programación extrema. Se simplifica el diseño para
agilizar el desarrollo y facilitar el mantenimiento.
Un
diseño complejo del código junto a sucesivas modificaciones por parte de
diferentes desarrolladores hacen que la complejidad aumente exponencialmente.
Para mantener la simplicidad es necesaria la refactorización del código, ésta
es la manera de mantener el código simple a medida que crece.
También
se aplica la simplicidad en la documentación, de esta manera el código debe
comentarse en su justa medida, intentando eso sí que el código esté
auto-documentado.Para ello se deben elegir adecuadamente los nombres de las
variables, métodos y clases. Los nombres largos no decrementan la eficiencia
del código ni el tiempo de desarrollo gracias a las herramientas de
autocompletado y refactorización que existen actualmente.
Aplicando
la simplicidad junto con la autoría colectiva del código y la programación por
parejas se asegura que cuanto más grande se haga el proyecto, todo el equipo
conocerá más y mejor el sistema completo.
- Comunicación:
La
comunicación se realiza de diferentes formas. Para los programadores el código
comunica mejor cuanto más simple sea.
Si
el código es complejo hay que esforzarse para hacerlo inteligible. El código
autodocumentado es más fiable que los comentarios ya que éstos últimos pronto
quedan desfasados con el código a medida que es modificado.
Debe
comentarse sólo aquello que no va a variar, por ejemplo el objetivo de una
clase o la funcionalidad de un método. Las pruebas unitarias son otra forma de
comunicación ya que describen el diseño de las clases y los métodos al mostrar
ejemplos concretos de como utilizar su funcionalidad.
Los
programadores se comunican constantemente gracias a la programación por
parejas. La comunicación con el cliente es fluida ya que el cliente forma parte
del equipo de desarrollo. El cliente decide qué características tienen
prioridad y siempre debe estar disponible para solucionar dudas.
- Retroalimentación
(Feedback):
Al
estar el cliente integrado en el proyecto, su opinión sobre el estado del
proyecto se conoce en tiempo real.
Al
realizarse ciclos muy cortos tras los cuales se muestran resultados, se
minimiza el tener que rehacer partes que no cumplen con los requisitos y ayuda
a los programador esa centrarse en lo que es más importante. Considérense los
problemas que derivan de tener ciclos muy largos.
Meses
de trabajo pueden tirarse por la borda debido a cambios en los criterios del
cliente o malentendidos por parte del equipo de desarrollo.
El
código también es una fuente de retroalimentación gracias a las herramientas de
desarrollo. Por ejemplo, las pruebas unitarias informan sobre el estado de
salud del código.Ejecutar las pruebas unitarias frecuentemente permite
descubrir fallos debidos a cambios recientes en el código.
- Coraje O Valentía:
Muchas
de las prácticas implican valentía. Una de ellas es siempre diseñar y programar
para hoy y no para mañana. Esto es un esfuerzo para evitar empantanarse en el
diseño y requerir demasiado tiempo y trabajo para implementar todo lo demás del
proyecto. La valentía le permite a los desarrolladores que se sientan cómodos
con reconstruir su código cuando sea necesario. Esto significa revisar el
sistema existente y modificarlo si con ello los cambios futuros se
implementaran más fácilmente. Otro ejemplo de valentía es saber cuándo desechar
un código: valentía para quitar código fuente obsoleto, sin importar cuanto
esfuerzo y tiempo se invirtió en crear ese código. Además, valentía significa
persistencia: un programador puede permanecer sin avanzar en un problema
complejo por un día entero, y luego lo resolverá rápidamente al día siguiente,
sólo si es persistente.
PERSONAS
QUE INTERVIENEN EN LA METODOLOGÍA XP
Según
Kent Beck
La
metodología XP se encuentra en una frecuente integración del equipo de
programación con el cliente o usuario: se recomienda que un representante del
cliente trabaje junto al equipo de desarrollo. Los programadores se comunican
constantemente gracias a la programación por parejas. La comunicación con el
cliente es fluida ya que el cliente forma parte del equipo de desarrollo; el
cliente decide qué características tienen prioridad y siempre debe estar
disponible para solucionar dudas.
Según
Ian Sommerville
En
un proceso XP, los clientes están fuertemente implicados en la especificación y
establecimiento de prioridades de los requerimientos del sistema.
Los
requerimientos no se especifican como una lista de funciones requeridas del
sistema. Más bien, los clientes del sistema son parte del equipo de desarrollo
y discuten escenarios con otros miembros del equipo. Desarrollan conjuntamente
una tarjeta de historia que recoge las necesidades del cliente. El equipo de
desarrollo intentara entonces implementar ese escenario en una entrega futura
del software.
La
participación del cliente se lleva a cabo a través del compromiso a tiempo
completo del cliente en el equipo de desarrollo. Los representantes de los
clientes participan en el desarrollo y son los responsables de definir las
pruebas de aceptación del sistema.
LOS
PASOS DE LA METODOLOGÍA XP
Según
Kent Beck
Los
Pasos fundamentales inmersos en las fases del método son:
- Desarrollo iterativo e
incremental: Pequeñas mejoras, unas tras otras.
- Pruebas unitarias
continuas: Son frecuentemente repetidas y
automatizadas, incluyendo pruebas de regresión. Se aconseja escribir el
código de la prueba antes de la codificación.
Véase,
por ejemplo, las herramientas de prueba JUnit orientada a Java, DUnit orientada
a Delphi, NUnit para la plataforma.NET o PHPUnit para PHP. Estas tres últimas
inspiradas en JUnit, la cual, a su vez, se insipiró en SUnit, el primer framework
orientado a realizar tests, realizado para el lenguaje de programación
Smalltalk.
- Programación en
parejas: Se recomienda que las tareas de
desarrollo se lleven a cabo por dos personas en un mismo puesto. Se supone
que la mayor calidad del código escrito de esta manera -el código es
revisado y discutido mientras se escribe- es más importante que la posible
pérdida de productividad inmediata.
- Frecuente integración
del equipo de programación con el cliente o usuario: Se
recomienda que un representante del cliente trabaje junto al equipo de
desarrollo.
- Corrección de todos los
errores antes de añadir nueva funcionalidad. Hacer entregas frecuentes.
- Refactorizacion del
código: Es decir, reescribir ciertas
partes del código para aumentar su legibilidad y mantenibilidad pero sin
modificar su comportamiento. Las pruebas han de garantizar que en la
refactorización no se ha introducido ningún fallo.
- Propiedad del código
compartido: en vez de dividir la
responsabilidad en el desarrollo de cada módulo en grupos de trabajo
distintos, este método promueve el que todo el personal pueda corregir y
extender cualquier parte del proyecto. Las frecuentes pruebas de regresión
garantizan que los posibles errores serán detectados.
- Simplicidad del codigo: es
la mejor manera de que las cosas funcionen. Cuando todo funcione se podrá
añadir funcionalidad si es necesario. La programación extrema apuesta que
es más sencillo hacer algo simple y tener un poco de trabajo extra para
cambiarlo si se requiere, que realizar algo complicado y quizás nunca
utilizarlo.
La
simplicidad y la comunicación son extraordinariamente complementarias. Con más
comunicación resulta más fácil identificar qué se debe y qué no se debe hacer.
Cuanto más simple es el sistema, menos tendrá que comunicar sobre éste, lo que
lleva a una comunicación más completa, especialmente si se puede reducir el
equipo de programadores.
Según Ian Sommerville
- Planificación
Incremental: Los requerimientos se registran en
tarjetas de historias y las historias a incluir en una entrega se
determinan según el tiempo disponible y su prioridad relativa.
Los
desarrolladores dividen estas historias en tareas de desarrollo.
- Entregas Pequeñas: El mismo conjunto útil de funcionalidad que proporcione valor de negocio se desarrolla primero. Las entregas del sistema son frecuentes e incrementalmente añaden funcionalidad a la primera entrega.
- Diseño Sencillo: Solo
se lleva a cabo el diseño necesario para cumplir los requerimientos
actuales.
- Desarrollo previamente
probado: Se utiliza un sistema de pruebas
de unidad automatizado para escribir pruebas para nuevas funcionalidades
antes de que estas se implementen.
- Refactorizacion: Se
espera que todos los desarrolladores refactoricen el código continuamente
tan pronto como encuentren posibles mejoras en el código.
Esto
conserva el código sencillo y mantenible.
- Programación en
Parejas: Los desarrolladores trabajan en
parejas, verificando cada uno el trabajo del otro proporcionando la ayuda
necesaria para hacer siempre un buen trabajo.
- Propiedad Colectiva: Las
parejas de desarrolladores trabajan en todas las áreas del sistema, de
modo que no desarrollen islas de conocimiento y todos los desarrolladores
posean todo el código. Cualquiera puede cambiar cualquier cosa.
- Integración Continua: En
cuanto acaba el trabajo en una tarea, se integra en el sistema entero.
Después
de la integración, se deben pasar al sistema todas las pruebas de unidad.
- Ritmo Sostenible: No
se consideran aceptables grandes cantidades de horas extras, ya que a
menudo el efecto que tienen es que se reduce la cantidad del código y la
productividad a medio plazo.
- Cliente Presente: Debe
estar disponible al equipo de la XP un representante de los usuarios
finales del sistema (el cliente) a tiempo completo. En un proceso de la
programación externa, el cliente es miembro del equipo de desarrollo y es
responsable de formular al equipo los requerimientos del sistema para su
implementación.
FASES DE LA METODOLOGÍA XP
Según
Kent Beck
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 lenguajeno 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
seindiquen 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.
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 Parejas: 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.
Funcionabilidad
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.
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.
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á.
Como
se comentó anteriormente los distintos test se deben subir al repositorio de
código acompañados del código que verifican.
Test
de aceptación. Los test mencionados anteriormente sirven para evaluar las
distintas tareas en las que ha sido dividida una historia de usuario.
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.
VENTAJAS
Y DESVENTAJAS DE LA METODOLOGÍA XP
VENTAJAS:
- Programación
organizada.
- Menor taza de errores.
- Satisfacción del programador.
DESVENTAJAS:
- Es recomendable
emplearlo solo en proyectos a corto plazo.
- Altas comisiones en
caso de fallar.
No hay comentarios:
Publicar un comentario