Be Software Architecture Wise
Be Wise Apps

Read in English · Leer en español · Auf Deutsch lesen

Section 4.4 sur 4.8 · Intermédiaire · 22 min de lecture

Les diagrammes UML que les architectes utilisent encore

Leçon vidéo

5 min · narré en anglais, avec sous-titres
Écouter seulement (audio)
Lire la transcription

Les boîtes et les lignes conviennent pour la structure, mais certaines questions exigent plus de précision. Dans cette leçon, vous découvrirez la poignée de diagrammes du langage de modélisation unifié, ou UML, que les architectes utilisent encore, et quand ils valent l’effort.

Partout dans le monde, les musiciens savent lire la même partition, parce que les notes et les symboles ont le même sens partout. UML est un ensemble comparable de symboles partagés pour dessiner du logiciel. Telle flèche signifie « attend une réponse ». Telle autre signifie « envoie et continue ». Vous n’avez pas besoin de tout connaître. Les architectes utilisent surtout une poignée de ses schémas, chacun seulement quand sa précision aide vraiment.

UML est un langage graphique généraliste qui sert à décrire la structure et le comportement des logiciels. Il a été adopté comme norme par l’Object Management Group en 1997, et la version actuelle, la 2.5.1, définit quatorze types de diagrammes. Sa réputation a changé. L’ambition initiale de transformer des modèles détaillés en code a largement échoué, et beaucoup d’équipes dessinent aujourd’hui des boîtes et des lignes informelles. Pourtant, quelques diagrammes UML restent les meilleurs outils pour les questions de comportement dans le temps.

Martin Fowler décrit trois façons d’utiliser UML. Comme croquis, il est informel et sélectif : seulement les éléments importants, souvent sur un tableau blanc, souvent jeté ensuite. Selon ses mots, l’exhaustivité est l’ennemie de la compréhensibilité. Comme plan détaillé, il produit des modèles complets et précis que quelqu’un d’autre implémentera. Comme langage de programmation, le modèle est suffisamment détaillé pour être compilé en code. Cela ne survit que dans quelques niches de l’embarqué et des systèmes critiques pour la sûreté. Pour les architectes, le croquis est la règle. Demandez-vous pour chaque diagramme : qui le lira, et quelle décision soutient-il ?

Si les architectes ne gardent qu’un seul diagramme UML, c’est généralement le diagramme de séquence. Il montre comment des participants interagissent dans le temps pour un scénario. Chaque participant, en haut, a une ligne de vie en pointillés, et le temps s’écoule vers le bas. Ici, l’app client passe une commande auprès du service des commandes, qui appelle le prestataire de paiement et attend. Un appel synchrone a une ligne continue et une pointe de flèche pleine. La réponse revient sous forme de ligne en pointillés. Cette boîte est un fragment alt, qui montre des alternatives. Si le paiement est autorisé, la commande est enregistrée et confirmée. S’il est refusé, l’app reçoit une erreur. Dessinez aussi les scénarios d’échec : c’est là que se joue l’essentiel de la réflexion architecturale. Enfin, un événement de commande passée part vers le topic sous forme de message asynchrone : une ligne continue avec une pointe ouverte. Le service n’attend pas. Bien représenter ces pointes de flèche compte. Qu’un service attende ou passe à la suite détermine sa latence, ses modes de défaillance et son couplage. La légende les explique en toutes lettres.

Un diagramme d’états-transitions décrit un cycle de vie avec précision. Les états sont des rectangles aux coins arrondis, et chaque transition est libellée avec un événement, une condition de garde facultative et une action facultative. Ici, une commande commence en attente de paiement, et devient passée quand le paiement est autorisé. Elle passe ensuite par acceptée, prête et en livraison. Elle ne devient livrée que lorsque le code de remise correspond, et le client est alors notifié. Les commandes peuvent aussi être annulées : quand le paiement est refusé, quand le restaurant les rejette, ou par le support, avec un remboursement. Ce cycle de vie est partagé par plusieurs services. S’accorder sur lui dans un seul diagramme évite les bugs où un service pense qu’une commande est annulée alors qu’un autre lui affecte un livreur. Et il répond à des questions que le texte cache. Une commande peut-elle être annulée une fois en cours de livraison ? Ici, non.

