Definiciones de alto nivel (abstractas) de las fases por las que transcurren los proyectos de desarrollo software.
Muestran las dependencias existentes entre las fases.
Pueden ser vistos como paradigmas.
Ciclo de Vida VS Modelo de Proceso
ℹ️
Los modelos de proceso software son conocidos como modelos de ciclo de vida.
Ciclo de Vida
🧬
Vida de un producto software: desde el comienzo de una idea, pasando por su desarrollo e implantación hasta que es retirado.
Modelo de Proceso Software
🚀
Intenta organizar el ciclo de vida del software:
Define actividades relacionadas con la producción de software.
Establece un orden entre las actividades.
Define relaciones entre las actividades.
Pueden ser extendidos o adaptados para especificar procesos más detallados.
Objetivo de un modelo de proceso software
🔓
Un modelo de proceso software tiene como objetivo:
Determinar el orden de las fases involucradas.
Establecer criterios para avanzar de fase.
Establecer criterios de finalización de la fase.
Responde a preguntas sobre el desarrollo como:
¿Qué es lo siguiente que deberíamos hacer?
¿Hasta cuándo debemos extender el desarrollo?
Extensión de actividades principales
🎯
Actividades
Especificacíon de requisitos → Definición de funcionalidades y restricciones
Diseño e implementación → Codificación de las funcionalidades y restricciones identificadas en el paso anterior
Validación del software → Comprobar con el cliente que las funcionalidades y las restricciones implementadas son las correctas
Integración e implantación del software
Mantenimiento del software
Evolución del software → Implementar las nuevas necesidades del cliente
Clasificación de los modelos
🌊
Modelo en Cascada
ℹ️
En este modelo, la especificación y el desarrollo están separados en fases distintas
Cascada
Cada fase comienza cuando acaba la anterior
No se puede volver a una fase anterior
Cascada con Retroalimentación
Se puede volver a cualquier fase desde la fase final
Cascada con Prototipado
En las primeras fases podemos usar un prototipo para ir validando con el cliente
El prototipado se puede utilizar como técnica en otros modelos de proceso
Fases del sistema de prototipos
🔖
Un prototipo es un modelo ejecutable de un sistema futuro que permite a los clientes, usuarios y desarrolladores adquirir experiencia con la arquitectura y la funcionalidad
Podemos distingir entre dos tipos:
Deshechables
Evolutivos
ㅤ
Prototipo Desechable
Prototipo Evolutivo
¿Qué desarrollar?
Las parte problemáticas
La base sólida, bien entendida y consensuada
Objetivo
Minimizar el tiempo de consenso con el cliente
Facil extensibilidad y modificación en consenso con el cliente
Propósito final
Desecharlo
Incluirlo en el producto final
📈
Desarrollo incremental o Evolutivo
ℹ️
En este modelo, la especificación y desarrollo están intercalados en el tiempo
Modelo Evolutivo
Este modelo está enfocado en los cambios constantes a sistemas nuevos o existentes
Modelo Incremental
Este modelo se basa en varias versiones del producto donde en cada un se añaden nuvas funciones que en la anterior. Lo que se busca es que cuando acaba una fase, esta empieza de nuevo para la versión siguiente. En este modelo sucede que en cada momento todos los equipos de trabajo están trabajando en una versión diferente
🏎️
Metodologías ágiles
Las metodologías ágiles pretenden dar una respuesta rápida a los cambios propuestos en los procesos de desarrollo del software. Esto surgen para paliar las debilidades de las metodologías pesadas
Estas metodologías se basan en la idea de que es muy difícil predecir cuales serán las necesidades de los clientes con mucha antelación, por lo que no tiene sentido planificar a largo plazo ya que los requisitos van a cambiar seguro
Estas metodologías se caracterizan por
El software se diseña y construye simultaneamente
El proceso es adaptativo e incremental
El feedback es continuo con el cliente
La comunicación con el cliente es constante
📕
El Manifiesto por el desarrollo ágil del software (2001, Kent Beck)
Valoresfundamentales expuestos en el manifiesto
Los individuos y sus interacciones están sobre los procesos y las herramientas
El software funcional debe estar por encima de una simple documentación exhaustiva
La colaboración con el cliente es mejor que lo que ponga en el contrato
La respuesta ante los cambios es mejor que el seguir un plan preestablecido
Principios fundamentales de las metodologías ágiles
La prioridad principal es satisfacer al cliente con entregas tempranas y continuas de software utilizable
Dar la bienvenida a los cambios.
Entregar el software desarrollado frecuentemente con el menor intervalo de tiempo entre entregas posible
La gente de negocios y los desarrolladores trabajan juntos a través del proyecto
Dar el entorno que necesitan a las personas y confiar en ellos
El diálogo cara a cara es el método más eficiente para comunicar información dentro de un equipo (hoy en día este principio está un poco obsoleto)
Desarrollar software es la primera medida de progreso
Todos los involucrados en el proceso deben ser capaces de mantener una paz constante
La atención continua a la calidad técnica y al buen diseño mejora la agilidad
La simplicidad es esencial
Las mejores arquitecturas, requisitos y diseños surgen de la propia organización del equipo (existen tanto modelos como equipos de trabajo)
El equipo debe reflexionar constantemente en como ser más efectivo
Los principales procesos que siguen el modelo ágil…
Scrum
Kanban
Lean development
eXtreme Programming (XP)
Adaptative Software Development
DSDM (Dynamic Systems Development Method)
Crystal Methods (Cockburn’s Crystal Family methodologies)
Modelo en Espiral
Este método usa lo que se conoce como un metodología ágil dado que el desarrollo es cíclico y es incremental.
Es un modelo evolutivo que reúne la naturaleza iterativa del prototipado con los aspectos controlados y sistemáticos del modelo en cascada
La espiral tiene 4 fases
Cada 4 fases es una vuelta a la espiral
🟢 Ventajas
El sistema se desarrolla de forma progresiva con la
colaboración de todos
Los riesgos se van detectando a medida que se va
evolucionando y no al final
La aceptación del software es progresiva
🔴 Desventajas
Como el número de vueltas no está definido podría
ocurrir que el desarrollo se alargara más de lo
necesario
RUP
👔
Desarrollo de Sistemas Formales
ℹ️
En este modelo, se utiliza un sistema matemático que se transforma formalmente en implementación
Modelo General
Model Driven Development (MDD)
♻️
Desarrollo Basado en Reutilización
ℹ️
En este modelo, el sistema se ensambla con componentes que existían previamente
Modelo General
Existen variantes dependiendo de la unidad de reutilización
Funciones o servicios
Componentes
Paquetes o liberías
COTS (Commercial Off-The-Self) → Software completo, sin cambios, directamente instalado tal y como se adquiere
Familias de aplicaciones
Plataforma → Varias versiones de un software desarrollado para diferentes plataformas
Configuración → Varias versiones para manejar diferentes periféricos
Funcionalidad → Varias versiones para distintos clientes con distintos requisitos
Modelo Basado en Componentes
🔖
Un componente es una pieza de código, un paquete de software que encapsula un conjunto de funciones o datos relacionados
Los componentes han de ser independientes del entorno
El objetivo de estos modelos es la reutilización del software
Los componentes facilitan las pruebas y el mantenimiento al ser independientes del software en el que se utilizan
Líneas de Producto Software (SPL)
Está inspirado en las líneas de producción industriales. Estos se basan en el desarrollo independiente de los diferentes aspectos del software, permitiendo así implementar en diferentes productos los mismos aspectos comunes del software
🛠️
Desarrollo Orientado a la Implementación
ℹ️
Estos modelos se centran en el proceso de entrega e implantación del producto