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