Be Software Architecture Wise
Be Wise Apps

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

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

Diagrammes en tant que code et documentation à jour

Leçon vidéo

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

La plupart des documentations d’architecture n’échouent pas parce qu’elles ont été mal écrites. Elles échouent parce qu’elles deviennent obsolètes. Dans cette leçon, vous allez voir comment l’écriture des diagrammes sous forme de texte, alliée à quelques habitudes simples, garde la documentation exacte pendant toute la vie d’un système.

Imaginez un livre de recettes de famille dans lequel chaque modification est notée au crayon par la personne qui cuisine, sans aucune trace de qui a changé quoi. Au bout de quelques années, plus personne ne s’y fie. Imaginez maintenant que les recettes sont dactylographiées, et que chaque modification est proposée, vérifiée par un second cuisinier, et datée. Et que le livre imprimé est réimprimé automatiquement après chaque modification approuvée. Les diagrammes en tant que code appliquent cette discipline aux diagrammes d’architecture.

Les diagrammes en tant que code, c’est écrire un diagramme sous forme d’un court fichier texte et laisser un outil le mettre en page et le dessiner. Au lieu de faire glisser des boîtes sur un canevas, vous écrivez quelque chose comme « ordering, flèche, base de données », et l’outil produit l’image. Pourquoi s’en donner la peine ? Un fichier texte a un historique : qui l’a modifié, quand et pourquoi. Et quand un développeur ajoute une nouvelle dépendance, la modification du diagramme apparaît dans la même pull request que le code, si bien que les relecteurs peuvent remettre en question la nouvelle flèche au moment où elle coûte le moins cher à changer.

Quatre langages dominent, et la section décrit la même plateforme de livraison de repas dans chacun d’eux. PlantUML, publié pour la première fois en 2009, couvre les diagrammes courants du langage de modélisation unifié, et ses diagrammes de séquence sont particulièrement réussis. Mermaid, apparu en 2014, s’affiche directement dans les fichiers Markdown sur GitHub et GitLab, si bien qu’un diagramme dans un fichier README ne demande aucune étape de build. Sa maîtrise de la mise en page des grands diagrammes est limitée. Le langage de Structurizr, créé par Simon Brown en parallèle de C4, est d’une autre nature. Il ne décrit pas un diagramme. Il décrit un modèle, puis en définit des vues. Et D2, publié en open source en 2022, vise un rendu net et moderne et une syntaxe lisible. Le compromis, avec tous ces langages : la mise en page automatique est pratique, mais parfois laide.

Voici pourquoi un modèle compte. À gauche, un seul fichier workspace. Chaque personne, chaque système et chaque conteneur y est défini une seule fois, avec son nom et sa technologie. À partir de ce modèle unique, l’outil génère les vues : contexte système, conteneurs, et déploiement pour chaque environnement. Chaque vue peut être exportée en images, en d’autres langages de diagrammes, ou en site de documentation avec les enregistrements de décision. Renommez donc le service Commandes une seule fois dans le modèle, et toutes les vues changent avec lui. Dans un outil de dessin, deux boîtes portant le même libellé n’ont aucun lien, et vous devez corriger chaque diagramme à la main.

Dès que la documentation est du texte dans le dépôt, elle peut suivre exactement le même flux de travail que le code. Vous la modifiez sur une branche, et elle est relue dans une pull request en même temps que la modification du code. Les vérifications d’intégration continue rendent alors chaque diagramme, et vérifient les liens. Un lien cassé, un diagramme invalide ou une date de revue dépassée fait échouer le build, et renvoie la modification au début. Une fois la fusion faite sur main, le site est reconstruit automatiquement. Personne n’a besoin de penser à exporter une image pour l’envoyer sur un wiki. Les lecteurs voient donc toujours la documentation qui correspond au code de main. Et quand ils ouvrent des tickets, ceux-ci lancent le changement suivant.

