C3 — Analyse et spécificationDans le dialogue d’impression, choisissez « Enregistrer au format PDF » comme destination.
Retour

Licence 1 · Génie logiciel

Cours 3Analyse et spécification

Recueillir des besoins et les écrire sans ambiguïté, puis en tirer trois diagrammes UML utiles.

2 chapitres · 8 h de travail estimé

  1. 1. Recueil des besoins4 h
  2. 2. Modélisation UML4 h

Chapitre 1 · 4 h

Recueil des besoins

Besoins fonctionnels et non fonctionnels ; entretien avec le client ; rédaction d'un cahier des charges simple ; les critères d'un besoin bien formulé — vérifiable, non ambigu.

Le chapitre 2 l'a montré : l'erreur la plus coûteuse est celle qu'on commet au tout début, en comprenant mal ce que le logiciel doit faire. Le bloc III attaque donc cette première étape, la plus décisive : recueillir les besoins et les écrire sans ambiguïté. C'est là que se fixe le cap du projet — et c'est là que naissent, ou non, les malentendus qui exploseront plus tard.

Ce chapitre apprend à distinguer les types de besoins, à les recueillir auprès du client, et surtout à reconnaître un besoin bien formulé : vérifiable et non ambigu. C'est la compétence qui sépare un cahier des charges utile d'une liste de vœux pieux.

Besoins fonctionnels et non fonctionnels

Un besoin décrit une attente du client. On les range en deux familles, et confondre les deux fait rater la moitié du travail.

Un besoin fonctionnel dit ce que le logiciel doit faire — une fonction offerte à un utilisateur : « emprunter un livre », « ajouter un ouvrage », « envoyer un rappel ». C'est le plus visible, celui auquel on pense spontanément.

Un besoin non fonctionnel dit comment il doit le faire — une propriété de la façon dont les fonctions sont rendues : performance (« répondre en moins de 2 s »), sécurité (« mots de passe chiffrés »), disponibilité, ergonomie, capacité, portabilité.

Besoin fonctionnelBesoin non fonctionnel
Répond àque fait le logiciel ?comment le fait-il ?
Exemple« l'utilisateur peut emprunter un livre »« une recherche répond en moins de 2 s »
Risqueoubli d'une fonctionsouvent oublié entièrement

Le piège est que les non fonctionnels sont souvent oubliés au recueil — et ce sont eux qui coûtent le plus cher à rattraper. On ne « sécurise » pas ni on n'« accélère » pas un logiciel après coup sans le refondre : ces qualités doivent guider la conception dès le départ. Les recenser explicitement est un réflexe à prendre.

L'entretien avec le client

Les besoins ne tombent pas du ciel : on va les chercher auprès du client, et c'est un exercice délicat. Le client sait ce qu'il veut faire, rarement ce que le logiciel doit faire — et il tient souvent pour évident ce qui ne l'est pas pour vous.

Quelques principes pour un entretien utile :

  • Poser des questions ouvertes d'abord (« décrivez-moi une journée type »), fermées ensuite pour préciser (« combien d'utilisateurs en même temps ? »).
  • Faire préciser les mots vagues : « rapide », « simple », « beaucoup » ne veulent rien dire tant qu'on ne les a pas chiffrés (voir plus bas).
  • Chercher les cas limites et les exceptions : que se passe-t-il si le livre est déjà emprunté ? si l'utilisateur n'existe pas ? Le client décrit spontanément le cas nominal ; les ennuis viennent des autres.
  • Reformuler et faire valider : « si je comprends bien, vous voulez… » — c'est le seul moyen de débusquer un malentendu à froid, quand il coûte 1 et non 100 (chapitre 2).

La difficulté est plus humaine que technique : écouter, ne rien supposer, oser les questions qui paraissent bêtes. C'est exactement le genre de faille qui a coûté le Mars Climate Orbiter.

Quiz · 1 question

