URL: https://linuxfr.org/users/goeb/journaux/ecrire-des-diagrammes-de-sequences Title: Écrire des diagrammes de séquences Authors: goeb Date: 2016年09月13日T20:51:59+02:00 License: CC By-SA Tags: diagramme, uml, graphes et libreoffice Score: 51 Les diagrammes de séquences sont très utiles pour représenter le déroulement d'événements au fil du temps. Ils sont par exemple très utilisés pour décrire des protocoles de communication, où les paquets d'information se croisent, se perdent, passent du temps dans les tuyaux. Ces diagrammes comportent : - des acteurs, avec leur ligne de vie (un acteur peut représenter une personne, une machine, un process, un thread, ...). La spécification UML utilise le terme de "participant". - des messages échangés entre acteurs On fait ces dessins au tableau, puis on les efface, mais parfois on voudrait les inclure dans une page d'un document, ou les envoyer par email. ## Logiciels existants Des outils logiciels existent, pour générer de tels diagrammes : - éditeur de texte (ascii art) - Mscgen (http://www.mcternan.me.uk/mscgen) - éditeurs dits UML - éditeurs SDL (Specification and Description Language) - éditeurs de diagrammes : [Dia](https://fr.wikipedia.org/wiki/Dia_%28logiciel%29), Libreoffice, Microsoft Visio, ... Mais pour le moment je ne suis pas satisfait de ceux que j'ai utilisés. Je voudrais les possibilités suivantes : - créer un acteur ou le détruire au cours du temps - croiser les échanges de messages - perdre un message - indiquer l'expiration d'un temps imparti (timeout) - faire une mise en page du dessin sans dessiner (j'entends par là que je ne veux pas passer trop de temps à déplacer à la souris les éléments pour les aligner ou les relier, et puis tout décaler un par un parce que j'ai inséré un nouvel acteur en plein milieu, ...) - avoir un logiciel gratuit et open-source Si quelqu'un connaît un tel logiciel, je suis preneur. ## Et alors ? En attendant j'ai fait un prototype d'un tel logiciel que j'appelle pour le moment "meseq" sur le principe de mscgen : - on écrit un fichier texte décrivant le scénario - meseq génère une image PNG à partir de ce fichier L'avantage de cette approche est la simplicité et la rapidité de développement de l'outil, mais l'inconvénient est que c'est moins ergonomique qu'un éditeur avec rendu WYSIWYG. J'ai mis au point une syntaxe rudimentaire pour le fichier d'entrée. Je sais déjà que je vais la modifier pour la rendre plus évolutive. Voici un exemple pour illustrer cette syntaxe (fichier .msq) : ``` [init] actors w3client proxy "" w3server [scenario] w3client -> proxy CONNECT w3client <- proxy OK w3client -> proxy bytes proxy -> w3server bytes : w3client <-> w3server "TLS Handshake\nwhat follows is ciphered" : : w3client -> proxy "GET /index.html" proxy -> w3server "GET /index.html" proxy <- w3server "200, index.html" w3client <- proxy "200, index.html" ``` Et voici l'image générée par meseq (plus complète que l'exemple ci-dessus) :  Autre exemple, avec flèches qui se croisent, etc. :  ## Show me the prototype Ce prototype est là pour étudier la faisabilité, présenter mes idées, et expérimenter. Bon, il est codé vite et mal : non documenté, buggué, mal structuré,... Bref, un vrai code de goret. Ce prototype et les exemples sont sur Github : https://github.com/goeb/meseq On utilise les bibliothèques [Cairo](https://fr.wikipedia.org/wiki/Cairo_%28logiciel%29) et [Pango](https://fr.wikipedia.org/wiki/Pango) pour dessiner, écrire le texte, puis générer l'image. Elles sont relativement simples à utiliser. Il existe d'autres bibliothèques pour dessiner, que je n'ai pas étudiées (et je ne suis pas sûr qu'il existe un moyen simple de les utiliser en Python) : - [libgd](https://libgd.github.io/), utilisée par mscgen - les bibliothèques sous-jacentes de Graphviz (dont le rendu est agréable) ## Pour la suite Les améliorations à faire sont : - améliorer le rendu (diagramme plus compact verticalement, réduire les conflits de textes qui se superposent,...) - ajouter des visuels (bloc de commentaire, couleurs, ...) - augmenter la qualité de code - choisir une licence open-source Par la suite je porterai peut-être ce programme en C ou C++, afin qu'il soit plus facile d'accès pour les personnes ne disposant pas de Python sur leur poste (je pense aux personnes lambda sur OS Windows). Afin d'orienter les choix qui restent à faire, je serais intéressé par les avis éclairés des lecteurs de LinuxFR : - utilisez-vous les diagrammes de séquences ? - quels éléments visuels trouvez-vous indispensables, et pour représenter quoi ? - faut-il rester en Python ou passer en C ou C++ ?