31. Buenas prácticas iniciales para escribir y mantener pruebas

31.1 Introducción

Escribir pruebas no consiste solo en acumular casos. Una prueba útil debe tener propósito, claridad, datos adecuados, resultado esperado y mantenimiento. Si las pruebas son confusas, repetidas, frágiles o desactualizadas, pueden consumir más tiempo del que ahorran.

En este tema reuniremos buenas prácticas iniciales para escribir y mantener pruebas. Son recomendaciones aplicables tanto a pruebas manuales como automatizadas, aunque algunos puntos se relacionan más con un enfoque que con otro.

El objetivo es que las pruebas aporten confianza real y puedan evolucionar junto con el producto.

31.2 Escribir pruebas con propósito

Cada prueba debe existir por una razón. Antes de crearla conviene preguntarse:

  • ¿Qué riesgo cubre?
  • ¿Qué requisito o criterio valida?
  • ¿Qué defecto ayudaría a detectar?
  • ¿Se ejecutará una vez o muchas veces?
  • ¿Es importante para negocio, seguridad, datos o experiencia?

Una prueba sin propósito claro suele volverse ruido. Puede aumentar la cantidad de casos, pero no necesariamente la calidad.

31.3 Definir resultado esperado claro

Una prueba sin resultado esperado no permite decidir con precisión si pasó o falló. El resultado esperado debe ser observable y verificable.

Ejemplo débil:

Ver si el registro funciona bien.

Ejemplo mejor:

Al registrar un usuario con datos válidos, el sistema debe crear la cuenta, mostrar mensaje de confirmación y enviar correo de activación.

La claridad del resultado esperado reduce discusiones y mejora la reproducibilidad.

31.4 Mantener un objetivo por prueba

Una prueba debería tener un objetivo principal. Si un caso intenta validar demasiadas cosas, cuando falla puede ser difícil entender la causa.

Ejemplo de prueba demasiado amplia:

Registrar usuario, iniciar sesión, comprar producto, aplicar cupón, pagar, generar reporte y cerrar sesión.

Ese flujo puede servir como prueba end-to-end crítica, pero no debería ser la única forma de validar todas esas reglas. Conviene complementar con casos más específicos para registro, login, cupón, pago y reporte.

31.5 Usar nombres descriptivos

Los nombres de casos, suites o pruebas automatizadas deben indicar qué verifican.

Nombres poco útiles:

  • Prueba 1.
  • Login ok.
  • Test compra.

Nombres mejores:

  • Inicio de sesión exitoso con usuario activo.
  • Rechazo de compra cuando el producto no tiene stock.
  • Aplicación de descuento premium en compra mayor a $1000.

Un buen nombre ayuda a entender el alcance sin abrir todos los detalles.

31.6 Diseñar datos de prueba adecuados

Los datos deben apoyar el objetivo de la prueba. Si los datos son ambiguos, compartidos o inestables, la prueba puede fallar por causas externas.

Buenas prácticas:

  • Usar datos controlados.
  • Separar datos válidos, inválidos y límite.
  • Evitar datos reales sensibles.
  • Documentar usuarios, roles y estados necesarios.
  • Preparar mecanismos de limpieza cuando la prueba modifica datos.
  • No depender de datos que otras personas cambian sin aviso.

Una prueba confiable necesita datos confiables.

31.7 Evitar duplicación innecesaria

La duplicación excesiva vuelve las suites difíciles de mantener. Si diez casos prueban casi lo mismo con diferencias irrelevantes, tal vez convenga simplificar.

Antes de agregar un caso nuevo conviene preguntar:

  • ¿Cubre una clase de equivalencia distinta?
  • ¿Cubre un límite importante?
  • ¿Cubre una combinación nueva de condiciones?
  • ¿Cubre un riesgo no cubierto?
  • ¿O repite un caso existente sin aportar información nueva?

Menos casos bien elegidos pueden aportar más valor que muchos casos repetidos.

31.8 Priorizar por riesgo

No todas las pruebas son igual de importantes. Cuando el tiempo es limitado, debemos ejecutar primero las que cubren mayor riesgo.

Priorizar por riesgo implica considerar:

  • Impacto de una falla.
  • Probabilidad de que ocurra.
  • Frecuencia de uso.
  • Complejidad de la funcionalidad.
  • Cambios recientes.
  • Historial de defectos.
  • Datos sensibles, dinero o permisos.

La prioridad ayuda a tomar mejores decisiones cuando no se puede probar todo.

31.9 Mantener trazabilidad

Las pruebas importantes deberían poder relacionarse con requisitos, criterios, riesgos o defectos.

Esto permite:

  • Saber por qué existe una prueba.
  • Detectar requisitos sin cobertura.
  • Actualizar pruebas cuando cambia una regla.
  • Seleccionar regresión según impacto.
  • Analizar defectos relacionados.

La trazabilidad puede ser liviana. Lo importante es que sea útil y mantenible.

31.10 Revisar y actualizar pruebas

Las pruebas deben evolucionar con el producto. Una suite que no se mantiene pierde valor.

Conviene revisar pruebas cuando:

  • Cambia un requisito.
  • Se corrige un defecto importante.
  • Se agrega una funcionalidad.
  • Se elimina una pantalla o flujo.
  • Un caso falla repetidamente por razones no relacionadas con defectos.
  • Un caso ya no aporta información útil.
  • Se detecta duplicación.

Mantener pruebas también significa eliminar o simplificar lo que ya no sirve.

31.11 Equilibrar pruebas manuales y automatizadas

Una buena estrategia combina pruebas manuales y automatizadas.

Conviene automatizar:

  • Casos repetitivos.
  • Regresión crítica.
  • Pruebas estables.
  • Cálculos o reglas con resultado claro.
  • APIs importantes.

