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.
Fig. - Diagrama genérico del desarrollo evolutivo incremental.
En el diagrama se 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.
Fig. - Modelo iterativo incremenal 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 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.
Como se muestra en la figura, 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 requerimientos (como si ocurre en el modelo de
construcción de prototipos).
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
evolucionar9 . 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.
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.
El modelo incremental no es recomendable para casos de sistemas de
tiempo real, de alto nivel de seguridad, de procesamiento distribuido, o de
alto índice de riesgos.
Modelo espiral: El modelo espiral fue propuesto inicialmente por Barry
Boehm. Es un modelo evolutivo que conjuga la naturaleza iterativa del modelo
MCP con los aspectos controlados y sistemáticos del Modelo Cascada. Proporciona
potencial para desarrollo rápido de versiones incrementales. En el modelo
Espiral el software se construye en una serie de versiones incrementales. En
las primeras iteraciones la versión incremental podría ser un modelo en papel o
bien un prototipo. En las últimas iteraciones se producen versiones cada vez
más completas del sistema diseñado.
El modelo se divide en un número de Actividades de marco de trabajo,
llamadas «regiones de tareas». En general existen entre tres y seis regiones de
tareas (hay variantes del modelo). En la figura se muestra el esquema de un
Modelo Espiral con 6 regiones. En este caso se explica una variante del modelo
original de Boehm, expuesto en su tratado de 1988; en 1998 expuso un tratado
más reciente.
Características:
Características:
- Tiene y esta conformado en un enfoque cíclico para el crecimiento del grado de definición e implementación de un sistema, mientras que disminuye su grado de riesgo.
- Utiliza un conjunto de puntos de fijación para asegurar el compromiso que asume el usuario con las soluciones de sistema que sean factibles y totalmente satisfactorias.
Fig. - Modelo espiral para el ciclo de vida del software.
Las regiones definidas en el modelo de la figura son:
Región 1 - Tareas requeridas para establecer la comunicación entre el cliente y el desarrollador.
Región 2 - Tareas inherentes a la definición de los recursos, tiempo y otra información relacionada con el proyecto.
Región 3 - Tareas necesarias para evaluar los riesgos técnicos y de gestión del proyecto.
Región 4 - Tareas para construir una o más representaciones de la aplicación software.
Región 5 - Tareas para construir la aplicación, instalarla, probarla y proporcionar soporte al usuario o cliente (Ej. documentación y práctica).
Región 6 - Tareas para obtener la reacción del cliente, según la evaluación de lo creado e instalado en los ciclos anteriores.
Las actividades enunciadas para el marco de trabajo son generales y se
aplican a cualquier proyecto, grande, mediano o pequeño, complejo o no. Las
regiones que definen esas actividades comprenden un «conjunto de tareas» del
trabajo: ese conjunto sí se debe adaptar a las características del proyecto en
particular a emprender. Nótese que lo listado en los ítems de 1 a 6 son
conjuntos de tareas, algunas de las ellas normalmente dependen del proyecto o
desarrollo en si.
Proyectos pequeños requieren baja cantidad de tareas y también de
formalidad. En proyectos mayores o críticos cada región de tareas contiene
labores de más alto nivel de formalidad. En cualquier caso se aplican
actividades de protección (por ejemplo, gestión de configuración del software,
garantía de calidad, etc.).
Al inicio del ciclo, o proceso evolutivo, el equipo de ingeniería gira
alrededor del espiral (metafóricamente hablando) comenzando por el centro
(marcado con ๑ en la figura 6) y en el sentido indicado; el
primer circuito de la espiral puede producir el desarrollo de una
especificación del producto; los pasos siguientes podrían generar un prototipo
y progresivamente versiones más sofisticadas del software.
Cada paso por la región de planificación provoca ajustes en el plan del
proyecto; el coste y planificación se realimentan en función de la evaluación
del cliente. El gestor de proyectos debe ajustar el número de iteraciones
requeridas para completar el desarrollo.
El modelo espiral puede ir adaptándose y aplicarse a lo largo de todo
el Ciclo de vida del software (en el modelo clásico, o cascada, el proceso
termina a la entrega del software).
Una visión alternativa del modelo puede observarse examinando el «eje de punto de entrada de proyectos». Cada uno de los circulitos (๏) fijados a lo largo del eje representan puntos de arranque de los distintos proyectos (relacionados); a saber:
- Un proyecto de «desarrollo de conceptos» comienza al inicio de la espiral, hace múltiples iteraciones hasta que se completa, es la zona marcada con verde.
- Si lo anterior se va a desarrollar como producto real, se inicia otro proyecto: «Desarrollo de nuevo Producto». Que evolucionará con iteraciones hasta culminar; es la zona marcada en color azul.
- Eventual y análogamente se generarán proyectos de «mejoras de productos» y de «mantenimiento de productos», con las iteraciones necesarias en cada área (zonas roja y gris, respectivamente).
Cuando la espiral se caracteriza de esta forma, está operativa hasta
que el software se retira, eventualmente puede estar inactiva (el proceso),
pero cuando se produce un cambio el proceso arranca nuevamente en el punto de
entrada apropiado (por ejemplo, en «mejora del producto»).
El modelo espiral da un enfoque realista, que evoluciona igual que el
software; se adapta muy bien para desarrollos a gran escala.
El Espiral utiliza el MCP para reducir riesgos y permite aplicarlo en
cualquier etapa de la evolución. Mantiene el enfoque clásico (cascada) pero
incorpora un marco de trabajo iterativo que refleja mejor la realidad.
Este modelo requiere considerar riesgos técnicos en todas las etapas
del proyecto; aplicado adecuadamente debe reducirlos antes de que sean un
verdadero problema.
El Modelo evolutivo como el Espiral es particularmente apto para el
desarrollo de Sistemas Operativos (complejos); también en sistemas de altos
riesgos o críticos (Ej. navegadores y controladores aeronáuticos) y en todos
aquellos en que sea necesaria una fuerte gestión del proyecto y sus riesgos,
técnicos o de gestión.
Ventajas:
Ventajas:
- El análisis del riesgo se hace de forma explícita y clara. Une los mejores elementos de los restantes modelos.
- Reduce riesgos del proyecto
- Incorpora objetivos de calidad
- Integra el desarrollo con el mantenimiento, etc.
- Además es posible tener en cuenta mejoras y nuevos requerimientos sin romper con la metodología, ya que este ciclo de vida no es rígido ni estático.
Desventajas importantes:
- Requiere mucha experiencia y habilidad para la evaluación de los riesgos, lo cual es requisito para el éxito del proyecto.
- Es difícil convencer a los grandes clientes que se podrá controlar este enfoque evolutivo.
Este modelo no se ha usado tanto, como el Cascada (Incremental) o MCP,
por lo que no se tiene bien medida su eficacia, es un paradigma relativamente
nuevo y difícil de implementar y controlar.
Modelo espiral Win & Win
Una variante interesante del Modelo Espiral previamente visto en la
Figura es el «Modelo espiral Win-Win» (Barry Boehm). El Modelo Espiral previo
(clásico) sugiere la comunicación con el cliente para fijar los requisitos, en
que simplemente se pregunta al cliente qué necesita y él proporciona la
información para continuar; pero esto es en un contexto ideal que rara vez
ocurre. Normalmente cliente y desarrollador entran en una negociación, se
negocia coste frente a funcionalidad, rendimiento, calidad, etc.
«Es así que la obtención de requisitos requiere una negociación, que
tiene éxito cuando ambas partes ganan».
Las mejores negociaciones se fuerzan en obtener «Victoria &
Victoria» (Win & Win), es decir que el cliente gane obteniendo el producto
que lo satisfaga, y el desarrollador también gane consiguiendo presupuesto y
fecha de entrega realista. Evidentemente, este modelo requiere fuertes
habilidades de negociación.
El modelo Win-Win define un conjunto de actividades de negociación al
principio de cada paso alrededor de la espiral; se definen las siguientes
actividades:
- Identificación del sistema o subsistemas clave de los directivos(*) (saber qué quieren).
- Determinación de «condiciones de victoria» de los directivos (saber qué necesitan y los satisface)
- Negociación de las condiciones «victoria» de los directivos para obtener condiciones «Victoria & Victoria» (negociar para que ambos ganen).
(*) Directivo: Cliente escogido con interés directo en el producto, que
puede ser premiado por la organización si tiene éxito o criticado si no.
El modelo Win & Win hace énfasis en la negociación inicial, también
introduce 3 hitos en el proceso llamados «puntos de fijación», que ayudan a
establecer la completitud de un ciclo de la espiral, y proporcionan hitos de
decisión antes de continuar el proyecto de desarrollo del software.
No hay comentarios.:
Publicar un comentario