Parmi ces besoins, lequel est NON fonctionnel : « l'utilisateur peut réserver un livre », « le système chiffre les mots de passe », « le bibliothécaire consulte les emprunts en cours » ?

  • « l'utilisateur peut réserver un livre »une action utilisateur
  • « le système chiffre les mots de passe » : c'est une propriété (sécurité) de la façon dont le logiciel fonctionne, pas une fonction offerte à un acteurune propriété de sécurité
  • « le bibliothécaire consulte les emprunts en cours »une action bibliothécaire

Réponse : « Réserver un livre » et « consulter les emprunts » sont des FONCTIONS offertes à un acteur : des besoins fonctionnels. « Chiffrer les mots de passe » ne décrit aucune fonction visible de l'utilisateur — c'est une PROPRIÉTÉ (de sécurité) de la manière dont le logiciel se comporte : un besoin non fonctionnel. Ces derniers sont souvent oubliés au recueil et coûtent cher à rattraper, car on ne sécurise pas un logiciel après coup sans le refondre.

Le cahier des charges

Le résultat du recueil se consigne dans un cahier des charges : le document qui fixe, par écrit et validé par le client, ce que le logiciel doit faire. À votre niveau, il reste simple — quelques pages — mais il structure tout le reste :

  • une description du contexte et des objectifs ;
  • la liste des acteurs (qui utilise le logiciel, chapitre 5) ;
  • les besoins fonctionnels, un par un, numérotés ;
  • les besoins non fonctionnels ;
  • les contraintes (délais, technologies imposées, budget).

Son rôle n'est pas administratif : c'est le contrat partagé entre le client et l'équipe, la référence à laquelle on reviendra pour trancher les désaccords (« ce n'était pas dans le cahier des charges ») et pour vérifier, à la fin, qu'on a bien livré ce qui était demandé (les tests de recette, bloc V). Dans votre projet de semestre, vous le rédigez juste après ce bloc.

Un besoin bien formulé : vérifiable et non ambigu

Voici le cœur du chapitre, et sa compétence centrale. Un besoin n'a de valeur que s'il est vérifiable et non ambigu — c'est-à-dire si l'on peut, à la fin, dire objectivement s'il est satisfait ou non.

Comparez :

✗  « Le système doit être rapide. »✓  « Une recherche par titre répond en moins de 1 s pour 95 % des requêtes,     jusqu'à 10 000 ouvrages. » ✗  « L'interface doit être conviviale. »✓  « Un nouvel utilisateur réussit à emprunter un livre en moins de 3 minutes,     sans aide, lors d'un test avec 5 personnes. »

« Rapide », « convivial », « beaucoup », « robuste » sont inexploitables : deux personnes les comprennent différemment, et surtout on ne pourra jamais les tester. Un besoin dont on ne peut pas écrire le test de recette n'est pas un besoin, c'est un vœu. On le rend vérifiable en le chiffrant et en précisant les conditions : quoi exactement, mesuré comment, dans quel contexte, avec quel seuil.

Le critère décisif, à retenir : si vous ne pouvez pas imaginer le test qui dira « oui, c'est satisfait » ou « non », le besoin est mal formulé. L'exercice vous fait transformer des vœux en besoins testables.

Quiz · 1 question

Pourquoi le besoin « le logiciel doit être facile à utiliser » est-il mal formulé, et comment le corriger ?

  • Il n'est pas mal formulé : la facilité d'utilisation est un objectif légitimeobjectif légitime suffit
  • Il est ambigu et non vérifiable : « facile » n'a pas de sens objectif et on ne peut pas le tester. On le corrige en le rendant mesurable, par exemple « un nouvel utilisateur accomplit la tâche X en moins de N minutes sans aide »ambigu et non testable
  • Il est trop précis : il faudrait le rendre plus général pour couvrir tous les castrop précis

