Module 0 · Les fondations

Le processus unifié & UML

Deux outils, et ils répondent à deux questions différentes qu'on confond tout le temps. Le processus dit dans quel ordre on travaille ; le langage dit comment on écrit ce qu'on a compris. Le premier est un calendrier, le second un alphabet — et aucun des deux ne remplace l'autre.

💡 Le concept

Ce module est le seul du cours qui n'enseigne aucune technique. Il installe le vocabulaire de tous les suivants : quand tu liras « en phase d'élaboration », « pendant la discipline de conception », « ce diagramme est un artefact d'analyse », il faudra que ces mots aient un sens précis et pas une couleur générale.

C'est aussi le module où se joue une confusion qui coûte des points à chaque session, et qui a un nom : les phases ne sont pas les disciplines. Une phase est une période du calendrier ; une discipline est un type de travail. On fait un peu de toutes les disciplines dans chacune des phases. Retiens la phrase, la section qui la démontre viendra.

Pourquoi un processus, et pas juste du code

On te confie un système de réservation de salles pour l'université. Tu sais programmer. Qu'est-ce qui t'empêche d'ouvrir un éditeur et de commencer ?

Rien, techniquement. Et c'est bien le problème : les questions que tu n'as pas posées ne disparaissent pas, elles attendent. Quelle base de données ? Quelles classes ? Qu'est-ce qu'une « réservation », au juste — une intention, un contrat ? Que se passe-t-il si on annule ? Et si le client change d'avis au troisième mois, combien de ce que tu auras écrit faudra-t-il jeter ?

Un processus de développement est une réponse à une question très concrète : dans quel ordre décider. Il dit quand analyser, quand concevoir, quand coder, quand tester — et surtout quand s'arrêter pour vérifier qu'on ne s'est pas trompé de direction. Il rend le travail prévisible, ce qui n'a rien d'un luxe administratif : c'est ce qui permet à cinq personnes de travailler en même temps sans se marcher dessus.

🧭 L'analogie du chantier

Personne ne pose des briques sans plan. Un chantier a besoin de trois choses distinctes, et le développement logiciel a exactement les mêmes : des plans que tous les corps de métier lisent pareil (ce sera UML), un échéancier avec des étapes et des jalons (ce seront les phases), et des spécialités — maçon, électricien, plombier — qui interviennent toutes, à des moments différents et dans des proportions différentes (ce seront les disciplines).

Garde cette analogie sous la main pour la suite du module. Elle explique en particulier pourquoi l'électricien ne vient pas « après » le maçon une bonne fois pour toutes : il repasse à chaque étage.

Il faut dire tout de suite ce qu'un processus n'est pas, parce que la confusion est courante et qu'elle rend la matière antipathique. Ce n'est pas de la paperasse : le but n'a jamais été de produire des documents, mais de prendre les bonnes décisions dans le bon ordre. Ce n'est pas non plus une méthode de gestion d'équipe : le processus dit quoi produire et quand, pas qui fait quoi. Et ce n'est surtout pas un choix moral entre le bien et le mal — la section suivante défend la cascade avant de la condamner, et ce n'est pas une politesse.

La cascade, et le défaut qui la condamne

La cascade est le processus le plus intuitif qui soit, et c'est pour ça qu'on le réinvente spontanément. On fait toute l'analyse. Puis toute la conception. Puis tout le code. Puis tous les tests. Chaque étape doit être terminée à cent pour cent avant que la suivante ne commence — d'où le nom : l'eau tombe d'un palier au suivant et ne remonte jamais.

Il faut lui reconnaître ce qu'elle a de bon, sinon on ne comprend pas pourquoi elle a dominé trente ans. Elle est facile à planifier — quatre blocs, quatre dates. Elle est facile à contractualiser — le client signe une spécification, l'équipe livre exactement ça. Et elle vient du génie civil, où elle marche très bien : on ne coule pas les fondations en même temps qu'on pose la toiture, et surtout on ne découvre pas au huitième mois que le client voulait deux étages de plus.

C'est là que le logiciel diffère, et c'est tout le sujet. En construction, changer d'avis coûte cher parce que la matière est déjà coulée. En logiciel, la matière n'est jamais coulée — mais on découvre bien plus tard qu'on s'est trompé, et le coût d'un malentendu croît avec le temps qu'on a passé à construire dessus.

⚠️ Piège fréquent

Croire que le processus unifié est une cascade déguisée. C'est ce qu'on en fait très souvent sans s'en rendre compte : si tu fais une seule grosse itération par phase — toute l'analyse en inception, toute la conception en élaboration, tout le code en construction —, tu as gardé les quatre boîtes de la cascade et tu leur as simplement donné des noms latins.

