Apuntes sobre Proceso de Desarrollo de Software

Contexto y Orígenes de la Ingeniería de Software

  • Década de los 60: "Crisis del software" debido al aumento del HW, complejidad, y tamaño de los problemas.
  • Enfoque de especialistas en problemas acotados.
  • Propuesta para un enfoque ingenieril en el desarrollo de software.

Definición y Objetivos de la Ingeniería de Software

  • Disciplina para el desarrollo sistemático, eficaz y eficiente de software.
  • Objetivos:
    • Maximizar la calidad.
    • Maximizar la productividad.
    • Minimizar los riesgos.

Interrelación de Elementos en el Desarrollo de Software

  • Interesado identifica requisitos.
  • Requisitos exigen esfuerzo para crear una solución.
  • Solución se enfoca en una oportunidad.
  • Sistema de software satisface al interesado.
  • Forma de trabajo aplica el equipo.
  • Equipo apoya el trabajo, que actualiza y cambia la forma de trabajo.
  • Trabajo restringe y delimita el sistema de software.
  • Sistema de software emplea y ayuda a tratar los requisitos.

Ciclo de Vida del Software

  • Proceso desde la concepción inicial hasta el retiro del software.
  • Importancia de un ciclo de vida:
    • Determinar el orden de las actividades.
    • Establecer criterios de transición entre actividades.
    • Definir entradas y salidas de cada actividad.
    • Describir los estados en cada actividad.

Modelos del Ciclo de Vida

  • Describen las etapas y estados de un producto de software.
    • Concepción.
    • Desarrollo.
    • Puesta en marcha.
    • Mantenimiento.
    • Retirada.

Diferencias entre Modelos de Ciclo de Vida

  • Alcance del ciclo.
  • Características de las actividades.
  • Estructura y sucesión de las actividades, incluyendo realimentación e iteraciones.

Modelo de Desarrollo en Cascada (Lineal Secuencial)

  • Primer modelo concebido (Royce, 1971).
  • Actividades suceden de forma lineal.
  • Ventajas:
    • Claridad en el estado del proyecto y las tareas.
  • Desventajas:
    • No refleja la realidad.
  • Fases:
    • Análisis de Requerimientos.
    • Diseño del Sistema.
    • Diseño de Programas.
    • Codificación.
    • Testing Unitario e Integrado.
    • Testing del Sistema.
    • Testing de Aceptación.
    • Operación y Mantención.

Uso Recomendado del Modelo en Cascada

  • Requisitos bien conocidos.
  • Productos estables.
  • Tecnología entendida.
  • Sin requisitos ambiguos.
  • Experiencia previa en cascada.
  • Proyecto corto.

Modelo en V

  • Variación del modelo en cascada.
  • Actividades de prueba son contraparte de desarrollo.
  • Forma ciclos desarrollo-verificación-desarrollo.
  • Propuesto en Alemania en 1992.

Uso Recomendado del Modelo en V

  • Proyectos de alcance pequeño a mediano.
  • Requisitos claramente definidos.
  • Recursos técnicos completamente disponibles.
  • Experiencia en el uso de los recursos.

Modelo de Desarrollo en Fase

  • Desarrollo en fases debido a demandas del mercado.
  • Diseño del sistema para entregas parciales.
  • Usuario obtiene funcionalidad parcial durante el desarrollo.
  • Dos sistemas en paralelo:
    • Desarrollo: siguiente versión.
    • Producción: versión actual usada por el cliente.

Desarrollo Iterativo-Incremental

  • Incremental: partición en subsistemas por funcionalidad, agregando en cada versión.
  • Iterativo: sistema completo al inicio, con cambios y mejoras en cada versión.

Ventajas del Desarrollo Iterativo-Incremental

  • Entrenamiento temprano de usuarios.
  • Detección temprana de problemas.
  • Enfoque en diferentes áreas de experticia en cada versión.
  • Esfuerzo focalizado.

Modelo en Espiral

  • Orden de ejecución determinado por análisis de riesgo (Boehm, 1986).
  • Iterativo: Planificación -> Análisis de Riesgo -> Ingeniería -> Evaluación -> Planificación -> …
  • Evaluación de alternativas y mitigación de riesgos en cada iteración.

Ventajas del Modelo en Espiral

  • Alto manejo de riesgo.
  • Buen manejo de proyectos críticos.
  • Buena documentación.
  • Facilidad para agregar funcionalidades.
  • Software en etapas tempranas.