Quatre autres diagrammes complètent l’ensemble. Un diagramme de composants montre les interfaces que chaque partie fournit et requiert, ce qui rend visible le sens des dépendances. Un diagramme de déploiement montre les nœuds, comme un téléphone ou un cluster, les artefacts déployés dessus et les chemins de communication entre eux. Un diagramme d’activité montre un flux de travail : qui réalise chaque étape, et ce qui s’exécute en parallèle entre une bifurcation et une jonction. Et un diagramme de classes est à réserver à un petit modèle de domaine des concepts métier clés. Dessiner chaque classe à la main donne un diagramme périmé en quelques semaines.

UML est excessif quand le public ne le connaît pas et que la question n’en a pas besoin. Mais la précision paie quand un malentendu coûte cher, comme à une interface entre entreprises, où chaque partie développe à partir de la description de l’autre. Les secteurs réglementés et critiques pour la sûreté exigent souvent une documentation de conception que les auditeurs peuvent suivre. Les règles de cycle de vie partagées par plusieurs équipes, comme les états de commande, profitent d’une notation qui oblige à énoncer chaque transition. Et quand les personnes qui construisent une conception ne peuvent pas facilement interroger son auteur, celle-ci doit laisser moins de place à l’interprétation. Un dernier conseil : ajoutez toujours une légende. Beaucoup de lecteurs ne connaissent pas la notation.

La section complète dessine les six diagrammes pour la plateforme de livraison de repas, avec la notation de chacun. Ensuite, dans la section quatre point cinq, nous verrons comment consigner les raisons des décisions. À très vite.

Ce qu’il faut savoir

Ce qu’est UML, et où il en est aujourd’hui

Le langage de modélisation unifié (UML) est un langage graphique généraliste qui sert à décrire la structure et le comportement des logiciels. Il est né de la fusion, chez Rational Software au milieu des années 1990, des méthodes de Grady Booch, James Rumbaugh et Ivar Jacobson, et a été adopté comme norme en 1997 par l’Object Management Group (OMG), un consortium de normalisation du secteur. UML 2.0 (2005) a été une révision majeure. La version actuelle est UML 2.5.1, publiée par l’OMG en décembre 2017 ; la version antérieure, UML 2.4.1, a aussi été publiée par l’ISO sous la référence ISO/IEC 19505 (2012). La spécification définit quatorze types de diagrammes, répartis entre les diagrammes de structure (comme les diagrammes de classes, de composants et de déploiement) et les diagrammes de comportement (comme les diagrammes d’activité, d’états-transitions et de séquence).

La réputation d’UML a beaucoup changé. À la fin des années 1990 et au début des années 2000, il était présenté comme la base du développement dirigé par les modèles, dans lequel des modèles détaillés seraient transformés en code. Cette ambition a largement échoué en dehors de domaines spécialisés, et beaucoup d’équipes associent UML à des processus lourds et à des diagrammes que personne ne lisait. Lorsque Marian Petre a interrogé 50 développeurs professionnels pour une étude présentée à ICSE 2013, 35 ont déclaré ne pas utiliser UML du tout, et la plupart des autres l’utilisaient de façon sélective et informelle ; la plupart des équipes dessinent des boîtes et des lignes informelles plutôt que de l’UML strict. Pourtant, une poignée de types de diagrammes UML restent les meilleurs outils disponibles pour certaines questions, en particulier les questions de comportement dans le temps, et leur notation est largement comprise. Un architecte n’a pas besoin des quatorze types de diagrammes ; il lui en faut peut-être six, utilisés à dessein.

Cette section présente ces six types, chacun avec un petit exemple tiré de la plateforme de livraison de repas utilisée tout au long de ce chapitre. Elle suppose acquis le vocabulaire C4 de la section 4.3 ; les deux se combinent bien, avec C4 pour la vue d’ensemble structurelle et UML là où la précision sur les interfaces, les interactions ou les états est rentable.

Croquis, plan détaillé ou langage de programmation

