Cuestiones Clave de Ingeniería del Software
Define el conjunto de métodos para las distintas actividades → Metodología
Expresa visualmente lo esencial de un sistema sin proporcionar detalles excesivos → Modelo de Sistema
En software abarca desde la creación a la entrega de un producto software de calidad concreto → Proceso
Paso para llevar a cabo cierto aspecto del desarrollo de software, flujo de trabajo, tipo de trabajo como Análisis, Diseño, Pruebas → Actividad
Etapa temporal en la que se puede subdividir un proceso → Modelo de Proceso
Pequeñas acciones que contribuyen a otras mayores para lograr completar una actividad → Tarea
Es un grupo de estrategias, actividades, métodos y tareas que sirve de plantilla para lograr una meta → Modelo de Proceso
Define las tareas para completar una actividad → Método
Plan que implica elección de tecnología, arquitectura, utilización de prototipos o no → Estrategia
Cuadro visual de procesos de desarrollo de software
Proceso | Definición clave | Fases principales | Características especiales |
|---|---|---|---|
Cascada | Enfoque secuencial y lineal donde cada fase debe completarse antes de pasar a la siguiente. | Requisitos → Diseño → Implementación → Pruebas → Despliegue → Mantenimiento | – Estructura fija y planificada. – Difícil adaptación a cambios una vez avanzadas las fases. – Ideal para proyectos con requisitos claros y estables. |
Iterativo e Incremental | Desarrollo en ciclos repetitivos donde se van entregando versiones parciales del software. | Ciclo: Planificación → Diseño → Implementación → Pruebas → Evaluación (repite) | – Flexibilidad para cambios durante el desarrollo. – Entregas frecuentes y mejoras continuas. – Adaptable a diferentes etapas del proyecto. |
Proceso Unificado (PU) | Enfoque iterativo con fases de desarrollo y validación, centrado en la gestión de riesgos y la arquitectura. | 1. Inicio: definición de visión y requisitos. 2. Elaboración: diseño de la arquitectura. 3. Construcción: desarrollo del sistema. 4. Transición: despliegue y mantenimiento. | – Enfoque en casos de uso y arquitectura sólida. – Fuerte énfasis en la gestión de riesgos y la calidad. – Documentación detallada y estructura iterativa. |
Ágil (Scrum, XP, etc.) | Desarrollo iterativo e incremental con enfoque en la colaboración continua con el cliente. | Ciclo: Planificación → Desarrollo → Pruebas → Revisión y adaptación | – Iteraciones cortas (2-4 semanas). – Alta adaptabilidad y feedback constante. – Enfoque colaborativo entre el equipo de desarrollo y el cliente. |
Modelo V | Similar a Cascada, pero con enfoque paralelo en la validación y verificación a lo largo de todo el proceso. | Requisitos → Verificación Diseño → Pruebas de integración Implementación → Pruebas de aceptación | – Enfoque paralelo de desarrollo y pruebas. – Se realiza la validación en cada fase de desarrollo. – Mejor para proyectos donde las pruebas tempranas son esenciales. |
Cascada: Secuencial, difícil de adaptarse a cambios.
Iterativo e Incremental: Flexible, entregas frecuentes, mejora continua.
Proceso Unificado (PU): Arquitectura sólida, gestión de riesgos, documentación detallada.
Ágil: Feedback constante, adaptabilidad, interacción con el cliente.
Modelo V: Pruebas paralelas, validación en cada fase de desarrollo.
Cuadro visual de arquitecturas de software (5 primeros)
Arquitectura | Definición clave | Características especiales |
|---|---|---|
Arquitectura de Capas | La aplicación se divide en diferentes capas funcionales (presentación, lógica de negocio, datos). | – Separación de responsabilidades. – Facilita mantenimiento y escalabilidad. – Independencia entre capas, cambios en una capa no afectan a las otras. |
Cliente-Servidor | Divide el sistema en clientes (que piden servicios) y servidores (que los proporcionan). | – Distribución de responsabilidades: servidor gestiona recursos, cliente interactúa con el usuario. – Escalabilidad: se pueden agregar más clientes o servidores. |
Microservicios | El sistema se divide en microservicios independientes, cada uno con su propia función y base de datos. | – Escalabilidad horizontal: cada microservicio se puede escalar de forma independiente. – Desarrollo y despliegue independiente de cada microservicio. |
Monolítica | El sistema es una única unidad de código que incluye todas las funcionalidades. | – Desarrollo rápido en fases iniciales. – Difícil de mantener y escalar a medida que crece. – Todos los componentes están interrelacionados. |
Repositorio | Un repositorio centralizado almacena datos compartidos entre todos los componentes. | – Acceso centralizado a datos, facilita la coherencia. – Puede generar dependencias entre componentes. |
Arquitectura de Capas: Separación de responsabilidades, facilita mantenimiento y escalabilidad.
Cliente-Servidor: Distribución de tareas entre cliente y servidor, escalabilidad.
Microservicios: Descomposición en servicios pequeños, escalabilidad independiente.
Monolítica: Todo en una unidad, rápido desarrollo inicial, difícil de escalar.
Repositorio: Acceso centralizado a los datos, coherencia, pero genera dependencias.
Aspecto | Arquitectura de Software | Proceso de Desarrollo de Software |
|---|---|---|
Enfoque | Estructura y organización del sistema de software. | Conjunto de pasos y metodologías para desarrollar el software. |
Propósito | Asegurar que el sistema sea escalable, seguro y eficiente. | Guiar la creación del software, gestionando tareas, tiempos y recursos. |
Ámbito | Se enfoca en la estructura interna y organización. | Se enfoca en la gestión del proceso de desarrollo. |
Objetivos | Definir la arquitectura (patrones, interacciones, etc.). | Planificar, ejecutar y entregar el software de manera efectiva. |
Enfoque a largo plazo | Tiene un impacto duradero en la forma en que se estructura el sistema. | Abarca el ciclo completo de desarrollo y entrega de software. |
En resumen:La arquitectura de software define cómo se organiza y estructura el sistema. El proceso de desarrollo define cómo se lleva a cabo la creación del software desde su inicio hasta su entrega.
CUESTIONES TEMA 2
Diferencias entre el modelo evolutivo y el incremental
El modelo evolutivo se basa en desarrollar el software de forma cíclica, comenzando con una versión básica y mejorándola gradualmente a lo largo del tiempo, con feedback de los usuarios.
El modelo incremental también desarrolla el sistema en versiones, pero cada versión es una parte funcional completa que puede ser utilizada independientemente. Se enfoca más en entregar partes del sistema por separado y de manera escalonada.
¿Cuáles son las ventajas del desarrollo evolutivo?
Ventajas:
Permite adaptarse a cambios a lo largo del proceso.
Entrega temprana de versiones funcionales.
Facilita la incorporación de feedback continuo de los usuarios.
Reduce el riesgo de fallos importantes, ya que se detectan errores temprano.
¿Cuáles son las 7 fases del PU?
Las 7 fases del Proceso Unificado (PU) son:
Inicio
Elaboración
Construcción
Transición
Despliegue
Mantenimiento
Retiro
Estas fases reflejan las etapas de desarrollo del software en un ciclo iterativo.
¿Es lo mismo interacción que iteración?
No. Iteración es el proceso de repetir un conjunto de actividades o fases, mientras que interacción se refiere a la comunicación o colaboración entre los participantes del proyecto (desarrolladores, clientes, usuarios, etc.) a lo largo del ciclo de vida del software.
¿Una iteración adecuada en el PU es de 24 semanas?
No necesariamente. Las iteraciones en el Proceso Unificado (PU) pueden variar en duración, dependiendo de los objetivos del proyecto. Aunque 24 semanas podría ser un tiempo adecuado en algunos proyectos grandes, por lo general, las iteraciones tienden a ser más cortas (entre 2 a 6 semanas).
Cita las características más importantes del PU
Iterativo e incremental.
Centrado en el riesgo.
Orientado a los casos de uso.
Fases bien definidas: Inicio, Elaboración, Construcción y Transición.
Uso de herramientas y arquitectura sólida.
Adaptable a diferentes tipos de proyectos.
CUESTIONES FINALES TEMA 2
¿Podríamos decir que en el PU inicio=requisitos y construcción=implementación?
Sí, en el Inicio se definen los requisitos del sistema, mientras que en la fase de Construcción se lleva a cabo la implementación. Aunque no son fases exactamente equivalentes, la correspondencia básica es válida para simplificar el proceso.
¿El PU es formal, rígido y exigente y con muchos pasos?
El PU no es ni excesivamente formal, ni rígido, ni exigente en el sentido tradicional. Tiene una estructura definida con fases iterativas e incrementales que permiten adaptarse y personalizarse a las necesidades del proyecto. Tiene varios pasos organizados, pero se pueden ajustar según las circunstancias del equipo y del proyecto. .
¿En el Inicio hay que identificar la mayoría de los requisitos y escribir algún caso de uso?
Sí, en la fase de Inicio es crucial identificar los requisitos iniciales del proyecto, y se pueden escribir casos de uso que ayuden a entender las funcionalidades básicas del sistema. Sin embargo, el detalle completo de los requisitos se desarrolla progresivamente a lo largo del proceso.
¿En el PU hay que detallar exhaustivamente todos los requisitos antes de empezar el Diseño o la Implementación?
No, en el PU los requisitos no necesitan ser exhaustivos desde el principio. El proceso es iterativo, por lo que los requisitos se refinan a medida que avanza el proyecto, y el diseño y la implementación comienzan con los requisitos más prioritarios, ajustándose en cada iteración.
CUESTIONES TEMA 4
¿Cuáles son las ventajas de documentar una arquitectura de software?
Ventajas:
Claridad: Facilita la comprensión del sistema por parte de todos los involucrados.
Mantenimiento: Permite actualizar el sistema de manera más eficiente al conocer su estructura.
Comunicaciones: Mejora la comunicación entre los desarrolladores, los stakeholders y otros equipos.
Evaluación de calidad: Ayuda a evaluar la calidad de la arquitectura y a realizar mejoras.
¿Qué es el diseño arquitectónico?
Diseño arquitectónico es la fase del desarrollo de software en la que se definen las estructuras y componentes principales del sistema. Se especifica cómo se organizarán los módulos, cómo interactuarán entre sí y cómo se abordarán los requisitos técnicos y no funcionales (como rendimiento, seguridad, escalabilidad).
¿Qué 3 decisiones hay que tomar en la arquitectura?
Selección de patrones arquitectónicos: Elegir el patrón adecuado según los requisitos.
Asignación de responsabilidades: Determinar qué componentes asumirán qué roles dentro del sistema.
Estrategias de comunicación: Decidir cómo los diferentes componentes interactuarán entre sí.
¿Por qué pueden aparecer conflictos en una arquitectura que requiere tanto disponibilidad como seguridad?
Pueden surgir conflictos porque la alta disponibilidad generalmente implica redundancia y acceso constante, lo cual puede entrar en conflicto con la seguridad, que a menudo requiere medidas que limitan el acceso o complican la redundancia (como cifrado o autenticación rigurosa). Este balance es complicado, ya que la disponibilidad requiere acceso frecuente y la seguridad requiere controles estrictos sobre dicho acceso.
Cita 3 patrones estructurales.
Modelo de repositorio
Arquitectura de capas
Modelo Cliente-Servidor
Si un terminal no tiene capacidad de proceso y sólo sirve para conectarse a un ordenador más grande, ¿qué patrón de arquitectura se está siguiendo?
Se está siguiendo el patrón de arquitectura cliente-servidor. En este patrón, el terminal actúa como un cliente que se conecta a un servidor más grande que tiene la capacidad de procesamiento.
¿Cuál es la principal ventaja de una arquitectura cliente-servidor?
La principal ventaja es la centralización del procesamiento y la gestión, lo que facilita el mantenimiento, la actualización y el control de los recursos, ya que los clientes pueden ser simples y no requieren capacidades de procesamiento complejas.
¿Cuál es la característica principal de una arquitectura de repositorio?
La característica principal es que todos los componentes del sistema interactúan a través de un repositorio centralizado, donde se almacena y gestiona la información. Esta arquitectura facilita el acceso y la actualización de datos en un lugar común, pero puede generar cuellos de botella si no se gestiona correctamente.
¿Qué modelo siguen OSI y TCP/IP?
OSI y TCP/IP siguen un modelo de capas. Cada uno divide el proceso de comunicación en capas, donde cada capa realiza tareas específicas de forma independiente, lo que facilita la estandarización y la interoperabilidad.
Cita 2 modelos de descomposición modular.
Descomposición por funciones: Organiza el sistema en módulos que agrupan funciones relacionadas.
Descomposición por dominios de negocio: Divide el sistema en módulos según las distintas áreas del negocio que el sistema aborda.
CUESTIONES TEMA 3
¿Qué expone el manifiesto ágil?
Individuos e interacciones sobre procesos y herramientas.
Software funcionando sobre documentación extensiva.
Colaboración con el cliente sobre negociación contractual.
Respuesta ante el cambio sobre seguir un plan.
Además, define 12 principios que promueven la entrega continua de software funcional, la adaptación al cambio y la colaboración constante con el cliente.
Cita al menos 4 preguntas que deberían responderse antes de decidirse por un desarrollo ágil.
¿El proyecto tiene requisitos cambiantes o inciertos?
¿El cliente puede colaborar activamente durante el desarrollo?
¿Se requiere una entrega rápida e incremental del software?
¿El equipo de desarrollo es pequeño y autoorganizado?
¿Cuáles son las características más importantes de XP?
Programación en parejas.
Desarrollo iterativo con entregas frecuentes.
Pruebas automatizadas desde el inicio.
Refactorización continua.
Integración y entrega continua.
Describe las ventajas de la programación por parejas.
Mejora la calidad del código al detectar errores en tiempo real.
Facilita el aprendizaje entre desarrolladores.
Fomenta la comunicación y la colaboración.
Asegura un mejor diseño y solución de problemas.
¿Qué es un sprint de Scrum?
Un sprint es un ciclo de desarrollo en Scrum con una duración fija (generalmente de 2 a 4 semanas). Durante el sprint, el equipo trabaja en una serie de tareas definidas en el backlog del sprint, con el objetivo de entregar un incremento funcional del producto.¿Cuándo rechazarías el uso de métodos ágiles para desarrollar un sistema software?
Cuando los requisitos están completamente definidos y no cambiarán.
En proyectos con alta regulación y documentación obligatoria.
En equipos muy grandes y distribuidos donde la coordinación es difícil.
Cuando el cliente no puede colaborar activamente.
Ventajas/desventajas de las historias de usuario en XP.
Ventajas:
Facilitan la comprensión de los requisitos por parte del equipo.
Permiten priorizar funcionalidades de manera flexible.
Son fáciles de modificar en función de las necesidades del cliente.
Desventajas:
Pueden ser ambiguas si no se detallan bien.
No siempre reflejan todos los aspectos técnicos del sistema.
Razona si la suma de la productividad de dos desarrolladores trabajando individualmente puede ser mayor o menor que la de los dos juntos.
Puede ser mayor si trabajan en tareas separadas sin interdependencias.
Puede ser menor si trabajan en tareas complejas donde la colaboración mejora la eficiencia y reduce errores (por ejemplo, en programación en parejas de XP).
Un usuario implicado con el equipo de trabajo puede volverse “nativo”, discute cómo evitar este problema.
Rotando roles dentro del equipo para evitar sesgos.
Fomentando revisiones externas para obtener perspectivas objetivas.
Manteniendo reuniones regulares con clientes externos para validar decisiones.
Documentando criterios de evaluación independientes
CUESTIONES FINALES TEMA 4
¿Qué modelo siguen OSI y TCP/IP?
OSI y TCP/IP siguen un modelo de capas. Cada uno divide el proceso de comunicación en capas, donde cada capa realiza tareas específicas de forma independiente, lo que facilita la estandarización y la interoperabilidad.
Cita 2 modelos de descomposición modular.
Descomposición por funciones: Organiza el sistema en módulos que agrupan funciones relacionadas.
Descomposición por dominios de negocio: Divide el sistema en módulos según las distintas áreas del negocio que el sistema aborda.
