18. Análisis de fallas: distinguir defectos reales, problemas de ambiente y errores de prueba

18.1 Introducción

Cuando una prueba End-to-End falla, no siempre significa que existe un defecto en la aplicación. La falla puede deberse a un error real del producto, a un ambiente mal preparado, a datos de prueba incorrectos, a un servicio externo caído, a un selector frágil o a una espera mal diseñada.

El análisis de fallas busca entender la causa antes de tomar una decisión. Si clasificamos mal una falla, podemos reportar defectos inexistentes, ignorar problemas importantes o mantener una suite inestable que pierde credibilidad.

En este tema veremos cómo investigar una falla E2E, qué señales observar y cómo distinguir defectos reales, problemas de ambiente y errores de la propia prueba.

18.2 Qué significa analizar una falla

Analizar una falla significa revisar la evidencia disponible para responder una pregunta concreta: ¿por qué la prueba no obtuvo el resultado esperado?

Una falla E2E no debe clasificarse solo por el mensaje final. Debe analizarse el flujo completo: condiciones iniciales, acciones, datos, ambiente, respuestas y verificaciones.

El objetivo no es culpar a una parte del sistema, sino identificar la causa más probable y definir la acción siguiente: corregir la aplicación, arreglar la prueba, estabilizar el ambiente, limpiar datos o investigar más.

18.3 Clasificación inicial de fallas

Una forma práctica de comenzar es clasificar la falla en una categoría inicial. Esta clasificación puede cambiar durante la investigación, pero ayuda a ordenar el análisis.

Categoría Descripción Ejemplo
Defecto real La aplicación no cumple el comportamiento esperado. Una compra aprobada no habilita el curso.
Problema de ambiente La prueba falla por configuración, disponibilidad o estado del entorno. El backend de pruebas está caído.
Error de prueba El escenario está mal escrito, desactualizado o verifica algo incorrecto. La prueba busca un selector que ya no corresponde.
Problema de datos Las condiciones iniciales no son válidas o los datos están contaminados. El usuario de prueba ya tiene el curso comprado.
Dependencia externa Un proveedor o servicio fuera del control directo falla o responde distinto. El sandbox de pagos no responde.

18.4 Primeras preguntas al investigar

Antes de modificar código o reejecutar pruebas sin criterio, conviene hacerse algunas preguntas básicas.

  • ¿En qué paso falló exactamente?
  • ¿Qué esperaba la prueba y qué ocurrió realmente?
  • ¿La falla ocurrió en una acción o en una verificación?
  • ¿El ambiente estaba disponible y actualizado?
  • ¿Los datos iniciales eran correctos?
  • ¿La evidencia visual coincide con el mensaje de error?
  • ¿Hay errores en logs, consola, red o servicios externos?
  • ¿El mismo escenario falló antes o es la primera vez?

Estas preguntas ayudan a evitar conclusiones apresuradas.

18.5 Usar evidencias para diagnosticar

El tema anterior mostró la importancia de capturas, videos, trazas y registros. En el análisis de fallas, esas evidencias se combinan para reconstruir lo ocurrido.

Evidencia Qué revisar
Captura de pantalla Si la aplicación estaba en la pantalla correcta y mostraba datos esperados.
Video Si el flujo avanzó en el orden correcto y si hubo cambios visuales inesperados.
Traza Qué acción falló, qué selector se usó, qué solicitudes ocurrieron y cuánto tardaron.
Logs Errores internos, excepciones, códigos de respuesta o fallas de servicios.
Datos de prueba Si el usuario, entidad o estado inicial correspondían al escenario.

18.6 Defectos reales de la aplicación

Un defecto real ocurre cuando la aplicación no cumple el comportamiento esperado para un flujo válido. La prueba hizo lo que debía hacer, el ambiente y los datos eran correctos, pero el sistema respondió mal.

Señales de defecto real:

  • El problema se reproduce manualmente siguiendo los mismos pasos.
  • Los datos iniciales son válidos y el ambiente está disponible.
  • La interfaz muestra un comportamiento incorrecto para el usuario.
  • El backend registra un error relacionado con la operación.
  • La verificación falla porque el estado de negocio no cambió como debía.
  • Otros escenarios relacionados empiezan a fallar después de un cambio de producto.

Cuando hay un defecto real, la acción correcta es reportarlo con evidencia clara y pasos de reproducción.

18.7 Problemas de ambiente

Un problema de ambiente ocurre cuando la aplicación o sus dependencias no están en condiciones de ejecutar la prueba correctamente. No necesariamente hay un defecto funcional; el entorno puede estar caído, incompleto, desactualizado o mal configurado.

Ejemplos:

  • El servidor de pruebas no responde.
  • La base de datos no fue migrada.
  • Falta una variable de configuración.
  • Un servicio interno no está desplegado.
  • El ambiente tiene una versión mezclada de frontend y backend.
  • El proveedor externo sandbox está fuera de servicio.
Una suite E2E no puede ser confiable si el ambiente cambia sin control o no tiene una forma clara de verificar su estado antes de ejecutar.

