jueves, 20 de marzo de 2014

Análisis y Diseño en UML de un Sistema de Información


Análisis y Diseño en UML de un Sistema de Información

Sección de Diseño en UML


Presentación:
Los proyectos de desarrollo de software de calidad, se caracterizan por un ciclo de vida bien dirigido y un buen análisis de requerimientos. Para el análisis y diseño orientado a objetos se debe identificar, especificar y analizar (modelos de análisis) de los requisitos para así llevar a una correspondiente diagramación a través del Lenguaje Unificado del Modelado UML, para lo cual existen software que permiten realizar éstos diseños.

Diagrama de caso de uso general del sistema que se propone (ParkSoft).
Diagrama de clases identificado a partir del análisis con sus respectivos objetos y herencia
 
Tome alguno de los requerimientos realizados, identifique un objeto que pase por 3 tipos de estados (ejemplo si es una nomina el empleado podría tener los siguientes estados: 1.acitvo 2.En Licencia, 3. Vacaciones 4.Retirado) y realice el diagrama de estados correspondiente.


Escoja una actividad realizada en el sistema de información propuesto y realice un diagrama de actividades calles.
 
Realice el diagrama de secuencia donde muestre la colaboración entre los elementos de requerimientos funcionales del sistema propuesto.
 
Realice el diagrama de componentes del sistema de información de acuerdo a como quedará después de terminado.  
 

Tecnología Orientada a Objetos


Tecnología orientada a objetos

Conocida como TOO, esta se basa en el proceso de construcción y uso de conocimientos, objetos y clases, y su interacción. Apoyado en varias técnicas como: herencia, modularidad, polimorfismo, y encapsulamiento.

Es una forma de programar que se acerca más a como expresaríamos las cosas en la vida real a diferencia de otros tipos de programación.

La TOO pretende simular el mundo real a través del significado de objetos que contienen características, atributos y funciones. Por esto los lenguajes orientados a objetos se clasifican como Lenguajes de 5a generación.
Los 4 conceptos básicos del modelo orientado a objetos son:
- Objetos: Los objetos son conceptos o modelos del mundo real, los cuales tienen límites e identidad pueden ser reales o abstractos, simples o complejos y están compuestos de datos, características y operaciones, ejemplo:
Casa, carro, empleado, paciente, cliente, etc.
- Clases: Es la implementación en software de cualquier tipo de objeto. Describe la estructura de datos y los métodos operativos permisibles y aplicables a cada objeto, sus propiedades y comportamientos.
El método es parte de la clase, pero no parte del objeto; podría no ser parte de la clase pero ser parte de la clase de mayor nivel de jerarquía de clases.
Los métodos, son los comportamientos u operaciones, que se representan mediante pequeños programas (procedimientos o rutinas).
Por ejemplo: Empleado, puede datos como (Cédula, cargo, salario, teléfono, estado civil, etc.) Además de esto, la clase define un conjunto de operaciones que permiten el acceso y modificación de los datos de dicho objeto (modificar, eliminar, agregar, etc.).
- Herencia: es la reutilización o capacidad de reutilizar código sin alterarlo, programando cosas adicionales o diferentes, así permite la reutilización de parte de las subclases, ejemplo:
El objeto Vehículo, puede tener subtipos (Público y particular) y estos pueden tener subtipos así: Público (Taxi, colectivo, bus, etc.) y particular (automóvil, camioneta, campero, etc.)
- Envío de mensajes: Son las Solicitudes que realizamos para que un objeto haga algo y produzca una operación que origina un resultado, invocando o llamando una operación específica.
Este mensaje o solicitud debe contener el nombre del objeto, el nombre de una operación y también puede tener otros parámetros.
Ejemplo: Una calculadora, se puede enviar una solicitud al programa por medio de un comando (teclado) para que este mediante determinada acción realice una operación y muestre un resultado en pantalla.
Herramientas
Independientemente de la metodología de desarrollo de software que se use, es necesaria una herramienta para crear los diagramas UML, y para esto hay varias que son de uso libre (gratuitas). Tal como los planos de los arquitectos,  cuando se desarrolla software se requieren ciertos modelos para entender las funcionalidades del sistema a desarrollar y documentar las características, se usa el software de modelado UML.
Así nacieron las herramientas CASE (Computer Aided Software Engineering) o sea Ingeniería de Software Asistida por Computador. La mayoría de herramientas de modelado UML son costosas, pero hay dos alternativas gratuitas open source (código abierto), entre muchas otras, muy buenas que son:
•StarUML
•ArgoUML
Estas se pueden descargar de:
En mi caso descargué el staruml  para poder implementar los diagramas solicitados está en ingles pero es muy completo.
Diagrama de clases donde identifique 3 objetos de la clase DISPOSITIVOS MOVILES, donde identifique: Atributos y Métodos de cada objeto. Recuerde que estos objetos tienen herencia de la Superclase.
Diagrama de Caso de Uso del proceso para inscribir materias en una universidad.
 

 