Desventajas del Modelo en Espiral

  • Costoso.
  • Requiere experiencia en análisis de riesgo.
  • Éxito depende del análisis de riesgo.
  • No adecuado para proyectos pequeños.

Uso Recomendado del Modelo en Espiral

  • Costos y riesgos importantes.
  • Proyectos de tamaño variable.
  • Requisitos complejos o inciertos.
  • Nuevas líneas de productos.
  • Cambios significativos esperados.

Proceso de Desarrollo de Software (PDS)

  • Unifica actividades y prácticas para cubrir necesidades de desarrollo.
  • Objetivo: garantizar software adecuado, conforme a especificaciones, en tiempo y costo.
  • Modelar el proceso mejora el desarrollo y la calidad.

Ingeniería de Procesos de Software (SPE)

  • Modelar, diseñar, mejorar y aplicar procesos con lenguajes de modelado de procesos (PML).

SPEM (Software Process Engineering Metamodel)

  • Lenguaje basado en MOF y metamodelo UML.
  • Sintaxis y estructura para procesos de desarrollo, incluyendo:
    • Roles.
    • Tareas.
    • Artefactos.
    • Lista de verificación.
    • Productos de trabajo.
    • Técnicas y herramientas.
    • Estructuras de trabajo.
    • Capacidad de rastreo y refinamiento.
    • Ayuda sensible al contexto.
    • Descripción textual.

Elementos Clave de Procesos

  • Roles.
  • Work products (artefactos).
  • Resultados (intangibles).
  • Entregables (artefactos + resultados).
  • Tareas.
  • Guías.
  • Checklists.
  • Plantillas.

RUP (Rational Unified Process)

  • Framework de procesos para describir procesos de desarrollo específicos.
  • Centrado en arquitectura, iterativo-incremental.

Dimensiones de RUP

  • Horizontal (tiempo): ciclo de vida en fases e iteraciones.
  • Vertical (workflows): disciplinas de proceso.

Fases de RUP

  • Concepción: visión, requisitos de alto nivel, ámbito, decisión de factibilidad.
  • Elaboración: requisitos detallados (80%), arquitectura, prototipos.
  • Construcción: análisis, diseño, desarrollo, testing, beta desplegable.
  • Transición: despliegue, post-mortem, producto liberado.

Elementos Clave Adicionales de RUP

  • Disciplinas (Modelado de negocio, Requisitos, Análisis y Diseño, Implantación, Prueba (test), Despliegue, Gestión de Cambio y Configuración, Gestión del Proyecto, Ambiente).
  • Roles (36).
  • Workproducts (76) -> Artefactos.

OpenUP

  • Versión ligera de RUP.
  • Disciplinas: 5.
  • Roles: 7.
  • Workproducts: 17.

Fases de OpenUP

  • Inicio: alcance y arquitectura del proyecto.
  • Elaboración: priorizar workstreams.
  • Construcción: desarrollar, probar y entregar work packages.
  • Transición: solución beta para validar expectativas del negocio.

EPF Composer

  • Herramienta para generar marcos de procesos de software.
  • Basado en modelos reutilizables.
  • Ambiente de desarrollo Eclipse.
  • Permite autorizar, parametrizar y publicar métodos.

Evolución de los Procesos de Desarrollo

  • Demanda por investigación en problemas relacionados a PDS.
  • Inserción de estándares de la industria.
  • Importancia de paradigmas de modelamiento.

Conclusión sobre Modelos y Procesos de DSW

  • No existe una “bala de plata”.
  • Seleccionar proceso/modelo según el equipo y el problema.

Mejoramiento de Procesos de Software (SPI)

  • Principio básico: Mejorar la calidad del producto mejorando la calidad del proceso de software.
  • La capacidad de los procesos puede ser mejorada.

Proceso de Mejora

  • Mejorar el proceso midiendo, previniendo, documentando, resolviendo problemas y automatizando.

Diagrama ETVX

  • Modelo Entry-Task-Verification-eXit para controlar actividades.
  • Estructura requiere criterios de entradas, tareas, verificaciones y criterios de salida.

Objetivos de SPI

  • Entender el estado presente.
  • Seleccionar áreas de mejoramiento.
  • Enfocar e insertar valor agregado.
  • Combinar procesos efectivos con personas motivadas.

Modelo de Madurez de Capacidades (CMMI)

  • Marco evolutivo para la mejora continua de procesos.
  • Ventajas: específico para software, áreas clave de procesos, modelo de evaluación.