Réponse : « Facile à utiliser » est un vœu, pas un besoin : « facile » n'a pas de sens objectif (chacun l'entend à sa façon) et rien ne permet de vérifier s'il est atteint. La facilité d'utilisation est un objectif légitime, mais tel quel il est inexploitable. On le rend VÉRIFIABLE en définissant un critère observable et mesurable — un temps, un taux de réussite, un nombre d'erreurs lors d'un test utilisateur. Règle : si aucun test ne peut dire « satisfait ou non », le besoin est mal formulé.

À vous

L'exercice muscle les deux réflexes du chapitre. D'abord, classer les besoins en fonctionnels et non fonctionnels — pour ne pas oublier ces derniers. Ensuite, et surtout, réécrire des besoins flous (« rapide », « convivial », « beaucoup ») en besoins vérifiables : chiffrés, conditionnés, testables.

C'est l'exercice qui prépare directement votre cahier des charges : chaque ligne que vous y écrirez devra pouvoir devenir, plus tard, un test qui répond par oui ou par non.

Exercice de code

Distinguez les besoins fonctionnels des non fonctionnels, puis réécrivez des besoins flous (« rapide », « convivial », « beaucoup ») en besoins vérifiables et non ambigus. Un besoin dont on ne peut pas écrire le test n'est pas un besoin, c'est un vœu.

Point de départ

// Un besoin FONCTIONNEL dit ce que le logiciel DOIT FAIRE (une fonction).
// Un besoin NON FONCTIONNEL dit COMMENT il doit le faire : performance,
// sécurité, ergonomie, disponibilité... des propriétés, pas des fonctions.

const BESOINS = [
  { texte: "L'utilisateur peut emprunter un livre",              type: "fonctionnel" },
  { texte: "Une recherche répond en moins de 2 secondes",       type: "non-fonctionnel" },
  { texte: "Le bibliothécaire peut ajouter un ouvrage",         type: "fonctionnel" },
  { texte: "Les mots de passe sont stockés chiffrés",           type: "non-fonctionnel" },
  { texte: "Le système envoie un rappel avant la date de retour", type: "fonctionnel" },
];

// ── À VOUS (1) : classer ────────────────────────────────────────────────────
function classer(texte) {
  // à compléter : renvoyer "fonctionnel" (une action/fonction offerte) ou
  //   "non-fonctionnel" (une qualité : vitesse, sécurité, ergonomie...).
  //   Indice : cherche des mots de qualité (secondes, chiffré, disponible...).
  return "?";
}

console.log("Classement :");
for (const b of BESOINS) {
  const r = classer(b.texte);
  console.log((r === b.type ? "  ok " : " ✗  ") + r.padEnd(15) + " | " + b.texte);
}

// ── (2) Un besoin BIEN FORMULÉ est VÉRIFIABLE et NON AMBIGU ──────────────────
// Ces besoins-ci sont inexploitables : on ne saura jamais dire s'ils sont
// satisfaits. À VOUS de dire POURQUOI chacun est mauvais, puis de le réécrire.
const FLOUS = [
  "Le système doit être rapide.",
  "L'interface doit être conviviale.",
  "Le logiciel doit gérer beaucoup d'utilisateurs.",
];
// Remplir 'reecritures' : pour chaque flou, une version MESURABLE.
const reecritures = [
  // "Une page se charge en moins de 1 s pour 95 % des requêtes.",
];
console.log("\nRéécritures proposées :");
reecritures.forEach((r) => console.log("   " + r));

Solution

function classer(texte) {
  // Marqueurs d'un besoin NON fonctionnel : une propriété mesurable ou de
  // qualité (temps, sécurité, disponibilité, capacité...).
  if (/secondes?|chiffr|disponib|sécuris|rapide|charge|% /.test(texte)) return "non-fonctionnel";
  return "fonctionnel";   // sinon, c'est une action offerte à un acteur
}