Ce ne sont pas les outils qui gardent la documentation exacte. Ce sont les habitudes. D’abord, chaque document a un responsable nommé, normalement l’équipe responsable du code. Les documents qui appartiennent à tout le monde ne sont maintenus par personne. Deuxièmement, relisez la documentation avec les modifications du code. Un modèle de pull request qui demande si une interface, une dépendance ou une décision a changé attrape la plupart des dérives au moment où elles se produisent. Troisièmement, donnez à chaque page une date de dernière revue. Une page qui indique « dernière revue : 2023 » est honnête. Une page qui décrit en silence le système de 2023 est un piège. Quatrièmement, créez des liens dans les deux sens : les pages pointent vers le code, et les commentaires du code pointent vers les enregistrements de décision. Et cinquièmement, supprimez ce qui est périmé, car une documentation fausse est pire que pas de documentation du tout. L’exception, ce sont les enregistrements de décision. Ils relèvent de l’histoire, ils sont donc remplacés, jamais supprimés.

Enfin, quelques erreurs courantes. Choisir un outil avant de décider quoi documenter : l’outil compte bien moins que la responsabilité et la relecture. Committer des images rendues sans leurs sources, si bien que les deux divergent. Et prendre les diagrammes en tant que code comme prétexte pour se passer de titres, de légendes et de libellés. Les règles de notation C4 s’appliquent toujours aux diagrammes générés.

La section complète montre la plateforme écrite dans les quatre langages, un exemple de pipeline et une liste de contrôle pour une documentation qui reste à jour. Ensuite, à la section quatre point huit, nous passons des documents aux personnes. À très vite.

Ce qu’il faut savoir

Ce que signifient les diagrammes en tant que code

Les diagrammes en tant que code (diagrams as code) consistent à écrire un diagramme sous forme d’un court fichier texte, dans un petit langage, et à laisser un outil le mettre en page et le dessiner. Au lieu de faire glisser des boîtes sur un canevas, vous écrivez ordering -> db: SQL, et l’outil produit l’image. Le fichier texte vit dans le dépôt de code et il est traité comme du code : versionné, relu, vérifié par des builds automatisés et publié par le pipeline.

C’est une composante de la documentation en tant que code (docs as code), pratique défendue par la communauté Write the Docs, qui consiste à produire la documentation avec les mêmes outils et le même flux de travail que le logiciel : outils de suivi des tickets, gestion de versions (généralement Git), balisage en texte brut comme Markdown ou AsciiDoc, revue de code et tests automatisés. Les sections précédentes ont produit la matière : vues et diagrammes C4, UML là où la précision compte, ADR et structure arc42. Cette section porte sur la manière de garder cette matière exacte pendant toute la vie du système, et c’est là que la plupart des documentations d’architecture échouent. Les raisons de cet échec ont été exposées dans pourquoi documenter, et dans quelle mesure : des wikis périmés, de gros documents dont personne n’est responsable et des diagrammes qui ne correspondent plus au système.

Pourquoi mettre les diagrammes en texte

Gestion de versions. Un diagramme en texte a un historique. Vous pouvez voir qui l’a modifié, quand et pourquoi, et comparer deux versions quelconques ligne par ligne ; une image binaire ou un fichier au format d’un outil de dessin montre seulement que quelque chose a changé. Vous pouvez aussi créer une branche : le diagramme d’une modification proposée vit sur la même branche que le code qui la met en œuvre.

Relecture dans les pull requests. Quand un développeur ajoute une nouvelle dépendance entre des services, la modification du diagramme apparaît dans la même pull request que le code, sous forme de diff textuel lisible. Les relecteurs peuvent demander si la nouvelle flèche est voulue : c’est une revue d’architecture au moment où elle coûte le moins cher.

Cohérence. L’outil applique les mêmes formes, polices et règles de mise en page à chaque diagramme, si bien que des diagrammes dessinés par vingt personnes ressemblent toujours à un ensemble unique. Avec un langage de modélisation (voir plus bas), le même élément apparaît avec le même nom et la même description dans chaque vue.