Análisis y Diseño en UML de un Sistema de Información


Análisis y Diseño en UML de un Sistema de Información

Sección de Análisis y Requerimientos

Con base en que todas las metodologías de desarrollo de software consideran que el desarrollo de software se divide en cuatro 4 fases que son:
            - Análisis
            - Diseño
            - Implementación
            - Mantenimiento
1. Identificar una necesidad del mundo real en donde se pueda aplicar lo visto en este módulo para realizar el modelo correspondiente a la creación de un sistema de información.

-- Para mi caso, voy a tomar el caso de un parqueadero, en donde se requiere que se sistematice el ejercicio diario, con todas sus tareas a saber: control y registro del ingreso de vehículos (placa, marca color, hora de entrada y de salida), control de tarifas y de ingresos totales diarios, control de usuario-cajero (turno de mañana, tarde y fin de semana), número de cupos disponibles, cupos con mensualidad (tarifa y base de datos de los usuarios de mensualidad), un control de acceso para el administrador quien realiza el cierre, etc.

La idea de implementar el Sistema de Gestión de Parqueaderos, nace de la necesidad de tener un mayor control, manejo, tanto de la parte económica y lucrativa, llevar estadísticas de la parte de uso y clientes, tener una base de datos de los clientes frecuentes, un histórico de archivo que permita comparaciones y conclusiones del funcionamiento del establecimiento y herramientas que exploten al máximo de los recursos y las instalaciones para sacar el mejor provecho de ellos, tener ideas que permitan mejorar los servicios prestados y proponer soluciones a los que no están implementados, entonces en la fase de análisis debemos:

2. Realizar un estudio preliminar, que contenga lo siguiente:

2.1. Definición del problema o necesidad:
 El control diario de clientes se realiza de manera manual llenando un recibo, donde se anotan los datos del propietario, datos del vehículo, horas de salida y entrada, el valor a cancelar. Esto genera demoras al momento de realizar el registro, se generan pérdidas de información y al generar el valor del servicio puede resultar erróneo.

Entonces, se tiene la necesidad de crear una aplicación que permita realizar estas labores más ágilmente, donde los datos se ingresen rápidamente, se guarde la información con más confiabilidad evitando extraviar información y que generé un cálculo eficiente del costo del servicio.

En este caso se desea implementar un software que supla las expectativas de control y manejo para un parqueadero, facilitando las formas de prestar el servicio, la conservación de la infraestructura y los recursos de la organización, en donde se integren la visión, los procesos y la cultura organizacional basados en la sistematización, donde se espera:

-           Modernizar los procesos mediante la implementación de una herramienta informática.

-           Facilitar el acceso a la información y archivos, por ejemplo implementando bases de datos.

-           Facilitar la comunicación de su gestión y de su historia.

-           Adoptar medidas técnicas necesarias para la protección y preservación de los recursos y del servicio.

El proyecto de diseño del software a crear debe cubrir:

          Los sistemas anteriores (si hay alguno implementado), todas sus comunicaciones y redes.

          Ofrecer la viabilidad de conexión, interfaz y funcionamiento con futuros programas y/o aplicaciones.

          Cumplir con las normas que estén vigentes con respecto a las funciones, características o servicios que presta la organización.

          Cumplir con las políticas, principios y reglamentos de información, bases de datos, archivos y memoria, con respecto a las funciones.

          Compatibilidad con los sistemas existentes si los hay y un estudio de elementos necesarios para su implementación (computadores, impresora de recibos, una cámara, etc.).

 El diseño de entradas y salidas debe ofrecer tanto al usuario de ingreso y al funcionario control sobre los servicios requeridos para la gestión de los registros y de los archivos como son: espacios o puestos disponibles, tarifas, horarios de acceso y salida, cupos en determinados horarios, tiempos y estadísticas de uso.

 2.2. Realización del levantamiento de información con el fin de reconocer los elementos que hacen parte del programa tal como lo entiende el usuario/cliente

