# Metodologías ágiles de desarrollo software
## Concepto general

Las metodologías ágiles son métodos de desarrollo de software en los que las necesidades y soluciones evolucionan a través de una colaboración estrecha entre equipos multidisciplinarios. Se caracterizan por enfatizar la comunicación frente a la documentación, por el desarrollo evolutivo y por su flexibilidad.
Estas metodologías surgen a principios del 2001 en respuesta a los modelos de proceso clásicos ya existentes. La aparición de procesos ágiles se debe al hecho de haber encontrado estos supuestos clave en desarrollos precedentes:
* Es difícil predecir qué requisitos persistirán y cuales cambiarán, así como las prioridades del cliente.
* El diseño y el desarrollo de software están intercalados. Por ello se realizarán conjuntamente, probando el diseño a medida que se crea, pues es complicado predecir cuánto diseño es necesario antes de llegar a implementarlo.
* El análisis, el diseño y la implementación no son predecibles desde el punto de vista de la planificación.

## Elementos clave

Teóricamente, la agilidad se puede aplicar a cualquier proceso de software, sin embargo han surgido modelos de proceso propios con esta filosofía. Es este tipo de modelos, según el Manifiesto Ágil publicado en 2001, se valora lo siguiente:
* A los individuos sobre los procesos y herramientas. Pues nada sustituye a las personas a pesar de todas las ayudas que existen para desarrollar software. Toda la importancia hay que dársela a las personas, que deben permanecer en un primer plano.
* Al software funcionando sobre la documentación exhaustiva. Esto se debe a que había llegado un punto en el que la documentación de un trabajo había alcanzado tanta importancia como el objeto de trabajo en sí mismo, el producto. Cuando realmente la mayor atención debe estar puesta siempre en lo que queremos construir, y lo demás debería ser secundario.
* La colaboración del cliente sobre la negociación de un contrato. A la hora de sacar un proyecto adelante, la forma más productiva siempre será estableciendo un marco de colaboración y confianza con quien nos lo encarga. Lo que estaba cobrando mayor importancia antaño era cerrar un contrato atado que sirviese por encima de todo como una herramienta de protección, de manera que el cliente y el equipo parecían partes enfrentadas, cuando en realidad comparten objetivos e intereses.
* La respuesta al cambio sobre seguir un plan. Se trata de apreciar la incertidumbre como un componente básico del trabajo, de tal manera que la adaptabilidad y la flexibilidad se convierten en virtudes y no en defectos de la manera de trabajar del equipo. Por norma general, el seguimiento ciego de un plan suele llevar al fracaso si no se puede corregir la dirección ante los inevitables cambios que van surgiendo.
Además, para responder a los supuestos clave señalados previamente, los modelos de desarrollo ágiles deben cumplir con lo siguiente:
* Ser adaptables de forma incremental
* Tener abundante retroalimentación del cliente
* Basarse en la entrega continua de incrementos

## El equipo de desarrollo

El proceso ágil requiere una serie de características sobre el equipo de desarrollo:
* Competencia técnica
* Enfoque común: entregar al cliente un incremento dentro del plazo
* Colaboración entre todos los participantes
* Autonomía para la toma de decisiones
* Capacidad de resolución de problemas confusos
* Confianza y respeto mutuo en el equipo
* Organización propia

## Principios metodológicos

Existe una denominada Alianza Ágil que define los siguientes 12 principios para toda metodología ágil:
* Satisfacer al cliente con entregas tempranas y continuas de software valioso.
* Los requisitos cambiantes son bienvenidos, incluso en fases tardías del desarrollo.
* Entregar con frecuencia software funcionando, -de dos semanas a dos meses,- cuanto antes se haga mejor.
* El cliente y los desarrolladores deben trabajar juntos a diario a lo largo del proyecto.
* Individuos motivados. Darles el ambiente y el soporte que necesitan, y confiar en ellos para obtener el trabajo realizado.
* El método más eficiente y efectivo de transmitir información hacia y dentro del equipo es la conversación cara a cara.
* El software en funcionamiento es la medida principal de progreso.
* El desarrollo debe ser sostenible. Los participantes deben ser capaces de mantener un paso constante de manera indefinida.
* Atención continua a la excelencia técnica y a un buen diseño.
* La simplicidad es esencial, maximizando el avance del trabajo no realizado.
* Las mejores arquitecturas, los mejores requisitos y los mejores diseños emergen de equipos auto-organizados.
* A intervalos regulares el equipo refleja la forma en que se puede volver más efectivo, entonces su comportamiento se ajusta y adecua en concordancia.

## Algunas técnicas ágiles

A continuación citaremos algunas de las técnicas basadas en la metodología de desarrollo ágil más populares:
* Extreme Programming
* Scrum
* Dynamic Systems Development Method (DSDM)
* Proceso Unificado Ágil (Agile Unified Process)
* Desarrollo Adaptativo de Software (Adaptive software development)
* Modelado Ágil (Agile Modeling)

## Conclusiones

Las metodologías ágiles son en realidad una familia de modelos o técnicas, todas ellas compartiendo la característica de interpretar el desarrollo de software como una actividad en la que siempre hay un cierto grado de incertidumbre. Incertidumbre que hace necesario poner el énfasis en las personas, dejar que se auto-organicen y que interactúen buscando siempre satisfacer los requisitos del cliente, y planificando iteración a iteración, adaptándose con flexibilidad a los cambios que se producirán de seguro durante la vida del proyecto.

## Lecciones relacionadas

* Procesos de desarrollo software
* Metodologías pesadas de desarrollo software
* Proceso Unificado de Desarrollo
* Scrum