Plus facile à lire avec un fond crème, une teinte, plus de contraste ou un texte plus grand ? Choisissez vos couleurs et votre texte, une fois pour toutes les pages.

Leçon gratuite

Exigences logicielles : du besoin à l'exigence

Après cette leçon: Je peux transformer un besoin en une exigence claire et vérifiable.

Leçon de 55 min8 commandesLab PostgreSQL et PostgREST : une base de données et une API REST dans le navigateur

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

MotCe que ça veut direExemple
Partie prenanteune personne ou un groupe concerné par le systèmel'enseignant
Besoince qu'une partie prenante veut, dit avec ses motsJe veux voir les salles libres
Exigenceune phrase précise sur ce que le système doit faire ou garantir
Exigence fonctionnelleune exigence sur ce que le système fait
Exigence non fonctionnelleune exigence sur la qualité du service : vitesse, durée de conservation
Vérifiableque 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

BesoinExigenceType
Je veux voir les salles libresLe système liste les salles libres d'un créneau donnéFonctionnelle
Il ne faut pas attendreLa liste s'affiche en moins de 2 secondesNon fonctionnelle
Pas de doublonUne salle n'est réservée qu'une fois par créneauFonctionnelle
Garder une traceLes réservations sont conservées 12 moisNon 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 flouePhrase vérifiableCe qui change
Le système doit être rapideLa liste s'affiche en moins de 2 secondesUn nombre
Il doit être facile à utiliserUne réservation se fait en 3 clics au plusUn nombre
Il refuse les mauvaises donnéesIl répond par le code 400 sans demandeurUn code précis
Les données restent longtempsLes données restent 12 moisUne durée

Les cellules que les étudiants remplissent restent vides dans cet aperçu.

À vous : repérer les mots flous

Code: python
# 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

Commande
export PGPASSWORD=shop

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.

Repartir de zéro

Commande
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

Commande
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

Commande
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

Commande
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

Commande
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

Commande
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

Commande
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

ObservationExigence possibleDéjà respectée ?
La lecture renvoie les réservationsLe système liste les réservations d'une salleOui
Le code 400 sans demandeurUne réservation sans demandeur est refuséeOui
La table n'interdit pas les doublonsUne 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.

À propos de ce labo et de sa source: Lab PostgreSQL et PostgREST : une base de données et une API REST dans le navigateur

Vous enseignez à une classe ? Proposez ce module à vos étudiants avec un guide de l'enseignant, des devoirs corrigés et un laboratoire pour chaque étudiant.