18.8 Errores de la propia prueba

Un error de prueba ocurre cuando el escenario no representa correctamente el comportamiento esperado o está implementado de manera frágil. En ese caso, la aplicación puede estar funcionando bien, pero la prueba falla igual.

Ejemplos de errores de prueba:

  • Usar un selector que ya no identifica el elemento correcto.
  • Esperar un texto que cambió legítimamente.
  • No esperar una condición necesaria antes de interactuar.
  • Usar datos compartidos con otras pruebas.
  • Verificar una regla que ya no forma parte del requisito.
  • Hacer clic en el primer resultado cuando el orden de la lista no está garantizado.

La solución no es ignorar la falla, sino corregir la prueba para que vuelva a representar el escenario de manera clara.

18.9 Problemas de datos

Los datos de prueba pueden provocar fallas difíciles de interpretar. Un escenario puede fallar porque el usuario ya estaba en otro estado, porque una entidad fue usada por otra ejecución o porque la limpieza anterior no se completó.

Señales de problema de datos:

  • La prueba falla al crear una entidad porque ya existe.
  • El usuario no tiene los permisos esperados.
  • La verificación encuentra datos de otra ejecución.
  • El estado inicial no coincide con la condición definida.
  • La prueba pasa cuando se usa un usuario nuevo, pero falla con uno reutilizado.
  • La limpieza posterior dejó registros incompletos.

Cuando los datos no son confiables, la prueba puede producir falsos positivos y falsos negativos.

18.10 Fallas por sincronización

Las fallas por sincronización aparecen cuando la prueba avanza antes de que la aplicación esté lista. Ya vimos que las esperas fijas suelen ser una causa importante de inestabilidad.

Ejemplos:

  • La prueba busca un botón antes de que se renderice.
  • Hace clic mientras una pantalla todavía está cargando.
  • Verifica un listado antes de que llegue la respuesta del backend.
  • Espera un correo o webhook antes de que el proceso asincrónico termine.
  • El escenario pasa en una máquina rápida y falla en una más lenta.

Si una falla desaparece al aumentar tiempos de espera, no significa que esté resuelta. Lo correcto es esperar por una condición observable y relevante.

18.11 Fallas por dependencias externas

Cuando un escenario depende de correos, pagos, autenticación externa o APIs de terceros, una falla puede venir de fuera de nuestra aplicación.

Conviene revisar:

  • Si el proveedor estaba disponible durante la ejecución.
  • Si se usaron credenciales o tokens válidos.
  • Si hubo límites de uso o bloqueos por demasiadas solicitudes.
  • Si el sandbox cambió su respuesta o estado.
  • Si el evento externo, como un webhook, llegó correctamente.
  • Si la aplicación manejó bien el error del proveedor.

Aunque el origen sea externo, también puede existir un defecto propio si la aplicación no maneja la falla de manera adecuada.

18.12 Reproducir la falla

Reproducir una falla significa ejecutar nuevamente los pasos necesarios para observar el mismo problema. No siempre es obligatorio reproducir antes de reportar, pero ayuda a confirmar la causa.

Para reproducir de manera útil, conviene controlar:

  • El mismo ambiente.
  • La misma versión de la aplicación.
  • Datos equivalentes o los mismos datos si todavía existen.
  • El mismo rol de usuario.
  • Las mismas condiciones externas relevantes.
  • El mismo navegador o dispositivo si el problema parece visual.

Si la falla no se reproduce, no se debe descartar automáticamente. Puede tratarse de una falla intermitente que requiere más evidencia.

18.13 Comparar con ejecuciones anteriores

Una forma efectiva de investigar es comparar la ejecución fallida con ejecuciones exitosas anteriores. Esto ayuda a detectar qué cambió.

Comparación Pregunta útil
Versión de aplicación ¿La falla comenzó después de un despliegue?
Datos usados ¿El usuario o entidad tenía un estado distinto?
Duración de pasos ¿Algún paso empezó a tardar más?
Errores de logs ¿Apareció una excepción nueva?
Ambiente ¿Cambió la configuración o la disponibilidad de servicios?

18.14 Evitar la repetición automática sin análisis

Reintentar una prueba fallida puede ser útil para detectar intermitencia, pero no debe reemplazar el análisis. Si una prueba falla y luego pasa, todavía existe una señal que merece revisión.

El reintento automático puede ocultar problemas como:

  • Sincronización mal diseñada.
  • Ambiente inestable.
  • Dependencias externas lentas.
  • Datos compartidos entre pruebas paralelas.
  • Errores reales que ocurren solo bajo ciertas condiciones.
Una prueba que solo pasa después de reintentos no es completamente confiable. El reintento puede ser una herramienta temporal, no una solución definitiva.

18.15 Reportar una falla como defecto

Cuando el análisis indica que hay un defecto real, el reporte debe ser claro y accionable. Un buen reporte reduce el tiempo que desarrollo necesita para entender y corregir el problema.