Conviene mantener manual o exploratorio:

  • Funcionalidades nuevas e inestables.
  • Usabilidad.
  • Validación visual compleja.
  • Investigación de riesgos desconocidos.
  • Pruebas de aceptación con usuarios.

31.12 Evitar pruebas frágiles

Una prueba frágil falla frecuentemente por causas que no son defectos reales. Esto reduce confianza y consume tiempo.

Causas comunes:

  • Datos inestables.
  • Ambiente poco confiable.
  • Dependencia de tiempos exactos.
  • Automatización atada a detalles visuales frágiles.
  • Servicios externos sin control.
  • Precondiciones no documentadas.

Una prueba frágil debe corregirse, aislarse o eliminarse si no aporta valor.

31.13 Escribir pruebas mantenibles

Una prueba mantenible es fácil de entender y actualizar. Para lograrlo:

  • Usar nombres claros.
  • Evitar pasos innecesarios.
  • Separar datos de objetivo cuando sea posible.
  • No depender de información oculta o conocimiento personal.
  • Usar convenciones consistentes.
  • Eliminar casos obsoletos.
  • Agrupar pruebas en suites con sentido.

La mantenibilidad importa porque las pruebas viven tanto como el producto.

31.14 Registrar evidencias con criterio

La evidencia debe ayudar a comprender el resultado. No siempre hace falta guardar capturas de todo, pero sí conviene registrar evidencia cuando:

  • Hay un defecto.
  • La prueba es crítica.
  • Se requiere auditoría.
  • El comportamiento es difícil de explicar.
  • Se valida una entrega importante.

La evidencia debe ser clara, breve y relacionada con el resultado esperado u obtenido.

31.15 Revisar pruebas con el equipo

Las pruebas mejoran cuando se revisan con otras personas. Una revisión puede detectar huecos, duplicaciones o resultados esperados incorrectos.

Pueden participar:

  • Testers.
  • Desarrolladores.
  • Analistas.
  • Product owner.
  • Usuarios clave.

La revisión colaborativa ayuda a alinear comprensión del requisito y reduce defectos por malentendidos.

31.16 Aprender de defectos encontrados

Cada defecto importante puede mejorar la suite de pruebas. Después de analizarlo, conviene preguntar:

  • ¿Por qué no lo detectamos antes?
  • ¿Faltaba un caso de prueba?
  • ¿Faltaba un dato límite?
  • ¿El requisito era ambiguo?
  • ¿La automatización no cubría ese flujo?
  • ¿Debemos agregar un caso de regresión?

El objetivo no es culpar, sino mejorar el sistema de prevención y detección.

31.17 No confiar solo en cantidad

La cantidad de pruebas no garantiza calidad. Una suite con 500 casos repetidos puede cubrir menos riesgo que una suite con 80 casos bien diseñados.

Para evaluar una suite conviene mirar:

  • Riesgos cubiertos.
  • Requisitos críticos cubiertos.
  • Casos positivos, negativos y borde.
  • Defectos históricos cubiertos por regresión.
  • Estabilidad de ejecución.
  • Tiempo de mantenimiento.

Medir solo cantidad puede empujar al equipo a crear pruebas de bajo valor.

31.18 Ejemplo de mejora de prueba

Prueba inicial débil:

Probar descuento.

Versión mejorada:

Verificar que un cliente premium reciba 15% de descuento cuando el importe de la compra supera $1000. Usar cliente premium activo y compra de $1500. Resultado esperado: total con descuento de $1275 antes de impuestos.

La segunda versión tiene objetivo, condición, datos y resultado esperado. Es más fácil de ejecutar, revisar y mantener.

31.19 Errores comunes

Al escribir y mantener pruebas, algunos errores frecuentes son:

  • No definir resultado esperado.
  • Crear casos duplicados.
  • No actualizar pruebas después de cambios.
  • Automatizar casos inestables.
  • Usar datos compartidos sin control.
  • Probar solo caminos positivos.
  • No relacionar pruebas con requisitos o riesgos.
  • Medir éxito por cantidad de pruebas.
  • No revisar pruebas con el equipo.

31.20 Buenas prácticas resumidas

Práctica Beneficio
Definir objetivo claro Evita pruebas sin propósito.
Especificar resultado esperado Permite decidir si pasa o falla.
Usar datos controlados Mejora reproducibilidad.
Priorizar por riesgo Enfoca el esfuerzo donde más importa.
Mantener trazabilidad Ayuda a entender cobertura e impacto de cambios.
Actualizar pruebas Evita suites obsoletas.
Revisar con el equipo Reduce malentendidos y huecos.

31.21 Qué debes recordar de este tema

  • Una prueba debe tener propósito claro.
  • El resultado esperado es indispensable.
  • Conviene mantener un objetivo principal por prueba.
  • Los nombres descriptivos ayudan a entender y mantener la suite.
  • Los datos de prueba deben ser controlados.
  • La duplicación innecesaria aumenta mantenimiento.
  • La prioridad debe basarse en riesgo.
  • Las pruebas deben revisarse y actualizarse con el producto.
  • Automatizar no elimina la necesidad de criterio humano.

31.22 Conclusión

Escribir y mantener buenas pruebas requiere claridad, criterio y disciplina. Una prueba útil debe explicar qué verifica, con qué datos, bajo qué condiciones y qué resultado se espera.

Las pruebas también necesitan mantenimiento. Si el producto cambia, la suite debe cambiar. Si una prueba no aporta valor, debe revisarse. Si un defecto importante aparece, la suite debe aprender de él.

En el próximo tema realizaremos un caso práctico integrador para aplicar los conceptos principales del curso a una funcionalidad simple.