UML Distilled de Martin Fowler (3e édition, Addison-Wesley, 2003) et ses essais de la même année distinguent trois façons d’utiliser UML, une classification à laquelle Steve Mellor est parvenu de son côté. Comme croquis, UML est utilisé de façon informelle et sélective pour communiquer des idées : sur un tableau blanc avant d’écrire du code (croquis prospectif) ou pour expliquer une partie d’un système existant (croquis rétrospectif). Seuls les éléments importants apparaissent, la notation est suivie de façon approximative, et le diagramme est souvent jeté. Fowler le résume lui-même ainsi : l’exhaustivité est l’ennemie de la compréhensibilité.

Comme plan détaillé, UML sert à produire des modèles complets et précis que quelqu’un d’autre implémente, ou qui sont générés à partir du code existant pour le documenter intégralement ; le but est l’exhaustivité, et des outils sont généralement nécessaires. Comme langage de programmation, le modèle UML est suffisamment détaillé pour être compilé en code exécutable, ce qui est l’objectif de l’architecture dirigée par les modèles (MDA). Ce mode survit dans quelques niches de l’embarqué et des systèmes critiques pour la sûreté, souvent au moyen de profils et d’outils spécialisés, mais il ne s’est pas généralisé.

Pour les architectes, le mode croquis est la règle et le mode plan détaillé l’exception. La question utile pour chaque diagramme est : qui le lira, et quelle décision ou quelle compréhension soutient-il ? Un diagramme de séquence esquissé pour s’entendre sur la gestion des échecs de paiement est précieux, même s’il ignore la moitié de la notation. Un modèle de classes complet d’un service de 200 classes, maintenu à la main, ne l’est généralement pas.

Diagrammes de composants : les parties et leurs interfaces

Un diagramme de composants UML montre les parties modulaires d’un système et, surtout, leurs interfaces. Sa notation caractéristique est la « boule et douille » : un petit cercle au bout d’une tige (une interface fournie, que le composant offre) et un demi-cercle (une interface requise, qu’il a besoin qu’un autre lui fournisse). Quand une boule s’emboîte dans une douille, les deux composants sont reliés par cette interface. Les dépendances sont des flèches en pointillés, éventuellement libellées avec un stéréotype comme «use».

C’est exactement ce qui intéresse les architectes quand ils veulent montrer le sens des dépendances et la possibilité de remplacer une partie. Dans l’exemple, le composant Commandes ne dépend pas directement du prestataire de paiement ; il requiert une interface PaymentPort, qu’implémente un adaptateur de paiement distinct. C’est l’inversion des dépendances et la logique ports et adaptateurs du chapitre 3 rendues visibles : changer de prestataire de paiement signifie écrire un nouvel adaptateur, et non modifier Commandes. Un diagramme de composants C4 peut montrer les mêmes parties, mais il ne distingue pas les interfaces fournies des interfaces requises.

Diagramme de composants

Diagramme de composants UML montrant le composant Commandes avec ses interfaces fournies et requisesDiagramme de composants : Commandes et interfaces«component»BFF client«component»Commandes«component»Adapt. paiement«component»Dispatch«système externe»Prest. de paiementOrderAPIPaymentPortOrderEvents«use»Commandes fournit OrderAPI etOrderEvents, et requiert unPaymentPort que l’adaptateurimplémente.Lég.Interface fournieInterface requiseDépendance
Les boules sont les interfaces qu’un composant fournit ; les douilles, les interfaces qu’il requiert. Commandes dépend d’un port, pas du prestataire. (BFF : backend for frontend, un composant côté serveur dédié à une seule app cliente.)

Diagrammes de déploiement : nœuds et artefacts

Un diagramme de déploiement UML montre l’infrastructure physique ou virtuelle et ce qui s’exécute dessus. Ses éléments sont des nœuds, dessinés sous forme de boîtes en trois dimensions, qui sont des ressources de calcul : un «device» comme un téléphone ou un serveur, ou un «executionEnvironment» comme un système d’exploitation, un environnement d’exécution de conteneurs ou un cluster Kubernetes ; les nœuds peuvent être imbriqués. Les artefacts, dessinés sous forme de rectangles avec une icône de document et le stéréotype «artifact», sont les fichiers physiques déployés : un JAR, une image de conteneur, un paquet d’application mobile, un fichier de configuration. Les lignes entre les nœuds sont des chemins de communication, libellés avec des protocoles.