Le symptôme est facile à repérer dans un plan de projet : à quel moment le client voit-il quelque chose qui tourne ? Si la réponse est « à la fin », c'est une cascade, quel que soit le vocabulaire employé.

Les défauts de la cascade se listent facilement, mais ils ont tous la même racine, et c'est elle qu'il faut retenir plutôt que la liste : le retour d'information arrive après la décision qu'il aurait dû éclairer. Le client ne voit le produit qu'à la toute fin, donc trop tard pour ajuster. Une exigence mal comprise au début pollue tout ce qui vient après, et personne ne le sait avant la recette. Les risques techniques — l'architecture tient-elle la charge, la passerelle de paiement fait-elle vraiment ce qu'annonce sa documentation ? — ne sont validés qu'au moment où il est le plus cher d'en changer. Et l'équipe n'apprend rien entre les étapes, puisqu'il n'y en a qu'une de chaque.

L'itératif, et ce qu'il achète

L'approche itérative renverse une seule chose, et tout le reste en découle : au lieu de découper le projet par activité, on le découpe par tranche de temps. Chaque itération dure deux à six semaines et contient un peu d'analyse, un peu de conception, un peu de code, un peu de tests. À la fin de chacune, quelque chose fonctionne et se montre.

Ce « quelque chose fonctionne » n'est pas un détail de présentation, c'est le mécanisme entier. Un logiciel qui tourne est la seule chose sur laquelle un client peut réagir honnêtement. Devant une spécification de quarante pages, il approuve ; devant un écran, il dit « ah, non, ce n'est pas ça que je voulais dire ». Les deux réponses sont sincères, et seule la seconde est utile.

Cascade et itératif — les mêmes activités, un découpage différent
en cascade — une seule fois chacune
exigences tout
conception tout
code tout
tests tout
en itératif — un peu de chacune, à chaque tour
exigences · · ·
conception · · ·
code · · ·
tests · · ·
itération 1 · démo itération 2 · démo itération 3 · démo
Une colonne vaut un douzième de la durée du projet, et les deux dispositions en occupent autant l'une que l'autre : l'itératif ne travaille pas moins, il travaille dans un autre ordre. En haut, chaque activité n'a lieu qu'une fois et rien ne fonctionne avant la dernière ; en bas, chacune des quatre revient à chaque tour — un point marque le moment où on la reprend —, et chaque tour se termine par une démonstration.

Ce que l'itératif achète, précisément : le retour du client arrive tôt et souvent, donc les malentendus se corrigent quand ils ne coûtent encore rien. Les risques s'attaquent en premier plutôt qu'en dernier — on écrit d'abord le morceau dont on n'est pas sûr. L'équipe apprend d'une itération à l'autre, et sa deuxième estimation vaut bien mieux que la première. Et un changement d'exigence cesse d'être une catastrophe pour devenir un simple élément de la prochaine itération.

Ce qu'il coûte, parce que rien n'est gratuit : il faut être capable d'intégrer et de démontrer souvent, ce qui suppose une discipline technique réelle. Et il demande un client disponible, qui accepte de regarder et de dire. Un client absent transforme l'itératif en cascade avec des réunions.

🧠 Quiz éclair

Une équipe doit livrer un système de réservation pour une compagnie aérienne. Voici ce qu'on sait du contexte. Cascade ou itératif ?

· Le client n'est pas sûr de toutes ses exigences.
· L'équipe emploie une passerelle de paiement qu'elle n'a jamais essayée.
· La date de mise en service est fixée, le périmètre ne l'est pas.

Itératif, et les trois lignes donnent chacune une raison distincte — c'est ce que le correcteur attend, pas une préférence générale.

Exigences floues : le client a besoin de voir des versions intermédiaires pour préciser ce qu'il veut, et la cascade l'oblige à tout figer au moment où il en sait le moins. Technologie inconnue : c'est un risque technique majeur, et l'itératif permet de le lever tôt par une architecture qui tourne vraiment. Périmètre ouvert mais date fixée : en itératif, on peut livrer les fonctionnalités les plus utiles d'abord et arbitrer le reste — en cascade, on découvre le retard à la fin.

L'inverse existe et mérite d'être su : reproduire à l'identique un système connu, avec des exigences figées par contrat, rend la cascade parfaitement défendable. Peu d'incertitude, peu de risques, pas besoin de payer le prix de l'itératif.

Les quatre mots du processus unifié

