Qué es una historia de usuario
Una historia de usuario es una frase corta que cuenta qué quiere hacer una persona con el sistema y para qué. Sirve para que el equipo y quien pide el sistema hablen de lo mismo antes de escribir código.
Tiene una forma fija: "Como estudiante, quiero reservar una sala, para estudiar en grupo". Pero una historia sola no dice cuándo está terminada.
Al terminar esta lección
Nota
Puedo escribir una historia de usuario con sus criterios de aceptación.
Palabras clave
| Palabra | Qué significa | Ejemplo |
|---|---|---|
| Historia de usuario | una frase que cuenta qué quiere una persona y para qué | |
| Rol | quién usa el sistema | estudiante |
| Beneficio | para qué quiere la persona esa acción | |
| Criterio de aceptación | una prueba que dice cuándo la historia está hecha | |
| Dado, cuando, entonces | las tres partes de un criterio: situación, acción y resultado |
Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.
Una historia de usuario tiene tres partes
Una historia dice quién, qué y para qué. El rol es quien usa el sistema. La acción es lo que quiere hacer. El beneficio es la razón.
El beneficio importa más de lo que parece. Si no puedes decir para qué sirve una historia, quizá no hace falta construirla.
Ejemplo resuelto: las tres partes de una historia
| Parte | Pregunta que responde | Ejemplo |
|---|---|---|
| Rol | ¿Quién lo pide? | Como estudiante |
| Acción | ¿Qué quiere hacer? | quiero reservar una sala para una hora |
| Beneficio | ¿Para qué? | para estudiar en grupo sin hacer cola |
Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.
Un criterio de aceptación dice cuándo está hecha
Un criterio de aceptación es una prueba con un sí o un no. Se escribe con tres partes: dado que algo es cierto, cuando la persona hace algo, entonces pasa algo que se puede ver.
Una historia suele tener dos o tres criterios. Uno para el caso normal y otros para lo que el sistema debe rechazar. Cuando todos pasan, la historia está hecha.
Ejemplo resuelto: tres criterios de una historia
| Dado | Cuando | Entonces |
|---|---|---|
| la sala A1 está libre a las 15 | la estudiante la reserva | la API responde 201 y la reserva queda guardada |
| la sala A1 ya tiene reserva a las 9 | otra persona reserva A1 a las 9 | la API responde 409 y no guarda nada |
| hay reservas guardadas | se pide la lista de la sala A1 | solo salen las reservas de esa sala |
Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.
Un error frecuente
Advertencia
Mucha gente cree que una historia está completa con el rol y la acción. Sin criterios de aceptación nadie sabe cuándo termina, y cada persona decide a su manera. Añade siempre al menos un criterio que se pueda probar con un sí o un no.
Probar los criterios contra la API
Un criterio se puede probar con una petición. Con psql creas la tabla bookings y con curl haces las reservas.
Vas a probar dos de los criterios de arriba. Una reserva libre debe dar 201. Una reserva a una hora ya ocupada debe dar 409, que significa que choca con otra fila. Primero da a psql la contraseña.
Dar a psql la contraseña
export PGPASSWORD=shopSe muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Crear la tabla de reservas
psql -h db -U shop -c "drop table if exists bookings; create table bookings (id serial primary key, room text not null, student text not null, hour int not null check (hour between 8 and 20), status text not null default 'confirmed', unique (room, hour)); insert into bookings (room, student, hour) values ('A1', 'Lucia', 9), ('A1', 'Marcos', 10), ('B2', 'Irene', 9), ('B2', 'Pablo', 12); notify pgrst, 'reload schema'"Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Reservar A1 a las 15 horas
curl -s -o /dev/null -w "%{http_code}\n" -X POST -H "Content-Type: application/json" -d '{"room":"A1","student":"Nora","hour":15}' "http://api:3000/bookings"Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Reservar A1 a las 9, ya ocupada
curl -s -w "\n%{http_code}\n" -X POST -H "Content-Type: application/json" -d '{"room":"A1","student":"Nora","hour":9}' "http://api:3000/bookings"Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Pedir solo las reservas de A1
curl -s -w "\n" "http://api:3000/bookings?room=eq.A1&order=hour"Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.