Du besoin du client à l'exigence
Une exigence logicielle est une phrase qui dit ce qu'un système doit faire ou garantir. Quand elle est précise, on peut vérifier le système sans discuter. Quand elle est floue, chacun la comprend à sa façon.
Une université veut remplacer son tableau papier de réservation des salles. Votre travail : transformer ce qu'on vous dit en exigences que l'on peut tester.
À la fin de cette leçon
Remarque
Je peux transformer un besoin en une exigence claire et vérifiable.
Mots clés
| Mot | Ce que ça veut dire | Exemple |
|---|---|---|
| Partie prenante | une personne ou un groupe concerné par le système | l'enseignant |
| Besoin | ce qu'une partie prenante veut, dit avec ses mots | Je veux voir les salles libres |
| Exigence | une phrase précise sur ce que le système doit faire ou garantir | |
| Exigence fonctionnelle | une exigence sur ce que le système fait | |
| Exigence non fonctionnelle | une exigence sur la qualité du service : vitesse, durée de conservation | |
| Vérifiable | que l'on peut confirmer ou refuser par un essai simple |
Les cellules que les étudiants remplissent restent vides dans cet aperçu.
Un besoin n'est pas encore une exigence
Un besoin est dit avec les mots de la personne : « Je veux voir les salles libres ». Il est utile, mais flou. On ne sait pas combien de salles, ni en combien de temps.
Une exigence reprend le besoin et le précise. Elle dit qui fait quoi, et à quelle condition. Une phrase, un seul sujet.
Exemple : du besoin à l'exigence
| Besoin | Exigence | Type |
|---|---|---|
| Je veux voir les salles libres | Le système liste les salles libres d'un créneau donné | Fonctionnelle |
| Il ne faut pas attendre | La liste s'affiche en moins de 2 secondes | Non fonctionnelle |
| Pas de doublon | Une salle n'est réservée qu'une fois par créneau | Fonctionnelle |
| Garder une trace | Les réservations sont conservées 12 mois | Non fonctionnelle |
Les cellules que les étudiants remplissent restent vides dans cet aperçu.
Une bonne exigence se vérifie par un test
Une exigence est vérifiable quand on peut dire, après un essai, « c'est respecté » ou « ce ne l'est pas ». Pour cela, elle contient une valeur ou un comportement précis.
Des mots comme « rapide », « facile » ou « souvent » ne se mesurent pas. Remplacez-les par un nombre, une durée ou un code de réponse.
Exemple : rendre une exigence vérifiable
| Phrase floue | Phrase vérifiable | Ce qui change |
|---|---|---|
| Le système doit être rapide | La liste s'affiche en moins de 2 secondes | Un nombre |
| Il doit être facile à utiliser | Une réservation se fait en 3 clics au plus | Un nombre |
| Il refuse les mauvaises données | Il répond par le code 400 sans demandeur | Un code précis |
| Les données restent longtemps | Les données restent 12 mois | Une durée |
Les cellules que les étudiants remplissent restent vides dans cet aperçu.
À vous : repérer les mots flous
# Ajoutez une exigence de votre choix à la liste, puis relancez.
exigences = [
"Le système doit être rapide.",
"Le système affiche la liste en moins de 2 secondes.",
"L'interface doit être conviviale.",
]
mots_flous = ["rapide", "convivial", "facile", "souvent"]
for texte in exigences:
floue = False
for mot in mots_flous:
if mot in texte:
floue = True
if floue:
print("floue :", texte)
else:
print("vérifiable :", texte)
Une erreur fréquente
Attention
Beaucoup pensent qu'une exigence doit dire comment construire le système, par exemple « utiliser PostgreSQL ». Une exigence dit ce que le système fait, pas comment. Le choix de l'outil vient après, pendant la conception.
Le laboratoire est un système à spécifier
Dans le laboratoire, un petit système de réservation de salles est déjà prêt. Une base de données PostgreSQL garde les réservations. Une API web les rend lisibles avec curl.
Vous ne le construisez pas. Vous l'observez, comme un analyste avant d'écrire les exigences. Lancez les Runs dans l'ordre. Les cinq premiers préparent la table et ses trois réservations.
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.
Lire toutes les réservations
curl -s -w "\n" "http://api:3000/reservations?order=id"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.
Réserver sans donner de demandeur
curl -s -o /dev/null -w "%{http_code}\n" -X POST -H "Content-Type: application/json" -d '{"salle":"B102","creneau":"mercredi 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.
Demander une adresse inconnue
curl -s -o /dev/null -w "%{http_code}\n" "http://api:3000/salles"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 comportement observé est une exigence possible
En lisant les réponses, vous avez relevé trois comportements. Le système liste les réservations. Il refuse une réservation sans demandeur par le code 400. Il répond 404 pour une adresse inconnue.
Chaque comportement peut devenir une exigence. Cherchez aussi ce qui manque : rien dans la table n'interdit deux réservations pour la même salle au même créneau.
Exemple : de l'observation à l'exigence
| Observation | Exigence possible | Déjà respectée ? |
|---|---|---|
| La lecture renvoie les réservations | Le système liste les réservations d'une salle | Oui |
| Le code 400 sans demandeur | Une réservation sans demandeur est refusée | Oui |
| La table n'interdit pas les doublons | Une salle n'est réservée qu'une fois par créneau | À vérifier |
Les cellules que les étudiants remplissent restent vides dans cet aperçu.