Cómo probar que el software funciona correctamente
Clase 37 de 43 • Curso Profesional de Arquitectura de Software
Contenido del curso
Atributos de calidad
- 2

Qué son los atributos de calidad en software
01:49 min - 3

Cómo medir idoneidad funcional en software
02:52 min - 4

Qué es eficiencia de ejecución en software
04:14 min - 5

Cómo medir interoperabilidad y coexistencia
03:49 min - 6

Qué es la usabilidad y sus 6 dimensiones
08:14 min - 7

Cómo medir confiabilidad en software
05:38 min - 8

Los 5 pilares de seguridad en software
04:01 min - 9

Cómo garantizar mantenibilidad con tests
06:27 min - 10

Adaptabilidad vs capacidad de instalación vs reemplazo
02:48 min - 11

Tensiones entre atributos de calidad de software
04:04 min - 12

Atributos de calidad según fase de empresa
07:00 min
Patrones de arquitectura
- 13

Qué es un patrón de arquitectura
02:50 min - 14

Modelo vista controlador: cómo separar responsabilidades
05:37 min - 15

Arquitectura en capas: controller, servicio y repositorio
03:14 min - 16

Event sourcing vs bases relacionales
06:17 min - 17

Qué es la arquitectura microkernel
01:52 min - 18

Arquitectura Comparte Nada con Map Reduce
02:29 min - 19

Patrón de microservicios: cuándo y cómo
03:57 min - 20

Qué es CQRS y cómo separa lectura de escritura
03:24 min - 21

Arquitectura hexagonal: puertos y adaptadores
04:10 min - 22

Qué son los contextos delimitados en DDD
05:34 min - 23

Cómo combinar patrones de arquitectura
09:22 min - 24

Evolución de patrones desde monolito a microservicios
07:58 min
Diseño de una arquitectura
- 25

Cómo traducir requerimientos en decisiones arquitectónicas
02:18 min - 26

Conectores en arquitectura: tipos y cuándo usarlos
06:18 min - 27

Llamadas asíncronas vs síncronas vs cliente-servidor
03:05 min - 28

Conector enrutador vs difusión: Twitter
01:55 min - 29

Conectores cola, repositorio y pub/sub
03:52 min - 30

Framework de diseño orientado a atributos
01:55 min - 31

Cómo detectar fallas y reparar sistemas
05:59 min - 32

Cómo recuperar y prevenir fallas en sistemas
04:09 min - 33

Tácticas para confinar modificaciones
06:15 min - 34

Cómo prevenir efectos dominó en software
12:17 min - 35

Tácticas para controlar eficiencia de ejecución
09:14 min - 36

Cómo detectar, resistir y recuperarse de ataques
09:02 min - 37

Cómo probar que el software funciona correctamente
Viendo ahora - 38

Cómo controlar la usabilidad con tácticas
08:20 min - 39

Cómo validar arquitectura con ATAM y métricas
06:34 min - 40

Evolución de arquitectura: startup a gran escala
10:30 min
Modelado y documentación de arquitectura
Mejora la capacidad de prueba con tácticas concretas que reducen riesgos y aceleran iteraciones. Aquí se explica cómo evaluar si una nueva funcionalidad es correcta, cómo detectar fallas a tiempo y cómo apoyarse en entradas y salidas y monitoreo para obtener pruebas fiables. Además, se conecta con la mantenibilidad del código, clave para testear con menos fricción.
¿Qué es la capacidad de prueba y por qué importa?
La capacidad de prueba surge cuando el estímulo es una nueva funcionalidad. Lo que debe controlarse es la posibilidad de probar que el comportamiento es correcto. El resultado esperado: detectar fallas, repararlas y volver a iterar con confianza.
- Dos familias principales: entradas y salidas y monitoreo.
- Objetivo: asegurar que el uso real esté cubierto por pruebas y que la ejecución sea observable.
- Beneficio lateral: mayor mantenibilidad implica pruebas más simples y robustas.
¿Qué tácticas de entradas y salidas mejoran la capacidad de prueba?
La familia de entradas y salidas permite repetir escenarios reales y controlar dependencias. A continuación, tres tácticas clave.
¿Cómo funciona captura y reproducción?
La táctica de captura y reproducción graba la comunicación real entre componentes para reutilizarla en tests. Así se garantiza que el uso normal está cubierto y que el sistema devuelve los resultados esperados.
- Útil para simular errores de sistemas externos cuando no están disponibles.
- Permite registrar la falla externa y reproducirla como respuesta en pruebas.
- Ejemplo de librería: VCR (sigla de video cam recording), que “graba” y luego reproduce a nivel de test.
¿Por qué separar interfaz e implementación?
Separar interfaz e implementación facilita reemplazar componentes por implementaciones controladas y observar su comportamiento.
- Se emplean test doubles: mocks, stubs y spies.
- Los mocks permiten verificar si se llamó a un método y cuántas veces.
- También pueden configurarse para devolver datos específicos y validar flujos internos.
- Los frameworks de pruebas modernos soportan estas sustituciones de forma nativa.
¿Cuándo usar acceso exclusivo para pruebas?
El acceso exclusivo para pruebas habilita puntos de entrada solo en contexto de testing cuando ciertas partes no se pueden controlar desde fuera.
- Requiere escribir código específico de test que no debe llegar a producción.
- Evita riesgos por accesos no deseados en entornos reales.
- Muy útil con microservicios: desde fuera solo se ve la API pública, pero se necesitan atajos para controlar dependencias externas como otros servicios o la base de datos.
- Permite probar el servicio completo, controlando sus dependencias.
¿Cómo aporta el monitoreo interno a las pruebas?
La familia de monitoreo incorpora observabilidad dentro de la aplicación. La táctica central es integrar monitoreo en el propio software.
- La aplicación registra recursos consumidos y pedidos recibidos.
- Guarda información útil para debugging después de un error.
- Común en aplicaciones embebidas y de escritorio: entregan detalle interno bajo demanda.
- En aplicaciones web o servidores web, es frecuente usar monitoreo externo de la aplicación, sin enfocarse en recursos del sistema operativo.
- Todas estas tácticas mejoran con una alta mantenibilidad del código: cuanto más claro y modular, más fácil de probar y observar.
¿Tienes casos reales donde estas tácticas hayan marcado la diferencia? Comparte tu experiencia o dudas en los comentarios.