Debe incluir:

  • Título concreto del problema.
  • Ambiente y versión probada.
  • Pasos para reproducir.
  • Datos usados, si son relevantes.
  • Resultado esperado.
  • Resultado obtenido.
  • Evidencias: capturas, video, logs o trazas.
  • Impacto sobre el usuario o flujo de negocio.

El reporte no debe decir solamente "falló la prueba". Debe explicar qué comportamiento incorrecto se observó en la aplicación.

18.16 Corregir una prueba defectuosa

Si la causa está en la prueba, hay que corregirla con el mismo cuidado que cualquier otro código. No conviene simplemente borrar la verificación o aumentar tiempos de espera sin entender el problema.

Acciones posibles:

  • Actualizar selectores para usar identificadores estables.
  • Modificar la verificación si el requisito cambió legítimamente.
  • Crear datos únicos para evitar interferencia.
  • Esperar por estados observables en lugar de tiempos fijos.
  • Separar un escenario demasiado largo en pruebas más claras.
  • Mejorar mensajes de error y evidencias para futuras fallas.

Una prueba corregida debe seguir protegiendo el comportamiento importante del flujo.

18.17 Ejemplo: compra de un curso

Supongamos que una prueba E2E falla porque, después de pagar, el curso no aparece en "Mis cursos". Esa falla puede tener distintas causas.

Observación Causa probable Acción
La orden figura como pagada, pero el curso no se habilita. Defecto real de negocio. Reportar defecto con datos de la orden.
El backend de cursos no responde. Problema de ambiente. Revisar disponibilidad y despliegue.
El pago sandbox queda pendiente. Dependencia externa o configuración. Revisar proveedor y eventos recibidos.
El curso sí aparece, pero la prueba busca otro nombre. Error de prueba o datos. Corregir dato esperado o preparación del escenario.
La lista carga tarde y la prueba verifica demasiado pronto. Sincronización. Esperar por el curso específico o estado de carga finalizado.

18.18 Decisión después del análisis

El análisis debe terminar en una acción clara. Dejar fallas sin clasificar hace que la suite pierda valor y que el equipo ignore resultados importantes.

Posibles decisiones:

  • Reportar un defecto real de la aplicación.
  • Corregir el escenario E2E.
  • Reparar o estabilizar el ambiente.
  • Limpiar o regenerar datos de prueba.
  • Aislar una dependencia externa.
  • Marcar temporalmente una prueba como inestable con una tarea de corrección.
  • Agregar evidencia adicional para futuras investigaciones.

La decisión debe quedar registrada cuando la falla afecta una suite compartida.

18.19 Errores comunes

Al analizar fallas E2E, conviene evitar estos errores:

  • Asumir que toda falla es un defecto de la aplicación.
  • Asumir que toda falla intermitente es irrelevante.
  • Reejecutar pruebas hasta que pasen sin investigar la causa.
  • Borrar verificaciones para que la prueba deje de fallar.
  • No revisar datos iniciales ni estado del ambiente.
  • Reportar "falló la automatización" sin explicar el comportamiento observado.
  • Ignorar logs, trazas y capturas disponibles.
  • No documentar la clasificación final de la falla.

18.20 Lista de verificación

Para analizar una falla E2E, podemos seguir esta lista:

  • ¿Cuál fue el paso exacto que falló?
  • ¿La falla ocurrió durante una acción o una verificación?
  • ¿La evidencia visual confirma el estado reportado?
  • ¿Los datos iniciales eran correctos y aislados?
  • ¿El ambiente y sus servicios estaban disponibles?
  • ¿Hubo errores en logs, red, consola o proveedor externo?
  • ¿El comportamiento se reproduce manualmente?
  • ¿La prueba sigue representando el requisito actual?
  • ¿La causa probable quedó clasificada y con acción asignada?

18.21 Qué debes recordar de este tema

  • Una falla E2E no siempre implica un defecto real de la aplicación.
  • El análisis debe revisar evidencia, datos, ambiente, dependencias y lógica de la prueba.
  • Los defectos reales deben reportarse con pasos, resultado esperado, resultado obtenido e impacto.
  • Los problemas de ambiente necesitan estabilización, no cambios superficiales en la prueba.
  • Los errores de prueba deben corregirse sin perder cobertura útil.
  • Los reintentos pueden ayudar a detectar intermitencia, pero no reemplazan el diagnóstico.
  • Clasificar y registrar la causa mantiene la suite confiable y accionable.

18.22 Conclusión

El análisis de fallas es una habilidad central para trabajar con pruebas End-to-End. Estas pruebas atraviesan muchas capas, por lo que una falla puede tener múltiples causas posibles.

Una suite E2E madura no solo ejecuta escenarios: también produce evidencias útiles y permite clasificar fallas con criterio. Distinguir defectos reales, problemas de ambiente y errores de prueba evita diagnósticos incorrectos y mejora la confianza del equipo en los resultados.

En el próximo tema veremos organización de una suite E2E: nombres, carpetas y responsabilidades.