Tema 1: Introducción a la Ingeniería del Software
Naturaleza del software
• Producto conceptual, sin propiedades físicas.
• Dificultad de comprensión entre el problema y su solución software.
• El software se desarrolla, no se fabrica; su mantenimiento implica gestión y rediseño.
Crisis del software
• Problemas: planificación deficiente, baja calidad, incumplimiento de plazos, dificultad de mantenimiento, insatisfacción del cliente.
• Causas: naturaleza lógica, mala gestión, resistencia al cambio, falta de formación.
• Consecuencia: baja productividad y calidad.
• Solución: aplicar principios de ingeniería → nacimiento del concepto de Ingeniería del Software (OTAN, 1968).
• Según Standish Group (2015): solo el 30% de los proyectos son exitosos; los pequeños y los ágiles tienen mejores resultados.
Definición de Ingeniería del Software
• Aplicación de principios de ingeniería para obtener software fiable, eficiente y económico.
• Enfoque integral: desarrollo, operación y mantenimiento.
• Impulso institucional: SEI, IEEE, ISO → creación de estándares y metodologías.
Participantes y roles
• Cliente, equipo de desarrollo, gerente de proyecto, usuarios finales.
• Rol = conjunto de responsabilidades asignadas a un participante.
Conceptos clave
• Sistema, modelo, entregable, actividad, tarea, recursos, objetivos, requerimientos (funcionales y no funcionales), notación, método y metodología.
Sistema: realidad subyacente.
Modelo: cualquier abstracción de la realidad.
Entregable: elemento que se produce durante el desarrollo
Actividad: conjunto de tareas que se realizan con un propósito especifico.
Tarea: unidad elemental del trabajo que puede ser administrada.
Recursos: bienes que se utilizan al realizar un trabajo.
Objetivos: principios de alto nivel que se utilizan para guiar el proyecto.
Requisitos (FUNCIONALES): características en el área de la funcionalidad que debe tener el sistema.
Requisitos (NO FUNCIONALES): restricciones que se establecen sobre el funcionamiento del sistema.
Notación: conjunto de reglas gráficas o de texto para representar un modelo.
Método: técnica repetible para resolver un problema específico.
Metodología: colección de métodos para la resolución de una clase de problemas.
Tema 2: Proceso de desarrollo del software. Modelos y paradigmas.
Concepto de proceso
• Conjunto ordenado de tareas para producir una salida.
• Según ISO/IEC 12207: actividades relacionadas que transforman entradas en salidas.
• Aporta estructura, repetibilidad y control.
Procesos del ciclo de vida
• Primarios: adquisición, suministro, desarrollo, operación, mantenimiento.
• De soporte: documentación, configuración, calidad, verificación, validación, auditorías, resolución de problemas.
• Organizacionales: gestión, infraestructura, mejora y formación.
Actividades principales del desarrollo
1. Comunicación
2. Planificación
3. Modelado
4. Construcción
5. Despliegue
• Actividades paraguas: gestión, control, riesgo, calidad, configuración.
________________________________________
Modelos de desarrollo (ciclos de vida)
En la etapa de desarrollo, los patrones básicos son el desarrollo en cascada y el desarrollo en espiral.
Una vez desarrollada la primera versión, los patrones son el desarrollo incremental del sistema o el desarrollo evolutivo del sistema.
1. Modelo lineal o secuencial
• Muy rígido; adecuado para proyectos pequeños o mantenimientos.
2. Modelo en cascada
• Añade retroalimentación entre fases.
• Requiere especificaciones y diseño previos, lo que puede bloquear el avance.
3. Modelo espiral
• Evolutivo, centrado en análisis de riesgos.
• Iterativo y adaptable; cada ciclo produce una versión más avanzada.
4. Proceso Unificado (Rational Unified Process, RUP)
• Basado en UML.
• Dirigido por los casos de uso, centrado en la arquitectura, iterativo e incremental.
• Fases: inicio, elaboración, construcción y transición.
________________________________________ Modelos de evolución
Modelo incremental
• Descompone el sistema en partes entregables.
• Ventajas: entregas tempranas, retroalimentación del cliente, adaptación de requisitos.
• Adecuado para sistemas que requieren disponibilidad parcial temprana.
Modelo evolutivo
• Cada ciclo produce una versión completa mejorada.
• Ideal para contextos cambiantes o requisitos inicialmente desconocidos.
________________________________________
Modificadores de modelos
Prototipado
• Construcción de versiones experimentales (ligeras u operativas).
• Beneficios: clarifica requisitos.
• Riesgos: expectativas falsas, desviaciones de planificación.
Concurrencia
• Solapamiento de actividades; mejora plazos pero requiere buena gestión.
Componentes comerciales (COTS) y reutilización
• Uso de software preexistente o marcos comunes.
• Motivos: reducción de costes, presión competitiva, complejidad creciente.
• Etapas: búsqueda, evaluación, integración, diseño de arquitectura, pruebas.
TEMA 3 – Planificación de Sistemas Software
________________________________________
1️⃣ Introducción
La planificación de un sistema software forma parte de la gestión de proyectos, un área esencial de la Ingeniería del Software.
Aunque una buena gestión no garantiza el éxito, una mala gestión casi siempre conduce al fracaso: entregas fuera de plazo, sobrecostes y requisitos incumplidos.
💡 Características especiales del desarrollo software:
• El producto es intangible → no se puede medir físicamente.
• No existen procesos estándar universales.
• Cada proyecto suele ser único y no repetible.
🔹 Un proyecto de software se caracteriza por:
• Tener principio y fin definidos.
• Usar recursos limitados y presupuesto finito.
• Implicar actividades únicas y no rutinarias.
• Requerir planificación y control del progreso.
• Contar con un jefe de proyecto y un equipo definido.
• Competir por recursos con otros proyectos.
________________________________________
2️⃣ Plan del Proyecto
El plan de proyecto es el documento que guía toda la ejecución del desarrollo.
Su contenido varía según el tipo de proyecto, pero debe incluir como mínimo:
1. Resumen del proyecto: descripción general y productos entregables.
2. Lista de hitos alcanzables.
3. Procedimientos y estándares que se aplicarán.
4. Proceso de revisión: quién revisa, cómo, cuándo y con qué propósito.
5. WBS (Work Breakdown Structure): descomposición jerárquica de tareas.
6. Asignación del personal en relación al WBS.
7. Red de actividades: secuencia de tareas y sus relaciones temporales.
8. Responsables de cada actividad.
9. Presupuestos y calendarios de esfuerzo y costes.
________________________________________
3️⃣ Planificación Temporal
La planificación temporal organiza las tareas en el tiempo, determinando qué se hace, cuándo y quién lo hace.
🔹 Principios fundamentales:
1. Descomposición del proyecto → dividirlo en tareas manejables.
2. Interdependencia → identificar las dependencias entre tareas.
3. Asignación de tiempo → establecer inicio y fin de cada tarea.
4. Validación del esfuerzo → comprobar la disponibilidad del personal y recursos.
5. Responsabilidades definidas → asignar un responsable por tarea.
6. Resultados definidos → cada tarea debe producir un entregable.
7. Hitos definidos → puntos de control o revisión.
Nota: como toda planificación se basa en estimaciones, debe actualizarse continuamente a medida que avanza el proyecto y cambian las condiciones.
________________________________________
4️⃣ Análisis del Riesgo
El análisis del riesgo busca identificar amenazas potenciales y planificar medidas para reducir su impacto.
🔹 Tipos de riesgo:
Tipo Descripción Impacto principal
Proyecto Presupuesto, calendario, personal o recursos. Afectan a coste y duración.
Producto Problemas técnicos, diseño o calidad. Afectan a la calidad del software.
Negocio Cambios de dirección, mercado o estrategia. Afectan al equipo y a la viabilidad del proyecto.
🔹 Proceso de gestión del riesgo:
1. Identificación del riesgo → detectar posibles amenazas.
2. Estimación y evaluación → analizar probabilidad y consecuencias.
3. Planificación del riesgo → definir estrategias de respuesta:
o Evitación: reducir la probabilidad.
o Minimización: reducir el impacto.
o Contingencia: plan alternativo si ocurre.
4. Control del riesgo → seguimiento durante el desarrollo.
💬 En resumen: gestionar el riesgo implica vigilar constantemente su probabilidad e impacto, y reaccionar a tiempo.
________________________________________
5️⃣ Técnicas de Estimación
Las técnicas de estimación permiten calcular el tiempo, esfuerzo y coste del desarrollo.
Se basan en métricas históricas y en la experiencia previa del equipo, ya que la estimación nunca es una ciencia exacta.
🔹 Objetivo:
Obtener una previsión realista que permita una planificación eficaz y ajustada al riesgo.
🔹 Principales enfoques:
Enfoque Descripción
Estimación tardía Más precisa, pero menos práctica (se realiza avanzada la planificación).
Basada en proyectos anteriores Usa datos históricos; depende de la similitud entre proyectos.
Técnicas de descomposición Divide el proyecto en componentes más pequeños; usa escenarios optimista, más probable y pesimista.
Métodos empíricos Aplican modelos matemáticos o estadísticos sobre datos de proyectos terminados.
🔹 Uso de métricas
Las métricas de software cuantifican el proceso, el proyecto o el producto.
Sirven para medir productividad, tamaño, esfuerzo o calidad, aunque deben interpretarse con cautela.
Tipos principales:
• Orientadas al tamaño: líneas de código (LOC).
• Orientadas a la función: puntos de función (FP).
• Orientadas a casos de uso.
• Orientadas a objetos: miden cohesión, acoplamiento, herencia, etc.
📈 Objetivo d...