R/ Se realiza entrevista al gerente, dueños y empleados del parqueadero, quienes están interesados en adquirir una aplicación que mejore y agilicé sus trabajos y de allí se genera una serie datos relevantes para aplicar a dicha aplicación:

- Datos del vehículo: Placa, marca, color, tipo de vehículo (carros o motos), modelo, estado, fotos.
 - Datos del propietario: nombre, documento de identidad, cargo y dependencia para el caso de una empresa, apartamento o casa en el caso de un conjunto cerrado, foto, etc.
 - Datos de la planta física o infraestructura del parqueadero: cupos asignados y disponibles, cupos especiales para incapacitados, para visitantes si los hay, horarios de uso permitido, etc.
 - Datos tarifarios: valor del minuto, por horas, días, semanas, mensualidades, quienes se encuentran al día o en mora en los pagos, etc.

 - Permitirá tener datos estadísticos: Horarios de mayor flujo vehicular, horas donde hay más cupos disponibles, tipos de vehículos que mas frecuentan el parqueadero, record de entradas y salidas de determinados vehículos o cupos usados y disponibles, etc.

Se debe tener en cuenta luego de la implementación, una capacitación, acompañamiento y seguimiento en estos procesos, a personas que llevan años realizándolos de forma manual o rutinaria.

 2.3. Realizar un estudio de factibilidad técnica, económica y operativa
* Factibilidad técnica:
-           3 Equipos de computo (Gama media) marca DELL con procesador Intel Core i3 2.8 GHz,  4 GB  de memoria RAM (DDR 3), Disco duro de 500 GB, tarjeta de video, sonido y red integrados, Grabador de DVD, monitor LCD de 19”.
-           4 cables UTP Cat 5e, LAN Cable (CAT5E) para conexión entre pc´s –      switch, router – switch.
-           1 Switche D-link  8 Ptos 10/100
-           Red Lan Canaleta para cableado (interconexión de los PC).
-           Router Dlink Dir 610.
-           1 PC será usado como servidor web y de archivos.
-           2 PCs para el desarrollo del aplicativo web.
* Factibilidad económica:
Recursos
Proveedor
Valor Unidad
Total Costos
Hardware
3 PC DELL
DELL
$1.300.000
$3.900.000
1 Impresora De Tiquetes
 
$300.000
$300.000
1 Router D-link DIR 610
 
$80.000
$80.000
Software
PARKING Software Manager + MySQL Standard Edition
Oracle
$3.000.000
$3.000.000
Humano
 
1 Ingeniero de Sistemas.
 
$2.000.000
$2.000.000
2 Tecnólogos en Sistematización de Datos.
 
$700.000
$1.400.000
Otros
Teléfono e Internet
ETB
$90.000
$90.000
Capacitación Adicional
Nosotros
$100.000
$100.000
Insumos de oficina
Homecenter
$400.000
$400.000
TOTAL DE COSTOS
$ 11.270.000


Factibilidad operativa:

El sistema es factible operativamente por que surge de la necesidad de mejorar el sistema de registro y control manejado dentro de la empresa, por lo cual este nuevo sistema se enfoca en resolver el problema, generar más orden en los datos de clientes, datos de automóviles, y controlar la información de los mismos.

 2.4. De acuerdo a los Fundamentos de Análisis de requerimientos identifique del sistema propuesto: Requerimientos funcionales y no funcionales.

Requerimientos, son las condiciones que debe cumplir un sistema para satisfacer un contrato, norma, especificación, servicios que el sistema debe proporcionar a los usuarios y las restricciones y condiciones de uso.

Funcionales, son los que describen los procesos, cálculos y acciones que debe desarrollar el sistema, lo que el sistema debería hacer, su funcionalidad o servicios que se espera que el sistema arroje (entradas y salidas, excepciones, etc.)

No funcionales, son los que indican las restricciones de la implementación de los requisitos funcionales, propiedades del sistema o el tiempo de respuesta.