Génération. Du texte peut être produit par des programmes. Les diagrammes peuvent être générés à partir du code lui-même (graphes de dépendances), de l’infrastructure en tant que code (diagrammes de déploiement), des spécifications d’API ou d’un modèle central, puis vérifiés automatiquement par rapport au système.

Les compromis sont réels. La mise en page automatique est pratique mais parfois laide, et lutter contre un moteur de mise en page pour placer une seule boîte peut prendre plus de temps que de la dessiner ; la plupart des outils proposent des indications, comme la direction ou le regroupement, pas des positions exactes. Les langages textuels demandent un apprentissage aux personnes qui ne codent pas, comme les product managers. Et un beau croquis au tableau blanc pendant une discussion de conception reste la manière la plus rapide de réfléchir ; les diagrammes en tant que code sont destinés aux diagrammes que vous comptez conserver.

Quatre langages, un exemple

Quatre langages dominent. Chaque exemple ci-dessous décrit une partie de la même plateforme de livraison de repas.

PlantUML, créé par Arnaud Roques et publié pour la première fois en 2009, est le plus ancien des quatre. Il couvre tous les diagrammes UML courants (séquence, composants, déploiement, états, activités, classes) et bien d’autres, et utilise Graphviz pour mettre en page la plupart des types de diagrammes. La bibliothèque C4-PlantUML ajoute les formes C4. Ses diagrammes de séquence sont particulièrement réussis, ce qui en fait un choix naturel pour les scénarios d’exécution de l’essentiel d’UML.

@startuml
title Place an order (happy path)
actor Customer
participant "Customer app" as App
participant "Ordering service" as Ord
participant "Payment provider" as Pay
queue "Order events topic" as MB

Customer -> App : Tap "Pay"
App -> Ord : POST /orders (HTTPS)
Ord -> Pay : Authorise payment
Pay --> Ord : Authorised
Ord ->> MB : OrderPlaced (async)
Ord --> App : 201 Created
@enduml
PlantUML : un diagramme de séquence de la prise de commande ; ->> dessine un message asynchrone et --> une réponse

Mermaid, créé par Knut Sveidqvist en 2014, est écrit en JavaScript et s’affiche dans le navigateur. Son principal atout est sa portée : GitHub affiche les blocs Mermaid dans les fichiers Markdown depuis février 2022, et GitLab ainsi que de nombreux wikis et outils de prise de notes font de même, si bien qu’un diagramme dans un README ne demande aucune étape de build. Il prend en charge, entre autres, les organigrammes et les diagrammes de séquence, de classes, d’états et entité-association, et propose une prise en charge expérimentale de C4. Sa maîtrise de la mise en page est limitée pour les grands diagrammes.

flowchart LR
    app["Customer app<br/>Kotlin, Swift"]
    gw["API gateway"]
    ord["Ordering service<br/>Java"]
    db[("Order database<br/>PostgreSQL")]
    topic[["Order events<br/>Kafka topic"]]
    disp["Dispatch service<br/>Go"]
    notif["Notification service<br/>Node.js"]

    app -->|HTTPS/JSON| gw
    gw -->|HTTPS/JSON| ord
    ord -->|SQL| db
    ord -->|publishes OrderPlaced| topic
    disp -->|consumes| topic
    notif -->|consumes| topic
Mermaid : un organigramme au niveau des conteneurs ; [( )] dessine un cylindre de base de données et les libellés se placent sur les flèches ; le topic est dessiné comme un conteneur, comme le recommande la section 4.3

Structurizr DSL, créé par Simon Brown en parallèle du modèle C4, est d’une autre nature. Il ne décrit pas un diagramme ; il décrit un modèle (personnes, systèmes logiciels, conteneurs, composants et relations entre eux), puis définit des vues de ce modèle. Chaque élément est défini une seule fois, avec son nom, sa description et sa technologie, et apparaît dans chaque vue qui l’inclut. Les relations entre conteneurs sont automatiquement déduites au niveau du système, si bien que la vue de contexte n’a pas besoin de flèches séparées. Le DSL peut aussi rattacher au workspace une documentation Markdown et un dossier d’ADR, et l’outillage peut exporter les vues vers PlantUML, Mermaid, D2 et d’autres formats.