const reecritures = [
  // « rapide » -> quoi, mesuré comment, dans quelles conditions ?
  "Une recherche par titre renvoie ses résultats en moins de 1 seconde pour 95 % des requêtes, jusqu'à 10 000 ouvrages.",
  // « conviviale » -> un critère observable, testable auprès d'utilisateurs.
  "Un nouvel utilisateur réussit à emprunter un livre en moins de 3 minutes sans aide, lors d'un test avec 5 personnes.",
  // « beaucoup » -> un nombre.
  "Le système supporte 200 utilisateurs simultanés sans que le temps de réponse dépasse 2 secondes.",
];

// ── Ce que l'exercice enseigne ──────────────────────────────────────────────
//
// 1. FONCTIONNEL vs NON FONCTIONNEL : le premier dit ce que le logiciel FAIT
//    (emprunter, ajouter, envoyer un rappel) ; le second dit une PROPRIÉTÉ de
//    la façon dont il le fait (vitesse, sécurité, ergonomie, capacité). Les
//    non fonctionnels sont souvent oubliés au recueil — et coûtent le plus
//    cher à rattraper (on ne « sécurise » pas un logiciel après coup sans le
//    refondre).
//
// 2. Un besoin BIEN FORMULÉ est VÉRIFIABLE et NON AMBIGU. « Rapide »,
//    « convivial », « beaucoup » sont inexploitables : deux personnes les
//    comprennent différemment, et on ne pourra jamais TESTER s'ils sont
//    satisfaits. Un besoin dont on ne peut pas écrire le test de recette
//    (bloc V) n'est pas un besoin, c'est un vœu.
//
// 3. On rend un besoin vérifiable en le CHIFFRANT et en précisant les
//    CONDITIONS : quoi exactement, mesuré comment, dans quel contexte, avec
//    quel seuil. « Rapide » devient « moins de 1 s pour 95 % des requêtes,
//    jusqu'à 10 000 ouvrages ».
//
// 4. C'est le cœur du cahier des charges : chaque ligne doit pouvoir se
//    transformer, plus tard, en un test qui répond par oui ou par non. Un
//    besoin mal formulé au départ, c'est l'erreur amont la plus chère du
//    chapitre 2.

Ce que la suite en fait

Les besoins sont recueillis et bien formulés. Reste à les structurer pour passer vers le code : qui utilise le logiciel, pour quoi faire, avec quels objets et quelles interactions ? C'est le rôle de la modélisation.