a- Requerimientos funcionales: que debe hacer el sistema y que no (servicios o funciones y restricciones)

           - El sistema debe generar un reporte de salida (PDF, XLS, etc.)
            - El sistema debe registrar la información de los usuarios (BD)
            - Permisos a diferentes tipos o roles de usuario (niveles de usuario y       contraseñas)
            - Plataforma (Java, C#)

 b- Requerimientos no funcionales (): no dejar enviar solicitudes sin datos, adjuntos de un tamaño máximo especifico, solo archivos de tipo PDF, XLS, etc.

            - Amigable de forma específica (definir de forma cuantitativa, no es lo mismo decir que se quiere un sistema rápido a decir tiempo de espera de 5 segundos)
            - Interfaz gráfica de fácil lectura, para garantizar la navegabilidad y velocidad de procesamiento e gráficos
            - Compatibilidad con todos los navegadores
            - Posibilidad de guardar registro fotográficos de los vehículos
            - Generar consultas de los datos de los personales de los clientes y         vehículos ingresados.

 2.2  El levantamiento de requerimientos o de información, es una fase “colaborativa” (Cliente - Proveedor) donde se evalúa: Reconocimiento del problema.

1- identificar los requerimientos: Desarrolladores y usuarios describen los requisitos que debe satisfacer el software que se desarrollara, se deben identificar de forma efectiva. Para esto se debe captar el problema a satisfacer para poder tener alternativas de solución (considerando los recursos de la organización) “NECESIDAD”.

Práctica levantamiento de información, se puede hacer en sesiones, preparación, comunicación y entrevistas (preguntas concretas: qué, cómo, cuando, porqué, donde, etc.)

Así entonces, para nuestro caso se toma como referencia la entrevista con el cliente. Y se desarrolla en tres etapas:

 - 1) Analizar los requerimientos: Se analizan los requisitos detectando y resolviendo errores y concretando las necesidades del software:

El Proceso de preparación para el levantamiento de los requerimientos y ver la dimensión del proyecto, se realiza haciendo una reunión con los involucrados para recolectar la información de las necesidades (Entrevista).

Formas de desarrollar el levantamiento de información:
 - Lluvia de ideas
 - Análisis de documentación
 - Grupos focales
 - Prototipos
 - Encuestas y/o cuestionarios (ojalá ente dos entrevistadores, preparación)

 Ejemplo: incluir a los Usuarios relevantes que están involucrados (desde mandos altos a bajos), Preguntas (abiertas y cerradas),  etc.

 - 2) Especificar los requerimientos: Especificar los requerimientos sin errores para su validación:
- registrar los datos del propietario o conductor del vehículo ingresado al parqueadero (nombre, identificación, vehículo).
- registrar los datos del vehículo ingresado al parqueadero (placa, marca, color, etc.).
- registrar la hora de entrada y salida respectiva de cada vehículo.
- generar el costo por el servicio de estacionamiento a cobrar por el personal del parqueadero.

Guardar todos los datos ingresados por el usuario en una base de datos.

 - 3) Validar los requerimientos: Conclusiones de las entrevistas y estudios de factibilidad.


- ¿Qué usuarios controlarán el sistema? R/
El administrador y 2 empleados encargados en la entrada y salida de los vehículos.

 - ¿Número de usuarios?
R/ 3 

 - ¿Tipos de Roles?
R/ Administrador, usuario (empleado)

A continuación presento los diagramas de los casos de uso correspondientes:
Usuario:

 Casos de uso: Administrador
 
 
DEFINICION DE ACTORES:

Actor
Descripción
Administrador
Puede cambiar su contraseña, usuario y localización, además de actualizar sus datos.
Ingresa información de los clientes.
Ingresa la información de los vehículos.
Consulta el estado de los usuarios.
Consulta el estado de los vehículos.
Inactiva la información de los clientes.
Inactiva la información de los vehículos.
Consulta los parqueaderos disponibles.
Supervisa el recaudo por alquiler.
Usuario
 
Puede cambiar su contraseña, usuario y localización, además de actualizar sus datos.
Ingresa información de los clientes.
Ingresa la información de los vehículos.
Consulta el estado de los usuarios.
Consulta el estado de los vehículos.
Consulta los parqueaderos disponibles.
Registra el recaudo por alquiler.
 


Metodología de desarrollo de software orientada a objetos

MODELOS DE PROCESOS O CICLO DE VIDA:

Para cada fase o etapa, existen sub-etapas o tareas. El modelo de proceso o modelo de ciclo de vida utilizado para el desarrollo define el orden para las tareas o actividades involucradas, la coordinación entre ellas, enlace y realimentación.
Los más conocidos son:
 - modelo en cascada o secuencial.
 - modelo espiral.
 - modelo iterativo incremental.