Les diagrammes de déploiement sont des vues d’allocation au sens du SEI (section 4.2). Ils répondent aux questions de l’équipe d’exploitation : où s’exécute chaque partie, en combien de copies, dans quelle région, quels chemins réseau existent. Le diagramme de déploiement de C4 couvre le même terrain avec une notation moins formelle ; l’un ou l’autre convient, pourvu qu’il y en ait un par environnement important et qu’il montre les réplicas, les services managés et les frontières réseau.

Diagramme de déploiement

Diagramme de déploiement UML plaçant les artefacts sur un téléphone, un cluster Kubernetes et des services managésDiagramme de déploiement : prod«device»Téléphone client«artifact»customer-app«node» Région cloud eu-west«executionEnvironment»Cluster Kubernetes«artifact»image ordering-service3 réplicas«artifact»image dispatch-service3 réplicas«artifact»image notification-service2 réplicas«node»ServicePostgreSQLprimaire + secours«node»Kafka managé3 brokersHTTPSTCPTCPLignes :chemins comm. ;boîtes 3D :nœuds.
Les nœuds sont l’endroit où les choses s’exécutent ; les artefacts sont ce qui est déployé ; les lignes sont des chemins de communication.

Diagrammes de séquence : qui appelle qui, et dans quel ordre

Si les architectes ne gardent qu’un seul diagramme UML, c’est généralement le diagramme de séquence. Il montre comment des participants interagissent dans le temps pour un scénario. Les participants apparaissent en haut, chacun avec une ligne de vie verticale en pointillés ; le temps s’écoule vers le bas. Un fin rectangle sur une ligne de vie, l’activation (spécification d’exécution), montre quand ce participant est occupé à traiter un message.

Les pointes de flèche ont un sens. Un message synchrone, pour lequel l’émetteur attend une réponse, a une ligne continue et une pointe de flèche pleine. Une réponse a une ligne en pointillés et une pointe ouverte. Un message asynchrone, pour lequel l’émetteur continue sans attendre, a une ligne continue et une pointe ouverte. Bien les représenter compte pour l’architecture : que le service des commandes attende le prestataire de paiement, ou qu’il publie et passe à la suite, détermine sa latence, ses modes de défaillance et son couplage (voir la section 0.6).

Les fragments combinés ajoutent le flux de contrôle : une boîte libellée alt, avec des sections gardées séparées par une ligne en pointillés, montre des alternatives (if/else), opt montre une partie facultative, loop une répétition et par des sections parallèles. Utilisez-les avec parcimonie ; un diagramme de séquence avec des boucles et des alternatives imbriquées, c’est du code mal dessiné. Dessinez un diagramme par scénario important, y compris les scénarios d’échec, car c’est là que se joue l’essentiel de la réflexion architecturale.

Diagramme de séquence

Diagramme de séquence UML pour passer une commande, avec un appel de paiement synchrone, un fragment alt et un événement asynchroneDiagramme de séquence : commandeApp clientServicecommandesServicepaiementBasecommandesÉv. cmdes(topic)POST /ordersauthorise(amount, key)resultalt[autorisé]INSERT commande + outboxcommit OK201 Created[refusé]4xx paiement refuséOrderPlaced (async, via relais outbox)Lég.Appel synchroneRéponseMessage asynchroneActivation
Passer une commande : un appel synchrone au prestataire de paiement, un fragment alt pour les deux issues et un événement asynchrone à la fin.

Diagrammes d’états-transitions : cycles de vie et règles

De nombreux objets métier ont un cycle de vie : une commande, un paiement, un abonnement, un sinistre d’assurance. Un diagramme d’états-transitions le décrit avec précision. Les états sont des rectangles aux coins arrondis ; un cercle plein marque le pseudo-état initial et un cercle pointé l’état final. Les transitions sont des flèches libellées event [guard] / action : l’événement (event) qui déclenche la transition, une condition de garde (guard) facultative qui doit être vraie, et une action facultative exécutée au passage. Les états peuvent avoir des comportements internes, comme entry / notify restaurant.

