Fundamentos de Arquitecturas y Pruebas de Software
Desarrollo de un Plan de Pruebas de Software
El desarrollo de un plan de pruebas para software es una parte clave del proceso de aseguramiento de la calidad.
Arquitecturas de Referencia en el Desarrollo de Software
Sistemas de Tiempo Real
¿Qué es un sistema en tiempo real?
Se refiere a cualquier sistema de procesamiento de información con componentes de software y hardware que realiza funciones de aplicación en tiempo real con limitaciones y que puede responder a eventos en tiempos predecibles y específicos.
Beneficios de los sistemas en tiempo real para las aplicaciones
- Sincronización más precisa: Los sistemas en tiempo real se crearon para realizar tareas que se deben ejecutar en plazos límite de ciclo preciso (de hasta microsegundos).
- Mayor previsibilidad y confiabilidad: Ya que los sistemas en tiempo real procesan datos en plazos establecidos y predecibles, la ejecución de tareas y cargas de trabajo está prácticamente garantizada.
- Priorización de las cargas de trabajo en tiempo real: Cuando se deben terminar las cargas de trabajo específicas en tiempo real en el plazo establecido para evitar una falla crítica del sistema.
Arquitectura de Tolerancia para Sistemas Móviles con Conexión a Internet
Surge a partir de la evolución de los sistemas de telefonía móvil hacia la prestación de nuevos servicios de datos. El internet móvil es fruto de la convergencia de Internet y la movilidad.
Objetivo
Proveer un amplio conjunto de opciones en términos de servicio, terminales y acceso de red, lo que permite hacer frente a diferentes requerimientos y proporcionando flexibilidad, modularidad y capacidad de crecimiento.
Tipos
UMTS (Universal Mobile Telecommunications System): Es una de las tecnologías para móviles de tercera generación, sucesora de GSM, pues esta última no seguía un camino evolutivo para brindar servicios de tercera generación.
Arquitectura de Referencia para Sistemas de Información
¿Qué es una arquitectura de referencia?
Es una guía estructurada para diseñar sistemas de información. Establece componentes comunes y sus relaciones. Permite reutilizar conceptos y prácticas probadas. Ayuda a construir sistemas robustos, seguros y escalables.
Objetivos Principales
- Estandarizar el diseño de sistemas.
- Facilitar la integración de componentes.
- Proveer una visión clara para los desarrolladores.
- Reducir costos y tiempo de implementación.
Componentes Principales
- Capa de presentación (interfaz de usuario).
- Capa de negocio (procesos y lógica).
- Capa de datos (almacenamiento y consulta).
- Servicios externos (APIs, terceros, etc.).
Ejemplo: Arquitectura en 3 capas
- Capa de presentación: HTML, CSS, React.
- Lógica de negocio: Java, Node.js, .NET.
- Datos: MySQL, PostgreSQL, MongoDB.
Arquitectura de Referencia para Ambientes Virtuales de Aprendizaje (AVA)
Definición de Ambientes Virtuales de Aprendizaje
Los AVA son entornos digitales diseñados para facilitar procesos educativos a través de plataformas tecnológicas. En estos espacios, estudiantes y docentes interactúan de manera sincrónica o asincrónica, compartiendo contenidos, realizando actividades y evaluando el aprendizaje mediante herramientas como foros, videoconferencias, recursos multimedia y sistemas de gestión del aprendizaje (LMS, por sus siglas en inglés).
Características Principales
Los ambientes virtuales de aprendizaje son espacios digitales que permiten la interacción entre estudiantes y contenidos, facilitando el aprendizaje colaborativo y el acceso a recursos educativos variados.
Arquitecturas de Referencia para Líneas de Productos de Software
Las arquitecturas de referencia para líneas de productos de software ofrecen un modelo base reutilizable que guía el desarrollo de múltiples sistemas dentro de un mismo dominio. Permiten estandarizar, acelerar el desarrollo y mejorar la calidad del software, al promover la reutilización de componentes y decisiones de diseño comunes.
Son clave para lograr eficiencia, consistencia y escalabilidad en proyectos de software orientados a productos.
¿Qué son las Líneas de Productos de Software?
- Técnicas de Ingeniería para crear un portafolio de sistemas de software similares, a partir de un conjunto compartido de activos de software, usando un medio común de producción (Krueger, 2006).
- Consiste en una familia de sistemas de software que tienen una funcionalidad común y alguna funcionalidad variable (Gamma, 2004).
Modelos de Arquitectura
Arquitectura Basada en Servicios
- Enfoque: Los productos están compuestos por servicios independientes e interactúan entre sí.
- Uso en SPL: Útil cuando los productos deben integrarse con sistemas externos o tener una estructura altamente distribuida.
Arquitectura Basada en Componentes
- Enfoque: El sistema se construye a partir de componentes independientes y reutilizables.
- Ventaja: Facilita la reutilización sistemática de software.
- Modelo de Componentes: Cada producto de la línea es una configuración particular de componentes.
Arquitectura Basada en Plugins o Enchufable
- Enfoque: Hay un núcleo central y funcionalidades adicionales se agregan como plugins.
- Ventaja: Gran flexibilidad y personalización.
Arquitectura de Capas
- Enfoque: El sistema se organiza en capas (Presentación, Lógica de negocio, acceso a datos, etc.).
- Uso en SPL: Se puede reutilizar una capa completa entre productos y variar solo las necesarias.
Arquitectura Basada en Marcos de Trabajo
- Enfoque: Usa un marco de trabajo general que define el esqueleto del producto y se extiende con funcionalidades específicas.
- Uso en SPL: Favorece el desarrollo rápido y la personalización dentro de límites bien definidos.
Pruebas de Software: Conceptos Fundamentales
El software de calidad tiene que ver con la corrección, usabilidad, costo, confiabilidad, compatibilidad, eficiencia y apego a los estándares. Derivado de ello, puede ser objeto de pruebas que determinen su grado de calidad; incluso la documentación para cada usuario debe ser probada.
Un error es un comportamiento distinto del que espera un usuario. Puede haber errores que, aunque se hayan seguido todos los pasos de análisis y diseño, aún contengan fallos.
¿Qué es una Prueba?
- Es el proceso de ejecutar un software para identificar posibles defectos.
- Permite evaluar si el software funciona correctamente bajo condiciones específicas.
- Se realiza en diferentes etapas del ciclo de vida del software.
Caso de Prueba
- Conjunto de condiciones o variables bajo las cuales un tester determina si un sistema cumple con los requisitos.
- Incluye entrada, acción y salida esperada.
- Ejemplo: Probar un botón de guardar para verificar que almacena correctamente los datos.
Defecto
- Es una discrepancia entre el comportamiento esperado y el real del software.
- También llamado ‘bug’.
- Puede ser detectado durante el desarrollo o en las pruebas.
Falla
- Es cuando el software no cumple con su función durante la ejecución.
- Una falla es el resultado visible de un defecto.
- Ejemplo: La aplicación se cierra inesperadamente al cargar una imagen.
Error
- Es una equivocación cometida por el desarrollador al escribir el código, la lógica o el diseño.
- Puede causar un defecto.
- Ejemplo: Mal uso de una condición en una estructura ‘if’.
Verificación
- Proceso de evaluación durante el desarrollo del software.
- Pregunta clave: ¿Estamos construyendo el producto correctamente?
- Incluye revisiones, inspecciones y pruebas estáticas.
Validación
- Proceso de evaluación después del desarrollo del software.
- Pregunta clave: ¿Estamos construyendo el producto correcto?
- Incluye pruebas dinámicas y pruebas de aceptación por el usuario.