5. Principios fundamentales del testing

5.1 Introducción

El Testing de Software tiene principios que ayudan a entender sus posibilidades y sus límites. Estos principios son ideas generales que orientan la forma de planificar, diseñar y ejecutar pruebas.

Para un estudiante que recién comienza, conocer estos principios evita malentendidos comunes. Por ejemplo, muchas personas creen que si un sistema fue probado ya no tiene errores, o que probar más casos siempre significa probar mejor. En la práctica, el testing requiere criterio, selección de riesgos y comprensión del contexto.

En este tema estudiaremos los principios más importantes del testing y veremos ejemplos simples para comprenderlos.

5.2 Principio 1: las pruebas muestran la presencia de defectos

Las pruebas pueden demostrar que existen defectos, pero no pueden demostrar que el software no tiene ninguno. Si ejecutamos diez pruebas y todas pasan, sabemos que el sistema se comportó correctamente en esas diez situaciones. No sabemos qué ocurrirá en todas las demás combinaciones posibles.

Por ejemplo, si probamos un formulario con datos válidos y funciona, eso no garantiza que también funcione con campos vacíos, datos muy largos, caracteres especiales, usuarios sin permiso o problemas de conexión.

Una prueba que falla revela un problema. Una prueba que pasa reduce cierta incertidumbre, pero no elimina todos los riesgos.

Este principio enseña una idea clave: el testing aumenta la confianza, pero no entrega certeza absoluta.

5.3 Principio 2: no es posible probar todo

En sistemas reales, probar todas las combinaciones posibles suele ser imposible. Incluso una pantalla simple puede generar una cantidad enorme de escenarios si combinamos campos, permisos, navegadores, estados del sistema, datos previos y errores externos.

Imaginemos un formulario con cinco campos. Si cada campo puede tomar diez valores relevantes, ya tenemos 100.000 combinaciones posibles. Si además agregamos distintos tipos de usuario, dispositivos y configuraciones, el número crece rápidamente.

Como no podemos probar todo, necesitamos seleccionar. Para eso usamos criterios como:

  • Riesgo de la funcionalidad.
  • Impacto de una posible falla.
  • Frecuencia de uso.
  • Complejidad técnica.
  • Cambios recientes.
  • Historial de defectos.
  • Casos límite y datos representativos.

Probar bien no significa probar infinitamente, sino elegir pruebas con valor.

5.4 Principio 3: las pruebas tempranas ahorran tiempo y costo

Cuanto antes se detecta un defecto, más fácil suele ser corregirlo. Si un requisito está mal escrito y se detecta antes de programar, puede corregirse con una aclaración. Si se detecta después de construir varias pantallas y servicios, el cambio puede requerir mucho más trabajo.

Las pruebas tempranas no significan ejecutar el sistema antes de que exista. También incluyen revisar requisitos, analizar criterios de aceptación, hacer preguntas y detectar inconsistencias en documentación o diseño.

Ejemplos de testing temprano:

  • Revisar si un requisito tiene resultado esperado claro.
  • Preguntar qué debe ocurrir con datos inválidos.
  • Identificar reglas de negocio contradictorias.
  • Analizar si una funcionalidad puede probarse con datos disponibles.
  • Definir casos de prueba antes o durante el desarrollo.

El testing temprano ayuda a prevenir defectos, no solo a encontrarlos después.

5.5 Principio 4: los defectos suelen agruparse

En muchos proyectos, los defectos no se distribuyen de manera uniforme. Algunas zonas del sistema concentran más problemas que otras. Esto puede ocurrir por complejidad, cambios frecuentes, código antiguo, requisitos poco claros o integraciones delicadas.

Por ejemplo, una aplicación puede tener pocas fallas en pantallas de consulta, pero muchos problemas en el módulo de facturación porque allí existen reglas complejas, cálculos, permisos e integración con servicios externos.

Este principio nos ayuda a priorizar. Si una zona concentra defectos, conviene prestarle más atención:

  • Diseñar más casos para esa área.
  • Agregar pruebas de regresión.
  • Revisar requisitos y reglas de negocio.
  • Analizar si el código necesita refactoring.
  • Investigar si hay problemas de diseño o comunicación.

Encontrar muchos defectos en una parte del sistema puede ser una señal de que hay riesgos más profundos.

5.6 Principio 5: repetir siempre las mismas pruebas pierde efectividad

Si ejecutamos siempre las mismas pruebas, llegará un momento en que esas pruebas dejarán de encontrar defectos nuevos. Esto se conoce como la paradoja del pesticida: usar siempre el mismo método reduce su capacidad para descubrir nuevos problemas.

Esto no significa que debamos descartar las pruebas existentes. Muchas siguen siendo útiles para regresión. Pero también debemos revisar, actualizar y ampliar los casos cuando el sistema cambia.

Algunas formas de evitar este problema son:

  • Agregar casos nuevos después de encontrar defectos.
  • Incluir datos límite y datos poco habituales.
  • Revisar funcionalidades modificadas recientemente.
  • Combinar pruebas documentadas con pruebas exploratorias.
  • Eliminar o ajustar casos que ya no tienen valor.
  • Actualizar pruebas cuando cambian los requisitos.

Un conjunto de pruebas debe evolucionar junto con el producto.

5.7 Principio 6: las pruebas dependen del contexto

No se prueba de la misma manera una red social, un sistema bancario, una aplicación médica, un videojuego, una tienda en línea o una herramienta interna de administración. Cada producto tiene riesgos, usuarios y prioridades diferentes.

El contexto define qué pruebas son más importantes. Por ejemplo:

