Enfoques y niveles de testing para validar que el software funciona correctamente, desde unit tests hasta tests end-to-end y testing en producción.
Las estrategias de testing definen qué tipos de tests escribir, cuántos, y cómo organizarlos para maximizar la confianza en el código con el menor costo de mantenimiento.
/\ E2E (pocos, lentos, frágiles)
/ \
/----\ Integration (algunos)
/ \
/--------\ Unit (muchos, rápidos, estables)
| Tipo | Qué prueba | Velocidad | Fragilidad |
|---|---|---|---|
| Unit | Función/clase aislada | Muy rápido | Baja |
| Integration | Componentes juntos | Medio | Media |
| E2E | Flujo completo de usuario | Lento | Alta |
| Contract | APIs entre servicios | Rápido | Baja |
| Enfoque | Mecanismo | Cuándo usar |
|---|---|---|
| TDD | Escribir test antes del código | Lógica de negocio, algoritmos |
| BDD | Tests como especificaciones de comportamiento | Requisitos de usuario, aceptación |
| Property-based | Generar inputs aleatorios, verificar invariantes | Parsers, serialización, edge cases |
| Snapshot | Comparar output con versión guardada | UI components, respuestas de API |
Una estrategia de testing efectiva equilibra velocidad, cobertura y confianza. Demasiados tests unitarios sin integración dan falsa seguridad. Demasiados tests e2e son lentos y frágiles. La pirámide de testing proporciona el framework para encontrar el balance correcto.
Continuous Integration y Continuous Delivery/Deployment — prácticas que automatizan la integración de código, testing y entrega a producción. Fundamento de la ingeniería de software moderna.
Prácticas, herramientas y métricas para mantener código legible, mantenible, testeable y libre de defectos a lo largo del tiempo.
Práctica de diseñar y desarrollar productos digitales que puedan ser usados por todas las personas, incluyendo aquellas con discapacidades visuales, auditivas, motoras o cognitivas.
Ejemplo de proyecto Python con Pipenv, Pytest, pre-commit hooks, CI/CD con GitHub Actions y generación de badges.
Disciplina de experimentar en sistemas de producción para descubrir debilidades antes de que causen incidentes, inyectando fallos controlados.