Le chapitre 5 introduit UML — mais avec parcimonie, comme le veut le niveau : trois diagrammes utiles (cas d'utilisation, classes, séquence) maîtrisés valent mieux que neuf survolés. Le diagramme de cas d'utilisation, notamment, dérive directement des acteurs et des besoins fonctionnels que vous venez d'apprendre à recueillir.

À retenir

Flashcards · 4 cartes

Quelle est la différence entre un besoin fonctionnel et un besoin non fonctionnel ?
Un besoin FONCTIONNEL dit ce que le logiciel DOIT FAIRE — une fonction offerte à un acteur (« emprunter un livre »). Un besoin NON FONCTIONNEL dit COMMENT il le fait — une propriété : performance, sécurité, ergonomie, disponibilité, capacité (« répondre en moins de 2 s »). Les non fonctionnels sont souvent oubliés au recueil et coûtent le plus cher à rattraper, car ils doivent guider la conception dès le départ.
Qu'est-ce qui caractérise un besoin BIEN formulé ?
Il est VÉRIFIABLE et NON AMBIGU : on peut dire objectivement, à la fin, s'il est satisfait ou non. Le critère décisif : pouvoir imaginer le test qui répond « oui » ou « non ». « Rapide », « convivial », « beaucoup » sont des vœux inexploitables ; on les rend vérifiables en les CHIFFRANT et en précisant les conditions (quoi, mesuré comment, dans quel contexte, quel seuil).
À quoi sert le cahier des charges, au-delà d'un document administratif ?
C'est le CONTRAT partagé entre le client et l'équipe : la référence validée qui fixe ce que le logiciel doit faire (contexte, acteurs, besoins fonctionnels numérotés, besoins non fonctionnels, contraintes). On y revient pour trancher les désaccords et pour vérifier, à la fin, qu'on a livré le demandé (tests de recette). Un besoin mal écrit ici est l'erreur amont la plus chère (chapitre 2).
Quels sont les principes d'un bon entretien de recueil des besoins ?
Questions ouvertes d'abord, fermées ensuite pour préciser ; faire chiffrer les mots vagues (« rapide », « beaucoup ») ; chercher les cas limites et exceptions (que se passe-t-il si… ?) que le client oublie ; reformuler et faire valider (« si je comprends bien… »). La difficulté est humaine : écouter, ne rien supposer, oser les questions qui paraissent évidentes — c'est là que naissent les malentendus coûteux.

Chapitre 2 · 4 h

Modélisation UML

Diagramme de cas d'utilisation, acteurs et scénarios ; diagramme de classes en première approche ; diagramme de séquence simple ; du modèle vers le code.

Les besoins recueillis au chapitre 4 sont écrits en français — clairs, mais difficiles à structurer et à partager. UML (Unified Modeling Language) offre un langage graphique normalisé pour représenter un logiciel : des diagrammes qui se dessinent au tableau, se montrent au client, et font le pont vers le code.

UML compte treize types de diagrammes. Ce chapitre en présente trois, et pas un de plus — c'est un parti pris assumé. En L1, trois diagrammes maîtrisés valent mieux que neuf survolés : vous n'avez pas encore assez de code derrière vous pour que le reste ait du sens. Le principe directeur : UML sert à clarifier ; dès qu'un diagramme complique au lieu d'aider, on l'abandonne.

Le diagramme de cas d'utilisation

C'est le diagramme le plus utile en amont, et le plus proche des besoins. Il répond à une seule question : qui fait quoi avec le système ?

Deux ingrédients :

  • les acteurs : les rôles qui interagissent avec le système, dessinés en bonshommes-bâtons autour de la boîte du système. Un acteur est un rôle, pas une personne — « l'abonné », « le bibliothécaire ». Et il n'est pas forcément humain : une horloge qui déclenche un traitement nocturne, un autre logiciel qui appelle le vôtre, sont des acteurs à part entière.
  • les cas d'utilisation : les services que le système rend, dessinés en bulles à l'intérieur de la boîte — un verbe et son objet : « emprunter un livre », « ajouter un ouvrage ». Chaque bulle est reliée aux acteurs qui l'emploient.
        ┌─────────── Bibliothèque ───────────┐        │   ( rechercher un livre )           │  Abonné│   ( emprunter un livre )            │  ──────┤   ( réserver un livre )             │        │   ( enregistrer un retour )─────────┤ Bibliothécaire        │   ( envoyer un rappel )─────────────┤ Horloge        └─────────────────────────────────────┘

Voici ce même diagramme, interactif : déplacez les acteurs et les cas d'utilisation pour le réorganiser, servez-vous des commandes de zoom, et repérez l'acteur non humain — l'horloge — relié au rappel nocturne.

Diagramme · Un diagramme de cas d'utilisation

  • Abonné
  • Bibliothécaire
  • Horloge
  • Rechercher un livre
  • Emprunter un livre
  • Réserver un livre
  • Enregistrer un retour
  • Ajouter un ouvrage
  • Envoyer un rappel

Relations

  • Abonné Rechercher un livre
  • Abonné Emprunter un livre
  • Abonné Réserver un livre
  • Bibliothécaire Enregistrer un retour
  • Bibliothécaire Ajouter un ouvrage
  • Horloge Envoyer un rappel

Ce diagramme se tire directement des besoins fonctionnels et des acteurs du chapitre 4. Sa force : il tient sur une page, se montre au client pour valider le périmètre (« ai-je oublié un service ? »), et découpe le travail de l'équipe — un cas d'utilisation correspond grosso modo à une fonctionnalité à développer et à tester. L'exercice vous fait en construire un à partir d'une description.

Quiz · 1 question

Dans un logiciel de bibliothèque, un rappel est envoyé automatiquement chaque nuit aux abonnés en retard. Comment le représente-t-on dans un diagramme de cas d'utilisation ?

  • Ce n'est pas un cas d'utilisation, puisqu'aucune personne ne le déclenchepas d'acteur humain, donc rien
  • C'est un cas d'utilisation « envoyer un rappel » relié à un acteur non humain — le temps (une horloge), ou « le système » — qui le déclencheacteur non humain (horloge)
  • C'est un besoin non fonctionnel, à mettre à part du diagrammenon fonctionnel

Réponse : Un acteur est un rôle qui interagit avec le système — pas nécessairement une personne. Un traitement déclenché par le temps a pour acteur une HORLOGE (ou « le système ») : « envoyer un rappel » est bien un cas d'utilisation, relié à cet acteur non humain. Oublier les acteurs non humains (horloge, autre logiciel, capteur) est une erreur fréquente. Ce n'est pas un besoin non fonctionnel : c'est une vraie fonction du système, simplement déclenchée automatiquement.

Le diagramme de classes, en première approche

Le diagramme de classes décrit les objets du domaine que le logiciel manipule, et fait le pont vers le code (surtout en programmation orientée objet). Chaque classe est une boîte à trois compartiments :

┌─────────────────┐│      Livre      │   ← nom├─────────────────┤│ titre           │   ← attributs (les données)│ auteur          ││ disponible      │├─────────────────┤│ emprunter()     │   ← méthodes (les opérations)│ rendre()        │└─────────────────┘

Les classes sont reliées par des associations qui traduisent les liens du domaine : un Abonné « emprunte » des Livre. On annote ces liens de multiplicités — « un abonné peut emprunter 0 à 5 livres », « un livre est emprunté par 0 ou 1 abonné » — qui capturent des règles métier directement dans le modèle.

En première approche, on s'en tient là : identifier les bonnes classes (les noms importants du domaine : Livre, Abonné, Emprunt), leurs attributs essentiels, et les associations principales. Le passage vers le code est alors presque mécanique — chaque classe du diagramme devient une classe du programme.

Le diagramme de séquence, simple

Le diagramme de séquence montre, pour un scénario précis, l'ordre des échanges entre les participants au fil du temps. Chaque participant a une ligne de vie verticale ; les messages sont des flèches horizontales, lues de haut en bas.

 Abonné        Système        Catalogue   │  emprunter()  │              │   │──────────────▶│ disponible ? │   │               │─────────────▶│   │               │◀──── oui ────│   │◀── confirmé ──│              │

Il répond à « comment ça se passe, étape par étape » pour un cas d'utilisation donné — par exemple l'emprunt d'un livre disponible. Il est précieux pour comprendre une interaction avant de la coder, et pour repérer les cas où ça se passe mal (le livre n'est pas disponible : que renvoie le système ?). On en fait un par scénario important, pas pour tout.

