8. Requisitos, criterios de aceptación y casos de uso

8.1 Introducción

Para probar software necesitamos saber qué comportamiento se espera. Si no conocemos los requisitos, los criterios de aceptación o los casos de uso, será difícil decidir si el sistema funciona correctamente.

Los requisitos describen qué debe hacer el sistema o qué condiciones debe cumplir. Los criterios de aceptación ayudan a decidir cuándo una funcionalidad puede considerarse terminada. Los casos de uso describen interacciones entre un actor y el sistema para lograr un objetivo.

En este tema veremos cómo estos elementos ayudan al testing y cómo se relacionan con el diseño de casos de prueba.

8.2 ¿Qué es un requisito?

Un requisito es una necesidad, condición o capacidad que el sistema debe cumplir. Puede describir una funcionalidad, una regla de negocio, una restricción técnica o un atributo de calidad.

Ejemplos de requisitos:

  • El usuario debe poder iniciar sesión con correo electrónico y contraseña.
  • El sistema debe bloquear una cuenta después de cinco intentos fallidos.
  • La pantalla de búsqueda debe responder en menos de tres segundos.
  • Solo los usuarios administradores pueden eliminar productos.
  • El sistema debe enviar un correo de confirmación luego de registrar una compra.

Un requisito sirve como punto de partida para diseñar pruebas. Si está mal escrito, incompleto o ambiguo, las pruebas también pueden quedar incompletas o confusas.

8.3 Requisitos funcionales y no funcionales

Los requisitos suelen clasificarse en funcionales y no funcionales.

Tipo Qué describe Ejemplo
Funcional Qué debe hacer el sistema. El usuario debe poder recuperar su contraseña mediante un enlace enviado por correo.
No funcional Cómo debe comportarse el sistema o qué atributo de calidad debe cumplir. El enlace de recuperación debe generarse en menos de dos segundos.

Ambos tipos son importantes para el testing. Una funcionalidad puede hacer lo correcto, pero ser demasiado lenta, insegura o difícil de usar. En ese caso, cumple parte de lo esperado, pero no alcanza la calidad necesaria.

8.4 Características de un buen requisito

Un buen requisito debe ser fácil de entender y de verificar. Algunas características deseables son:

  • Claro: no debe prestarse a múltiples interpretaciones.
  • Completo: debe incluir la información necesaria para implementarlo y probarlo.
  • Consistente: no debe contradecir otros requisitos.
  • Verificable: debe permitir decidir si se cumple o no.
  • Necesario: debe aportar valor al usuario o al negocio.
  • Priorizado: debe conocerse su importancia relativa.
  • Trazable: debe poder relacionarse con pruebas, defectos y versiones.
Si un requisito no puede verificarse, será difícil probarlo de forma objetiva.

8.5 Ejemplo de requisito ambiguo

Un requisito ambiguo podría ser:

El sistema debe mostrar rápidamente los resultados de búsqueda.

El problema es que "rápidamente" puede significar cosas diferentes para distintas personas. Para un usuario podría ser un segundo; para otra persona, cinco segundos. Como no hay un valor concreto, la prueba queda abierta a interpretaciones.

Una versión más verificable sería:

El sistema debe mostrar los primeros 20 resultados de búsqueda en menos de 3 segundos cuando existan hasta 10.000 productos registrados.

Ahora podemos diseñar una prueba con datos, condiciones y resultado esperado claro.

8.6 ¿Qué es un criterio de aceptación?

Un criterio de aceptación es una condición que debe cumplirse para considerar que una funcionalidad fue implementada correctamente desde la perspectiva del negocio, del usuario o del equipo.

Los criterios de aceptación responden preguntas como:

  • ¿Qué debe ocurrir en el caso exitoso?
  • ¿Qué debe ocurrir con datos inválidos?
  • ¿Qué mensajes deben mostrarse?
  • ¿Qué permisos aplican?
  • ¿Qué condiciones deben cumplirse antes de ejecutar una acción?
  • ¿Cuándo podemos decir que la funcionalidad está lista?

