Une histoire courte et ses critères
Une histoire utilisateur, en anglais user story, est une phrase courte qui dit ce qu'une personne veut faire avec un système, et pourquoi. Ses critères d'acceptation disent comment on saura que l'histoire est terminée.
Un enseignant veut réserver une salle pour son cours. Vous allez écrire cette histoire, puis la tester sur le système du laboratoire.
À la fin de cette leçon
Remarque
Je peux écrire une histoire utilisateur avec des critères d'acceptation vérifiables.
Mots clés
| Mot | Ce que ça veut dire | Exemple |
|---|---|---|
| Histoire utilisateur | une phrase qui dit qui veut quoi, et pourquoi | |
| Rôle | la personne qui veut quelque chose | enseignant |
| But | la raison pour laquelle elle le veut | donner mon cours |
| Critère d'acceptation | une condition vérifiable qui dit que l'histoire est finie | |
| Cas limite | une situation rare qui peut casser le système | deux réservations identiques |
Les cellules que les étudiants remplissent restent vides dans cet aperçu.
Une histoire se dit en une phrase
On l'écrit presque toujours sur le même modèle : « En tant que rôle, je veux action afin de but ».
Le rôle dit qui parle. L'action dit ce qu'il fait. Le but dit pourquoi : c'est lui qui permet de proposer autre chose si l'action est trop chère.
Exemple : trois histoires du système
| Rôle | Action | But |
|---|---|---|
| Enseignant | réserver une salle pour un créneau | donner mon cours |
| Étudiant | voir les salles libres | trouver où réviser |
| Responsable des salles | annuler une réservation | libérer la salle en cas de panne |
Les cellules que les étudiants remplissent restent vides dans cet aperçu.
Les critères d'acceptation disent quand c'est fini
Une histoire seule reste floue. On y ajoute au moins deux critères, chacun écrit en trois parties : étant donné la situation de départ, quand l'utilisateur agit, alors le résultat attendu.
Un bon critère contient une valeur précise : un code, un nombre, une durée. On peut alors l'essayer comme un petit test.
Exemple : deux critères pour une histoire
| Étant donné | Quand | Alors |
|---|---|---|
| Une salle libre le lundi à 10h | L'enseignant envoie sa réservation | Le système répond 201 |
| Une réservation sans demandeur | L'enseignant l'envoie | Le système répond 400 |
Les cellules que les étudiants remplissent restent vides dans cet aperçu.
Une erreur fréquente
Attention
Beaucoup pensent qu'une histoire bien écrite suffit pour commencer. Sans critères, deux personnes la terminent de deux façons. Écrivez les critères avant de construire, avec une valeur précise dans chacun.
On essaie les critères sur le système
Voici l'histoire : « En tant qu'enseignant, je veux réserver une salle pour un créneau afin de donner mon cours ». Elle a quatre critères.
Un : une réservation complète est créée, code 201. Deux : sans demandeur, elle est refusée, code 400. Trois : on peut relire les réservations d'une salle. Quatre : une salle déjà prise au même créneau est refusée.
Préparez la table avec les cinq premiers Runs. Puis essayez les critères un à un.
Donner le mot de passe à psql
export PGPASSWORD=shopAffichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
Repartir de zéro
psql -h db -U shop -c "drop table if exists reservations"Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
Créer la table reservations
psql -h db -U shop -c "create table reservations (id serial primary key, salle text not null, demandeur text not null, creneau text not null, statut text not null default 'demandee')"Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
Ajouter trois réservations
psql -h db -U shop -c "insert into reservations (salle, demandeur, creneau) values ('B102', 'Claire Dupuis', 'lundi 10h'), ('A201', 'Marc Lefebvre', 'lundi 10h'), ('B102', 'Sophie Martin', 'mardi 14h')"Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
Dire à l'API de relire la base
psql -h db -U shop -c "notify pgrst, 'reload schema'"Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
Critère un : une réservation complète
curl -s -o /dev/null -w "%{http_code}\n" -X POST -H "Content-Type: application/json" -d '{"salle":"A201","demandeur":"Julie Moreau","creneau":"mardi 8h"}' "http://api:3000/reservations"Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
Critère deux : sans demandeur
curl -s -o /dev/null -w "%{http_code}\n" -X POST -H "Content-Type: application/json" -d '{"salle":"A201","creneau":"mardi 9h"}' "http://api:3000/reservations"Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
Critère quatre : une salle déjà prise
curl -s -o /dev/null -w "%{http_code}\n" -X POST -H "Content-Type: application/json" -d '{"salle":"B102","demandeur":"Hugo Bernard","creneau":"lundi 10h"}' "http://api:3000/reservations"Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
Combien de réservations B102 le lundi à 10h ?
psql -h db -U shop -t -A -c "select count(*) from reservations where salle = 'B102' and creneau = 'lundi 10h'"Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
Un critère qui échoue montre ce qui manque
Le critère quatre demandait un refus. Le système a répondu 201 et la salle B102 est réservée deux fois le lundi à 10h. Le critère a trouvé un trou que personne n'avait écrit.
Deux suites sont possibles : corriger le système, ou admettre que l'histoire n'est pas encore respectée. Dans les deux cas, le critère a fait son travail.
Exemple : le bilan des quatre critères
| Critère | Réponse attendue | Résultat |
|---|---|---|
| Une réservation complète | 201 | Respecté |
| Sans demandeur | 400 | Respecté |
| Relire une salle | Les lignes de la salle | Respecté |
| Une salle déjà prise | 400 ou 409 | Non respecté : 201 |
Les cellules que les étudiants remplissent restent vides dans cet aperçu.