Hay a su vez algunas variantes o alternativas, según la aplicación y sus requisitos.


Modelo en cascada o secuencial:

También llamado modelo clásico, tradicional o lineal secuencial. El modelo en cascada puro poco se utiliza al pie de la letra, ya que esto implicaría un previo y absoluto conocimiento de los requisitos, la no volatilidad de los mismos (o rigidez) y etapas subsiguientes libres de errores; ello sólo podría ser aplicable a escasos y pequeños desarrollos de sistemas. Por ejemplo pasar del Diseño a la Codificación implicaría un diseño exacto y sin errores ni probable modificación o evolución y es irreal pensar en que no vaya a haber variantes ni errores, ya que intrínsecamente el software es de carácter evolutivo, cambiante y difícilmente libre de errores, tanto durante su desarrollo como durante su ciclo operativo.


Algún cambio durante la ejecución de una cualquiera de las etapas en este modelo secuencial implicaría reiniciar desde el principio todo el ciclo completo, lo cual redundaría en altos costos de tiempo y desarrollo.
Sin embargo, es uno de los más utilizados actualmente por ser eficaz y simple, se produce alguna realimentación entre etapas, que no es completamente predecible ni rígida; para dar oportunidad al desarrollo de software en los cuales hay cambios y evoluciones en su ciclo de vida.

Tiene seis etapas:
 - Análisis del Sistema
 - Análisis de Requisitos de Software
 - Diseño
 - Codificación
 - Prueba
 - Mantenimiento

Lo normal en el modelo cascada es aplicar el mismo con sus etapas realimentadas y actualizadas de forma periódica, permitiendo retroceder de una a la anterior o volver a otras anteriores, si es requerido, lo que lo convierte en un modelo en cascada realimentado, el cual resulta muy atractivo si el proyecto presenta alta rigidez (pocos o ningún cambio), los requisitos son muy claros y están correctamente especificados.

Desventajas del modelo en cascada:

Los cambios introducidos durante el desarrollo pueden confundir al equipo profesional en las etapas tempranas del proyecto. Si los cambios se producen en etapa madura pueden ser desastrosos en un proyecto grande.

El cliente debe tener paciencia ya que el software no estará disponible hasta muy avanzado el proyecto. Un error detectado por el cliente (en fase de operación) puede ser desastroso, implicando reinicio del proyecto, con altos costos.

 Modelo evolutivo:

La evolución del software, los requisitos del usuario y producto suelen cambiar conforme se desarrolla el mismo. Las fechas de mercado y la competencia hacen que no sea posible esperar a poner en el mercado un producto absolutamente completo, por lo que se debe introducir una versión funcional limitada de alguna forma, para satisfacer al cliente y aliviar las presiones competitivas; es por esto que los desarrolladores necesitan modelos que evolucionen progresivamente.
En el modelo Cascada y Cascada Realimentado no se tiene en cuenta la naturaleza evolutiva del software, se plantea como estático; Los evolutivos son modelos iterativos, que permiten desarrollar versiones cada vez más completas y complejas, hasta llegar al objetivo final, incluso evolucionar más allá durante la fase de operación. Los modelos Iterativo Incremental y Espiral son dos de los más conocidos y utilizados del tipo evolutivo.

 
 Modelo iterativo incremental:
Permite la entrega de versiones parciales a medida que se va construyendo el producto final, Cada versión emitida incorpora a los anteriores incrementos las funcionalidades y requisitos, para mejorarlas.


Se observa que existen actividades de desarrollo (para cada incremento) que son realizadas en paralelo o concurrentemente, por ejemplo, en la figura, mientras se realiza el diseño detalle del primer incremento ya se está realizando en análisis del segundo. Cada incremento concluye con la actividad de Operación y Mantenimiento. Por medio de este modelo se entrega software en partes funcionales más pequeñas, pero funcionales y reutilizables, con funciones suplementarias llamadas incrementos.
Estos incrementos, son escogidos en base a prioridades predefinidas de algún modo y permite una implementación con refinamientos sucesivos (ampliación y/o mejora); Con cada incremento se agrega una nueva funcionalidad, se cubren nuevos requisitos o se mejora la versión anterior del producto.