Para testing, los criterios de aceptación son muy valiosos porque permiten convertir expectativas en pruebas concretas.

8.7 Formato Dado-Cuando-Entonces

Una forma habitual de escribir criterios de aceptación es el formato Dado-Cuando-Entonces. Este formato ayuda a expresar contexto, acción y resultado esperado.

  • Dado: describe la condición inicial.
  • Cuando: describe la acción que se realiza.
  • Entonces: describe el resultado esperado.

Ejemplo:

Dado un usuario registrado con correo verificado,
cuando ingresa su correo y contraseña correctos,
entonces el sistema debe iniciar sesión y mostrar la pantalla principal.

Este criterio puede transformarse fácilmente en un caso de prueba porque define precondición, acción y resultado esperado.

8.8 Criterios de aceptación para casos alternativos

No debemos escribir criterios solo para el camino exitoso. También son importantes los casos alternativos, errores y límites.

Ejemplos para inicio de sesión:

Dado un usuario registrado,
cuando ingresa una contraseña incorrecta,
entonces el sistema debe rechazar el acceso y mostrar el mensaje "Correo o contraseña incorrectos".
Dado un usuario con cuatro intentos fallidos previos,
cuando ingresa una contraseña incorrecta nuevamente,
entonces el sistema debe bloquear la cuenta e informar cómo recuperarla.

Estos criterios ayudan a probar condiciones que podrían quedar olvidadas si solo pensamos en el uso ideal.

8.9 ¿Qué es una historia de usuario?

En metodologías ágiles, los requisitos suelen expresarse como historias de usuario. Una historia de usuario describe una necesidad desde la perspectiva de quien usará o se beneficiará de la funcionalidad.

Un formato común es:

Como [tipo de usuario], quiero [objetivo], para [beneficio].

Ejemplo:

Como cliente registrado, quiero recuperar mi contraseña, para volver a ingresar a mi cuenta si la olvido.

La historia de usuario no reemplaza los criterios de aceptación. La historia describe la necesidad; los criterios aclaran cuándo se considera satisfecha.

8.10 ¿Qué es un caso de uso?

Un caso de uso describe una interacción entre un actor y el sistema para alcanzar un objetivo. El actor puede ser una persona, otro sistema o un proceso externo.

Un caso de uso suele incluir:

  • Nombre del caso de uso.
  • Actor principal.
  • Objetivo.
  • Precondiciones.
  • Flujo principal.
  • Flujos alternativos.
  • Excepciones o errores.
  • Postcondiciones.

Los casos de uso son especialmente útiles para entender procesos completos y diseñar pruebas de flujos de negocio.

8.11 Ejemplo de caso de uso

Nombre Recuperar contraseña
Actor principal Usuario registrado
Objetivo Obtener un enlace para crear una nueva contraseña.
Precondiciones El usuario tiene una cuenta registrada con correo válido.
Flujo principal El usuario solicita recuperación, ingresa su correo, recibe un enlace, abre el enlace, define una nueva contraseña y confirma el cambio.
Flujos alternativos Correo no registrado, enlace vencido, contraseña inválida, enlace ya utilizado.
Postcondición La contraseña queda actualizada y el enlace anterior no puede reutilizarse.

A partir de este caso de uso podemos diseñar varios casos de prueba: uno exitoso, uno con correo inexistente, uno con enlace vencido, uno con contraseña débil y otros escenarios relevantes.

8.12 Relación entre requisitos, criterios y casos de prueba

Los requisitos y criterios de aceptación son entradas importantes para diseñar casos de prueba. Un caso de prueba toma una condición específica y la convierte en pasos, datos y resultado esperado.

Elemento Pregunta que responde Ejemplo
Requisito ¿Qué debe hacer el sistema? El usuario debe poder recuperar su contraseña.
Criterio de aceptación ¿Cuándo se considera correcto? Si el correo existe, el sistema debe enviar un enlace válido por 30 minutos.
Caso de prueba ¿Cómo lo verificamos concretamente? Ingresar un correo registrado, solicitar recuperación y comprobar que llega un enlace válido.