workspace "Food delivery" {
    model {
        customer = person "Customer" "Orders food from local restaurants."
        payments = softwareSystem "Payment provider" "Takes card payments." "External"
        platform = softwareSystem "Food-delivery platform" {
            app = container "Customer app" "Ordering and tracking." "Kotlin, Swift"
            gateway = container "API gateway" "Authenticates and routes requests." "Managed API gateway"
            ordering = container "Ordering service" "Accepts and tracks orders." "Java"
            db = container "Order database" "Orders and their states." "PostgreSQL" "Database"
            orderEvents = container "Order events" "Order lifecycle events." "Kafka topic" "Topic"
            dispatch = container "Dispatch service" "Assigns couriers." "Go"
        }
        customer -> app "Places and tracks orders using"
        app -> gateway "Makes API calls to" "JSON/HTTPS"
        gateway -> ordering "Routes requests to" "JSON/HTTPS"
        ordering -> db "Reads from and writes to" "SQL/TCP"
        ordering -> payments "Takes card payments using" "JSON/HTTPS"
        ordering -> orderEvents "Publishes order events to" "Kafka"
        dispatch -> orderEvents "Consumes order events from" "Kafka"
    }
    views {
        systemContext platform "Context" {
            include *
            autoLayout lr
        }
        container platform "Containers" {
            include *
            autoLayout lr
        }
        styles {
            element "Database" {
                shape cylinder
            }
            element "Topic" {
                shape pipe
            }
        }
    }
}
Structurizr DSL : un modèle et deux vues de la plateforme de livraison de repas ; la vue de contexte est générée à partir des mêmes définitions

D2 (Declarative Diagramming), publié en open source par Terrastruct en 2022, est le plus récent. Il vise un rendu net et moderne et une syntaxe lisible, prend en charge les conteneurs imbriqués (écrits avec des accolades et désignés par des noms à points), et offre le choix entre plusieurs moteurs de mise en page : dagre et ELK sont fournis et gratuits, et TALA, conçu pour les diagrammes d’architecture logicielle, est un moteur commercial distinct.

direction: right

customer: Customer {shape: person}
payments: Payment provider

platform: Food-delivery platform {
  app: Customer app
  ordering: Ordering service
  db: Order database {shape: cylinder}
  events: Order events topic {shape: queue}
  dispatch: Dispatch service

  app -> ordering: Places order (HTTPS)
  ordering -> db: SQL
  ordering -> events: Publishes OrderPlaced
  dispatch -> events: Consumes OrderPlaced
}

customer -> platform.app: Places orders using
platform.ordering -> payments: Authorise (HTTPS)
D2 : conteneurs imbriqués, formes et connexions libellées

Comparaison des quatre

PlantUMLMermaidStructurizr DSLD2
DécritUn diagramme par fichierUn diagramme par blocUn modèle et des vues de ce modèleUn diagramme par fichier
Point fortUML, en particulier les diagrammes de séquenceDiagrammes dans le Markdown, sans étape de buildDiagrammes C4 cohérents à plusieurs niveauxDiagrammes d’architecture généraux et attrayants
RenduOutil ou serveur Java ; Graphviz pour la plupart des mises en pageDans le navigateur ; natif sur GitHub et GitLabOutils Structurizr ; exports vers d’autres formatsOutil en ligne de commande ; choix du moteur de mise en page
Points de vigilanceAspect par défaut daté ; mise en page guidée seulement par des indicationsMaîtrise limitée de la mise en page des grands diagrammesConcepts C4 uniquement ; outillage spécifique nécessaireLe meilleur moteur de mise en page est commercial

Un modèle, de nombreuses vues