Le processus unifié — le PU — est la mise en forme la plus connue de l'approche itérative. Il a été conçu par Jacobson, Booch et Rumbaugh, les trois auteurs qui avaient chacun leur propre notation dans les années quatre-vingt-dix et qui les ont fusionnées : c'est de cette fusion que viennent à la fois UML et le PU, et c'est pourquoi les deux arrivent toujours ensemble.

On le définit par quatre adjectifs, et l'examen les demande. Mais quatre mots récités ne servent à rien : ce qui compte est de savoir à quelle question chacun répond.

Le motLa question à laquelle il répond
Itératif Comment découper le temps ? — en cycles courts et répétés, pas en grandes étapes uniques
Incrémental Que produit un cycle ? — un ajout visible au produit, pas un document de plus
Piloté par les cas d'utilisation Qui décide de l'ordre ? — les objectifs de l'utilisateur, pas le découpage technique
Centré sur l'architecture Que stabilise-t-on en premier ? — la charpente, avant d'y accrocher les fonctionnalités

Les deux premiers vont ensemble et sont presque une seule idée : itératif décrit le rythme, incrémental décrit le résultat. On peut très bien être itératif sans être incrémental — trois itérations qui produisent trois documents ne construisent rien —, et c'est une façon courante de rater le PU tout en cochant ses cases.

Le troisième mérite qu'on s'y arrête, parce qu'il est le moins évident. Pourquoi piloter par les cas d'utilisation plutôt que par les modules du système ? Parce qu'un module n'a de valeur pour personne. Livrer « la couche d'accès aux données » à la fin d'une itération ne se démontre pas et ne se juge pas ; livrer « le caissier peut encaisser une commande » traverse toutes les couches et se voit. Le pilotage par les cas d'utilisation est donc ce qui rend l'incrémental possible : c'est lui qui garantit qu'à la fin de chaque tour, il y a quelque chose à montrer.

Le quatrième répond à une objection qu'on se fait naturellement en découvrant l'itératif : si l'on ne conçoit qu'un peu à la fois, ne finit-on pas avec un assemblage incohérent ? Si, exactement — et c'est pour ça que le PU exige que l'architecture soit stabilisée très tôt, dans les premières itérations, avant que la production de fonctionnalités ne commence pour de bon. On accepte d'être souple sur le contenu parce qu'on a été rigide sur la charpente.

🔗 Pont — pourquoi ce guide se lit dans cet ordre

La suite du cours n'est pas une liste de diagrammes à connaître : c'est le PU déroulé dans l'ordre. On modélisera d'abord le domaine — le vocabulaire métier —, puis les cas d'utilisation qui pilotent le projet, puis les interactions qui les réalisent, puis les classes qui portent ces interactions. Chaque module est une discipline du PU, prise dans l'ordre où elle produit quelque chose dont la suivante a besoin.

C'est aussi l'ordre du projet de session, et ce n'est pas une coïncidence : le livrable d'analyse demande le modèle du domaine et les cas d'utilisation, le livrable suivant demande le modèle de conception et l'architecture logique. Le cours et le projet avancent du même pas.

Les quatre phases, et où part l'effort

Le PU découpe le projet en quatre phases, qui sont des périodes du calendrier. Chacune contient elle-même plusieurs itérations — c'est le point que la liste des quatre noms fait toujours oublier.

PhaseLa question qu'elle trancheCe qu'elle laisse derrière
Inception Devrait-on faire ce projet ? une vision, les cas d'utilisation principaux, une estimation grossière
Élaboration Comment va-t-on le faire, techniquement ? une architecture qui s'exécute, et un plan de construction
Construction Rien — on exécute le plan le système complet, prêt pour une version d'essai
Transition Le système survit-il au monde réel ? le système en production, les utilisateurs formés

Ces quatre phases ne pèsent pas le même poids, et leur déséquilibre est instructif. La figure ci-dessous les met à l'échelle.

Les quatre phases, à l'échelle de l'effort
inception 10
élaboration 30
construction 50
transition 10
Une colonne vaut un douzième de l'effort total, et chaque barre porte son pourcentage. L'inception et la transition sont des phases brèves qui encadrent le projet ; l'élaboration coûte trois fois plus que l'inception alors qu'elle ne livre presque aucune fonctionnalité, et c'est le fait le plus contre-intuitif de la figure.

