1. Definición de Ingeniería de Software según IEEE y Descripción de sus Capas
La Ingeniería de Software, según el IEEE, se define como una tecnología estratificada que implica la aplicación de un enfoque sistemático, disciplinado y cuantificable al desarrollo, operación y mantenimiento del software. En esencia, es la aplicación de la ingeniería al software.
Las capas de la Ingeniería de Software son:
- Enfoque de la calidad: Se refiere a la adopción de filosofías como la Gestión de la Calidad Total, Seis Sigma, etc., que promueven una cultura de mejora continua del proceso.
- Proceso: Constituye la base de la Ingeniería de Software. Mantiene unidos los estratos de la tecnología y permite el desarrollo racional y oportuno del software. Sirve como fundamento para la gestión de proyectos y da lugar a la generación de productos de trabajo como modelos, documentos, datos y reportes.
- Métodos: Proporcionan las técnicas o «cómo» técnicos para construir software. Abarcan tareas como la comunicación, el análisis de requisitos, el modelado del diseño y la construcción del programa.
- Herramientas: Ofrecen soporte automatizado o semiautomatizado para el proceso y los métodos. Se conocen como CASE (Computer-Aided Software Engineering).
2. Actividades Estructurales y sus Principios
- Comunicación: Implica una intensa colaboración con los clientes, incluyendo la investigación de requisitos.
- Principios: Escuchar, prepararse antes de comunicarse, designar un facilitador, preferir la comunicación cara a cara, tomar notas y documentar decisiones, fomentar la colaboración, mantenerse enfocado, usar diagramas si es necesario, avanzar tras llegar a un acuerdo y recordar que la negociación no es una competencia.
- Planeación: Se refiere a la elaboración del plan de trabajo de la ingeniería de software.
- Principios: Comprender el alcance del proyecto, involucrar a los participantes en la planeación, reconocer la naturaleza iterativa de la planeación, estimar en base a lo conocido, considerar los riesgos, ser realista, ajustar la granularidad, definir cómo se asegurará la calidad, describir el manejo del cambio y dar seguimiento al plan.
- Modelado: Consiste en la creación de modelos para entender mejor los requisitos y el diseño.
- Principios: El objetivo principal es desarrollar software, no crear modelos; viajar ligero (no crear más modelos de los necesarios); buscar la simplicidad; construir modelos adaptables al cambio; establecer un propósito explícito para cada modelo; adaptar los modelos al sistema; construir modelos útiles, pero no perfectos; no ser dogmático con la sintaxis; y obtener retroalimentación temprana.
- Construcción: Abarca la programación y las pruebas.
- Principios de codificación:
- Principios de preparación: Entender el problema, elegir el lenguaje y seleccionar un ambiente de programación.
- Principios de programación: Usar programación estructurada o por parejas, definir estructuras de datos adecuadas, entender la arquitectura del software y crear interfaces, y mantener la lógica condicional.
- Principios de validación: Realizar pruebas unitarias y corregir errores, y rediseñar el código si es necesario.
- Principios de la prueba: Una prueba exitosa es aquella que descubre un error no detectado previamente.
- Principios de codificación:
- Despliegue: Consiste en la entrega del software al cliente.
- Principios: Manejar las expectativas del cliente, ensamblar y probar el paquete completo, establecer un régimen de apoyo, proporcionar materiales de aprendizaje adecuados y corregir el software defectuoso antes de la entrega.
3. Estructura del Proceso de Software y Actividades Sombrilla
La estructura del proceso establece la base para un proceso de software completo. Identifica actividades aplicables a todos los proyectos, independientemente de su tamaño o complejidad. Incluye un conjunto de actividades sombrilla que se aplican a lo largo del proceso:
- Seguimiento y control del proyecto de software: Evalúa el progreso del proyecto.
- Gestión del riesgo: Evalúa los riesgos del proyecto.
- Aseguramiento de la calidad del software: Define y conduce las actividades para garantizar la calidad.
- Revisiones técnicas formales: Busca y elimina errores.
- Medición: Del proceso, proyecto y producto.
- Gestión de la configuración del software: Maneja los efectos del cambio a lo largo del proceso.
- Gestión de la reutilización: A través de componentes.
- Preparación y producción del producto de trabajo: Abarca modelos, documentos, etc.
4. Proceso Unificado: Fases y Características
El Proceso Unificado es un proceso de software «impulsado por el caso de uso, centrado en la arquitectura, iterativo e incremental». Busca integrar las mejores características de los modelos tradicionales con los principios del desarrollo ágil de software.
Fases del Proceso Unificado:
- Inicio: Comprende la comunicación con el cliente y la planeación. Se identifican los requisitos del sistema mediante casos de uso.
- Elaboración: Refina y expande los casos de uso preliminares. Incluye la elaboración de modelos de caso de uso, análisis, diseño, implementación y despliegue.
- Construcción: Se desarrollan o adquieren los componentes del software para hacer operativos los casos de uso. Se realizan pruebas de unidad e integración.
- Transición: El software se entrega a los usuarios finales para pruebas beta. Se recopila retroalimentación sobre defectos y cambios necesarios. Se crean manuales de usuario y procedimientos de instalación.
5. Manifiesto Ágil: Principios Clave
El Manifiesto Ágil propone una filosofía de desarrollo de software basada en la colaboración, la adaptabilidad y la entrega de valor al cliente. Se resume en cuatro valores fundamentales:
- Individuos e interacciones sobre procesos y herramientas.
- Software funcionando sobre documentación extensiva.
- Colaboración con el cliente sobre negociación de contratos.
- Respuesta al cambio sobre seguir un plan.
Tres principios clave del Manifiesto Ágil son:
- Satisfacer al cliente mediante la entrega temprana y continua de software con valor.
- Aceptar que los requisitos cambien, incluso en etapas tardías del desarrollo, para proporcionar una ventaja competitiva al cliente.
- Los responsables de negocio y los desarrolladores deben trabajar juntos de forma cotidiana durante todo el proyecto.
- Las mejores arquitecturas, requisitos y diseños emergen de equipos auto-organizados.
6. SWEBOK y su Primera Área de Conocimiento
SWEBOK (Software Engineering Body of Knowledge) es una guía que describe el conocimiento generalmente aceptado sobre la ingeniería de software. En su primera área de conocimiento, Requisitos de Software, SWEBOK se centra en la obtención, análisis, especificación y validación de los requisitos del software. Propone un marco para comprender y gestionar las necesidades de los stakeholders y traducirlas en requisitos claros y concisos que sirvan como base para el desarrollo del software.