Les machines à états relèvent de l’architecture plus souvent qu’on ne le pense. Le cycle de vie de commande ci-dessous est partagé par plusieurs services : le service des commandes en est propriétaire, les services d’affectation et de notifications réagissent à ses transitions, et le personnel du support peut en déclencher certaines. S’accorder sur les états et les transitions autorisées, dans un seul diagramme, évite toute une catégorie de bugs dans lesquels un service pense qu’une commande est annulée alors qu’un autre lui affecte un livreur. Le diagramme fait aussi apparaître des questions que le texte cache : une commande peut-elle être annulée une fois en cours de livraison ? (Ici, non : il n’existe aucune transition de cet état vers Annulée.) Un remboursement est-il une action sur une transition ou un cycle de vie distinct ?

Diagramme d’états-transitions

Diagramme d’états-transitions UML du cycle de vie d’une commande de repasMachine à états : commandeAttente paiementPasséeentry / notify restaurantAcceptéePrêteEn livraisonentry / start trackingLivréeAnnuléepaymentAuthorisedrestaurantAcceptsfoodReadypickedUphandedOver[code matches]/ notify customerpaymentDeclinedrestaurantRejects/ refundcancel[support approves]/ refundLég.InitialFinalLibellé de transition : event [guard] / action
Le cycle de vie de la commande : chaque transition autorisée, avec ses événements, ses gardes et ses actions, sur une seule page.

Diagrammes d’activité : flux de travail et parallélisme

Un diagramme d’activité est un organigramme à la sémantique précise. Les rectangles aux coins arrondis sont des actions ; les losanges sont des décisions (avec des gardes sur les flux sortants) et des fusions ; les barres épaisses sont des bifurcations, qui divisent un flux en flux parallèles, et des jonctions, qui attendent tous les flux entrants avant de continuer. Les partitions, souvent appelées couloirs (swimlanes), montrent qui ou quoi exécute chaque action. Une boucle doit repasser par un losange de fusion : deux flux dessinés directement vers une même action signifieraient que l’action attend les deux, comme une jonction.

Les architectes utilisent les diagrammes d’activité pour les processus métier et les flux de travail qui couvrent plusieurs parties d’un système, en particulier lorsque le parallélisme et les responsabilités comptent. L’exemple montre que la préparation du repas et l’affectation d’un livreur se déroulent en parallèle, que l’affectation boucle jusqu’à ce qu’un livreur accepte, et que la remise attend les deux. Cela soulève immédiatement une question d’architecture : que se passe-t-il si aucun livreur n’accepte dans les vingt minutes alors que le repas est prêt ? Le diagramme rend la lacune visible ; la réponse pourrait être une transition de délai d’expiration (timeout), une étape de compensation ou une modification du cycle de vie de la commande. Les flux de travail de longue durée de ce type sont souvent implémentés sous forme de sagas ou de workflows orchestrés, traités au chapitre 6.

Diagramme d’activité

Diagramme d’activité UML avec couloirs, bifurcation, boucle de décision et jonction pour préparer le repas et affecter un livreurDiagramme d’activité : de l’acceptation à la remiseRestaurantAffectationAccepterPréparer repasLister livreurs prochesfusionProposer au livreur suivant[refusée ouexpirée][acceptée]Remettre au livreurBifurcation : deux branches en parallèle.Jonction : attend les deux avant remise.
La préparation du repas et l’affectation d’un livreur se déroulent en parallèle entre une bifurcation et une jonction ; la décision boucle jusqu’à ce qu’un livreur accepte.

Diagrammes de classes, avec parcimonie : le modèle de domaine

Le diagramme de classes est le diagramme UML le plus connu, et celui que les architectes devraient utiliser avec le plus de parcimonie. Dessiner à la main chaque classe d’un service, c’est le mode plan détaillé sous sa forme la moins utile : le diagramme est périmé en quelques semaines, et le code dit la même chose plus précisément. Là où les diagrammes de classes méritent leur place, c’est pour le modèle de domaine : un petit diagramme des concepts métier clés, de leurs attributs et de leurs relations, dont les développeurs, les chefs de produit et les experts du domaine peuvent discuter ensemble. Dans les termes de la conception pilotée par le domaine (chapitre 5), il capture le langage omniprésent d’un contexte délimité.