Du modèle vers le code

Ces trois diagrammes ne sont pas une fin : ce sont des outils de réflexion et de communication qui mènent au code.

  • le cas d'utilisation fixe le périmètre — ce qu'il faut développer, et donc tester ;
  • le diagramme de classes donne la structure — les classes à écrire, leurs attributs et méthodes ;
  • le diagramme de séquence clarifie le comportement — l'enchaînement des appels dans un scénario.

Le danger, en L1, est de tomber amoureux du dessin et de passer plus de temps à modéliser qu'à construire. La règle de bon sens : un diagramme qu'on ne regardera plus après l'avoir dessiné ne valait pas la peine d'être dessiné. On modélise ce qui aide à décider ou à communiquer, et on code le reste. Pour votre projet, un diagramme de cas d'utilisation, un diagramme de classes et un ou deux diagrammes de séquence suffisent amplement.

Quiz · 1 question

Pourquoi ce cours limite-t-il volontairement UML à trois diagrammes en L1 ?

  • Parce que les autres diagrammes UML sont obsolètesobsolescence
  • Parce que trois diagrammes maîtrisés valent mieux que neuf survolés : sans assez de code derrière soi, les diagrammes avancés n'ont pas de sens, et UML ne vaut que s'il clarifiemaîtriser peu, utilement
  • Parce que les outils de dessin ne gèrent que trois diagrammeslimite technique