Un modèle, de nombreuses vues : un workspace Structurizr DSL définit une fois éléments et relations ; les vues contexte, conteneurs et déploiement en sont générées, puis exportées en images, en autres langages de diagrammes ou en site de documentationworkspace.dsl (un modèle)person Customersystem Platformcontainer OrderingJavacontainer Order DBPostgreSQLcontainer Order eventstopic Kafka+ relations, tags, stylesVue contexte systèmepersonnes, systèmesVue conteneursdans la plateformeVue déploiementpar environnementgénèreSVG, PNGimagesPlantUML,Mermaid, D2Site docavec ADRRenommez Ordering une fois dans le modèle : toutes les vues et exports suivent.
Un langage de modélisation définit chaque élément une seule fois ; les vues et les exports sont générés, ils ne peuvent donc pas se contredire.

Outils de dessin et outils de modélisation

La différence entre Structurizr et les trois autres illustre la distinction entre outils de dessin et outils de modélisation présentée à la section 4.3. Un outil de dessin (diagrams.net, Excalidraw, Visio, un tableau blanc en ligne, mais aussi PlantUML, Mermaid et D2) connaît des formes, des lignes et du texte. Une boîte libellée Service Commandes dans un diagramme n’a aucun lien avec la boîte portant le même libellé dans un autre. Renommez le service, et vous devez retrouver et corriger chaque diagramme à la main ; faites une seule faute de frappe, et vous avez, pour l’outil, deux services.

Un outil de modélisation (Structurizr, Archi pour les modèles ArchiMate, Sparx Enterprise Architect pour UML et SysML, Capella) conserve un modèle : un référentiel d’éléments et de relations dotés de propriétés. Les diagrammes sont des vues sur ce modèle. Renommez un élément, et toutes les vues changent. Le modèle peut être interrogé (quels conteneurs dépendent du broker ?), vérifié (aucun composant de l’app client ne doit appeler la base de données) et comparé au système en fonctionnement. Le prix à payer est davantage de structure en amont et, avec les outils commerciaux lourds, des licences, de la formation et une tendance à modéliser bien plus que ce que quiconque lit.

Une règle pratique : utilisez des outils de dessin, textuels ou graphiques, pour les croquis, les explications ponctuelles et les diagrammes autonomes, comme un diagramme de séquence isolé dans un ADR. Utilisez un modèle quand les mêmes éléments apparaissent dans de nombreux diagrammes, quand plusieurs équipes contribuent, ou quand vous voulez vérifier la documentation par rapport au code. Beaucoup d’équipes combinent les deux : un modèle Structurizr pour la structure C4, et PlantUML ou Mermaid pour quelques diagrammes de séquence et d’états.

Générer la documentation dans le pipeline

Dès que la documentation est du texte dans le dépôt, le pipeline d’intégration continue vu au chapitre 0 peut la construire et la vérifier comme du code. Un pipeline type rend chaque diagramme (en faisant échouer le build en cas d’erreur de syntaxe), vérifie les liens, construit un site de documentation statique avec un générateur comme MkDocs, Antora ou Docusaurus, et le publie quand les modifications arrivent sur la branche principale. Les lecteurs voient alors toujours la documentation qui correspond au code de main, et personne n’a besoin de penser à exporter une image pour l’envoyer sur un wiki.

D’autres vérifications peuvent s’ajouter à mesure que l’équipe gagne en maturité : un correcteur orthographique et un linter de rédaction (Vale est populaire), une vérification que chaque ADR a un statut valide, un avertissement quand la date de dernière revue d’une page dépasse son intervalle de revue, et des vérifications d’architecture qui comparent les dépendances documentées avec les dépendances réelles du code, ce qui est une forme de fonction d’aptitude. Certaines équipes génèrent une partie de la documentation à partir du système lui-même : graphes de dépendances issus du build, référence d’API issue des spécifications OpenAPI, diagrammes de déploiement issus de l’infrastructure en tant que code.