L’essentiel tient en peu de choses. Une boîte de classe a un nom, des attributs et éventuellement des opérations. Une ligne simple est une association, éventuellement nommée, avec des multiplicités à chaque extrémité (1, 0..1, 0..*, 1..*). Un losange plein marque une composition : les parties appartiennent à exactement un tout et ne lui survivent pas, comme les lignes de commande appartiennent à une commande. Un triangle creux marque une généralisation (héritage) et une ligne en pointillés à pointe ouverte une dépendance. Les multiplicités portent de vraies décisions de conception : Order 1 to 0..1 Delivery dit qu’une commande a au plus une livraison, ce qui exclut de répartir une grosse commande entre deux livreurs. Si le métier pouvait vouloir cela, c’est sur le diagramme que la question apparaît.

Diagramme de classes du modèle de domaine

Diagramme de classes UML du modèle de domaine des commandes, avec associations, multiplicités et compositionDiagramme de classes : domaine CommandesCustomerid: CustomerIdname: StringOrdreid: OrderIdstatus: OrderStatustotal: MoneyplacedAt: InstantRestaurantid: RestaurantIdname: StringOrderLinequantity: intunitPrice: MoneyMenuItemname: Stringprice: MoneyLivraisonhandoverCode: StringpickedUpAt: InstantCourierid: CourierIdvehicle: VehicleType10..*places0..*1from1..*0..*10..*10..10..*1Composition : la partie vit et meurt avec le toutMultiplicités (nombres) : 1, 0..1, 0..*, 1..*
Un modèle de domaine assez petit pour en discuter avec le métier : concepts clés, attributs, associations et multiplicités.

Les six diagrammes en un coup d’œil

DiagrammeRépond àNotation cléUsage typique par les architectes
ComposantQuelles sont les parties, et par quelles interfaces dépendent-elles les unes des autres ?Boîtes de composants, interfaces fournies (boule) et requises (douille), dépendancesMontrer le sens des dépendances et les parties remplaçables ; ports et adaptateurs
DéploiementOù s’exécute chaque partie, en combien de copies, connectée comment ?Nœuds (boîtes 3D), artefacts, chemins de communicationInfrastructure de production et de staging, zones réseau
SéquenceDans quel ordre les participants interagissent-ils pour ce scénario ?Lignes de vie, activations, messages synchrones et asynchrones, réponses, fragmentsScénarios d’exécution clés, en particulier les défaillances, les nouvelles tentatives et les intégrations
États-transitionsDans quels états cet objet peut-il se trouver, et qu’est-ce qui le fait passer de l’un à l’autre ?États, états initial et final, transitions avec event [guard] / actionCycles de vie partagés entre services : commandes, paiements, sinistres
ActivitéQuel est le flux de travail, qui réalise chaque étape, qu’est-ce qui s’exécute en parallèle ?Actions, décisions, bifurcations et jonctions, partitionsProcessus métier, flux de travail de longue durée, sagas
ClassesQuels sont les concepts clés, et comment sont-ils liés ?Classes, associations, multiplicités, composition, généralisationPetits modèles de domaine ; diagrammes générés à partir du code

Quand UML est excessif, et quand la précision compte

UML est excessif quand le public ne le connaît pas et que la question n’en a pas besoin : un diagramme de contexte C4 communique mieux avec des dirigeants qu’un diagramme de cas d’utilisation UML, et un croquis au tableau blanc est l’outil qui convient pour une discussion de conception qui sera terminée en une heure. Il est excessif quand on maintient à la main des diagrammes qui pourraient être générés, et quand on impose une notation stricte dans un croquis dont le but est d’explorer. L’observation de Fowler, selon laquelle la précision ajoutée dans UML 2 sert surtout les utilisateurs des modes plan détaillé et langage de programmation et alourdit la tâche de ceux qui font des croquis, reste valable.