Además brinda flexibilidad durante el desarrollo, para incluir cambios en los requisitos por parte del usuario, dependiendo de sus necesidades. Luego de cada integración se entrega un producto con mayor funcionalidad que el anterior; Este proceso se repite hasta alcanzar el producto final.
El modelo es aconsejable para el desarrollo de software, donde se observa 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.

A veces pueden no existir prioridades funcionales por parte del cliente, pero el desarrollador debe establecerlas de todos modos, con algún criterio, ya que en base de estas 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.

El modelo proporciona todas las ventajas del modelo en cascada realimentado, pero reduciendo sus desventajas sólo a la fase de cada incremento.
El modelo incremental no es recomendable para casos de sistemas de tiempo real, de alto nivel de seguridad, de procesamiento distribuido, y/o de alto índice de riesgos.

 Modelo espiral
Propuesto por Barry Boehm, modelo evolutivo que conjuga la naturaleza iterativa del modelo MCP con 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 puede ser un modelo en papel o un prototipo. En las últimas iteraciones se producen versiones cada vez más completas del sistema diseñado, tiene 4 etapas;
 - Planificación.
 - Análisis de Riesgos.
 - Ingeniería (Construcción del prototipo).
 - Evaluación por el cliente.

El modelo se divide en un número de Actividades de marco de trabajo, llamadas "regiones de tareas".
Las regiones definidas en el modelo de la figura anterior son:

1 - Tareas requeridas para establecer la comunicación entre el cliente y el desarrollador.
2 - Tareas inherentes a la definición de los recursos, tiempo y otra información relacionada con el proyecto.

3 - Tareas necesarias para evaluar los riesgos técnicos y de gestión del proyecto.
4 - Tareas para construir una o más representaciones de la aplicación software.

5 - Tareas para construir la aplicación, instalarla, probarla y proporcionar soporte al usuario o cliente (Ej. documentación y práctica).
6 - Tareas para obtener la reacción del cliente, según la evaluación de lo creado e instalado en los ciclos anteriores.

Se pueden aplicar a cualquier proyecto, grande, mediano o pequeño, complejo o simple. 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.
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.).

El modelo espiral se puede adaptar, y aplicarse a lo largo del ciclo de vida del software (en el caso del modelo en cascada, el proceso termina a la entrega del software).
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).

El modelo espiral da un enfoque realista, que evoluciona igual que el software; se adapta muy bien para desarrollos a gran escala; Pero requiere considerar riesgos técnicos en todas las etapas del proyecto.

Es apto para el desarrollo de software más complejo como Sistemas Operativos o en sistemas de alto riesgos o críticos (navegadores y controladores aeronáuticos).

Desventajas:
 - Requiere mucha experiencia y habilidad para la evaluación de los riesgos, lo cual es requisito para el éxito del proyecto.

 - A veces es difícil convencer a los clientes de poder controlar este enfoque evolutivo.
 - No es tan usado como el de Cascada por lo que no se pude medir completamente su eficacia.

 
Modelo espiral Win & Win:
Una variante del Modelo Espiral, busca ganar obteniendo el producto que pueda satisfacer al cliente, busca obtener "Victoria & Victoria" (Win & Win), es decir que tanto el cliente como el desarrollador ganen consiguiendo presupuesto y fecha de entrega realista. Este modelo requiere buenas 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, que son:
 - 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.

 Modelo Concurrente:
Como el modelo espiral, el modelo concurrente provee una meta-descripción del proceso software. Mientras que la contribución primaria del modelo espiral es en realidad que esas actividades del software ocurran repetidamente, la contribución del modelo concurrente es su capacidad de describir las múltiples actividades del software ocurriendo simultáneamente.

Los requerimientos son usualmente "líneas de base", cuando una mayoría de los requerimientos comienzan a ser bien entendidos, en este tiempo se dedica un esfuerzo considerable al diseño. Sin embargo, una vez que comienza el diseño, cambios a los requerimientos son comunes y frecuentes.
Durante el diseño de arquitectura, es posible que algunos componentes comiencen a ser bien definidos antes que la arquitectura completa sea estabilizada. En tales casos, puede ser posible comenzar el diseño detallado en esos componentes estables. Similarmente, durante el diseño detallado, puede ser posible proceder con la codificación y quizás regular testeando en forma unitaria o realizando testeo de integración previo a llevar a cabo el diseño detallado de todos los componentes.

Usando técnicas de modelación concurrente, es posible conoce el verdadero estado en el que se encuentra el proyecto.