Réponse : UML compte treize types de diagrammes, tous valides — la limitation n'est ni une obsolescence ni une contrainte d'outil. C'est un choix pédagogique : en L1, on n'a pas encore assez d'expérience du code pour que les diagrammes avancés (état, activité, composants…) aient du sens. Trois diagrammes bien maîtrisés — cas d'utilisation, classes, séquence — couvrent le périmètre, la structure et le comportement, l'essentiel d'un projet modeste. Le principe : UML sert à clarifier ; dès qu'il complique, on l'abandonne.

À vous

L'exercice construit le diagramme le plus utile en amont : le diagramme de cas d'utilisation. À partir d'une description du logiciel de bibliothèque, vous identifiez les acteurs (qui) et les cas d'utilisation (quoi) — sans oublier l'acteur non humain, l'horloge qui déclenche le rappel nocturne.

C'est exactement le diagramme que vous dessinerez pour votre projet, juste après le cahier des charges : il en validera le périmètre et découpera le travail de l'équipe.

Exercice de code

Tirez un diagramme de cas d'utilisation d'une description : identifiez les acteurs (qui) et les cas d'utilisation (quoi). N'oubliez pas les acteurs non humains, comme l'horloge qui déclenche un rappel. En L1, trois diagrammes maîtrisés valent mieux que neuf survolés.

Point de départ

// Une description du logiciel de bibliothèque, telle que le client la donne.
// Un ACTEUR est un rôle qui interagit avec le système (souvent un SUJET :
// « l'abonné », « le bibliothécaire »). Un CAS D'UTILISATION est un service
// rendu à un acteur (souvent un VERBE + objet : « emprunter un livre »).
const description =
  "L'abonné peut rechercher un livre et l'emprunter. Il peut aussi réserver " +
  "un livre déjà emprunté. Le bibliothécaire enregistre les retours et ajoute " +
  "de nouveaux ouvrages au catalogue. Chaque nuit, le système envoie " +
  "automatiquement un rappel aux abonnés en retard.";

// ── À VOUS : identifier acteurs et cas d'utilisation ────────────────────────
// (1) Lister les acteurs (les rôles/sujets qui agissent).
const acteurs = [
  // "abonné", ...
];
// (2) Lister les cas d'utilisation (les services, verbe + objet).
const casUtilisation = [
  // "rechercher un livre", ...
];

// ── Vérification ────────────────────────────────────────────────────────────
console.log("Acteurs identifiés :", acteurs.join(", "));
console.log("Cas d'utilisation :");
casUtilisation.forEach((c) => console.log("   - " + c));
console.log("");
console.log("Attendu ~ 3 acteurs (abonné, bibliothécaire, système/horloge)");
console.log("et ~ 6 cas d'utilisation.");

Solution

const acteurs = ["abonné", "bibliothécaire", "système (horloge nocturne)"];

const casUtilisation = [
  "rechercher un livre",     // abonné
  "emprunter un livre",      // abonné
  "réserver un livre",       // abonné
  "enregistrer un retour",   // bibliothécaire
  "ajouter un ouvrage",      // bibliothécaire
  "envoyer un rappel",       // système, déclenché par le temps
];

