Guía Completa de Ingeniería de Software: Procesos y Metodologías Ágiles

Proceso Unificado (RUP)

Proceso de desarrollo de software: Conjunto de actividades necesarias para transformar requisitos de usuario en un sistema de software.

Aspectos clave del Proceso Unificado: Dirigido por casos de uso, centrado en la arquitectura, iterativo e incremental.

Importancia de los casos de uso: Guían los requisitos del sistema, diseño, implementación y pruebas. Es decir, guían todo el proceso de desarrollo.

Especificación funcional: Responde a la pregunta ¿Qué debe hacer el sistema?

Arquitectura de un sistema de software: Vista del diseño completo con las características más importantes resaltadas. Se describe mediante diferentes vistas del sistema en construcción e incluye los aspectos estáticos y dinámicos más significativos del sistema.

Analogía de la arquitectura de un sistema: La arquitectura es análoga al esqueleto cubierto por la piel, con el software como el músculo (sólo lo necesario para permitir que el esqueleto haga movimientos básicos).

Relación entre casos de uso y arquitectura: Cada producto tiene tanto una función como una forma. Los casos de uso deben encajar en la arquitectura y la arquitectura debe permitir el desarrollo de todos los casos de uso requeridos.

Naturaleza iterativa e incremental del UP: El desarrollo de un producto de software puede durar desde varios meses hasta un año o más. Se divide el trabajo en iteraciones (miniproyectos) que resultan en incrementos.

Selección de la implementación en cada iteración: Cada iteración trata un grupo de casos de uso que amplían la utilidad del producto y aborda los riesgos más importantes.

Beneficios de un proceso iterativo controlado:

  • Reduce el costo de los riesgos.
  • Reduce el riesgo de no cumplir con el calendario previsto.
  • Acelera el ritmo de desarrollo.
  • Facilita la adaptación a requisitos cambiantes.

Fases del Proceso Unificado: Inicio, elaboración, construcción y transición.

Finalidad de los hitos: Permiten a los directores tomar decisiones cruciales y controlar el progreso del trabajo.

Fase de inicio: Responde a las siguientes preguntas:

  • ¿Cuáles son las principales funciones del sistema para sus usuarios más importantes?
  • ¿Cómo podría ser la arquitectura del sistema?
  • ¿Cuál es el plan del proyecto y cuánto costará desarrollar el producto?

Fase de elaboración: Se especifican en detalle los casos de uso y se diseña la arquitectura del sistema. El resultado es una línea base de la arquitectura.

Fase de construcción: Resulta en la capacidad operativa y establece el producto básico. La pregunta principal al finalizar esta fase es: ¿Cubre el producto las necesidades de algunos usuarios de manera suficiente para una primera entrega?

Fase de transición: Se libera el producto. Se corrigen problemas e incorporan mejoras. Incluye actividades como fabricación, formación del cliente, línea de ayuda y asistencia.

Versión Beta vs. Versión Delta:

  • Versión Beta: Usuarios con experiencia prueban el producto e informan de defectos y deficiencias.
  • Versión Delta: Categoría de defectos con suficiente impacto para justificar una versión incrementada.

PSP y TSP

PSP (Personal Software Process): Proporciona métodos para estimar y planear, dar seguimiento al desempeño contra los planes y guiar el trabajo mediante procesos definidos.

Etapas del PSP:

  • PSP0 (Proceso de Medición Personal): Acepta las prácticas de desarrollo actuales, requiere registro del tiempo dedicado, cantidad y tipo de defectos.
  • PSP0.1: Mantiene estándar de codificación, medición de tamaño y propuestas de mejoramiento.
  • PSP1 (Proceso de Planeación Personal): Proporciona un marco para estimaciones, compromisos, evaluación del estado y registro de resultados. Se centra en la estimación del tamaño y reporte de pruebas.
  • PSP1.1: Se centra en la planeación de actividades y tiempos.
  • PSP2 (Proceso de Administración de la Calidad Personal): Busca estimar tantos defectos como sea posible antes de la inspección formal.
  • PSP2.1: Desarrollo de formatos de diseño estándar y estable.
  • PSP3: Escala el PSP para manejar código grande dividiendo el programa en pequeños incrementos.