8.13 Trazabilidad

La trazabilidad permite relacionar requisitos, criterios, casos de prueba y defectos. Es útil para saber qué se probó, qué falta probar y qué impacto tiene un cambio.

Ejemplo:

Requisito R-15: recuperar contraseña.
Criterio CA-15.1: enviar enlace si el correo existe.
Caso de prueba CP-15.1: recuperación exitosa con correo registrado.
Defecto D-42: el enlace enviado vence inmediatamente.

Con trazabilidad, si cambia el requisito R-15, podemos identificar rápidamente qué criterios y pruebas deben actualizarse.

8.14 Preguntas útiles para analizar requisitos

Cuando un tester revisa un requisito, puede hacer preguntas como:

  • ¿Cuál es el comportamiento esperado?
  • ¿Qué debe ocurrir si los datos son inválidos?
  • ¿Hay valores mínimos o máximos?
  • ¿Qué permisos intervienen?
  • ¿Qué mensajes deben mostrarse?
  • ¿Hay reglas de negocio especiales?
  • ¿Qué pasa si un servicio externo falla?
  • ¿Qué datos se necesitan para probar?
  • ¿Cómo se sabrá que la funcionalidad está terminada?
  • ¿Qué riesgos tiene esta funcionalidad?

Estas preguntas no son obstáculos. Son una forma de mejorar la claridad y prevenir defectos antes de desarrollar.

8.15 Errores comunes

Al trabajar con requisitos y criterios de aceptación, algunos errores frecuentes son:

  • Escribir requisitos demasiado generales.
  • No definir resultados esperados.
  • Incluir palabras ambiguas como "rápido", "fácil", "adecuado" o "seguro" sin medida concreta.
  • No contemplar casos alternativos o errores.
  • No aclarar reglas de permisos.
  • No actualizar criterios cuando cambia la funcionalidad.
  • Diseñar pruebas sin relacionarlas con requisitos.
  • Confundir una historia de usuario con una especificación completa.

Estos errores aumentan el riesgo de construir y probar algo distinto de lo que realmente se necesita.

8.16 Buenas prácticas

Para mejorar la relación entre requisitos y testing conviene:

  • Definir criterios de aceptación antes de desarrollar.
  • Usar ejemplos concretos de datos y resultados esperados.
  • Incluir casos exitosos, alternativos y de error.
  • Revisar requisitos con testers, desarrolladores y negocio.
  • Evitar términos ambiguos sin medida verificable.
  • Mantener trazabilidad entre requisitos, pruebas y defectos.
  • Actualizar documentación cuando cambia el comportamiento esperado.
  • Transformar dudas importantes en criterios claros.

Un requisito claro reduce discusiones, mejora el diseño de pruebas y facilita la aceptación de una funcionalidad.

8.17 Qué debes recordar de este tema

  • Los requisitos describen qué debe hacer o cumplir el sistema.
  • Los criterios de aceptación indican cuándo una funcionalidad puede considerarse correcta.
  • Los casos de uso describen interacciones entre actores y sistema para lograr un objetivo.
  • Un buen requisito debe ser claro, completo, consistente, verificable y necesario.
  • El formato Dado-Cuando-Entonces ayuda a expresar criterios de aceptación.
  • Los casos alternativos y de error son tan importantes como el camino exitoso.
  • La trazabilidad permite relacionar requisitos, pruebas y defectos.
  • Sin resultado esperado claro, una prueba pierde precisión.

8.18 Conclusión

Los requisitos, criterios de aceptación y casos de uso son la base para diseñar pruebas efectivas. Permiten entender qué debe hacer el sistema, bajo qué condiciones y con qué resultado esperado.

Un tester aporta valor cuando ayuda a transformar ideas generales en comportamientos verificables. Las preguntas correctas al inicio pueden evitar defectos costosos más adelante.

En el próximo tema estudiaremos los niveles de prueba: unitarias, integración, sistema y aceptación, para comprender en qué capas se puede evaluar el software.