LECCIÓN 2: El ciclo de vida iterativo e incremental
El ciclo de vida iterativo e incremental es una de las prácticas fundamentales de un proyecto ágil. En este tipo de ciclo de vida, se va liberando parte del producto (prototipos) periódicamente mediante iteraciones o ciclos de desarrollo.
Como vimos en la anterior lección, el ciclo de vida en cascada es muy típico en la construcción de productos físicos. Y aunque ha sido utilizado ampliamente en el mundo del software… también ha sido muy criticado desde el punto de vista ágil. Frente al ciclo de vida en cascada, el paradigma ágil (en la mayoría de sus metodologías) recomienda el uso de otro tipo de ciclo de vida: el iterativo e incremental.
Si en un ciclo de vida en cascada las fases del ciclo de vida (requisitos, análisis, diseño, etc.) se realizan (en teoría) una única vez, y el inicio de una fase no comienza hasta que termina la fase que le precede, en un ciclo de vida iterativo e incremental se va liberando parte del producto (prototipos) periódicamente, en cada iteración. En vez de una única fase final de elaboración del producto, en el ciclo de vida iterativo e incremental hay múltiples fases intermedias (tantas como iteraciones), en las que se elabora parte del producto (prototipo); cada prototipo incrementa la funcionalidad y mejora al anterior; cada iteración hace “crecer y mejorar” el producto. El producto se desarrolla por ciclos (iteraciones).
CURIOSIDADES Con la creciente popularidad de los métodos ágiles en muchas ocasiones se cree que el ciclo de vida iterativo e incremental es una práctica moderna, nueva frente al antiguo ciclo de vida en cascada, pero su aplicación data de… ¡los años 50!, y desde entonces ha sido ampliamente usado y se ha escrito mucho sobre él.
Iterativo + Incremental
Aunque normalmente hablamos de iterativo e incremental (o incluso sólo de iterativo), ello no quiere decir que ambos sean lo mismo. De hecho, el desarrollo iterativo no implica, ni presupone el uso del incremental, y viceversa. Para ver la diferencia, veamos la definición de cada tipo de ciclo de vida:
El desarrollo incremental surge para eliminar los riesgos asociados a construir productos software grandes o con alto grado de complejidad. Se centra en desarrollar por partes el producto software, para después integrarlas a medida que se completan. Un ejemplo de un desarrollo puramente incremental puede ser la agregación de módulos en diferentes fases. Gráficamente vemos como cada vez se van añadiendo nuevas partes que se van integrando para formar el producto final.
El desarrollo iterativo se centra en mejorar y revisar el producto ya creado. En cada ciclo se revisa y mejora el trabajo. Un ejemplo de desarrollo iterativo y no incremental es aquel basado en refactorizaciones (te dejamos una pequeña introducción a la refactorización), en el que cada ciclo mejorando más el producto. En el ejemplo gráfico de abajo se puede apreciar que se trata de un método de mejora a través de las sucesivas iteraciones. Es importante señalar no hay adición de funcionalidades en el producto, hay revisión y mejora.
De la unión del ciclo de vida iterativo y el incremental al final de cada iteración se consigue una versión estable del software, añadiendo además nuevas funcionalidades a las versiones anteriores. Así, el producto software se desarrolla por incrementos en el que cada iteración (incluida la primera) obtiene una versión operativa del producto, así el sistema se desarrolla y mejora poco a poco y se obtiene un “feedback” continuo por parte del cliente sobre un producto operativo.
En el siguiente ejemplo gráfico, a diferencia de los anteriores, vemos cómo en cada iteración al producto creado en la primera se le van añadiendo nuevas formas, tonos, colores (funcionalidades).
Además, como podemos observar, las nuevas modificaciones se aplican sobre el trabajo ya creado desde el principio ya que, desde la iteración 1, es una versión del producto final. Y cada iteración mejora el producto.
Ventajas del ciclo de vida iterativo e incremental
Las ventajas que ofrece un ciclo de vida iterativo e incremental son varias. Además de intentar evitar todos los problemas que vimos en la lección anterior con el ciclo de vida en cascada, te dejamos algunas más:
- Visión de avance en el desarrollo, viendo trabajo operativo real desde etapas iníciales del ciclo de desarrollo.
- Obtención del “feedback” del usuario sobre un prototipo operativo. Así puede orientar el desarrollo hacia el cumplimiento de sus necesidades, y realizar todas las adaptaciones identificadas para cumplir con los objetivos planteados.
- Permite manejar el riesgo del proyecto, apuntando a la resolución de los problemas por partes, y no caer en la inanición del “súper análisis” del producto.
- El aprendizaje y experiencia del equipo iteración tras iteración sobre un prototipo operativo, lo que mejora exponencialmente el trabajo, aumenta la productividad y permite optimizar el proceso en el corto plazo.