name: architecture-docs
on:
  pull_request:
    paths: ["docs/**"]
  push:
    branches: [main]

jobs:
  docs:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      # assumes plantuml, d2, lychee and mkdocs are available on the runner
      - name: Render diagrams (fails on syntax errors)
        run: |
          plantuml -tsvg docs/diagrams/*.puml
          for f in docs/diagrams/*.d2; do d2 "$f" "${f%.d2}.svg"; done
      - name: Check links
        run: lychee --offline docs/
      - name: Build site (warnings such as broken links fail the build)
        run: mkdocs build --strict
      - name: Publish
        if: github.ref == 'refs/heads/main'
        run: ./scripts/publish-docs.sh
Un workflow GitHub Actions qui rend les diagrammes, vérifie les liens, construit le site de documentation à chaque pull request et publie depuis main

Le flux de travail de la documentation en tant que code

Le flux docs as code : la documentation est modifiée sur une branche, relue dans une pull request, vérifiée par la CI, fusionnée et publiée automatiquement ; échecs et tickets des lecteurs ramènent au débutBranchemodif. .md, .dsl,et des ADRPull requestrevue avecle code modifiéVérif. CIrendu, lint,vérif. liensFusion sur mainapprouvée parresp. de docPubliersite régénéréautomatiquementlien cassé, diagramme invalide ou date dépassée : le build échoueLecteurstoujours sur mainles tickets des lecteurs lancent le changement suivantLa documentation suit exactement le même flux de travail que le code
Les modifications de la documentation suivent le même chemin que celles du code : branche, relecture, vérifications automatisées, fusion et publication automatique.

Garder la documentation à jour

Ce ne sont pas les outils qui gardent la documentation exacte, ce sont les habitudes. Cinq habitudes font la différence.

Responsabilité. Chaque document a un responsable nommé, normalement l’équipe responsable du code qu’il décrit. Dans GitHub et GitLab, un fichier CODEOWNERS peut faire de cette équipe un relecteur obligatoire pour les modifications de son dossier docs/. Les documents qui appartiennent à tout le monde ne sont maintenus par personne.

Relecture avec les modifications du code. Un modèle de pull request qui demande Cette modification touche-t-elle une interface, une dépendance, un déploiement ou une décision ? Si oui, quel document ou quel ADR avez-vous mis à jour ? attrape la plupart des dérives au moment où elles se produisent. Certaines équipes vont plus loin et bloquent la fusion des fonctionnalités dépourvues de documentation, une pratique que mentionne le guide de Write the Docs.

Dates de dernière revue. Un petit en-tête sur chaque page indique son responsable, la date de sa dernière vérification par rapport à la réalité et la fréquence à laquelle elle doit être revue. Les lecteurs peuvent juger dans quelle mesure s’y fier, et le pipeline peut signaler les pages en retard. Une page qui indique dernière revue : 2023 est honnête ; une page qui décrit en silence le système de 2023 est un piège.

Relier documentation et code. Les pages pointent vers le code qu’elles décrivent (chemins, modules), les commentaires du code pointent vers les ADR, et les messages de commit citent les enregistrements qu’ils mettent en œuvre. Des liens dans les deux sens rendent évident quels documents une modification peut affecter.

Supprimer ce qui est périmé. Une documentation fausse est pire que pas de documentation du tout, car les lecteurs agissent en fonction d’elle. Quand une page ne décrit plus le système et que personne ne la corrigera, supprimez-la ou déplacez-la dans une archive clairement signalée. Les ADR font exception : ce sont des traces de l’histoire, ils sont donc remplacés ou dépréciés, pas supprimés. C’est l’idée de documentation vivante que Cyrille Martraire a développée dans son livre de 2019 portant ce titre : une documentation qui évolue au même rythme que le système, idéalement parce qu’une grande partie en est dérivée du système lui-même.

---
title: "Ordering service: building block view (level 2)"
owner: "@ordering-team"
last_reviewed: 2026-09-14
review_every: 6 months
code: src/ordering/
decisions: [ADR-0007, ADR-0012]
---
Front matter en tête d’une page Markdown : responsable, date et intervalle de revue, et liens vers le code et les décisions qu’elle décrit

Liste de contrôle : une documentation qui reste à jour

Utilisez-la lors de la mise en place de la documentation d’architecture d’un dépôt, et revenez-y tous les quelques mois.

  • La documentation vit dans le dépôt qu’elle décritPages Markdown ou AsciiDoc, sources des diagrammes et ADR dans docs/, pas dans un wiki séparé que personne ne met à jour dans la même modification.
  • Les sources des diagrammes sont du texte et sont rendues par le pipelinePas d’images exportées à la main qui prennent discrètement du retard sur leurs sources ; le build échoue sur un diagramme invalide.
  • Chaque élément est défini une seule fois là où les diagrammes se recoupentUtilisez un modèle (comme Structurizr DSL) quand les mêmes conteneurs apparaissent dans plusieurs diagrammes.
  • Chaque page a un responsable et une date de dernière revueGaranti par CODEOWNERS et par une vérification du pipeline qui avertit quand l’intervalle de revue est dépassé.
  • Les pull requests posent la question de la documentationLe modèle demande si une interface, une dépendance, un déploiement ou une décision a changé, et quel document a été mis à jour.
  • Les liens sont vérifiés automatiquementLes liens internes cassés et les références à des fichiers supprimés font échouer le build.
  • La documentation pointe vers le code et le code vers les décisionsDes chemins dans la documentation, des numéros d’ADR dans les commentaires du code et les messages de commit.
  • Le site publié est reconstruit à partir de mainLes lecteurs voient toujours la version qui correspond au code déployé, sans étape de publication manuelle.
  • Les pages périmées sont supprimées ou archivéesLes pages que personne ne corrigera sont retirées ; les ADR sont remplacés ou dépréciés, jamais supprimés.
  • Au moins une vérification compare la documentation à la réalitéPar exemple, un test qui échoue si une dépendance apparaît dans le code sans que le diagramme de conteneurs la montre.

Vérifiez votre compréhension

Que peut voir un relecteur dans une pull request quand un diagramme est du code, et qu’il ne peut pas voir quand c’est une image exportée ?

Un diff lisible, ligne par ligne, de ce qui a changé, comme une nouvelle relation entre deux services, dans la même pull request que le code qui l’a introduite.

Pourquoi renommer un service demande-t-il plus de travail avec un outil de dessin qu’avec un outil de modélisation ?

Dans un outil de dessin, chaque diagramme contient sa propre copie du libellé, si bien qu’il faut retrouver et modifier chaque diagramme ; dans un outil de modélisation, l’élément est défini une seule fois et chaque vue reprend le nouveau nom.

Pourquoi faut-il supprimer la documentation périmée plutôt que la laisser en place, et quelle est l’exception ?

Les lecteurs agissent en fonction de ce qu’ils lisent, si bien qu’une documentation fausse entraîne de mauvaises décisions. Les ADR font exception : ils consignent l’histoire et sont plutôt marqués comme remplacés ou dépréciés.

Citez deux vérifications qu’un pipeline de documentation peut exécuter en plus du rendu des diagrammes.

La vérification des liens, le linting de la rédaction ou de l’orthographe, un build strict du site, un avertissement pour les dates de revue dépassées, et la comparaison des dépendances documentées avec celles du code.

Suivant · 4.8CommuniquerAdapter l’architecture aux dirigeants, aux chefs de produit, aux développeurs, à l’exploitation, à la sécurité et aux auditeurs : expliquer les compromis, les résumés d’une page, suivre une requête, les documents de conception et les RFC, les revues, la conception des diagrammes et la recherche du consensus.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 : « Nos diagrammes d’architecture sont dans un outil de dessin et ne sont jamais à jour. Comment passer aux diagrammes en tant que code sans empêcher les personnes qui ne sont pas développeurs de contribuer ? »