Documente Academic
Documente Profesional
Documente Cultură
Cascada pura
El abuelo de todos los ciclos de vida es el modelo de cascada. A pesar de que
tiene muchos problemas, sirve como base para otros modelos más efectivos, por eso se
lo describe primero. En el modelo de cascada, un proyecto progresa a través de una
secuencia de pasos ordenados desde la idea inicial hacia la prueba de sistema. El
proyecto tiene una revisión al final de cada fase para determinar está listo para avanzar a
la siguiente, por ejemplo, del análisis de requerimientos a diseño arquitectónico. Si la
revisión determina que el proyecto no está listo para avanzar a la siguiente fase, se
queda en la actual hasta que lo este.
El modelo de cascada esta dirigido por documentos, lo que significa que los
productos que son transportados de una fase a otra son principalmente documentos. En
el modelo de cascada pura, las fases son discontinuas, no se solapan. La Figura 1
muestra el progreso en un modelo de cascada pura.
Este modelo funciona bien en ciclos donde ya tenes una definición estable y
cuando estas trabajando con metodologías bien entendidas. En esos casos el modelo te
ayuda detectar errores en las estapas más tempranas y baratas del proyecto. Provee la
estabilidad a los requerimientos que los desarrolladores siempre ansian. Si estas
construyendo un mantenimiento bien definido de un produicto existente o migrando un
producto existente a otra plataforma, el modelo cascada puede ser la eleccion correcta
para un desarrollo veloz.
Este modelo ayuda a minimizar el esfuerzo de planificación porque puedes
hacerla toda al principio. No provee resultados tangibles en forma de software hasta el
final, pero, para alguien que esta familiarizado con el, la documentación que genera
provee indicadores significativos del progreso.
Figura 1. El modelo de cascada pura. El modelo de cascada pura el mejor conocido y provee
buena velocidad de desarrollo en algunas circunstancias. Otros modelos, sin embargo,
usualmente proveen más velocidad
El modelo de cascada funciona bien en los proyectos que son bien entendidos
pero complejos, porque podes beneficiarte de abordar la complejidad de una manera
ordenada. Funciona bien cuando la calidad domina al costo y el tiempo. La eliminación
de cambios de idea a la mitad elimina una gran fuente de errores potenciales.
El modelo de cascada funciona especialmente bien si tenemos un staff débil o
sin experiencia, porque provee al proyecto con una estructura que ayuda a minimizar el
esfuerzo desperdiciado.
Las desventajas de este modelo, provienen de la dificultad de podes especificar
completamente los requerimientos al principio del proyecto, antes de que el diseño se
haya hecho y el código se haya escrito.
Los desarrolladores se quejan que los usuarios no saben lo que quieren, pero
supongamos que los roles fueran invertidos. Imagínate tratando de especificarle tu auto
a un ingeniero automotriz. Le decís que querés un motor, chasis, ventanas, volante,
acelerador, freno, freno de mano, asientos, y así. Pero ¿podes acordarte de todo lo que
un ingeniero automotriz necesita para construir tu auto?
Supongamos que te olvidas de especificar que necesitas luces de reversa, que se
encienden cuando el auto va hacia atrás. El ingeniero se va por seis meses y vuelve con
auto sin luces de reversa. Le decís, “Me olvide de decirte que el auto tiene que tener
luces de reversa, que se prendan automáticamente cuando pongo la marcha atrás”.
El ingeniero se vuelve loco. “¿Sabes lo que va a costar conectar un cable de la
caja de cambios a la parte de atrás? ¡Tenemos que rediseñar el panel de cola, poner un
cable para la luz de stop y otro sensor para la caja, esto va a tomar semanas, o meses!
¿Por qué no me lo dijiste al principio?
Pensás, “parecía un cambio simple”…
Es un error comprensible ¿no? Un auto es algo complicado para que alguien
novato lo especifique. Muchos softwares también lo son, y la gente que tiene la tarea de
especificarlos no son expertos en computadora por lo general. Pueden olvidarse cosas
que parecían simples hasta que ven el producto funcionando. Si estás usando un modelo
de cascada, olvidarse algo puede ser un error muy caro. No te darás cuenta hasta que
llegues a la prueba de sistema y veas que un requerimiento estaba mal o faltaba.
Entonces, el primer gran problema del modelo de cascada es que no es flexible.
Tenés que especificar completamente los requerimientos al principio del proyecto. Lo
cual puede ser meses o años antes de que tengas un software funcionando. Esto burla las
necesidades de los negocios modernos, en los cuales el dinero va a los desarrolladores
que pueden implementar la mayor cantidad de funcionalidad al final del proyecto.
Como dice Roger Sherman de Microsoft, la meta por lo general no es lograr lo que
dijiste al principio del proyecto, sino lo máximo que sea posible con el tiempo y los
recursos disponibles.
Algunas personas criticaron el modelo de cascado por no permitir volver atrás
para corregir los errores. Esto no es tan así. Como sugiere la Figura 1, volver atrás está
permitido, pero es difícil. Una vista diferente del modelo que puede poner esto en una
mejor perspectiva es el ciclo de vida del salmón (Figura 2).
Se te permite nadar hacia arriba, ¡pero el esfuerzo te puede matar! Al final del
diseño arquitectónico, participaste en tantos eventos que declararon que estabas al final
de esa fase. Realizaste una revisión de diseño, y firmaste la copia oficial del documento
de arquitectura. Si descubrís una falla durante la codificación y depuración, es difícil
nada hacia arriba para mejorar la arquitectura.
Figura 2. Otra representación del modelo de cascada., ciclo de vida del salmón, No es
imposible volver atrás pero, es difícil.
Code-and-Fix
El modelo code-and-fix, es un modelo que rara vez es útil, pero dista mucho de
ser común, entonces me gustaría discutirlo. Si no has elegido explícitamente otro ciclo
de vida, probablemente estés usando code-and-fix. Si no has hecho mucha planificación,
sin dudas estas usando code-and-fix. Combinado con un cronograma chico, code-and-
fix se convierte en la aproximación code-like-hell descrita antes.
Cuando usas code-and-fix empiezas con una idea general de lo que vas a hacer.
Tal vez tengas una especificación formal, o tal vez no. Después usas cualquier
combinación de diseño informal, codificación, depuración y metodologías de prueba
hasta que tu producto este listo para se lanzado. La Figura 3 muestra este proceso.
Figura 3. El modelo code-and-fix. Code-and-fix es un modelo
informal que es de uso común porque es simple, no porque
funcione bien.
Espiral
Al otro extremo de la sofisticación esta el modelo en espiral. Este es un modelo
orientado a riesgos que divide el proyecto en miniproyectos. Cada miniproyecto mitiga
uno o más de los riesgos más importantes hasta que todos hayan sido mitigados. El
concepto de “riesgo” es definido de manera muy amplia en este contexto, y puede
referirse a requerimientos poco entendidos, arquitectura poco entendida, problemas de
performance potenciales, problemas con la tecnología de base, y más. Después que los
riesgos más importantes hayan sido mitigados, el espiral termina como un ciclo de vida
en cascada. La Figura 4 ilustra el modelo en espiral.
La Figura 4 es un diagrama complicado, y vale la pena estudiarlo. La idea básica
detrás del mismo es que empezas en una escala menor en el medio de la espina,
exploras los riesgos, haces un plan para manejarlos y luego te preparas para la próxima
iteración. Sacas una capa del rollo, te aseguras que es lo que querías y empezas a
trabajar en capa siguiente.
Cada iteración involucra los seis pasos que están en negrita afuera del límite de
la espiral:
1. Determinar objetivos, alternativas y restricciones
2. Identificar y resolver riesgos
3. Evaluar alternativas
4. Desarrollar los entregables para cada iteración, y verificar que estén bien
5. Planificar la próxima iteración
6. Prepararse para la próxima iteración (si decides que vas a tener una)
En el modelo de espiral, las iteraciones del principio son las más baratas. Gastas
menos desarrollando el concepto que desarrollando los requerimientos, y menos
desarrollando los requerimientos que desarrollando el diseño, implementando el
producto y probándolo.
No tomes el diagrama literalmente tanto como fue pensado. No es importante
que tengas exactamente cuatro vueltas alrededor del espiral, y tampoco es importante
que lleves a cabo los seis pasos exactamente como están indicados, aunque ese es un
buen orden. Puedes modificar cada iteración para que se ajusten a las necesidades de tu
proyecto.
Figura 4. El modelo en espiral. En el modelo de espiral, empezas con poco y vas expandiendo
el alcance del proyecto. Solo expandís el alcance después de reducir los riesgos a un nivel
aceptable.
Podes combinar el modelo con otros ciclos de vida en muchas formas. Podes
empezar tu proyecto con una serie de iteraciones para reducir el riesgo; luego que los
hayas reducido a un nivel aceptable, podes finalizar el desarrollo con un cascada o otros
no basados en riesgos. Podes incorporar otros ciclos de vida como iteraciones dentro del
espiral. Por ejemplo, si uno de los riesgos es que no estés seguro que los requerimientos
de performance sean factibles, podes incluir una iteración de prototipazo para investigar
si es posible cumplir los objetivos.
Una de las desventajas más importantes del modelo en espiral es que costo se
incrementa como el riesgo se reduce. Cuanto mas dinero y tiempo gastes, estarás
tomando menos riesgos, que exactamente lo que querés es un proyecto de desarrollo
veloz.
El modelo en espiral provee como mínimo tanto control de administración como
el cascada. Tenés hitos al final de cada iteración. Como el modelo esta orientando a
riegos, te provee indicaciones tempranas de cualquier riesgo insuperable. Si el proyecto
no se puede hacer por alguna razón, te darás cuanta rápido, y no te costará mucho.
La única desventaja de este modelo es que es complicado. Requiere conciencia,
tención y conocimiento para administrarlo. Puede ser difícil definir el objetivo, o los
hitos que te dicen si podes agregar otra capa. En algunos casos el desarrollo es tan
derecho y los riesgos del proyecto son tan pocos que no es necesaria la flexibilidad y la
administración de riesgos que provee el espiral.
Cascadas modificadas
Las actividades identificadas en el modelo de cascada pura son intrínsecas al
desarrollo de software. No se pueden evitar. Tiene que llegar a una idea de alguna
manera, y tenés que obtener los requerimientos de alguna manera. No tenés que usar el
modelo de cascada para obtener los requerimientos, pero tenés que usar algo. De la
misma forma, no se puede evitar la arquitectura, el diseño o la codificación.
La mayoría de las debilidades de la cascada pura no son culpa de estas
actividades sino de tratar esas actividades como actividades separadas y secuenciales.
Entonces se puede corregir esas debilidades con algunas relativamente pequeñas
modificaciones. Podes modificarlo de manera que las fases se solapen, podes reducir el
énfasis en la documentación o facilitar la vuelta atrás.