Índice general
2 Desarrollo en cascada 7
2.1 Fases del modelo. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
2.1.1 Análisis de requisitos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
2.1.2 Diseño del Sistema . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
2.1.3 Diseño del Programa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
2.1.4 Codificación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
2.1.5 Pruebas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
2.1.6 Verificación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
2.1.7 Mantenimiento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
2.2 Variantes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
2.3 Ventajas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
2.4 Desventajas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
2.5 Véase también . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
2.6 Referencias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
2.7 Enlaces externos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
3 Modelo de prototipos 11
i
ii ÍNDICE GENERAL
3.1 Etapas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
3.2 Ventajas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
3.3 Inconvenientes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
3.4 Conclusiones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
3.5 Véase también . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
5 Desarrollo en espiral 18
5.1 Introducción . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
5.2 Ciclos o Iteraciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
5.2.1 Tareas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
5.3 Mecanismos de control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
5.4 Variaciones del Modelo En Espiral . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
5.5 Ventajas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
5.6 Desventajas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
5.7 Inconvenientes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
5.8 Véase también . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
5.9 Referencias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
5.10 Enlaces externos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
5.11 Texto e imágenes de origen, colaboradores y licencias . . . . . . . . . . . . . . . . . . . . . . . . . . 23
5.11.1 Texto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
5.11.2 Imágenes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
5.11.3 Licencia de contenido . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
Capítulo 1
Metodología de desarrollo de software en ingeniería de software es un marco de trabajo usado para estructurar, plani-
ficar y controlar el proceso de desarrollo en sistemas de información.[1]
1.1 Introducción
Una metodología de desarrollo de software se refiere a un framework que es usado para estructurar, planear y controlar
el proceso de desarrollo en sistemas de información.
A lo largo del tiempo, una gran cantidad de métodos han sido desarrollados diferenciándose por su fortaleza y debilidad.
El framework para metodología de desarrollo de software consiste en:
• Una filosofía de desarrollo de programas de computacion con el enfoque del proceso de desarrollo de software
1
2 CAPÍTULO 1. METODOLOGÍA DE DESARROLLO DE SOFTWARE
Estos frameworks son a menudo vinculados a algún tipo de organización, que además desarrolla, apoya el uso y promueve
la metodología. La metodología es a menudo documentada en algún tipo de documentación formal.
1.2 Historia
El desarrollo de los sistemas tradicionales de ciclo de vida se originó en la década de 1960 para desarrollar a gran escala
funcional de sistemas de negocio en una época de grandes conglomerados empresariales. La idea principal era continuar
el desarrollo de los sistemas de información en una muy deliberada, estructurada y metódica, reiterando cada una de las
etapas del ciclo de vida. Los sistemas de información en torno a las actividades resueltas pesadas para el procesamiento
de datos y rutinas de cálculo.
Metodologías de Desarrollo de Software tiene como objetivo presentar un conjunto de técnicas tradicionales y modernas
de modelado de sistemas que permitan desarrollar software de calidad, incluyendo heurísticas de construcción y criterios
de comparación de modelos de sistemas.
Para tal fin se describen, fundamentalmente, herramientas de Análisis y Diseño Orientado a Objetos (UML), sus dia-
gramas, especificación, y criterios de aplicación de las mismas. Como complemento se describirán las metodologías de
desarrollo de software que utilizan dichas herramientas, ciclos de vida asociados y discusión sobre el proceso de desarrollo
de software más adecuado para las diferentes aplicaciones ejemplos que se presentarán. Principalmente, se presentará el
Proceso Unificado el cual utiliza un ciclo de vida iterativo e incremental.
• Kendall y Kendall
I. Identificación del problema, oportunidades y objetivos. II. Determinación de los requerimientos de información. III.
Análisis de las necesidades del sistema. IV. Diseño del sistema recomendado. V. Desarrollo y documentación del software.
VI. Pruebas y mantenimiento del sistema. VII. Implantación y evaluación del sistema.
• James Senn
I. Ciclo de vida y desarrollo del sistema. II. Desarrollo por análisis estructurado III. Prototipo del sistema.
• Llorens Fabregas
• Jonas Montilva
I. Definir el proyecto. II. Análisis del contexto. III. Definición de los requerimientos. IV. Diseño preliminar. V. Diseño
detallado.
• Roger Pressman
I. Análisis de los requerimientos del Software. II. Diseño. III. Generación de código. IV. Pruebas. V. Mantenimiento;
1980
1990
Nuevo milenio
Es un proceso secuencial de desarrollo en el que los pasos de desarrollo son vistos hacia abajo (como en una cascada de
agua) a través de las fases de análisis de las necesidades, el diseño, implantación, pruebas (validación), la integración,
y mantenimiento. La primera descripción formal del modelo de cascada se cita a menudo a un artículo publicado por
Winston Royce W.[2] en 1970, aunque Royce no utiliza el término “cascada” de este artículo.
Los principios básicos del modelo de cascada son los siguientes:[1]
• El proyecto está dividido en fases secuenciales, con cierta superposición y splashback aceptable entre fases.
• Se hace hincapié en la planificación, los horarios, fechas, presupuestos y ejecución de todo un sistema de una sola
vez.
• Un estricto control se mantiene durante la vida del proyecto a través de la utilización de una amplia documentación
escrita, así como a través de comentarios y aprobación / signoff por el usuario y la tecnología de la información de
gestión al final de la mayoría de las fases antes de comenzar la próxima fase.
1.4.2 Prototipado
El prototipado permite desarrollar modelos de aplicaciones de software que permiten ver la funcionalidad básica de la
misma, sin necesariamente incluir toda la lógica o características del modelo terminado. El prototipado permite al cliente
evaluar en forma temprana el producto, e interactuar con los diseñadores y desarrolladores para saber si se está cumpliendo
con las expectativas y las funcionalidades acordadas.Los Prototipos no poseen la funcionalidad total del sistema pero si
condensa la idea principal del mismo, Paso a Paso crece su funcionalidad, y maneja un alto grado de participación del
usuario.
1.4.3 Incremental
Provee una estrategia para controlar la complejidad y los riesgos, desarrollando una parte del producto software reservando
el resto de aspectos para el futuro.
Los principios básicos son:
• Una serie de mini-Cascadas se llevan a cabo, donde todas las fases de la cascada modelo de desarrollo se han
completado para una pequeña parte de los sistemas, antes de proceder a la próxima incremental.
• Se definen los requisitos antes de proceder con lo evolutivo, se realiza un mini-Cascada de desarrollo de cada uno
de los incrementos del sistema.
• El concepto inicial de software, análisis de las necesidades, y el diseño de la arquitectura y colectiva básicas se
definen utilizando el enfoque de cascada, seguida por iterativo de prototipos, que culmina en la instalación del
prototipo final.
1.4.4 Espiral
• La atención se centra en la evaluación y reducción del riesgo del proyecto dividiendo el proyecto en segmentos más
pequeños y proporcionar más facilidad de cambio durante el proceso de desarrollo, así como ofrecer la oportunidad
de evaluar los riesgos y con un peso de la consideración de la continuación del proyecto durante todo el ciclo de
vida.
1.4. ENFOQUES DE DESARROLLO DE SOFTWARE 5
• Cada viaje alrededor de la espiral atraviesa cuatro cuadrantes básicos: (1) determinar objetivos, alternativas, y
desencadenantes de la iteración; (2) Evaluar alternativas; Identificar y resolver los riesgos; (3) desarrollar y verificar
los resultados de la iteración, y (4) plan de la próxima iteración.[3]
• Cada ciclo comienza con la identificación de los interesados y sus condiciones de ganancia, y termina con la revisión
y examinación.[3]
• Objetivo clave es para un rápido desarrollo y entrega de una alta calidad en un sistema de relativamente bajo coste
de inversión.
• Intenta reducir el riesgos inherente del proyecto partiéndolo en segmentos más pequeños y proporcionar más faci-
lidad de cambio durante el proceso de desarrollo.
• Orientación dedicada a producir sistemas de alta calidad con rapidez, principalmente mediante el uso de iteración
por prototipos (en cualquier etapa de desarrollo), promueve la participación de los usuarios y el uso de herramien-
tas de desarrollo computarizadas. Estas herramientas pueden incluir constructores de Interfaz gráfica de usuario
(GUI), Computer Aided Software Engineering (CASE) las herramientas, los sistemas de gestión de bases de datos
(DBMS), lenguajes de programación de cuarta generación, generadores de código, y técnicas orientada a objetos.
• Hace especial hincapié en el cumplimiento de la necesidad comercial, mientras que la ingeniería tecnológica o la
excelencia es de menor importancia.
• Control de proyecto implica el desarrollo de prioridades y la definición de los plazos de entrega. Si el proyecto
empieza a aplazarse, se hace hincapié en la reducción de requisitos para el ajuste, no en el aumento de la fecha
límite.
• En general incluye Joint application development (JAD), donde los usuarios están intensamente participando en el
diseño del sistema, ya sea a través de la creación de consenso estructurado en talleres, o por vía electrónica.
• Top-down programming, evolucionado en la década de 1970 por el investigador de IBM Harlan Mills (y Niklaus
Wirth) en Desarrollo Estructurado.
• Proceso Unificado, es una metodología de desarrollo de software, basado en UML. Organiza el desarrollo de soft-
ware en cuatro fases, cada una de ellas con la ejecución de una o más iteraciones de desarrollo de software: creación,
elaboración, construcción, y las directrices. Hay una serie de herramientas y productos diseñados para facilitar la
aplicación. Una de las versiones más populares es la de Rational Unified Process.
6 CAPÍTULO 1. METODOLOGÍA DE DESARROLLO DE SOFTWARE
1.5 Referencia
[1] SELECTING A DEVELOPMENT APPROACH. Revalidated: March 27, 2008. Retrieved 27 Oct 2008.
[2] Wasserfallmodell > Entstehungskontext, Markus Rerych, Institut für Gestaltungs- und Wirkungsforschung, TU-Wien. Accessed
on line November 28, 2007.
Desarrollo en cascada
En Ingeniería de software el desarrollo en cascada, también llamado modelo en cascada (denominado así por la posición
de las fases en el desarrollo de esta, que parecen caer en cascada “por gravedad” hacia las siguientes fases), es el enfoque
metodológico que ordena rigurosamente las etapas del proceso para el desarrollo de software, de tal forma que el inicio
de cada etapa debe esperar a la finalización de la etapa anterior.[1] Al final de cada etapa, el modelo está diseñado para
llevar a cabo una revisión final, que se encarga de determinar si el proyecto está listo para avanzar a la siguiente fase. Este
modelo fue el primero en originarse y es la base de todos los demás modelos de ciclo de vida.
La versión original fue propuesta por Winston W. Royce en 1970 y posteriormente revisada por Barry Boehm en 1980 e
Ian Sommerville en 1985.[2]
Un ejemplo de una metodología de desarrollo en cascada es:
1. Análisis de requisitos.
4. Codificación.
5. Pruebas.
6. Verificación.
7. Mantenimiento.
De esta forma, cualquier error de diseño detectado en la etapa de prueba conduce necesariamente al rediseño y nueva
programación del código afectado, aumentando los costos del desarrollo. La palabra cascada sugiere, mediante la metáfora
de la fuerza de la gravedad, el esfuerzo necesario para introducir un cambio en las fases más avanzadas de un proyecto.
Si bien ha sido ampliamente criticado desde el ámbito académico y la industria[cita requerida] , sigue siendo el paradigma más
seguido al día de hoy[cita requerida] .
7
8 CAPÍTULO 2. DESARROLLO EN CASCADA
Requisitos
Diseño
Implementación
Verificación
Maintenimiento
El “modelo cascada” sin modificar. El progreso fluye de arriba hacía abajo, como una cascada.
Es importante señalar que en esta etapa se debe consensuar todo lo que se requiere del sistema y será
aquello lo que seguirá en las siguientes etapas, no pudiéndose requerir nuevos resultados a mitad del proceso
de elaboración del software de una manera.
Es conveniente distinguir entre diseño de alto nivel o arquitectónico y diseño detallado. El primero de ellos
tiene como objetivo definir la estructura de la solución (una vez que la fase de análisis ha descrito el problema)
identificando grandes módulos (conjuntos de funciones que van a estar asociadas) y sus relaciones. Con ello
se define la arquitectura de la solución elegida. El segundo define los algoritmos empleados y la organización
del código para comenzar la implementación.
2.1.4 Codificación
Es la fase en donde se implementa el código fuente, haciendo uso de prototipos así como de pruebas y ensayos
para corregir errores.
Dependiendo del lenguaje de programación y su versión se crean las bibliotecas y componentes reutilizables
dentro del mismo proyecto para hacer que la programación sea un proceso mucho más rápido.
2.1.5 Pruebas
Los elementos, ya programados, se ensamblan para componer el sistema y se comprueba que funciona co-
rrectamente y que cumple con los requisitos, antes de ser entregado al usuario final.
2.1.6 Verificación
Es la fase en donde el usuario final ejecuta el sistema, para ello el o los programadores ya realizaron exhaus-
tivas pruebas para comprobar que el sistema no falle.
En la creación de desarrollo de cascada se implementa los códigos de investigación y pruebas del mismo.
2.1.7 Mantenimiento
Una de las etapas más críticas, ya que se destina un 75 % de los recursos, es el mantenimiento del Software
ya que al utilizarlo como usuario final puede ser que no cumpla con todas nuestras expectativas.
2.2 Variantes
Existen variantes de este modelo; especialmente destacamos la que hace uso de prototipos y en la que se
establece un ciclo antes de llegar a la fase de mantenimiento, verificando que el sistema final este libre de
fallos.
Otros ejemplos de variantes del modelo en cascada son el modelo en cascada con fases solapadas, cascada
con subproyectos, y cascada con reducción de riesgos.[3]
2.3 Ventajas
Realiza un buen funcionamiento en equipos débiles y productos maduros, por lo que se requiere de menos
capital y herramientas para hacerlo funcionar de manera óptima.
Es un modelo fácil de implementar y entender.
Está orientado a documentos.
Es un modelo conocido y utilizado con frecuencia.
Promueve una metodología de trabajo efectiva: Definir antes que diseñar, diseñar antes que codificar.[4]
2.4 Desventajas
En la vida real, un proyecto rara vez sigue una secuencia lineal, esto crea una mala implementación del
modelo, lo cual hace que lo lleve al fracaso.
El proceso de creación del software tarda mucho tiempo ya que debe pasar por el proceso de prueba y hasta
que el software no esté completo no se opera. Esto es la base para que funcione bien.
10 CAPÍTULO 2. DESARROLLO EN CASCADA
Cualquier error de diseño detectado en la etapa de prueba conduce necesariamente al rediseño y nueva
programación del código afectado, aumentando los costos del desarrollo.
Una etapa determinada del proyecto no se puede llevar a cabo a menos de que se haya culminado la etapa
anterior.
• Desarrollo en espiral
• Modelos de desarrollo de software: Cascada vs V
2.6 Referencias
[1] S. Pressman, Roger. Ingeniería del Software: Un enfoque práctico, 3.ª Edición, Pag. 26-30.
[2] Cataldi, Z., Lage, F., Pessacq, R. y García Martínez, R. Ingeniería de software educativo.
[4] , Ruby Casallas, Andrés Yie, Ingeniería de Software: Ciclos de Vida y Metodologías.
Modelo de prototipos
El Modelo de prototipos, en Ingeniería de software, pertenece a los modelos de desarrollo evolutivo. El prototipo debe
ser construido en poco tiempo, usando los programas adecuados y no se debe utilizar muchos recursos.
El diseño rápido se centra en una representación de aquellos aspectos del software que serán visibles para el cliente
o el usuario final. Este diseño conduce a la construcción de un prototipo, el cual es evaluado por el cliente para una
retroalimentación; gracias a ésta se refinan los requisitos del software que se desarrollará. La interacción ocurre cuando el
prototipo se ajusta para satisfacer las necesidades del cliente. Esto permite que al mismo tiempo el desarrollador entienda
mejor lo que se debe hacer y el cliente vea resultados a corto plazo.
3.1 Etapas
• Plan rápido.
• Modelado, diseño rápido
• Construcción del Prototipo
• Desarrollo, entrega y retroalimentación
• Comunicación
• Entrega del desarrollo final
3.2 Ventajas
• Este modelo es útil cuando el cliente conoce los objetivos generales para el software, pero no identifica los requisitos
detallados de entrada, procesamiento o salida.
• También ofrece un mejor enfoque cuando el responsable del desarrollo del software está inseguro de la eficacia de
un algoritmo, de la adaptabilidad de un sistema operativo o de la forma que debería tomar la interacción humano-
máquina
• Se puede reutilizar el codigo
La construcción de prototipos se puede utilizar como un modelo del proceso independiente, se emplea más comúnmente
como una técnica susceptible de implementarse dentro del contexto de cualquiera de los modelos del proceso expuestos.
Sin importar la forma en que éste se aplique, el paradigma de construcción de prototipos ayuda al desarrollado de software
y al cliente a entender de mejor manera cuál será el resultado de la construcción cuando los requisitos estén satisfechos.
De esta manera, este ciclo de vida en particular, involucra al cliente más profundamente para adquirir el producto.
11
12 CAPÍTULO 3. MODELO DE PROTOTIPOS
3.3 Inconvenientes
• El usuario tiende a crearse unas expectativas cuando ve el prototipo de cara al sistema final. A causa de la inten-
ción de crear un prototipo de forma rápida, se suelen desatender aspectos importantes, tales como la calidad y el
mantenimiento a largo plazo, lo que obliga en la mayor parte de los casos a reconstruirlo una vez que el prototipo
ha cumplido su función. Es frecuente que el usuario se muestre reaccion a ello y pida que sobre ese prototipo
se construya el sistema final, lo que lo convertiría en un prototipo evolutivo, pero partiendo de un estado poco
recomendado.
• En aras de desarrollar rápidamente el prototipo, el desarrollador suele tomar algunas decisiones de implementación
poco convenientes (por ejemplo, elegir un lenguaje de programación incorrecto porque proporcione un desarro-
llo más rápido). Con el paso del tiempo, el desarrollador puede olvidarse de la razón que le llevó a tomar tales
decisiones, con lo que se corre el riesgo de que dichas elecciones pasen a formar parte del sistema final...
3.4 Conclusiones
A pesar de que tal vez surjan problemas, la construcción de prototipos puede ser un paradigma efectivo para la ingeniería
del software. La clave es definir las reglas del juego desde el principio; es decir, el cliente y el desarrollador se deben poner
de acuerdo en:
Desarrollo iterativo y creciente (o incremental) es un proceso de desarrollo de software creado en respuesta a las debi-
lidades del modelo tradicional de cascada.
Básicamente este modelo de desarrollo, que no es más que un conjunto de tareas agrupadas en pequeñas etapas repetitivas
(iteraciones),[1] es uno de los más utilizados en los últimos tiempos ya que, como se relaciona con novedosas estrategias
de desarrollo de software y una programación extrema, es empleado en metodologías diversas.
El modelo consta de diversas etapas de desarrollo en cada incremento, las cuales inician con el análisis y finalizan con la
instauración y aprobación del sistema.[2]
13
14 CAPÍTULO 4. DESARROLLO ITERATIVO Y CRECIENTE
• Los usuarios nunca saben bien que es lo que necesitan para satisfacer sus necesidades.
• En el desarrollo, los procesos tienden a cambiar.[4]
• Etapa de inicialización
• Etapa de iteración
• Lista de control de proyecto
• Cualquier dificultad en el diseño, codificación y prueba de una modificación debería apuntar a la necesidad de
rediseñar o recodificar.
• Las modificaciones deben ajustarse fácilmente a los módulos fáciles de encontrar y a los aislados. Si no es así,
entonces se requiere algún grado de rediseño.
• Las modificaciones a las tablas deben ser especialmente fáciles de realizar. Si dicha modificación no ocurre rápi-
damente, se debe aplicar algo de rediseño.
4.3. CASO PRÁCTICO 15
• Las modificaciones deben ser más fáciles de hacer conforme avanzan las iteraciones. Si no es así, hay un problema
primordial usualmente encontrado en un diseño débil o en la proliferación excesiva de parches al sistema.
• Los parches normalmente deben permanecer solo por una o dos iteraciones. Se hacen necesarios para evitar el
rediseño durante una fase de implementación.
• La implementación existente debe ser analizada frecuentemente para determinar qué tal se ajusta a las metas del
proyecto.
• Las facilidades para analizar el programa deben ser utilizadas cada vez para ayudar en el análisis de implementa-
ciones parciales.
• La opinión del usuario debe ser solicitada y analizada para indicar deficiencias en la implementación referida por
él.
4.4 Características
Usando análisis y mediciones como guías para el proceso de mejora es una diferencia mayor entre las mejoras iterativas
y el desarrollo rápido de aplicaciones, principalmente por dos razones:
• Provee de soporte para determinar la efectividad de los procesos y de la calidad del producto.
• Permite estudiar y después mejorar y ajustar el proceso para el ambiente en particular.
Estas mediciones y actividades de análisis pueden ser añadidas a los métodos de desarrollo rápido existentes.
De hecho, el contexto de iteraciones múltiples conlleva ventajas en el uso de mediciones. Las medidas a veces son difí-
ciles de comprender en lo absoluto, aunque en los cambios relativos en las medidas a través de la evolución del sistema
puede ser muy informativo porque proveen una base de comparación. Por ejemplo, un vector de medidas m1, m2,...,
mn puede ser definido para caracterizar varios aspectos del producto en cierto punto, como pueden ser el esfuerzo total
realizado, los cambios, los defectos, los atributos lógico, físico y dinámico, consideraciones del entorno, etcétera. Así
el observador puede decir como las características del producto como el tamaño, la complejidad, el acoplamiento y la
cohesión incrementan o disminuyen en el tiempo. También puede monitorearse el cambio relativo de varios aspectos de
un producto o pueden proveer los límites de las medidas para apuntar a problemas potenciales y anomalías.
• Los usuarios pueden utilizar los incrementos iniciales como prototipos y obtener experiencia sobre los requeri-
mientos de los incrementos posteriores del sistema.
• Existe muy pocas probabilidades de riesgo en el sistema. Aunque se pueden encontrar problemas en algunos in-
crementos, lo normal es que el sistema se entregue sin inconvenientes al usuario.
• Ya que los sistemas de más alta prioridad se entregan primero, y los incrementos posteriores se integran entre
ellos, es muy poco probable que los sistemas más importantes sean a los que se les hagan más pruebas. Esto quiere
decir que es menos probable que los usuarios encuentren fallas de funcionamiento del software en las partes más
importantes del sistema.[6]
• La mayoría de los incrementos se harán en base de las necesidades de los usuarios. Los incrementos en si ya son
estipulados desde antes de la entrega del proyecto, sin embargo hay que ver cómo se maneja el producto para
ver si necesita otros cambios además de los estipulados antes de la entrega del proyecto. Este problema no se ve
frecuentemente ya que la mayoría de las veces los incrementos estipulados suplen satisfactoriamente al usuario.[6]
• Los incrementos no deben constar de muchas líneas de código ya que la idea de los incrementos es agregar accesorios
al programa principal (o funcional), para que este tenga una y mil formas de desenvolverse en su tarea; llenar los
incrementos de muchas líneas de código provocaría que se perdiera la objetividad o base de lo que se trata el
desarrollo incremental.[6]
• Requiere de un cliente involucrado durante todo el curso del proyecto. Hay clientes que simplemente no estarán
dispuestos a invertir el tiempo necesario.
• El trato con el cliente debe basarse en principios éticos y colaboración mutua, más que trabajar cada parte inde-
pendientemente, defendiendo sólo su propio beneficio.[8]
• La entrega de un programa que es parcial pero funcional puede hacer vulnerable al programa debido a la falta
de robustez en su sistema, provocando que agentes ajenos puedan interferir con el correcto funcionamiento del
programa en sí.[6]
• Infunde responsabilidad en el equipo de desarrollo al trabajar directamente con el cliente, requiriendo de profesio-
nales sobre el promedio.
• Sufre fuertes penalizaciones en proyectos en los cuales los requerimientos están previamente definidos, o para
proyectos “todo/nada” en los cuales se requiere que se completen en un 100% el producto para ser implementado
(por ejemplo, licitaciones) otro punto muy importante es asegurarnos de que el trabajo se pueda cumplir tomando
en cuenta los costos que podamos usar en nuestros propios recursos.
4.8. VÉASE TAMBIÉN 17
• Desarrollo en cascada
• Ingeniería de software
• Desarrollo de software
4.9 Referencias
[1] |Proceso de Desarrollo Iterativo| http://fernandosoriano.com.ar/?p=13
[5] Constantine, L. L., Lockwood, L. A. D.: Software for Use: A Practical Guide to the Models and Methods of Usage - Centred
Design. Addison - Wesley ( 1999)
[6] Ian Sommerville (2005). «Entrega Incremental». Ingeniería del Software, Séptima edición edición... España: Pearson.
Desarrollo en espiral
El desarrollo en espiral es un modelo de ciclo de vida del software definido por primera vez por Barry Boehm en 1986,[1]
utilizado generalmente en la Ingeniería de software. Las actividades de este modelo se conforman en una espiral, en la
que cada bucle o iteración representa un conjunto de actividades. Las actividades no están fijadas a ninguna prioridad,
sino que las siguientes se eligen en función del análisis de riesgo, comenzando por el bucle interior.
5.1 Introducción
La Ingeniería de software, se vale y establece a partir de una serie de modelos que establecen y muestran las distintas
etapas y estados por los que pasa un producto software, desde su concepción inicial, pasando por su desarrollo, puesta en
marcha y posterior mantenimiento, hasta la retirada del producto. A estos modelos se les denomina «modelos de ciclo de
vida del software». El primer modelo concebido fue el de Royce, más comúnmente conocido como desarrollo en cascada
o desarrollo lineal secuencial. Este modelo establece que las diversas actividades que se van realizando al desarrollar un
producto software se suceden de forma lineal.
Boehm, autor de diversos artículos de ingeniería del software; modelos de estimación de esfuerzo y tiempo que se consume
en hacer productos software; y Modelos de Ciclo de Vida; ideó y promulgó un modelo desde un enfoque distinto al
tradicional en Cascada: El Modelo Evolutivo Espiral. Su Modelo de Ciclo de Vida en Espiral tiene en cuenta fuertemente el
riesgo que aparece a la hora de desarrollar software. Para ello, se comienza mirando las posibles alternativas de desarrollo,
se opta por la de riesgo más asumible y se hace un ciclo de la espiral. Si el cliente quiere seguir haciendo mejoras en el
software, se vuelve a evaluar las distintas nuevas alternativas y riesgos y se realiza otra vuelta de la espiral, así hasta que
llegue un momento en el que el producto software desarrollado sea aceptado y no necesite seguir mejorándose con otro
nuevo ciclo.
Este modelo fue propuesto por Boehm en 1986 en su artículo “A Spiral Model of Software Development and Enhancement”.[1]
En 1988, Boehm publicó un artículo similar[2] destinado a una audiencia más amplía. Básicamente consiste en una serie
de ciclos que se repiten en forma de espiral, comenzando desde el centro. Se suele interpretar como que dentro de cada
ciclo de la espiral se sigue un Modelo Cascada, pero no necesariamente debe ser así. El Espiral puede verse como un
modelo evolutivo que conjuga la naturaleza iterativa del modelo MCP con los aspectos controlados y sistemáticos del
Modelo Cascada, con el agregado de gestión de riesgo.
18
5.2. CICLOS O ITERACIONES 19
• Alternativas: las diferentes formas de conseguir los objetivos de forma exitosa, desde diferentes puntos de vista
como pueden ser:
• Se planificaran los siguientes pasos y se comienza un nuevo ciclo de la espiral. La espiral tiene una forma de caracola
y se dice que mantiene dos dimensiones, la radial y la angular:
2. Radial: Indica el aumento del coste del proyecto, ya que con cada nueva iteración se pasa más tiempo desarrollando.
Este sistema es muy utilizado en proyectos grandes y complejos como puede ser, por ejemplo, la creación de un Sistema
Operativo.
Al ser un modelo de Ciclo de Vida orientado a la gestión de riesgo se dice que uno de los aspectos fundamentales de su éxito
radica en que el equipo que lo aplique tenga la necesaria experiencia y habilidad para detectar y catalogar correctamente
los riesgos.
5.2.1 Tareas
1. Determinar Objetivos.
3. Desarrollar y probar.
4. 'Planificación.'
• Fijar también los productos definidos a obtener: requisitos, especificación, manual de usuario.
• Hay una cosa que solo se hace una vez: planificación inicial.
20 CAPÍTULO 5. DESARROLLO EN ESPIRAL
• Dependiendo del resultado de la evaluación de los riesgos, se elige un modelo para el desarrollo, el que puede
ser cualquiera de los otros existentes, como formal, evolutivo, cascada, etc. Así si por ejemplo si los riesgos en la
interfaz de usuario son dominantes, un modelo de desarrollo apropiado podría ser la construcción de prototipos
evolutivos. Si lo riesgos de protección son la principal consideración, un desarrollo basado en transformaciones
formales podría ser el más apropiado.
• Se lleva a cabo el estudio de las causas de las posibles amenazas y probables eventos no deseados y los daños y
consecuencias que éstas puedan producir. Se evalúan alternativas. Se debe tener un prototipo antes de comenzar a
desarrollar y probar.
En resumen, es para tener en cuenta de los riesgos de cada uno de los ambitos
El modelo en espiral puede adaptarse y aplicarse a lo largo de la vida del software de computadora, a diferencia del modelo
de proceso clásico que termina cuando se entrega el software.
Las 6 regiones que componen este modelo son las siguientes:
• Comunicación con el cliente - Tareas necesarias para plantear la comunicación entre el desarrollador y el cliente.
• Planificación - Tareas inherentes a la definición de recursos, el tiempo y otras informaciones relacionadas con el
proyecto. Son todos los requerimientos.
• Análisis de riesgos – Tareas para evaluar riesgos técnicos y otras informaciones relacionadas con el proyecto.
• Construcción y adaptación - Tareas requeridas para construir, probar, instalar y proporcionar soporte a los usuarios.
• Evaluación del cliente - Tareas requeridas para obtener la reacción del cliente según la evaluación de las represen-
taciones del software creadas durante la etapa de ingeniería e implementación durante la etapa de instalación.[3]
El modelo Win-Win es una adaptación del modelo espiral que se enfatiza en la participación del cliente en el proceso
de desarrollo de un producto de software. En un caso ideal, el desarrollador simplemente pregunta al cliente lo que se
requiere y el cliente proporciona suficiente información y detalles para proceder. Sin embargo esto no suele ocurrir en la
mayoría de los casos y es necesario que se establezcan negociaciones significativas entre ambas partes para equilibrar la
funcionalidad y rendimiento con los costos y tiempo de salida al mercado del producto. El modelo Win-Win deriva su
nombre del objetivo de estas negociaciones, es decir, “ganar-ganar”. El cliente recibe el producto que satisface la mayoría
de sus necesidades, y el desarrollador trabaja para alcanzar presupuestos y fechas de entrega. Para lograr este objetivo, se
realizan varias actividades de negociación al principio de cada paso alrededor de la espiral.[4]
5.5 Ventajas
El análisis del riesgo se hace de forma explícita y clara. Une los mejores elementos de los restantes modelos.
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.
5.6 Desventajas
• Genera mucho tiempo en el desarrollo del sistema
• Modelo costoso
5.7 Inconvenientes
Planificar un proyecto con esta metodología es a menudo imposible, debido a la incertidumbre en el número de iteraciones
que serán necesarias. En este contexto la evaluación de riesgos es de la mayor importancia y, para grandes proyectos, dicha
evaluación requiere la intervención de profesionales de gran experiencia.
El IEEE clasifica al desarrollo en espiral como modelo no operativo en sus clasificaciones de MCV.[5]
• Desarrollo de Software
• Modelo en Cascada o Secuencial
5.9 Referencias
[1] Boehm B, A Spiral Model of Software Development and Enhancement, ACM SIGSOFT Software Engineering Notes, ACM,
11(4):14-24, Agosto 1986.
[2] Boehm B, “A Spiral Model of Software Development and Enhancement", IEEE Computer, IEEE, 21(5):61-72, May 1988
[3] http://modeloespiral.blogspot.com/2009/08/modelo-tipico-de-seis-regiones.html
[4] http://www.hanantek.com/win-win
[5] Developing a Software Project Life Cycle Process (IEEE 1074), 30 de marzo de 2006.
5.11.2 Imágenes
• Archivo:Commons-emblem-question_book_orange.svg Fuente: https://upload.wikimedia.org/wikipedia/commons/1/1f/Commons-emblem-question_
book_orange.svg Licencia: CC BY-SA 3.0 Colaboradores: <a href='//commons.wikimedia.org/wiki/File:Commons-emblem-issue.svg' class='image'><img
alt='Commons-emblem-issue.svg' src='https://upload.wikimedia.org/wikipedia/commons/thumb/b/bc/Commons-emblem-issue.svg/25px-Commons-emblem-issue.
svg.png' width='25' height='25' srcset='https://upload.wikimedia.org/wikipedia/commons/thumb/b/bc/Commons-emblem-issue.svg/38px-Commons-emblem-issue.
svg.png 1.5x, https://upload.wikimedia.org/wikipedia/commons/thumb/b/bc/Commons-emblem-issue.svg/50px-Commons-emblem-issue.svg.
png 2x' data-file-width='48' data-file-height='48' /></a> + <a href='//commons.wikimedia.org/wiki/File:Question_book.svg' class='image'><img
alt='Question book.svg' src='https://upload.wikimedia.org/wikipedia/commons/thumb/9/97/Question_book.svg/25px-Question_book.svg.png'
width='25' height='20' srcset='https://upload.wikimedia.org/wikipedia/commons/thumb/9/97/Question_book.svg/38px-Question_book.svg.png
1.5x, https://upload.wikimedia.org/wikipedia/commons/thumb/9/97/Question_book.svg/50px-Question_book.svg.png 2x' data-file-width='252'
data-file-height='199' /></a> Artista original: GNOME icon artists, Jorge 2701
• Archivo:El_modelo_de_desarrollo_en_cascada.svg Fuente: https://upload.wikimedia.org/wikipedia/commons/2/2e/El_modelo_de_desarrollo_
en_cascada.svg Licencia: CC BY 3.0 Colaboradores: http://en.wikipedia.org/wiki/File:Waterfall_model_%281%29.svg Artista original: Pauls-
mith99
• Archivo:ModeloEspiral.svg Fuente: https://upload.wikimedia.org/wikipedia/commons/3/39/ModeloEspiral.svg Licencia: Public domain Co-
laboradores: ? Artista original: Chabacano
• Archivo:Software_development_methodologies.jpg Fuente: https://upload.wikimedia.org/wikipedia/commons/6/6a/Software_development_
methodologies.jpg Licencia: CC BY-SA 3.0 Colaboradores: Own work by uploader, based on Selecting a development approach at cms.hhs.gov.
Artista original: Marcel Douwe Dekker