Pourquoi payer trente pour cent de l'effort en élaboration, une phase qui ne produit presque rien de visible ? Parce que c'est exactement là qu'on achète l'assurance du projet. L'élaboration existe pour transformer les inconnues en certitudes pendant qu'il est encore bon marché de se tromper : elle construit une architecture exécutable — pas un document d'architecture, un squelette qui tourne — et lui fait traverser les cas d'utilisation les plus risqués. Si la passerelle de paiement ne tient pas la charge, on l'apprend là, à trente pour cent du budget, et pas à quatre-vingts.

Corollaire, et c'est ce que l'examen aime demander : la construction ne tranche plus rien. C'est la seule phase qui n'a pas de question à résoudre, ce qui explique qu'elle soit à la fois la plus longue et la moins risquée. Quand tout va bien, la construction est ennuyeuse — et c'est le signe que l'élaboration a fait son travail.

⚠️ Piège fréquent

Confondre inception et élaboration. Les deux sont en début de projet, les deux produisent surtout de la compréhension, et on les intervertit sans arrêt en examen. Elles ne répondent pourtant pas du tout à la même question : l'inception demande « devrait-on faire ce projet ? », l'élaboration demande « comment va-t-on le faire ? ».

Le réflexe de diagnostic tient dans un mot : architecture. Dès qu'une activité touche à l'architecture — la valider, la prototyper, la mesurer sous charge —, c'est de l'élaboration. On ne conçoit pas l'architecture d'un projet dont on n'a pas encore décidé qu'il aurait lieu.

✍️ Exercice de lecture

Associe chaque activité à la phase du PU où elle a principalement lieu.

(A) Écrire les cas d'utilisation principaux pour évaluer la faisabilité.
(B) Implémenter la dernière fonctionnalité restante.
(C) Former les utilisateurs et livrer le système en production.
(D) Vérifier que l'architecture supporte 10 000 utilisateurs simultanés.
(E) Décider de la topologie matérielle : serveurs, base, cache.
Voir le corrigé

(A) Inception. On cherche à savoir si le projet vaut la peine : les cas d'utilisation principaux servent ici à estimer, pas encore à concevoir.

(B) Construction. L'implémentation systématique des fonctionnalités, sur une architecture déjà validée.

(C) Transition. Le déploiement et la formation sont sa définition même.

(D) Élaboration. Le mot architecture tranche, comme le dit le piège ci-dessus. Mesurer sous charge est exactement ce que veut dire « valider les risques techniques ».

(E) Élaboration aussi, et c'est celle qui piège. L'architecture physique est une décision d'architecture ; elle se stabilise tôt, même si le diagramme de déploiement ne sera dessiné proprement que plus tard. Le moment où l'on dessine un artefact n'est pas toujours celui où l'on décide ce qu'il représente.

Les disciplines ne sont pas les phases

Voici la confusion annoncée au début du module, et elle vaut la peine d'être posée lentement, parce qu'elle est la source de la moitié des mauvaises réponses.

Une phase est une période du calendrier : inception, élaboration, construction, transition. Elles se succèdent, une seule à la fois, et on les traverse dans l'ordre.

Une discipline est un type de travail : exigences, analyse, conception, implémentation, tests, déploiement. Elles ne se succèdent pas : à n'importe quel moment du projet, on peut faire un peu de n'importe laquelle. Ce qui change d'une phase à l'autre, ce n'est pas lesquelles on pratique, c'est en quelle proportion.

DisciplineCe qu'on y fait
Exigencesrecueillir les besoins, écrire les cas d'utilisation, noter les contraintes non fonctionnelles
Analysecomprendre le domaine, identifier les concepts métier — c'est le modèle du domaine
Conceptiondécider comment le système répond : classes, interactions, architecture
Implémentationécrire le code
Testsvérifier que le système fait ce qui est demandé
Déploiementinstaller le système chez les utilisateurs
Chaque discipline traverse plusieurs phases
exigences forte au début
analyse au début
conception au milieu
implément. longue
tests longue
déploiement à la fin
inception · élaboration élaboration · construction construction · transition
Une colonne vaut un douzième de la durée du projet, et la graduation nomme les phases qu'elle traverse. Aucune barre ne commence là où la précédente s'arrête : les disciplines se chevauchent, et c'est exactement ce qui les distingue des phases, qui se succèdent. On écrit encore des exigences pendant qu'on code déjà, et on teste bien avant la fin.

Une façon de ne plus jamais s'y tromper : les phases répondent à « quand ? », les disciplines à « quoi ? ». Une question d'examen qui demande « dans quelle phase ? » attend un des quatre noms latins ; une question qui demande « quelle discipline ? » attend un type de travail. Et il est parfaitement normal qu'une même activité appartienne à une discipline donnée tout en ayant lieu dans trois phases différentes.