La précision paie quand un malentendu coûte cher. Les interfaces entre entreprises en sont le cas le plus clair : quand l’entreprise de livraison de repas s’intègre à un prestataire de paiement ou au système de commande d’une grande chaîne de restaurants, chaque partie développe à partir de la description de l’autre et ne découvre les incohérences qu’en test ou en production. Un diagramme de séquence précis du flux de paiement, avec les délais d’expiration (timeouts), les nouvelles tentatives, les clés d’idempotence et les webhooks, joint à la spécification d’interface, est une assurance peu coûteuse. Les secteurs réglementés et critiques pour la sûreté (dispositifs médicaux, ferroviaire, aéronautique, automobile, certains systèmes financiers) exigent souvent une documentation de conception que les auditeurs peuvent suivre des exigences jusqu’à l’implémentation ; l’UML formel, ou son cousin d’ingénierie système SysML, y est courant. Les règles de concurrence et de cycle de vie partagées par plusieurs équipes, comme les états de commande ci-dessus, profitent d’une notation qui oblige à énoncer chaque transition. Enfin, le développement externalisé ou distribué, où les personnes qui implémentent une conception ne peuvent pas facilement interroger son auteur, a besoin de descriptions qui laissent moins de place à l’interprétation.

Questions fréquentes

Notre équipe doit-elle vraiment apprendre UML ?

Apprenez l’essentiel de la notation des six diagrammes de cette section ; cela prend quelques heures et donne à l’équipe un vocabulaire commun pour les interfaces, les interactions et les cycles de vie. Il n’est guère utile d’apprendre les autres types de diagrammes ou la spécification complète, sauf si vous travaillez dans un domaine qui les exige.

Quel est le lien entre UML et C4 ?

Ils sont complémentaires. C4 fournit un petit ensemble d’abstractions et une hiérarchie de diagrammes structurels ; UML fournit des notations précises, en particulier pour le comportement. Beaucoup d’équipes utilisent C4 pour les vues de contexte, de conteneurs et de composants, et UML pour les diagrammes de séquence, d’états-transitions et parfois de déploiement.

Puis-je dessiner de l’UML avec du texte plutôt qu’avec un outil de dessin ?

Oui. PlantUML et Mermaid génèrent tous deux des diagrammes de séquence, d’états-transitions, de classes et d’activité à partir de courts fichiers texte qui peuvent être placés en gestion de versions. La section 4.7 en montre des exemples.

Vérifiez votre compréhension

Dans un diagramme de séquence, comment distinguer un appel synchrone d’un message asynchrone ?

Un appel synchrone a une ligne continue avec une pointe de flèche pleine (l’émetteur attend) ; un message asynchrone a une ligne continue avec une pointe ouverte (l’émetteur continue). Les réponses sont des lignes en pointillés avec des pointes ouvertes.

Que signifie le libellé handedOver [code matches] / notify customer sur une transition ?

Lorsque l’événement handedOver se produit et que la garde « code matches » (le code correspond) est vraie, la transition se déclenche et l’action « notify customer » (notifier le client) est exécutée.

Pourquoi les architectes devraient-ils rarement dessiner à la main les diagrammes de classes de services entiers ?

Ils font double emploi avec ce que le code dit plus précisément et deviennent vite obsolètes ; les petits modèles de domaine méritent d’être dessinés, et les diagrammes complets peuvent être générés au besoin.

Donnez deux situations dans lesquelles un UML précis vaut l’effort.

Par exemple, les interfaces entre entreprises, le développement réglementé ou critique pour la sûreté, les cycles de vie partagés par plusieurs équipes, ou le développement externalisé dans lequel les personnes qui implémentent ne peuvent pas facilement interroger les concepteurs.

Suivant · 4.5Enregistrements de décisionComment consigner les décisions significatives pour que leurs raisons perdurent : le format de Nygard, MADR et les Y-statements, les statuts et le remplacement, où conserver les enregistrements, ce qui en mérite un, la revue et les anti-patrons.Continuer →

Sources et lectures complémentaires

Une question sur cette section ? ArchitectBot, l’assistant d’étude IA du cours, répond d’abord à partir du cours.

Demander : « Quels diagrammes UML dois-je inclure dans une spécification d’interface destinée à une entreprise partenaire qui s’intègre à notre API ? »