Contexto Riesgo importante Pruebas prioritarias
Sistema bancario Cálculos incorrectos, accesos no autorizados, pérdida de datos. Funcionales, seguridad, integridad de datos, auditoría.
Tienda en línea Errores en pagos, stock, precios o promociones. Flujos de compra, integración con pagos, regresión.
Aplicación informativa Contenido incorrecto, mala visualización, enlaces rotos. Compatibilidad, usabilidad, revisión de contenido.
Sistema médico Datos clínicos incorrectos o decisiones críticas mal soportadas. Validación funcional estricta, seguridad, trazabilidad.

No existe una estrategia universal que sirva igual para todos los proyectos. Un buen tester adapta su enfoque al contexto.

5.8 Principio 7: ausencia de errores no significa producto útil

Un sistema puede tener pocas fallas visibles y aun así no servir al usuario. Si el producto no resuelve la necesidad real, si es difícil de usar o si implementa requisitos equivocados, puede fracasar aunque muchas pruebas pasen.

Por ejemplo, una aplicación de turnos médicos podría funcionar técnicamente bien: permite iniciar sesión, elegir especialidad y confirmar una reserva. Pero si no permite filtrar por obra social, ubicación o disponibilidad real, quizás no sea útil para los pacientes.

Un software sin fallas visibles puede seguir siendo un mal producto si no responde a la necesidad del usuario.

Por eso el testing también debe considerar validación, usabilidad, reglas de negocio y valor real, no solo la ausencia de errores técnicos.

5.9 Diferencia entre confianza y certeza

Los principios anteriores muestran que el testing trabaja con información incompleta. Nunca podemos asegurar que revisamos absolutamente todo, pero sí podemos aumentar la confianza mediante pruebas bien elegidas.

La certeza implicaría saber que no existe ningún defecto. En software real, eso casi nunca es posible. La confianza, en cambio, se construye con evidencia: casos ejecutados, resultados correctos, defectos corregidos, riesgos conocidos y criterios de aceptación cumplidos.

Un equipo profesional no dice "el sistema no tiene errores". Dice algo más preciso:

Se ejecutaron las pruebas definidas para los flujos críticos, no se encontraron defectos bloqueantes y los riesgos pendientes están documentados.

Esta forma de comunicar es más realista y útil para tomar decisiones.

5.10 Aplicación práctica de los principios

Supongamos que debemos probar una nueva funcionalidad para restablecer contraseña. Aplicar los principios anteriores nos llevaría a pensar así:

  • No basta con probar un caso exitoso; las pruebas solo mostrarán algunos comportamientos.
  • No podremos probar todos los correos, usuarios, navegadores y condiciones posibles.
  • Conviene revisar temprano qué debe ocurrir si el enlace vence o si el usuario no existe.
  • Si el módulo de usuarios ya tuvo muchos defectos, merece más atención.
  • Las pruebas antiguas deben actualizarse si cambia el flujo de seguridad.
  • El contexto es sensible porque afecta acceso a cuentas de usuario.
  • Aunque el formulario funcione, el proceso puede ser inútil si los mensajes no orientan al usuario.

Los principios no son teoría aislada. Ayudan a tomar mejores decisiones al diseñar pruebas reales.

5.11 Errores comunes al ignorar estos principios

Cuando un equipo no comprende los principios del testing, puede caer en prácticas poco efectivas:

  • Prometer que un sistema está libre de defectos.
  • Intentar probar todo sin priorizar.
  • Dejar las pruebas para el último día.
  • Ejecutar siempre los mismos casos aunque el producto cambie.
  • Usar la misma estrategia para todos los proyectos.
  • Medir la calidad solo por cantidad de pruebas ejecutadas.
  • Olvidar la necesidad real del usuario.

Estas prácticas pueden dar una falsa sensación de control, pero no necesariamente reducen los riesgos importantes.

5.12 Resumen de los principios

Principio Idea principal
Las pruebas muestran defectos Encontrar defectos es posible; demostrar que no existe ninguno, no.
No se puede probar todo Debemos seleccionar pruebas según riesgo, impacto y valor.
Pruebas tempranas Detectar problemas antes reduce costo y retrabajo.
Agrupamiento de defectos Algunas áreas concentran más problemas que otras.
Paradoja del pesticida Repetir siempre lo mismo pierde efectividad para encontrar nuevos defectos.
Dependencia del contexto La estrategia de prueba debe adaptarse al producto y sus riesgos.
Ausencia de errores no implica utilidad El producto también debe resolver la necesidad real del usuario.

5.13 Qué debes recordar de este tema

  • El testing puede mostrar defectos, pero no demostrar ausencia total de defectos.
  • Probar todas las combinaciones suele ser imposible.
  • Probar temprano ayuda a prevenir problemas y reducir costos.
  • Los defectos suelen concentrarse en zonas específicas del sistema.
  • Las pruebas deben revisarse y evolucionar con el producto.
  • La estrategia de testing depende del contexto.
  • Un producto puede no ser útil aunque no muestre fallas evidentes.
  • El testing aporta confianza basada en evidencia, no certeza absoluta.

5.14 Conclusión

Los principios fundamentales del testing nos ayudan a tener una visión realista. Probar software no consiste en ejecutar casos sin límite ni en prometer perfección. Consiste en obtener información valiosa sobre calidad y riesgo mediante pruebas bien pensadas.

Comprender estos principios permite planificar mejor, priorizar con criterio, comunicar resultados de forma honesta y adaptar el esfuerzo de pruebas al contexto del proyecto.

En el próximo tema estudiaremos cómo encaja el testing dentro del ciclo de vida del software, desde la idea inicial hasta el mantenimiento de una aplicación en uso.