Modelo fuente:
Creado por Henderson-Sellers y Edwards en 1990. Es un tipo de ciclo de vida pensado para la orientación a objetos, se divide en las siguientes fases:

 - Planificación del negocio
 - Construcción: La más importante y que se divide a su vez en otras cinco actividades: Planificación, Investigación, Especificación, Implementación y Revisión.

 - Entrega.
La primera y la tercera fase son independientes de la metodología de desarrollo orientado a objetos. Además de las tres fases, existen dos periodos:

Crecimiento: Es el tiempo durante el cual se construye el sistema
Madurez: Es el periodo de mantenimiento del producto. Cada mejora se planifica igual que el periodo anterior, es decir, con las fases de Planificación del negocio, Construcción y Entrega.

Cada clase puede tener un ciclo de vida sólo para ella debido a que cada una puede estar en una fase diferente en un momento cualquiera.
 
 
 Los factores a tener en cuenta, en el momento de elegir un modelo de proceso de software o un modelo de ciclo de vida son:
 - Viabilidad del proyecto en comparación con las funciones y tamaño de la empresa, la aplicación que se va a desarrollar o a la que se va tener en funcionamiento y las características que va a tener el producto.
- Análisis, construir un modelo de los requisitos suficientes o superiores de los demandados, para poderlos aplicar adecuadamente al tipo de proyecto apropiado. Al identificar los problemas en etapas tempranas hay tiempo de subsanarlos.
- Objetivos, se hacen de la mano con el cliente, para concordar un proyecto adecuado a su necesidad.
- Restricciones, se deben analizar antes de implementar el proyecto, para prever posibles bloqueos, atrasos o perjuicios, que disminuyan el rendimiento, eficiencia, calidad, etc. Es bueno poder desarrollar construcción de prototipos.
 - Alternativas, en caso de tener diferentes opciones se debe proveer de alternativas y formas de gestionar de mejor manera el modelo, para adecuar el proyecto y el desarrollo del mismo hasta su culminación.
- Planificación, donde se analiza y se prevé, posibles soluciones o modificaciones según las aplicaciones a utilizar, puede ser que surjan necesidades imprevistas. Poder descubrir errores en la fase de análisis y no hasta la entrega, genera confianza y respaldo ante el cliente final, además de optimizar los recursos.
 - Diseño, a partir del modelo de análisis se debe poder deducir y planear la estructura de datos, amigable y funcional para el sistema y la interfaz de usuario.
 - Codificación, adecuada para construir el sistema y ajustable a la fase ejecutable del código, para que facilite su operación.
 - Documentación, es una tarea importante que se realiza en todas las etapas, para estimar y evaluar, distintos percances en el sistema, o para poder realizar modificaciones o adiciones a sus funciones de acuerdo a la finalidad y necesidad del proyecto.

 - Pruebas, etapa para comprobar que se cumplen los requisitos dentro del criterio de corrección y calidad, para el producto final.
 - Mantenimiento, es la fase después de la entrega, donde se asegura que el sistema sigue funcionando adecuadamente y está presto cualquier requisito nuevo.
Por ejemplo, para una empresa que desea desarrollar una aplicación para la administración de los pedidos, donde no tienen claro lo que quieren, el modelo de proceso que yo recomendaría, sería el modelo Iterativo incremental, ya que este permite la entrega de versiones parciales a medida que se va construyendo el producto final, y da posibilidad de realizar cambios, modificaciones,  
Conforme se va viendo el desarrollo de la aplicación, o los requisitos; además tiene la facilidad de mejorar cada versión emitida, incorporando nuevas funciones a las versiones anteriores.
Por otro lado para una el proyecto de una empresa de desarrollo de software que desea elaborar un procesador de palabra, se puede usar por ejemplo un modelo en cascada o un modelo incremental, entonces, realmente ningún modelo es perfecto, pero se busca siempre el que se acomode a la aplicación y desarrollo y finalidad del producto.
Conforme se va viendo el desarrollo de la aplicación, o los requisitos; además tiene la facilidad de mejorar cada versión emitida, incorporando nuevas funciones a las versiones anteriores.
Por otro lado para una el proyecto de una empresa de desarrollo de software que desea elaborar un procesador de palabra, se puede usar por ejemplo un modelo en cascada o un modelo incremental, entonces, realmente ningún modelo es perfecto, pero se busca siempre el que se acomode a la aplicación y desarrollo y finalidad del producto.