Fundamentos de la Ingeniería del Software: Modelos de Ciclo de Vida y Metodologías
1. La Crisis del Software
Según los datos del Informe del Caos (Chaos Report), los resultados de los proyectos de software se distribuyen de la siguiente forma:
- Éxito: 16,2%
- Cancelados: 31,1%
- Con problemas: 52,7%
Factores en proyectos con problemas
- Falta de información por parte de los usuarios.
- Especificaciones y requisitos incompletos.
- Especificaciones y requisitos cambiantes.
- Expectativas no realistas.
- Objetivos poco claros.
Factores en proyectos cancelados
- Requisitos incompletos.
- Falta de implicación de los usuarios.
- Expectativas no realistas.
- Especificaciones y requisitos cambiantes.
- Desestimación del proyecto («ya no lo necesito»).
Causas principales de proyectos fallidos
- Requisitos incompletos.
- Falta de participación del cliente.
- Recursos inadecuados.
- El usuario solicita características imposibles.
- Falta de soporte de gestión.
- Cambios continuos en los requisitos.
- Planificación incorrecta.
2. Fundamentos de la Ingeniería del Software
La ingeniería del software se define como la aplicación inteligente de principios probados, técnicas, lenguajes y herramientas para la creación y el mantenimiento, dentro de un coste razonable, de software que satisfaga plenamente las necesidades de los usuarios.
Elementos fundamentales
- Procesos: Definen la secuencia en la que se aplican los métodos, los documentos que deben generarse, los controles de calidad y las métricas que permiten evaluar el progreso.
- Métodos: Indican cómo construir técnicamente el software, incluyendo criterios explícitos de calidad.
- Herramientas: Proporcionan soporte automático o semiautomático para aplicar dichos métodos.
Procesos principales y de apoyo
- Mantenimiento: Proceso primario orientado a mejorar, adaptar y corregir el software una vez que se encuentra en fase de explotación. Su coste suele ser el más elevado a lo largo de todo el ciclo de vida. Se clasifica en cuatro tipos:
- Perfectivo
- Adaptativo
- Correctivo
- Preventivo
- Aseguramiento de la calidad (SQA): Proceso de apoyo cuyo fin es garantizar un determinado estándar de calidad. En este ámbito, las Revisiones Técnicas Formales (RTF) son reuniones especializadas donde los miembros del equipo de SQA examinan los productos de trabajo y la marcha del proceso de desarrollo.
- Gestión de la configuración: Proceso de apoyo que identifica, controla e informa sobre las modificaciones en los artefactos generados durante el ciclo de vida: documentación, datos, código fuente, ejecutables, etc. (control de versiones).
3. El Ciclo de Vida del Software
El ciclo de vida del software constituye un marco de referencia que abarca los procesos, actividades y tareas involucradas en el desarrollo, explotación y mantenimiento del producto, cubriendo la vida del sistema desde su definición inicial hasta el cese definitivo de su uso.
Asimismo, el ciclo de vida define el enfoque general del desarrollo, detallando qué procesos y tareas se llevarán a cabo, en qué secuencia ordenada y qué entregables se presentarán al cliente.
Tipos de modelos de ciclo de vida
- Ciclo de vida clásico (en cascada): Cada fase inicia únicamente cuando concluye la fase anterior. Es el más sencillo de planificar y representa el modelo ideal teórico.
- Cascada con subsistemas: Diseñado para desarrollos complejos; desglosa el ciclo de vida en dos niveles: nivel de sistema y nivel de hardware/software.
- Ciclos de vida evolutivos: Afrontan la incertidumbre mediante sucesivas iteraciones estructuradas bajo el esquema de requisitos-desarrollo-evaluación.
- Ciclo de vida incremental: Estructurado mediante repeticiones consecutivas de ciclos en cascada. Se suele implementar en proyectos de gran escala.
- Ciclo de vida iterativo: Se basa también en la repetición de modelos en cascada, siendo ideal cuando los requisitos no están definidos de forma clara desde el inicio.
- Métrica 3: Marco metodológico que permite articular diversos ciclos de vida y metodologías, tanto estructuradas como orientadas a objetos.
- Proceso Unificado (UP): Ciclo de vida de carácter incremental e iterativo, dirigido principalmente por casos de uso, en el que las actividades de desarrollo se planifican y programan rigurosamente.
4. Técnicas y Metodologías de Desarrollo
Ingeniería inversa y Reingeniería
- Ingeniería inversa: Consiste en analizar el resultado de una fase avanzada del software para deducir y obtener el resultado de una etapa anterior (por ejemplo, examinar el código fuente para extraer los modelos de diseño).
- Reingeniería: Basada en el análisis del producto de una fase para recuperar etapas precedentes (como el análisis de código para deducir el diseño) con el objetivo de reestructurarlo, modernizarlo o mejorar su mantenibilidad.
Scrum
Scrum es un marco ágil de gestión de proyectos que concibe el desarrollo de software como un proceso empírico y no totalmente predecible o definido formalmente. Por ello, prioriza el control adaptativo y la inspección continua frente a la planificación rígida. Resulta especialmente aconsejable en entornos con requisitos emergentes y altamente cambiantes.
Ingeniería de Requisitos
La ingeniería de requisitos comprende el proceso sistemático, cooperativo e iterativo orientado a analizar un problema, documentar las observaciones resultantes a través de múltiples modelos de representación y verificar formalmente la exactitud y validez del conocimiento adquirido.