TSP (Team Software Process): Guía para grupos en cada etapa del desarrollo después del análisis de requerimientos. Establece aspectos y prácticas para la administración de proyectos en equipo.

Objetivos del TSP:

  • Formar equipos autodirigidos.
  • Mostrar a los gerentes cómo administrar equipos.
  • Acelerar la mejora del CMM.
  • Proporcionar guías de mejoramiento para organizaciones con alta madurez.
  • Facilitar la enseñanza universitaria a equipos integrados con la industria.

Aspectos a establecer en cada corrida del TSP:

  • Proceso a usar.
  • Metas de calidad.
  • Seguimiento de metas de calidad.
  • Toma de decisiones del equipo.
  • Plan de respaldo si no se logran las metas de calidad.
  • Plan de respaldo si no se aprueba el plan.
  • Definición de roles en el equipo.
  • Asignación de roles en el equipo.

Características de los equipos autodirigidos del TSP:

  • De 3 a 20 ingenieros.
  • Establecen sus propias metas.
  • Establecen sus propios procesos y planes.
  • Realizan seguimiento del trabajo.

Métodos Ágiles

Desarrollo ágil de software: Métodos de ingeniería de software donde los requisitos y soluciones evolucionan mediante la colaboración de grupos autoorganizados y multidisciplinarios.

Iteración en desarrollo ágil: Unidad de tiempo (1 a 4 semanas) donde se desarrolla software. Incluye planificación, análisis de requisitos, diseño, codificación, revisión y documentación.

Meta de cada iteración: Tener una versión «demo» (sin errores) al final.

Énfasis de los métodos ágiles: Comunicación cara a cara en vez de documentación y software funcional como primera medida del progreso.

Críticas a los métodos ágiles: Considerados «indisciplinados» por la falta de documentación técnica.

Puntos relevantes del manifiesto ágil:

  • Satisfacer al cliente mediante la entrega temprana y continua de software con valor.
  • Software funcionando como medida principal de progreso.
  • Atención continua a la excelencia técnica y al buen diseño.
  • Simplicidad, maximizando la cantidad de trabajo no realizado.
  • Arquitecturas, requisitos y diseños emergentes de equipos autoorganizados.

XP (Extreme Programming): Metodología ágil formulada por Kent Beck.

Características de XP:

  • Desarrollo iterativo e incremental: Pequeñas mejoras, una tras otra.
  • Pruebas unitarias continuas: Automatizadas y frecuentes, incluyendo pruebas de regresión. Se aconseja escribir el código de prueba antes de la codificación.
  • Programación en parejas: El código es revisado y discutido mientras se escribe.
  • Integración frecuente con el cliente: Se recomienda que un representante del cliente trabaje junto al equipo de desarrollo.
  • Corrección de errores antes de añadir nueva funcionalidad: Hacer entregas frecuentes.

Simplicidad en XP: Simplifica el diseño para agilizar el desarrollo y facilitar el mantenimiento. También se aplica a la documentación; el código debe comentarse.

Retroalimentación en XP: La presencia del cliente permite conocer su opinión en tiempo real. Los ciclos cortos minimizan el retrabajo. El código y las pruebas permiten descubrir fallos.

Refactorización del código: Reescribir partes del código para aumentar su legibilidad y mantenibilidad sin modificar su comportamiento.

Scrum: Modelo de referencia con prácticas y roles para definir el proceso de desarrollo durante un proyecto.

Roles y conceptos en Scrum:

  • ScrumMaster: Mantiene los procesos y trabaja de forma similar al director del proyecto.
  • Product Owner: Representa a los interesados (internos o externos).
  • Sprint: Periodo donde el equipo crea un incremento de software potencialmente entregable.
  • Product Backlog: Conjunto de requisitos de alto nivel priorizados que definen el trabajo a realizar.

Lean Software Development: Adaptación de los principios de manufactura Lean (Toyota) al desarrollo de software.

Principios de Lean Software Development:

  • Eliminar los desperdicios: Todo lo que no añade valor al cliente.
  • Ampliar el aprendizaje: El desarrollo de software es un proceso de aprendizaje continuo.
  • Decidir lo más tarde posible: Retrasar las decisiones hasta que se basen en hechos.
  • Reaccionar tan rápido como sea posible: Entregar el producto sin defectos para recibir comentarios e incorporarlos en la siguiente iteración.