Prends une seule activité — écrire un cas d'utilisation — et regarde où elle a lieu. En inception, on en écrit quelques-uns, à gros grain, pour estimer l'ampleur du projet et décider s'il vaut la peine : on cherche un ordre de grandeur, pas de la précision. En élaboration, on reprend les plus risqués et on les détaille scénario par scénario, parce que ce sont eux qui vont éprouver l'architecture. En construction, on affine encore, juste avant d'implémenter chacun.

Trois phases, une seule discipline — celle des exigences — et trois raisons différentes de faire la même chose. C'est ça, la nuance qui rend la distinction utile plutôt que scolaire : la discipline dit ce qu'on fabrique, la phase dit pourquoi on le fabrique maintenant, et donc à quel niveau de détail on s'arrête.

La conséquence pratique se voit dans un plan de projet. On ne peut pas écrire « analyse jusqu'au 15 octobre, puis conception » — ce serait figer une discipline dans le calendrier, ce qui est exactement la définition de la cascade. Ce qu'on écrit, c'est « élaboration jusqu'au 15 octobre », et pendant cette période l'équipe fera de l'analyse, de la conception, du code et des tests, dans les proportions que la phase commande.

🧠 Quiz éclair

Ces deux affirmations portent sur le même projet. Laquelle parle d'une phase, laquelle parle d'une discipline ?

(1) « On est en élaboration jusqu'à la mi-octobre. »
(2) « Cette semaine, l'équipe fait surtout de la conception. »

(1) est une phase — elle a des dates, elle est unique, et on n'y est qu'une fois. (2) est une discipline — c'est un type de travail, et l'équipe en fera encore dans deux mois.

Le test qui tranche : une phase peut se mettre dans un calendrier, une discipline non. On ne dit pas « on est en conception jusqu'au 15 » dans un projet itératif — ou alors on est en train de faire de la cascade.

UML : un langage, pas une méthode

On change complètement de sujet ici, et c'est volontaire. Tout ce qui précède parlait d'ordre de travail. UML ne parle que de notation. Les deux sont nés ensemble et s'emploient ensemble, mais confondre les deux est la première erreur à ne pas faire.

UMLUnified Modeling Language — est un langage graphique normalisé pour modéliser, visualiser et documenter un système orienté objet. Le mot important de cette définition est langage : UML ne te dit pas quoi faire, ni dans quel ordre, ni quand tu as fini. Il te donne des symboles dont le sens est fixé, et rien de plus. Il est indépendant de tout langage de programmation et — c'est moins connu — de tout processus : on peut faire de l'UML en cascade.

🧭 Le langage des plans

En architecture, tout le monde comprend un plan d'élévation, un plan de coupe, un plan d'étage. Un ingénieur en Inde, un autre au Québec et un troisième en Allemagne lisent le même dessin de la même façon — parce que la convention est fixée, pas parce qu'ils se sont parlé.

C'est tout ce qu'UML apporte, et c'est énorme : un trait terminé par un losange plein veut dire la même chose partout. Sans convention partagée, chaque équipe réinventerait ses symboles et il faudrait une légende à chaque diagramme.

UML sert trois usages, et ils ne demandent pas le même niveau de détail. Visualiser — saisir d'un coup d'œil une structure ou un comportement ; un croquis suffit. Spécifier — décrire sans ambiguïté ce qui doit être construit ; là, la rigueur compte. Documenter — laisser une trace lisible pour celui qui reprendra le système dans deux ans. Savoir lequel des trois on vise évite le débat le plus stérile de la modélisation, celui du niveau de détail.

Que la notation soit normalisée a deux conséquences très concrètes, et elles valent mieux que le mot « standard ». La première : un diagramme survit à celui qui l'a dessiné. Six mois après le départ d'un collègue, son diagramme se lit encore, sans légende et sans lui — ce qui n'est vrai d'aucun croquis personnel. La seconde : un outil peut le lire. C'est parce que la notation est fixée que Visual Paradigm sait ouvrir le fichier d'un autre, qu'un diagramme de classes peut engendrer un squelette de code, et que l'inverse est possible aussi.

Symétriquement, il faut savoir ce qu'UML n'achète pas, parce que c'est là qu'on se raconte des histoires. Il ne dit pas si ton modèle est bon — il vérifie ta grammaire, jamais ton propos, exactement comme l'orthographe ne juge pas un roman. Il ne dit pas non plus quand dessiner, ni combien : c'est le processus qui en décide, et un projet honnête n'emploie que trois ou quatre des treize diagrammes. Et il ne remplace pas le code : la plupart des diagrammes ne s'exécutent pas.

