METODOLOGIA XP-EXTREME PROGRAMING
(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. Los defensores de XP consideran que los cambios de requisitos
sobre la marcha son un aspecto natural, inevitable e incluso deseable del
desarrollo de proyectos. Creen que ser capaz de adaptarse a los cambios de
requisitos en cualquier punto de la vida del proyecto es una aproximación mejor
y más realista que intentar definir todos los requisitos al comienzo del
proyecto e invertir esfuerzos después en controlar los cambios en los
requisitos.
Valores
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é autodocumentado. 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 programadores a 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 mas fácilmente. Otro ejemplo de valentía es saber cuando 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.
- Respeto:
El respeto se manifiesta de
varias formas. Los miembros del equipo se respetan los unos a otros, porque los
programadores no pueden realizar cambios que hacen que las pruebas existentes
fallen o que demore el trabajo de sus compañeros. Los miembros respetan su
trabajo porque siempre están luchando por la alta calidad en el producto y
buscando el diseño óptimo o más eficiente para la solución a través de la
refactorización del código. Los miembros del equipo respetan el trabajo del
resto no haciendo menos a otros, una mejor autoestima en el equipo y elevando
el ritmo de producción en el equipo.
CARACTERÍSTICAS
FUNDAMENTALES:
Las características
fundamentales del método son:
- Desarrollo iterativo e incremental: pequeñas mejoras, unas tras otras.
- Pruebas unitarias continuas, frecuentemente repetidas y automatizadas, incluyendo pruebas de regresión. Se aconseja escribir el código de la prueba antes de la codificación. Véase, por ejemplo, las herramientas de prueba JUnit orientada a Java, DUnit orientada a Delphi, 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.
- Refactorización del código, es decir, reescribir ciertas partes del código para aumentar su legibilidad y mantenibilidad pero sin modificar su comportamiento. Las pruebas han de garantizar que en la refactorización no se ha introducido ningún fallo.
- Propiedad del código compartida: en vez de dividir la responsabilidad en el desarrollo de cada módulo en grupos de trabajo distintos, este método promueve el que todo el personal pueda corregir y extender cualquier parte del proyecto. Las frecuentes pruebas de regresión garantizan que los posibles errores serán detectados.
- Simplicidad en el código: es la mejor manera de que las cosas funcionen. Cuando todo funcione se podrá añadir funcionalidad si es necesario. La programación extrema apuesta que 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
No hay comentarios:
Publicar un comentario