4.1.3. Modelo iterativo incremental
En términos generales, se
puede distinguir, en la Figura 4, los pasos generales que sigue el proceso de
desarrollo de un producto software. En el modelo de ciclo de vida seleccionado,
se identifican claramente dichos pasos. La descripción del sistema es esencial
para especificar y confeccionar los distintos incrementos hasta llegar al
producto global y final. Las actividades concurrentes (especificación,
desarrollo y validación) sintetizan el desarrollo pormenorizado de los
incrementos, que se hará posteriormente.
http://commons.wikimedia.org/wiki/File%3AModelo_Gral_Evolutivo_Incremental.jpg
Fig. 4 - Diagrama genérico del desarrollo
evolutivo incremental.
El diagrama de la Figura 4
muestra en forma muy esquemática, el funcionamiento de un ciclo iterativo
incremental, el cual permite la entrega de versiones parciales a medida que se
va construyendo el producto final.[6] Es decir, a medida
que cada incremento definido llega a su etapa de operación y mantenimiento.
Cada versión emitida incorpora a los anteriores incrementos las funcionalidades
y requisitos que fueron analizados como necesarios.
El incremental es un modelo de
tipo evolutivo que está basado en varios ciclos Cascada Realimentados aplicados
repetidamente, con una filosofía iterativa.[10] En la Figura 5 se muestra un refino del diagrama previo, bajo un
esquema temporal, para obtener finalmente el esquema del modelo de ciclo de
vida Iterativo Incremental, con sus actividades genéricas asociadas. Aquí se
observa claramente cada ciclo cascada que es aplicado para la obtención de un
incremento; estos últimos se van integrando para obtener el producto final
completo. Cada incremento es un ciclo Cascada Realimentado, aunque, por
simplicidad, en la Figura 5 se muestra como secuencial puro.
http://commons.wikimedia.org/wiki/File%3AModelo_Iterativo_Incremental.jpg
Fig. 5 - Modelo iterativo incremental para el
ciclo de vida del software,.
Se observa que existen
actividades de desarrollo (para cada incremento) que son realizadas en paralelo
o concurrentemente, así por ejemplo, en la Figura, mientras se realiza el
diseño detalle del primer incremento ya se está realizando en análisis del
segundo. La Figura 5 es sólo esquemática, un incremento no necesariamente se
iniciará durante la fase de diseño del anterior, puede ser posterior (incluso
antes), en cualquier tiempo de la etapa previa. Cada incremento concluye con la
actividad de «operación y mantenimiento» (indicada como «Operación» en la
figura), que es donde se produce la entrega del producto parcial al cliente. El
momento de inicio de cada incremento es dependiente de varios factores: tipo de
sistema; independencia o dependencia entre incrementos (dos de ellos totalmente
independientes pueden ser fácilmente iniciados al mismo tiempo si se dispone de
personal suficiente); capacidad y cantidad de profesionales involucrados en el
desarrollo; etc.
Bajo este modelo se entrega
software «por partes funcionales más pequeñas», pero reutilizables, llamadas
incrementos. En general cada incremento se construye sobre aquel que ya fue
entregado.[6]
Como se muestra en la Figura
5, se aplican secuencias Cascada en forma escalonada, mientras progresa el
tiempo calendario. Cada secuencia lineal o Cascada produce un incremento y a
menudo el primer incremento es un sistema básico, con muchas funciones
suplementarias (conocidas o no) sin entregar.
El cliente utiliza inicialmente
ese sistema básico, intertanto, el resultado de su uso y evaluación puede
aportar al plan para el desarrollo del/los siguientes incrementos (o
versiones). Además también aportan a ese plan otros factores, como lo es la
priorización (mayor o menor urgencia en la necesidad de cada incremento en
particular) y la dependencia entre incrementos (o independencia).
Luego de cada integración se
entrega un producto con mayor funcionalidad que el previo. El proceso se repite
hasta alcanzar el software final completo.
Siendo iterativo, con el
modelo incremental se entrega un producto parcial pero completamente
operacional en cada incremento, y no una parte que sea usada para reajustar
los requisitos (como si ocurre en el modelo de construcción de
prototipos).[10]
El enfoque incremental resulta
muy útil cuando se dispone de baja dotación de personal para el desarrollo;
también si no hay disponible fecha límite del proyecto por lo que se entregan
versiones incompletas pero que proporcionan al usuario funcionalidad básica (y
cada vez mayor). También es un modelo útil a los fines de versiones de evaluación.
Nota: Puede ser considerado y
útil, en cualquier momento o incremento incorporar temporalmente el paradigma MCP como
complemento, teniendo así una mixtura de modelos que mejoran el esquema y
desarrollo general.
Ejemplo:
Un procesador de texto
que sea desarrollado bajo el paradigma Incremental podría aportar, en
principio, funciones básicas de edición de archivos y producción de documentos
(algo como un editor simple). En
un segundo incremento se le podría agregar edición más sofisticada, y de
generación y mezcla de documentos.
En un tercer incremento podría considerarse el agregado de funciones de corrección ortográfica,
esquemas de paginado y plantillas; en un cuarto
capacidades de dibujo propias y ecuaciones matemáticas. Así sucesivamente hasta
llegar al procesador final requerido. Así, el producto va creciendo,
acercándose a su meta final, pero desde la entrega del primer incremento ya es
útil y funcional para el cliente, el cual observa una respuesta rápida en
cuanto a entrega temprana; sin notar que la fecha límite del proyecto puede no
estar acotada ni tan definida, lo que da margen de operación y alivia presiones
al equipo de desarrollo.
Como se dijo, el Iterativo
Incremental es un modelo del tipo evolutivo, es decir donde se permiten y
esperan probables cambios en los requisitos en tiempo de desarrollo; se admite
cierto margen para que el software pueda evolucionar.[9] Aplicable cuando
los requisitos son medianamente bien conocidos pero no son completamente
estáticos y definidos, cuestión esa que si es indispensable para poder utilizar
un modelo Cascada.
El modelo es aconsejable para
el desarrollo de software en el cual se observe, en su etapa inicial de
análisis, que posee áreas bastante bien definidas a cubrir, con suficiente
independencia como para ser desarrolladas en etapas sucesivas. Tales áreas a
cubrir suelen tener distintos grados de apremio por lo cual las mismas se deben
priorizar en un análisis previo, es decir, definir cual será la primera, la
segunda, y así sucesivamente; esto se conoce como «definición de los
incrementos» con base en la priorización. Pueden no existir prioridades
funcionales por parte del cliente, pero el desarrollador debe fijarlas de todos
modos y con algún criterio, ya que basándose en ellas se desarrollarán y
entregarán los distintos incrementos.
El hecho de que existan
incrementos funcionales del software lleva inmediatamente a pensar en un
esquema de desarrollo modular, por
tanto este modelo facilita tal paradigma de diseño.
En resumen, un modelo
incremental lleva a pensar en un desarrollo modular, con entregas parciales del
producto software denominados «incrementos» del sistema, que son escogidos
según prioridades predefinidas de algún modo. El modelo permite una
implementación con refinamientos sucesivos (ampliación o mejora). Con cada
incremento se agrega nueva funcionalidad o se cubren nuevos requisitos o bien
se mejora la versión previamente implementada del producto software.
Este modelo brinda cierta
flexibilidad para que durante el desarrollo se incluyan cambios en los requisitos
por parte del usuario, un cambio de requisitos propuesto y aprobado puede
analizarse e implementarse como un nuevo incremento o, eventualmente, podrá
constituir una mejora/adecuación de uno ya planeado. Aunque si se produce un
cambio de requisitos por parte del cliente que afecte incrementos previos ya
terminados (detección/incorporación tardía) se debe evaluar la factibilidad
y realizar un acuerdo con el cliente, ya que puede impactar fuertemente en los
costos.
La selección de este modelo
permite realizar entregas funcionales tempranas al cliente (lo cual es
beneficioso tanto para él como para el grupo de desarrollo). Se priorizan las
entregas de aquellos módulos o incrementos en que surja la necesidad operativa
de hacerlo, por ejemplo para cargas previas de información, indispensable para
los incrementos siguientes.[10]
El modelo iterativo
incremental no obliga a especificar con precisión y detalle absolutamente todo
lo que el sistema debe hacer, (y cómo), antes de ser construido (como el caso
del cascada, con requisitos congelados). Sólo se hace en el incremento en
desarrollo. Esto torna más manejable el proceso y reduce el impacto en los
costos. Esto es así, porque en caso de alterar o rehacer los requisitos, solo
afecta una parte del sistema. Aunque, lógicamente, esta situación se agrava si
se presenta en estado avanzado, es decir en los últimos incrementos. En
definitiva, el modelo facilita la incorporación de nuevos requisitos durante el
desarrollo.
Con un paradigma incremental
se reduce el tiempo de desarrollo inicial, ya que se implementa funcionalidad
parcial. También provee un impacto ventajoso frente al cliente, que es la
entrega temprana de partes operativas del software.
El modelo proporciona todas
las ventajas del modelo en cascada realimentado, reduciendo sus desventajas
sólo al ámbito de cada incremento.