Le corollaire est celui par lequel ce module a commencé, et il se vérifie dans les deux sens. On peut produire de très beaux diagrammes et n'avoir rien décidé — c'est ce qui arrive quand on modélise pour remplir un livrable. Et on peut mener un projet parfaitement itératif avec trois croquis au tableau. Le langage ne fait pas le processus, et le processus n'impose pas le langage.

🧠 Quiz éclair

Parmi ces quatre affirmations sur UML, lesquelles sont vraies ?

(A) UML impose de travailler par itérations.
(B) UML est indépendant du langage de programmation employé.
(C) Un projet devrait produire les treize types de diagrammes.
(D) Un diagramme UML valide peut décrire une conception mauvaise.

Seules (B) et (D).

(A) est fausse, et c'est la confusion que tout le module combat : UML est une notation, le processus unifié est un processus. On peut faire de l'UML en cascade — les deux sont nés ensemble, ils ne dépendent pas l'un de l'autre.

(C) est fausse aussi : les treize existent pour couvrir tous les cas possibles, pas pour être tous employés. Un projet réel en emploie trois ou quatre, et produire les autres serait du travail sans lecteur.

(D) est vraie, et c'est la plus utile des quatre. UML vérifie la grammaire, jamais le propos. Un diagramme parfaitement bien formé peut décrire une conception qui ne tiendra pas — c'est ce que les principes de conception, plus tard dans la session, apprennent à juger.

📖 La formule

Frontière, éléments, relations

1. LA FRONTIÈRE  — qu'est-ce qui est DANS le système, et qu'est-ce qui est dehors ?
2. LES ÉLÉMENTS  — que représentent les boîtes ? des concepts ? des objets ? des acteurs ?
3. LES RELATIONS — que veulent dire les traits, et surtout DANS QUEL SENS se lisent-ils ?

La manière de lire n'importe quel diagramme UML, dans cet ordre. On l'emploie devant un diagramme inconnu ; on la reconnaît au fait que la troisième question est toujours la plus payante — c'est le sens des traits qui porte le sens du modèle, et c'est aussi ce qu'on rate le plus souvent.

Les treize diagrammes, et les neuf du cours

UML 2 définit treize types de diagrammes. Les apprendre par cœur comme une liste ne sert à rien et ne tient pas ; ce qui tient, c'est la coupure en deux familles, parce qu'elle correspond à une vraie différence de nature.

Les diagrammes de structure montrent ce qui est : ils décrivent le système figé, comme une photographie. Les diagrammes de comportement montrent ce qui se passe : ils décrivent le système en mouvement, comme un film. Toute question du type « quel diagramme choisir ? » se tranche d'abord là — cherche-t-on à décrire un état de choses ou un déroulement ?

FamilleDiagrammeCe qu'il montre
Structure
ce qui est
Classesles classes et leurs relations
Objetsdes instances à un instant donné
Composantsles composants logiciels et leurs interfaces
Déploiementla topologie matérielle
Paquetagesl'organisation en modules
Structure compositel'intérieur d'une classe
Profilsles extensions d'UML pour un domaine
Comportement
ce qui se passe
Cas d'utilisationles fonctionnalités vues de l'utilisateur
Activitésun flux de travail
Étatsle cycle de vie d'un objet
Séquenceles messages échangés, ordonnés dans le temps
Communicationles mêmes messages, vus comme un réseau de liens
Vue d'ensembleune combinaison de séquence et d'activité

Deux remarques qui font gagner du temps. D'abord, séquence et communication portent exactement la même information — les mêmes messages, entre les mêmes objets ; seule la mise en page change, l'un privilégiant l'ordre chronologique, l'autre la topologie des liens. On choisit selon ce qu'on veut faire ressortir, jamais selon ce qu'on veut dire.

Ensuite, tous ces diagrammes ne servent pas. Un vrai projet en emploie trois ou quatre. Le cours en retient neuf, et c'est déjà généreux : ce sont ceux qu'on rencontre effectivement en analyse et en conception.

Le diagrammeLa question à laquelle il répond
Cas d'utilisationQue doit savoir faire le système, vu de l'utilisateur ?
Modèle du domaineDe quels concepts le métier parle-t-il, et comment sont-ils liés ?
Séquence systèmeQuels événements le système reçoit-il, et dans quel ordre ?
SéquenceQuels objets se parlent pour réaliser une opération, et dans quel ordre ?
CommunicationQui est relié à qui pour réaliser cette opération ?
Classes de conceptionQuelles classes écrira-t-on, avec quelles méthodes ?
ÉtatsPar quels états un objet passe-t-il, et sous quels événements ?
ActivitésComment s'enchaînent les étapes d'un processus métier ?
DéploiementSur quelles machines le système tourne-t-il ?
⚠️ Piège fréquent

