Cómo probar que el software funciona correctamente

Clase 37 de 43Curso Profesional de Arquitectura de Software

Resumen

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.

      Cómo probar que el software funciona correctamente