Ir al contenido
angel.library

Plan de pruebas y calidad no funcional

Un plan de pruebas no tiene que ser un documento largo. Debe hacer visibles alcance, riesgos, ambientes, datos, responsables y señales para decidir si un cambio puede publicarse.

CampoPregunta
Objetivo¿qué cambio o producto evaluamos?
Riesgos¿qué fallos causarían daño?
Alcance¿qué se prueba y qué queda fuera?
Niveles¿qué se cubre en unitario, integración, contrato y E2E?
Ambientes¿qué depende del runtime o proveedor real?
Datos¿cómo se crean, aíslan y eliminan?
Evidencia¿qué reportes permiten diagnosticar?
Criterio de entrada¿qué debe estar listo para comenzar?
Criterio de salida¿qué condiciones permiten publicar?
Excepciones¿qué riesgo se acepta, quién y hasta cuándo?

El plan se actualiza al descubrir información. Si una migración o proveedor externo aparece tarde, cambia el riesgo y también la estrategia.

SuitePropósitoEjemplo
Smokeconfirmar que lo esencial arrancahome, login y health responden
Sanityrevisar el área modificadacupón corregido aplica y rechaza límites
Regresióndetectar comportamientos que ya funcionabancompra, permisos y recuperación
Aceptaciónconfirmar una necesidad acordadaGiven/When/Then del criterio de producto

Una misma prueba puede pertenecer a varias suites mediante tags o proyectos. Evita copiar el archivo para cada nombre: clasifica la intención y controla cuándo se ejecuta.

test(
"una persona recupera acceso con un enlace vigente",
{
tag: ["@smoke", "@auth"]
},
async ({ page }) => {
// Flujo observable.
}
)

La sintaxis exacta depende del runner. Lo importante es que la selección sea visible y que la suite crítica no se quede fuera del pipeline por accidente.

Una prueba funcional pregunta “¿hace lo correcto?”. Una no funcional pregunta “¿con qué calidad o bajo qué condiciones?”.

AtributoSeñalEjemplo de presupuesto
Rendimientolatencia, throughput, recursosp95 menor de 300 ms bajo carga acordada
Accesibilidadsemántica, teclado, contrasterecorrido crítico operable sin mouse
Seguridadautorización, exposición, abusotenant A nunca obtiene datos de B
Resilienciarecuperación ante dependencia caídatimeout acotado y reintento idempotente
Compatibilidadnavegador, dispositivo, versiónsmoke en Chromium, Firefox y WebKit
Usabilidadéxito y comprensión de tareasmensaje permite corregir un formulario

Un SLO (Service Level Objective u objetivo de nivel de servicio) expresa una meta medible del sistema. Una prueba de carga puede verificar capacidad antes de publicar; la observabilidad confirma comportamiento bajo tráfico real.

  • load test: comportamiento bajo carga esperada;
  • stress test: encuentra el límite y cómo degrada;
  • spike test: cambio repentino de tráfico;
  • soak test: estabilidad durante un periodo prolongado;
  • scalability test: respuesta al aumentar recursos o instancias.

Define modelo de carga, datos, calentamiento, duración y criterios. “Cien usuarios” no explica qué hacen ni con qué ritmo. Separa latencia de cliente, red, API y base para diagnosticar.

Incluye casos de abuso en pruebas normales:

it("impide leer el proyecto de otra organización", async () => {
const project = await factory.project({ tenantId: tenantB.id })
const response = await request(app)
.get(`/projects/${project.id}`)
.set("Authorization", await tokenFor(memberOfTenantA))
expect(response.status).toBe(404)
})

Comprueba autorización por objeto, validación, rate limiting, manejo de secretos y dependencias. Escáneres estáticos y dinámicos aportan señales, pero no entienden todas las reglas de negocio.

Una suite automática detecta roles, nombres, relaciones y algunos contrastes. Añade pruebas manuales de teclado, zoom, reflow, lector de pantalla y contenido. Automatiza regresiones encontradas, pero no declares conformidad completa solo porque axe no encontró errores.

Prueba qué ocurre cuando:

  • una dependencia tarda más que el timeout;
  • llega 429 con instrucción de reintento;
  • una respuesta está truncada o no cumple schema;
  • se pierde conexión después de enviar una escritura;
  • dos solicitudes compiten por el mismo recurso;
  • el proceso reinicia con trabajo pendiente.

La aserción debe proteger invariantes: no duplicar cobros, no perder eventos confirmados y no revelar detalles sensibles.

AmbienteQué demuestraLimitación
localfeedback rápidopuede diferir de CI/producción
CI efímeroreproducibilidad e instalación limpiarecursos limitados
previewintegración del desplieguedatos y proveedores simulados
stagingtopología cercana a producciónpuede tener configuración divergente
producción sintéticadisponibilidad real de una ruta seguranunca debe modificar datos reales

No conviertas staging en la única prueba: su estado compartido suele ser menos determinista. Tampoco ejecutes flujos destructivos contra producción.

Un resultado debe indicar versión, ambiente, datos, navegador, duración y evidencia. Clasifica defectos por impacto y reproducibilidad; distingue fallo del producto, del test y de infraestructura.

Resultado: bloqueado
Riesgo: checkout duplica orden al reintentar tras timeout
Ambiente: preview / commit abc123
Evidencia: trace, request-id y filas creadas
Criterio afectado: idempotencia de pagos
  • riesgos y alcance explícitos;
  • nivel de prueba elegido por frontera;
  • datos y ambientes controlados;
  • smoke pequeño y realmente crítico;
  • calidad funcional, seguridad, accesibilidad y rendimiento;
  • fallos y recuperación, no solo camino feliz;
  • evidencia diagnóstica y criterio de salida;
  • riesgo aceptado con responsable y vencimiento.