// ── Ce que l'exercice enseigne ──────────────────────────────────────────────
//
// 1. Le diagramme de CAS D'UTILISATION répond à « QUI fait QUOI avec le
//    système ». On le tire directement des besoins fonctionnels (chapitre 4) :
//    - ACTEURS = les rôles/sujets qui interagissent (abonné, bibliothécaire) ;
//    - CAS D'UTILISATION = les services rendus (verbe + objet), une bulle par
//      service, reliée aux acteurs concernés.
//
// 2. Un acteur n'est pas forcément une personne. Le RAPPEL nocturne est
//    déclenché par le TEMPS, sans intervention humaine : l'horloge (ou « le
//    système ») est un acteur à part entière. Oublier ces acteurs non humains
//    est une erreur classique.
//
// 3. C'est le diagramme le plus utile en amont : il tient sur une page, se
//    montre AU CLIENT pour valider le périmètre (« ai-je oublié un service ? »),
//    et découpe naturellement le travail de l'équipe (un cas d'utilisation ≈
//    une fonctionnalité à développer et à tester).
//
// 4. En L1, on s'en tient à TROIS diagrammes maîtrisés plutôt qu'à neuf
//    survolés :
//    - CAS D'UTILISATION (celui-ci) : qui fait quoi — le périmètre ;
//    - CLASSES : les objets du domaine, leurs attributs et leurs liens — vers
//      le code (une classe Livre { titre, auteur, disponible }, une classe
//      Abonné, reliées par « emprunte ») ;
//    - SÉQUENCE : l'ordre des échanges dans UN scénario (l'abonné demande,
//      le système vérifie la disponibilité, confirme l'emprunt).
//    UML n'a de valeur que s'il CLARIFIE ; dès qu'il complique, on l'abandonne.

Ce que la suite en fait

Le bloc III est complet : vous savez recueillir des besoins, les écrire sans ambiguïté, et les structurer en trois diagrammes utiles. Le quoi est fixé. Le bloc IV attaque le comment : la qualité du code lui-même.

Le chapitre 6 apprend à écrire un code lisible — car un logiciel se lit dix fois plus qu'il ne s'écrit — et le chapitre 7, à le concevoir pour qu'il résiste au changement. Le diagramme de classes que vous venez de voir y trouvera un prolongement naturel : bien découper en classes, c'est déjà de la conception.

À retenir

Flashcards · 4 cartes

À quoi sert le diagramme de cas d'utilisation, et de quoi est-il fait ?
Il répond à « qui fait quoi avec le système ». Ingrédients : les ACTEURS (rôles qui interagissent, humains OU non — un abonné, une horloge) et les CAS D'UTILISATION (services rendus, verbe + objet : « emprunter un livre »). On le tire des besoins fonctionnels ; il tient sur une page, valide le périmètre avec le client, et découpe le travail (un cas ≈ une fonctionnalité à développer et tester).
Que représente un diagramme de classes, et comment mène-t-il au code ?
Les objets du domaine : chaque CLASSE est une boîte à trois compartiments (nom, attributs, méthodes), reliée aux autres par des ASSOCIATIONS annotées de multiplicités (un abonné emprunte 0 à 5 livres). En première approche, on identifie les bonnes classes (Livre, Abonné, Emprunt), leurs attributs et liens principaux. Le passage au code est presque mécanique : chaque classe du diagramme devient une classe du programme.
Que montre un diagramme de séquence, et quand l'utilise-t-on ?
L'ORDRE des échanges entre participants, pour UN scénario précis, au fil du temps : chaque participant a une ligne de vie verticale, les messages sont des flèches lues de haut en bas. Il clarifie « comment ça se passe étape par étape » (l'emprunt d'un livre) et aide à repérer les cas où ça se passe mal. On en fait un par scénario important, pas pour tout.
Quelle règle de bon sens gouverne l'usage d'UML, surtout en L1 ?
UML sert à CLARIFIER et à COMMUNIQUER ; dès qu'un diagramme complique au lieu d'aider, on l'abandonne. Un diagramme qu'on ne regardera plus après l'avoir dessiné ne valait pas la peine d'être dessiné. En L1, trois diagrammes maîtrisés (cas d'utilisation, classes, séquence) valent mieux que neuf survolés — le danger est de modéliser plus qu'on ne construit.