clase05 ingenieria de software
Clase 5 de Ingeniería de Software
Introducción a la Evaluación y Mejora del Proceso
- En la clase anterior se revisaron conceptos fundamentales sobre el proceso de desarrollo de software, incluyendo actividades, acciones y tareas involucradas.
- Se introduce el tema de evaluación y mejora del proceso, destacando que tener un proceso no garantiza la entrega a tiempo ni la satisfacción del cliente.
Importancia de los Estándares en el Desarrollo de Software
- La evaluación del proceso es crucial para asegurar que cumpla con criterios esenciales para el éxito en ingeniería de software.
- Es necesario basarse en estándares y normas que midan la calidad del proceso a lo largo del tiempo, tanto en proyectos individuales como en toda la organización.
Modelos de Madurez y Capacidades
- Se menciona el modelo SM (CMMI), que mide la madurez e integración del proceso mediante mejores prácticas derivadas de organizaciones industriales.
- Este modelo incluye cinco fases: inicio, diagnóstico, establecimiento, actuación y aprendizaje.
Historia y Evolución de los Procesos
- El desarrollo inicial del modelo CMMI surgió tras un análisis realizado por 200 ingenieros en EE.UU. para integrar procesos efectivos.
- Este estándar ha sido adoptado ampliamente por organizaciones para evaluar y mejorar sus procesos a lo largo del tiempo.
Normas ISO para Calidad en Software
- Se discuten otros estándares como CMMI y SPICE (ISO/IEC 15504), que proporcionan técnicas diagnósticas para evaluar la madurez organizacional.
- Las normas ISO ayudan a las organizaciones a desarrollar evaluaciones objetivas sobre sus procesos, promoviendo certificaciones que aseguran calidad.
Modelos Prescriptivos en Desarrollo de Software
- Se menciona ISO 9001:2000 como un estándar genérico aplicable a cualquier organización interesada en mejorar su calidad general.
¿Cómo abordar el desarrollo de software en un entorno cambiante?
La naturaleza del orden en el desarrollo de software
- El orden no es absoluto; en el desarrollo de software, se enfrenta a un ambiente cambiante que requiere flexibilidad. Los modelos rígidos intentan imponer orden al caos inherente.
- Algunos creen que el "orden absoluto" implica ausencia de variabilidad, lo cual puede ser ventajoso en entornos impredecibles, pero la realidad es que el cambio es inevitable y debe ser considerado.
Modelos de desarrollo: Cascada vs. Modelo B
- En el modelo en cascada, los requerimientos deben estar bien definidos y ser estables desde el inicio. Si hay cambios, la rigidez del modelo puede complicar el proceso.
- El modelo B es una variante del modelo en cascada que permite retroalimentación continua entre las etapas, mejorando la comunicación y aseguramiento de calidad durante todo el proceso.
Aseguramiento de calidad y pruebas
- A medida que se avanza hacia abajo en el modelo B, se generan representaciones técnicas más detalladas del problema y su solución. Esto incluye pruebas para validar cada uno de los modelos creados.
- Se realizan diversas pruebas (unitarias, integración, sistema y aceptación) para asegurar la calidad del producto final.
Desafíos del modelo B
- Es raro que los proyectos sigan un flujo secuencial estricto; esto puede generar confusión debido a la retroalimentación constante entre etapas.
- Los clientes a menudo tienen dificultades para definir sus requerimientos claramente sin algo tangible para mostrarles.
Proceso incremental como alternativa
- El modelo incremental permite entregar funcionalidades por fases. Cada incremento mejora sobre lo anterior hasta llegar al producto final deseado.
Incrementos en el Desarrollo de Software
Primer Incremento: Funciones Básicas
- En el primer incremento se implementan funciones básicas de administración de archivos, edición y producción del documento.
- El segundo incremento introduce herramientas más sofisticadas para la edición y mejora del documento.
Proceso Incremental
- Es común que el primer incremento sea un producto fundamental con requerimientos básicos, sin muchas características adicionales.
- Cada funcionalidad se evalúa por parte del cliente al finalizar su desarrollo, lo que permite refinar versiones futuras.
- Este modelo es útil cuando hay limitaciones de personal y tiempo para implementar un proyecto completo.
Evolución a través de Prototipos
- Se menciona un modelo evolutivo basado en prototipos, donde los sistemas complejos evolucionan con el tiempo y los requerimientos cambian.
- La planificación rápida y la construcción del prototipo son esenciales para cumplir con plazos ajustados en el mercado.
Iteración y Retroalimentación
- Los ciclos iterativos permiten ajustar el prototipo según las necesidades cambiantes del cliente, facilitando una mejor comprensión de los requerimientos.
- Este enfoque es especialmente útil cuando hay incertidumbre sobre la eficiencia o adaptabilidad del software.
Construcción y Evaluación del Prototipo
- La comunicación entre participantes es clave para definir objetivos generales y detectar áreas que requieren mayor definición.
Problemas y Soluciones en el Desarrollo de Prototipos
Desafíos Iniciales en el Uso de Prototipos
- Al sumar múltiples softwares en un prototipo, es probable que el cliente no utilice todas las herramientas, lo que puede generar confusión sobre la funcionalidad real del producto.
- Los participantes pueden asumir que un prototipo funcional es la versión final del software, ignorando que aún no se ha considerado la calidad o el mantenimiento a largo plazo.
Compromisos y Eficiencia en Prototipos
- Para acelerar la funcionalidad del prototipo, se pueden hacer compromisos inadecuados como usar sistemas operativos inapropiados o algoritmos ineficientes, lo cual afecta negativamente al resultado final.
- La familiaridad con ciertos lenguajes de programación puede llevar a soluciones subóptimas, ya que no siempre garantizan ser las mejores opciones para el cliente.
Modelos Evolutivos y su Aplicación
Modelo Espiral
- El modelo espiral permite definir requerimientos mediante prototipos iniciales y luego realizar ingeniería de software enfocada en la calidad.
- Este modelo combina aspectos controlados del modelo en cascada con la naturaleza interactiva de los prototipos, facilitando un desarrollo rápido y efectivo.
Características Clave del Modelo Espiral
- Se caracteriza por un enfoque cíclico que incrementa gradualmente la definición e implementación del sistema mientras reduce riesgos asociados.
- Incluye puntos de referencia para asegurar el compromiso entre los participantes hacia soluciones mutuamente satisfactorias durante cada iteración.
Iteraciones y Retroalimentación Continua
- Las primeras entregas pueden ser modelos o prototipos; las versiones posteriores son más completas gracias a ajustes basados en retroalimentación continua.
- Cada ciclo alrededor de la espiral resulta en especificaciones mejoradas y ajustes necesarios según las necesidades cambiantes del cliente.
Adaptabilidad y Riesgos Técnicos
Ciclos Continuos de Mejora
- A diferencia de otros modelos, el modelo espiral se adapta a lo largo de toda la vida útil del software, permitiendo mejoras continuas basadas en interacciones múltiples.
Consideraciones Finales sobre Riesgos
Modelado Concurrente en Ingeniería de Software
Estados de Actividades en Ingeniería de Software
- La actividad modelada puede estar inactiva, esperando requerimientos, lo que refleja la naturaleza dinámica del desarrollo de software.
- Todas las actividades de ingeniería del software existen concurrentemente pero en diferentes estados; por ejemplo, el modelado y la construcción pueden estar activos mientras otras áreas están inactivas.
- Cada actividad o tarea en ingeniería de software tiene un estado representativo que indica su progreso dentro del ciclo de desarrollo.
Transiciones entre Estados
- Las actividades pasan por varios estados: desarrollo, espera, revisión y evaluación. Este flujo es crucial para entender cómo se gestionan los cambios durante el proceso.
- Una vez completados los requisitos, una actividad puede pasar a desarrollo y luego a revisión; si se cumplen ciertos criterios, puede considerarse terminada.
Ciclos y Concurrentes
- Los ciclos en cada actividad permiten que múltiples tareas se realicen simultáneamente, lo cual es esencial para la eficiencia en proyectos complejos.
- El modelado concurrente define eventos que desencadenan transiciones entre estados, facilitando una gestión más ágil del proceso.
Aplicación del Modelado Concurrente
- Este enfoque es aplicable a todos los tipos de desarrollo de software y ofrece una visión clara del estado actual del proyecto sin limitarse a secuencias lineales.
- Se menciona el modelo evolutivo como parte integral del proceso concurrente; combina prototipos con otros modelos como el espiral.
Desafíos en Planificación Evolutiva
- La incertidumbre sobre los ciclos necesarios para completar un proyecto complica la planificación debido a su naturaleza no lineal.
- Los procesos evolutivos deben equilibrar velocidad y calidad; si son demasiado rápidos pueden volverse caóticos, mientras que si son lentos afectan la productividad.
Objetivos de Modelos Evolutivos
- Se prioriza desarrollar software rápidamente sobre mantener altos estándares de calidad; sin embargo, el objetivo debe ser encontrar un equilibrio entre ambos aspectos.