DEV Community

Cover image for El propósito del Testing
Josué Oroya
Josué Oroya

Posted on

El propósito del Testing

En ingeniería de software, todo programa funciona… hasta que deja de hacerlo.

Y cuando lo hace, rara vez avisa.

El testing no existe para demostrar que algo “anda bien”, sino para entender bajo qué condiciones deja de hacerlo.

Es una práctica que revela lo que el entusiasmo del desarrollo suele ocultar: las grietas invisibles en nuestras suposiciones.


El costo real de los errores en producción

Corregir un bug nunca cuesta lo mismo. Según el NIST (National Institute of Standards and Technology), el precio de un error se multiplica a medida que avanza el ciclo de desarrollo:

Etapa Costo relativo
Diseño 1x
Codificación 5x
Testing 10x
Producción 30x a 100x

Esto no es teoría: es matemática empresarial.

En 2020, el Consortium for IT Software Quality (CISQ) estimó que el costo de software defectuoso para la economía estadounidense fue de $2.08 trillones.

No es que “los bugs cuesten caro”, es que las decisiones sin testing salen carísimas.


Errores que resultaron muy costosos

  1. Knight Capital Group (2012)

    Un despliegue incompleto activó código obsoleto y generó pérdidas de $440 millones en 45 minutos.

    Una empresa entera colapsó por un flag mal configurado.

  2. Ariane 5 (1996)

    Un overflow al convertir un número de 64 bits a 16 provocó la explosión de un cohete valuado en $370 millones.

    El código “reutilizado” de Ariane 4 jamás fue testeado bajo las nuevas condiciones.

  3. Therac-25 (1985–1987)

    Una máquina de radioterapia administró dosis letales debido a errores de concurrencia.

    Seis personas murieron. No por hardware, sino por software no validado.

  4. Toyota (2010)

    Un fallo de software en el sistema de aceleración llevó al retiro de 9 millones de vehículos.

    Investigaciones posteriores revelaron race conditions y fallos en la gestión de memoria.


El verdadero enemigo: lo que no se ve

En mi experiencia trabajando con equipos distribuidos y productos en producción, aprendí que los peores errores no son los que hacen explotar todo de inmediato.

Son los que parecen inofensivos:

los que corrompen datos lentamente, los que rompen un flujo solo en ciertas condiciones, los que hacen que algo “a veces no funcione”.

Esos son los que degradan la experiencia del usuario y erosionan la confianza en el producto.

Y cuando la confianza se pierde, ni mil tests la recuperan.

Por eso, el testing no es solo un mecanismo técnico:

es la forma en que hacemos visibles las fallas invisibles antes de que lo hagan nuestros usuarios.


El propósito fundamental: gestionar el riesgo

Cada prueba, cada mock, cada test end-to-end tiene un mismo fin: reducir el riesgo.

No testeamos por costumbre ni por obligación, sino porque el software vive en entornos impredecibles:

  • Los usuarios siempre encuentran combinaciones que nadie anticipó.
  • Las redes fallan justo en el peor momento.
  • Los servicios externos cambian sin avisar.
  • Los requisitos evolucionan mientras el sprint aún está en curso.

Testing no es buscar errores: es mapear la incertidumbre.

Es una forma de humildad profesional —reconocer que el código no es infalible y que las buenas intenciones no previenen bugs.


Modelo de flujo

Testing en el mundo web (mi mundo): la frontera entre frontend y backend

En el desarrollo web moderno, la línea entre frontend y backend se ha vuelto delgada.

Un error en el backend puede romper una vista entera, y una validación omitida en el frontend puede inyectar datos inválidos en la base.

Un frontend developer prueba la experiencia: flujos, formularios, accesibilidad, estados límite.

Un backend developer prueba la integridad: transacciones, respuestas, consistencia de datos y resiliencia ante errores externos.

Ambos están del mismo lado: el de quienes quieren dormir tranquilos después del deploy un viernes por la tarde (Por favor, no despliegues un día así).


Una cultura, no una fase

Testing no debería ser un paso al final del sprint, sino una forma de pensar durante todo el desarrollo.

Diseñar código testeable es diseñar código legible, mantenible y confiable.

Automatizar tests no es burocracia: es seguridad futura.

Adoptar una cultura de testing no solo mejora la calidad técnica, sino también la comunicación entre equipos, la velocidad de entrega y, sobre todo, la confianza en el proceso.

Sinceramente, reconozco buenos equipos y buenos líderes cuando al mencionar estimar tests, le dan la prioridad que debe tener.


Epílogo: el tester invisible

El testing no es el 10 de las entregas. No brilla en las demos ni figura en las métricas.

Pero es la base silenciosa sobre la que se sostiene todo lo demás.
Creo que todos hemos trabajado en proyectos que en algún momento se vuelven tan grandes que cualquier mínimo cambio rompe la aplicación, pero coincidentemente, los equipos que aplican un proceso serio de testing pocas veces tienen estos problemas.

Cada vez que un usuario confía, que una API responde bien, que un sistema escala sin romperse,

hay una línea de test que lo permitió.

Top comments (0)