POV: 588 pruebas en verde… y aun así faltaba una
Caja blanca ×
Integración
ホワイトボックス × 結合テスト
Técnica: pruebas de caja blanca · Tipo: pruebas de integración · Caso real: OLA, nuestro sistema de alertas térmicas del litoral peruano (FastAPI + PostgreSQL), con capturas de ejecución reales.
Universidad La Salle · Arequipa · Docente: Maribel Molina Barriga · noviembre de 2026
Pruebas de caja blancaホワイトボックステスト
Abre la caja → mira el código por dentro
Definición
Técnica que deriva los casos de prueba de la estructura interna del componente: sentencias, decisiones, condiciones y caminos. También se llama prueba estructural o de caja de cristal.
ISTQB (2023); ISO (2021)Objetivo
Ejecutar cada camino lógico relevante para encontrar lógica errónea, ramas olvidadas y código muerto, y medir con un criterio objetivo cuánto código ejercitó la suite.
Myers et al. (2011); Pressman y Maxim (2020)Relevancia en el aseguramiento de la calidad
Convierte «ya probamos» en un número verificable (la cobertura) que sirve como criterio de salida en la integración continua. Complementa a la caja negra: una mira qué hace el sistema y la otra cómo lo hace.
ISTQB (2023); Ammann y Offutt (2017)Complejidad ciclomática (McCabe, 1976): número de caminos independientes = mínimo de casos para cubrirlos. E aristas, N nodos, P decisiones.
Pruebas de integración結合テスト · ketsugō tesuto
Cada pieza funciona sola… ¿y juntas?
Definición
Nivel de prueba centrado en las interacciones entre componentes o sistemas: interfaces, contratos, datos que viajan entre módulos, transacciones y configuración. Se distingue entre la integración de componentes y la de sistemas.
ISTQB (2023); Sommerville (2016)Objetivo
Encontrar los defectos de interfaz que las pruebas unitarias no ven: formatos, códigos HTTP, consultas a la base de datos, transacciones y configuración del entorno.
Myers et al. (2011); Vocke (2018)Relevancia
Es donde salen los defectos «de entorno»: en OLA, 4 de los 33 defectos registrados se detectaron aquí, tres en la importación del CSV, donde el código toca archivos y base de datos.
docs/defectos.md del proyectoEstrategias de integración elige una
TestClient.users_repo en 2 pruebas.RecordingMailer.Procedimiento en 7 pasos双六 · caja blanca aplicada a la integración
Speedrun en 7 pasos
Herramientas recomendadasガチャ · toca cada carta
Gacha de herramientas
Equivalentes en otros entornos
Caso: marcar un aviso como leído実例 · 設計
Elegimos una función real de OLA
POST /api/notifications/{id}/read (OpenAPI).Quiz: ¿cuántos casos necesitas, como mínimo, para recorrer todos los caminos independientes?
すごい! Dos decisiones (líneas 111 y 113) → P + 1 = 3 caminos independientes.
Las tres fórmulas coinciden: V(G) = 3. Si se cuentan condiciones, el or de la línea 114 sumaría 1 (ver escena 9).
De caminos a pruebas de integración実行 · API + サービス + DB
3 caminos → 3 casos. ¿Los tenemos todos?
api contra PostgreSQL: 4 de 4 en verde (copia de trabajo con la prueba nueva, 1/11/2026).Resultados obtenidos結果 · カバレッジ
Plot twist: 100 % de líneas ≠ 100 % de ramas
C0 al 100 % no es C1 al 100 %. Dos servicios con todas sus líneas ejecutadas tenían ramas sin recorrer: 113→116 en avisos y 50→exit en la importación (nunca se probó un CSV con más de 50 errores).
Contrato incompleto. El OpenAPI declara 204 y 422, pero el camino ① responde 404: un cliente generado desde el contrato no lo conocería.
Los dobles dejan huecos. mail.py llega a 61 %: el SMTP real se reemplaza por RecordingMailer; lo cubren las E2E con Mailpit.
Historial del proyecto: la integración detectó 4 de 33 defectos, 2 de severidad alta: D-02 (una fecha repetida abortaba la importación) y D-31 (la base de datos de pruebas no recibía los cambios de esquema).
Lo que nos llevamos結論 · 学んだこと
Bento de aprendizajes
Aprendizajes y beneficios
- Criterio medible: V(G) fija el mínimo de casos (3) y la cobertura de ramas confirma que se ejecutaron.
- Prueba lo que de verdad se integra: API, autenticación, servicio, repositorio y PostgreSQL juntos; así aparecieron D-02, D-03, D-04 y D-31.
- Encuentra huecos invisibles: 588 pruebas en verde y el servicio con 100 % de líneas, pero el camino ③ nunca se había ejecutado.
- Se automatiza: en la CI se convierte en una red de regresión con un umbral mínimo (hoy, 80 % de sentencias).
Limitaciones y consideraciones
- Cobertura ≠ calidad: no detecta requisitos omitidos ni código que falta; las pruebas muestran la presencia de defectos, no su ausencia (ISTQB, 2023).
- Ramas ≠ condiciones ≠ caminos: coverage.py no ve la decisión escondida en
clock or SystemClock(), y con bucles los caminos explotan. - Cuesta más: necesita una base de datos aislada y datos controlados; solo el archivo de avisos (34 pruebas) tarda 13.5 s.
- Acoplada al código: si la implementación cambia, el grafo y los casos se rehacen; y los dobles dejan sin probar los adaptadores reales.
Siguientes pasos: incorporar al repositorio la prueba del camino ③ · activar --cov-branch en la CI, que hoy solo mide sentencias · probar una importación con más de 50 errores (rama 50→exit) · declarar el 404 en el contrato OpenAPI · sumar pruebas de condición (C2) y de mutación a los servicios.
Referencias参考文献
Fuentes o no pasó
- Ammann, P., y Offutt, J. (2017). Introduction to software testing (2.ª ed.). Cambridge University Press. https://doi.org/10.1017/9781316771273
- Batchelder, N. (s. f.). Branch coverage measurement. Coverage.py. Recuperado el 1 de noviembre de 2026, de https://coverage.readthedocs.io/en/latest/branch.html
- International Organization for Standardization. (2021). Software and systems engineering — Software testing — Part 4: Test techniques (ISO/IEC/IEEE 29119-4:2021). https://www.iso.org/standard/79430.html
- International Software Testing Qualifications Board. (2023). Certified Tester Foundation Level (CTFL) syllabus (versión 4.0). https://istqb.org/certifications/certified-tester-foundation-level-ctfl-v4-0/
- McCabe, T. J. (1976). A complexity measure. IEEE Transactions on Software Engineering, SE-2(4), 308–320. https://doi.org/10.1109/TSE.1976.233837
- Myers, G. J., Sandler, C., y Badgett, T. (2011). The art of software testing (3.ª ed.). John Wiley & Sons.
- Pressman, R. S., y Maxim, B. R. (2020). Software engineering: A practitioner's approach (9.ª ed.). McGraw-Hill Education.
- Sommerville, I. (2016). Software engineering (10.ª ed.). Pearson.
- Vocke, H. (2018, 26 de febrero). The practical test pyramid. martinfowler.com. https://martinfowler.com/articles/practical-test-pyramid.html
¿Preguntas? 質問はありますか?
Evidencia: capturas tomadas el 1/11/2026 sobre el repositorio de OLA en Docker (pytest 9.1 · coverage.py 7.16 · PostgreSQL 17).