Parler d'« un diagramme UML » comme s'il n'y en avait qu'un. C'est l'erreur de vocabulaire qui trahit immédiatement qu'on n'a pas compris ce qu'est UML. « Fais-moi le diagramme UML du système » ne veut rien dire — c'est comme demander « la phrase » d'une langue.

Le réflexe : quand un énoncé emploie cette formule, c'est à toi de trancher lequel il veut, et de le dire dans ta réponse. Une copie qui commence par « la question porte sur un aspect dynamique, j'emploie donc un diagramme de séquence » a déjà montré ce qu'on lui demande de montrer.

Choisir le bon diagramme

C'est la compétence que ce module doit vraiment laisser, et elle se réduit à deux questions posées dans l'ordre. Première question : structure ou comportement ? Décris-tu un état de choses, ou un déroulement ? Cette seule question élimine la moitié du catalogue. Seconde question : à quel niveau ? Le métier, le système vu de l'extérieur, ou l'intérieur du logiciel ?

Le niveau est ce qui distingue des diagrammes qui se ressemblent beaucoup. Le modèle du domaine et le diagramme de classes de conception ont la même notation — des boîtes et des traits — mais pas le même propos : le premier décrit le monde tel qu'il est avant qu'on écrive quoi que ce soit, le second décrit le logiciel qu'on va écrire. De même, le diagramme de séquence système traite le système comme une boîte noire, alors que le diagramme de séquence ordinaire regarde à l'intérieur.

✍️ Exercice de lecture

Pour chaque besoin, dis quel diagramme convient — et pourquoi les deux questions ci-dessus y mènent.

(A) Montrer toutes les fonctionnalités demandées par les utilisateurs.
(B) Décrire le cycle de vie d'une commande : créée, validée, expédiée, livrée.
(C) Spécifier l'ordre des messages entre un contrôleur et trois objets
    métier pendant un paiement.
(D) Représenter le serveur web, la base de données et le cache.
(E) Fixer le vocabulaire de la facturation avant toute conception.
Voir le corrigé

(A) Cas d'utilisation. Comportement — on décrit ce que le système fait ; niveau externe — vu de l'utilisateur.

(B) États. Comportement ; et le mot qui tranche est cycle de vie : c'est la définition même du diagramme d'états. Attention, « créée, validée, expédiée » ressemble à un enchaînement d'étapes, ce qui ferait penser aux activités — mais ce sont des états d'un objet, pas des tâches d'un processus.

(C) Séquence (ou communication, qui porte la même information). Comportement ; niveau interne — on nomme des objets du logiciel. Le mot ordre fait pencher vers la séquence, dont c'est la force.

(D) Déploiement. Structure ; et le niveau est celui du matériel, ce qu'aucun autre diagramme ne couvre.

(E) Modèle du domaine. Structure ; niveau métier. C'est un diagramme de classes, mais employé pour décrire le monde et non le logiciel — d'où son nom particulier. Le mot avant toute conception est ce qui l'impose plutôt qu'un diagramme de classes de conception.

🧠 Quiz éclair

Un énoncé demande de modéliser ceci. Combien de diagrammes différents faut-il, et lesquels ?

« Un étudiant s'inscrit à un cours. L'inscription est refusée si le cours
  est plein. Une inscription passe de « demandée » à « confirmée » quand
  le paiement est reçu, ou à « annulée » si l'étudiant se désiste. »

Deux, et de familles différentes. La première phrase décrit une fonctionnalité vue de l'utilisateur, avec un scénario alternatif : c'est un cas d'utilisation. La dernière décrit les états successifs d'un objet — « demandée », « confirmée », « annulée » — et les événements qui les font changer : c'est un diagramme d'états.

On pourrait en ajouter un troisième, le modèle du domaine, pour poser les concepts Étudiant, Cours et Inscription. Reconnaître qu'un même énoncé nourrit plusieurs diagrammes est exactement ce que le cours cherche à installer : ils ne sont pas concurrents, ils regardent la même chose sous des angles qui ne se recouvrent pas.

🎓 À l'examen

