miércoles, 23 de septiembre de 2015

Modelos iterativos

En 1994, el Departamento de Defensa de Estados Unidos (el mayor contratista mundial de proyectos de desarrollo de software) cambió oficialmente sus estándares de desarrollo de software y descartó el modelo en cascada para introducir el estándar 498, que utiliza un modelo iterativo de desarrollo de software.


Los modelos iterativos consisten en descomponer un proyecto de desarrollo de software en una serie de subproyectos de menor envergadura. Estos subproyectos deben diseñarse de tal forma que cada uno de ellos aporte funcionalidad nueva para el sistema desde el punto de vista del usuario final del mismo.



 Usualmente, las personas involucradas en el proyecto establecen prioridades entre los requerimientos iniciales del sistema para decidir qué parte del mismo se construirá primero. El cliente y los usuario finales abogarán por darle prioridad a las funciones más útiles del sistema (o las más "vendibles"). Por otro lado, los diseñadores del sistema deberán determinar las dependencias existentes entre sus distintos componentes y priorizar aquéllos que supongan un riesgo mayor para la viabilidad final del proyecto. Las prioridades de unos y otros habrán de consensuarse razonablemente y servirán para determinar el ámbito de los subproyectos en que se descompondrá el proyecto inicial.



Los modelos iterativos de desarrollo de software permiten adelantar el momento en el que se determina si un proyecto es técnicamente viable o no (con lo que se eliminan costes innecesarios si, finalmente, el proyecto hubiese de cancelarse). También promueven una mejor comunicación con el usuario/cliente, ya que se dispondrá antes de una versión operativa del sistema, aunque sea de funcionalidad reducida. Estas versiones intermedias del producto ayudan a la eliminación de malentendidos que pueden surgir en la etapa de elicitación de requerimientos. Además, ayudan a que el usuario se forme una idea más clara de lo que realmente necesita.



¿Secuencial o iterativo?


El modelo de desarrollo más adecuado para un proyecto dependerá del tipo de sistema que se ha de construir: 


- En general, se elegirá un modelo secuencial cuando los requerimientos se conocen bastante bien y son estables, cuando el diseño será similar al de otros sistemas con los que tenemos experiencia, cuando los integrantes del equipo de desarrollo ya se conocen y están familiarizado con el entorno de desarrollo, o cuando el coste de tener que cambiar algo en las etapas finales del proyecto resultaría prohibitivo.



- En la práctica, no obstante, los modelos iterativos se adaptan mejor a la realidad del desarrollo de software (especialmente en sistemas medianos y grandes). Nos decantaremos por un modelo iterativo cuando los requerimientos no se conocen con exactitud o se prevé que puedan cambiar en el futuro, cuando el diseño del sistema es complejo o no tiene precedentes para nosotros, cuando el proyecto en sí es arriesgado económicamente y cuando podamos controlar el coste de futuros cambios en el sistema (algo que siempre tendremos que hacer si tenemos en cuenta lo que aprendimos al estudiar la etapa de mantenimiento).



Al seguir un modelo iterativo, puede que le dediquemos muy poco tiempo a las etapas iniciales del ciclo de vida de un sistema, lo que puede causar una tasa de cambios tan alta que impida que el proyecto progrese. Del mismo modo, si les dedicamos demasiado tiempo, hasta el punto de seguir a pies juntillas los requerimientos iniciales del sistema, puede que estemos negando la realidad con la que nos encontramos y, de nuevo, impidamos que el proyecto progrese adecuadamente.



Para planificar un proyecto que siga un modelo iterativo, primero se prepara una descomposición a grandes rasgos del proyecto en una serie de iteraciones, cada una de las cuales se considerará como un proyecto independiente. En vez de realizar una planificación detallada de todo el proyecto, sólo se detallará el plan correspondiente a la primera iteración. Sí se establecerán las fechas de inicio y finalización de las distintas iteraciones y se definirán los objetivos principales de cada una de ellas. Llegado el caso, estos objetivos se pueden redefinir conforme avance el proyecto.



A lo largo de los años se han propuesto multitud de modelos iterativos de desarrollo de software. A continuación se describen algunos de los más conocidos: 

- El modelo en espiral de Barry Boehm hace especial hincapié en la prevención de riesgos. Este modelo define cuatro actividades principales: planificación (determinar los objetivos, alternativas y restricciones del proyecto), análisis de riesgos (análisis de alternativas e identificación/resolución de riesgos), ingeniería (desarrollo del producto) y evaluación (revisión por parte del cliente y valoración de los resultados obtenidos de cara a la siguiente iteración). En cada iteración alrededor de la espiral se construyen versiones cada vez más completas del software.

- Los modelos evolutivos (como el modelo Evo de Tom Gilb o los modelos ágiles populares hoy en día, entre los que se encuentra la auto-denominada programación extrema) se caracterizan por realizar entregas por etapas del sistema. Usualmente, el proyecto se descompone en iteraciones de longitud fija (de 1 a 6 semanas) y cada iteración ha de proporcionar algún aspecto completo de la funcionalidad del sistema. Cada ciclo se concentra en las funciones de mayor valor añadido. De esta forma, si se cancelase el proyecto en cualquier momento, el usuario siempre tendrá lo máximo que se puede conseguir con los recursos invertidos hasta el momento. Igualmente, se puede prorrogar el proyecto si se considera interesante seguir añadiéndole funcionalidad al proyecto. 

- También existen otros modelos, conocidos por el nombre de modelos de estabilización y sincronización, en los que se sigue la misma estrategia que en los modelos iterativos pero sin llegar a realiza una entrega por etapas del sistema. Éste es el caso, por ejemplo, del modelo de desarrollo de software utilizado internamente en empresas como Microsoft. 

No hay comentarios:

Publicar un comentario