Cette matière est celle de la semaine 1, et elle est évaluée à l'examen intra du 24 octobre — la révision de la semaine 7 porte sur les modules 1 à 5 du cours, dont celui-ci. Elle sert aussi le livrable d'analyse du projet de session, le premier à remettre : c'est lui qui exige de savoir ce qu'est un cas d'utilisation et pourquoi il pilote le reste.

IFT-2007 n'autorise aucun matériel à ses deux examens. Le 🗂️ qui clôt ce module n'est donc pas une feuille à recopier : c'est ce qui doit être en tête le jour venu, et il vaut mieux se l'être récité quelques fois.

« Expliquez la différence entre une phase et une discipline. »

Une phase est une période du projet — inception, élaboration, construction, transition — et on les traverse dans l'ordre, une à la fois. Une discipline est un type de travail — exigences, analyse, conception, implémentation, tests, déploiement — et toutes se pratiquent dans toutes les phases, en proportions différentes. Le test : une phase se met dans un calendrier, une discipline non.

« Pourquoi préférer un processus itératif ? Donnez trois raisons. »

Trois raisons distinctes, pas trois formulations de la même : le retour du client arrive assez tôt pour être utile ; les risques techniques se lèvent au début plutôt qu'à la fin ; et l'équipe apprend d'une itération à l'autre, ce qui rend ses estimations meilleures. Une quatrième si on la demande : un changement d'exigence devient un élément de la prochaine itération au lieu d'être une crise.

« Le PU est-il itératif ou incrémental ? »

Les deux, et la question teste qu'on ne les confond pas. Itératif décrit le rythme : des cycles courts et répétés. Incrémental décrit le résultat : chaque cycle ajoute quelque chose de visible au produit. On peut être itératif sans être incrémental — trois itérations qui ne produisent que des documents —, et c'est une façon courante de rater le PU en cochant ses cases.

À retenir

Un processus répond à « dans quel ordre décider », un langage de modélisation à « comment l'écrire » : ce sont deux outils distincts, nés ensemble et souvent confondus. La cascade échoue en logiciel pour une seule raison — le retour d'information y arrive après la décision qu'il aurait dû éclairer —, et l'itératif ne fait rien d'autre que rapprocher les deux. Le processus unifié tient en quatre mots dont chacun répond à une question : itératif (le rythme), incrémental (le résultat), piloté par les cas d'utilisation (l'ordre de priorité), centré sur l'architecture (ce qu'on fige en premier).

Les quatre phases sont des périodes, les six disciplines sont des types de travail, et elles se croisent au lieu de se succéder. UML, enfin, n'est pas une méthode : c'est un alphabet de treize diagrammes dont le cours en retient neuf, et le seul réflexe qui compte est de savoir lequel répond à la question posée.

Et ailleurs : ce module ne s'oubliera pas, parce que tout le reste du cours est ce module déroulé. Chaque diagramme qui suit est une discipline du PU prise à son tour, et le projet de session avance dans le même ordre. Hors du cours, la distinction entre le processus et la notation resservira partout : c'est elle qui permet de comprendre qu'une équipe puisse employer un tableau de tâches sans être agile, ou de très beaux diagrammes sans avoir rien décidé.

🗂️ L'aide-mémoire
Les quatre phases du PU, dans l'ordre et avec leur poids
inception 10 %, élaboration 30 %, construction 50 %, transition 10 %
Les quatre mots qui définissent le PU
itératif, incrémental, piloté par les cas d'utilisation, centré sur l'architecture
Ce qui sépare une phase d'une discipline
une phase est une période et se met dans un calendrier ; une discipline est un type de travail et traverse toutes les phases
Les six disciplines
exigences, analyse, conception, implémentation, tests, déploiement
Ce que tranche l'inception, et ce que tranche l'élaboration
inception : devrait-on faire ce projet ? — élaboration : comment, techniquement ? Dès qu'il est question d'architecture, c'est l'élaboration
Ce que l'élaboration doit produire
une architecture exécutable, pas un document d'architecture
Les deux familles de diagrammes UML
structure (ce qui est : classes, objets, composants, déploiement, paquetages, structure composite, profils) et comportement (ce qui se passe : cas d'utilisation, activités, états, séquence, communication, vue d'ensemble)
Combien de diagrammes définit UML 2, et combien le cours en retient
treize définis, neuf étudiés
Ce qui distingue séquence et communication
rien, sinon la mise en page : même information, même messages. L'une ordonne dans le temps, l'autre montre le réseau de liens
La première question devant un énoncé « quel diagramme ? »
structure ou comportement ? — elle élimine la moitié du catalogue avant qu'on ait réfléchi au reste