tag:linuxfr.org,2005:/tags/diagrammes_de_s%C3%A9quences/publicLinuxFr.org : les contenus étiquetés avec « diagrammes_de_séquences »2016-09-19T13:20:18+02:00/favicon.pngtag:linuxfr.org,2005:News/375452016-09-16T15:28:19+02:002016-09-19T11:14:44+02:00Écrire des diagrammes de séquencesLicence CC By‑SA http://creativecommons.org/licenses/by-sa/4.0/deed.fr<div><p>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.</p>
<p>Dans la seconde partie de la dépêche, après avoir expliqué leur principe de ces diagrammes, quelques logiciels existants seront listés et un nouveau venu sera présenté.</p></div><ul><li>lien nᵒ 1 : <a title="http://linuxfr.org/users/goeb/journaux/ecrire-des-diagrammes-de-sequences" hreflang="fr" href="https://linuxfr.org/redirect/98143">Journal à l’origine de la dépêche</a></li></ul><div><p>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.</p>
<p>Ces diagrammes comportent :</p>
<ul>
<li>des acteurs, avec leur ligne de vie (un acteur peut représenter une personne, une machine, un processus, un fil d’exécution…). La spécification UML utilise le terme de « participant » ;</li>
<li>des messages échangés entre acteurs.</li>
</ul><p>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 courriel.</p>
<h3 id="logiciels-existants">Logiciels existants</h3>
<p>Des outils logiciels existent, pour générer de tels diagrammes :</p>
<ul>
<li>éditeur de texte (ASCII <em>art</em>) ;</li>
<li>Mscgen (<a href="http://www.mcternan.me.uk/mscgen)%E2%80%AF">http://www.mcternan.me.uk/mscgen) </a>;</li>
<li>éditeurs dits UML ;</li>
<li>éditeurs SDL (<em>Specification and Description Language</em>) ;</li>
<li>éditeurs de diagrammes : <a href="https://fr.wikipedia.org/wiki/Dia_%28logiciel%29">Dia</a>, LibreOffice, Microsoft Visio, etc. ;</li>
<li>outils d’ingénierie système (<a href="https://www.polarsys.org/proposals/capella">Capella</a>…).</li>
</ul><p>Mais pour le moment, je ne suis pas satisfait de ceux que j’ai utilisés. Je voudrais les possibilités suivantes :</p>
<ul>
<li>créer un acteur ou le détruire au cours du temps ;</li>
<li>croiser les échanges de messages ;</li>
<li>perdre un message ;</li>
<li>indiquer l’expiration d’un temps imparti (<em>timeout</em>) ;</li>
<li>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…) ;</li>
<li>avoir un logiciel libre et gratuit.</li>
</ul><p>Si quelqu’un connaît un tel logiciel, je suis preneur.</p>
<h3 id="et-alors">Et alors ?</h3>
<p>En attendant, j’ai fait un prototype d’un tel logiciel, que j’appelle pour le moment <em>meseq</em> sur le principe de mscgen :</p>
<ul>
<li>on écrit un fichier texte décrivant le scénario ;</li>
<li>
<em>meseq</em> génère une image PNG à partir de ce fichier.</li>
</ul><p>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 <a href="https://fr.wikipedia.org/wiki/WYSIWYG" title="Définition Wikipédia">WYSIWYG</a>.</p>
<p>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.<br>
Voici un exemple pour illustrer cette syntaxe (fichier <code>.msq</code>) :</p>
<pre><code>[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"
</code></pre>
<p>Et voici l’image générée par <em>meseq</em> (plus complète que l’exemple ci‐dessus) :</p>
<p><img src="//img.linuxfr.org/img/68747470733a2f2f7261772e67697468756275736572636f6e74656e742e636f6d2f676f65622f6d657365712f6d61737465722f6578616d706c655f7765622e6d73712e706e67/example_web.msq.png" alt="example_web.msq.png" title="Source : https://raw.githubusercontent.com/goeb/meseq/master/example_web.msq.png"></p>
<p>Autre exemple, avec flèches qui se croisent, etc. :</p>
<p><img src="//img.linuxfr.org/img/68747470733a2f2f7261772e67697468756275736572636f6e74656e742e636f6d2f676f65622f6d657365712f6d61737465722f6578616d706c655f70696767796261636b2e6d73712e706e67/example_piggyback.msq.png" alt="example_piggyback.msq.png" title="Source : https://raw.githubusercontent.com/goeb/meseq/master/example_piggyback.msq.png"></p>
<h3 id="show-me-the-prototype">Show me the prototype</h3>
<p>Ce prototype est là pour étudier la faisabilité, présenter mes idées et expérimenter.<br>
Bon, il est codé vite et mal : non documenté, bogué, mal structuré… Bref, un vrai code de goret.</p>
<p>Ce prototype et les exemples sont sur Github : <a href="https://github.com/goeb/meseq">https://github.com/goeb/meseq</a>.</p>
<p>On utilise les bibliothèques <a href="https://fr.wikipedia.org/wiki/Cairo_%28logiciel%29">Cairo</a> et <a href="https://fr.wikipedia.org/wiki/Pango">Pango</a> pour dessiner, écrire le texte, puis générer l’image. Elles sont relativement simples à utiliser.</p>
<p>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) :</p>
<ul>
<li>
<a href="https://libgd.github.io/"><em>libgd</em></a>, utilisée par <em>mscgen</em> ;</li>
<li>les bibliothèques sous‐jacentes de Graphviz (dont le rendu est agréable).</li>
</ul><h3 id="pour-la-suite">Pour la suite</h3>
<p>Les améliorations à faire sont :</p>
<ul>
<li>améliorer le rendu (diagramme plus compact verticalement, réduire les conflits de textes qui se superposent…) ;</li>
<li>ajouter des visuels (bloc de commentaire, couleurs…) ;</li>
<li>augmenter la qualité de code ;</li>
<li>choisir une licence libre.</li>
</ul><p>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 système d’exploitation Windows).</p>
<p>Afin d’orienter les choix qui restent à faire, je serais intéressé par les avis éclairés des lecteurs de <em>LinuxFr.org</em> :</p>
<ul>
<li>utilisez‐vous les diagrammes de séquences ?</li>
<li>quels éléments visuels trouvez‐vous indispensables, et pour représenter quoi ?</li>
<li>faut‐il rester en Python ou passer en C ou C++ ?</li>
</ul><p><strong>N. D. M. :</strong> voici une liste des liens apparus dans les commentaires du journal :</p>
<ul>
<li>sdedit (BSD) pour créer des diagrammes de séquences équivalents <a href="http://sdedit.sourceforge.net/">http://sdedit.sourceforge.net/</a> ;</li>
<li>PlantUML (GPL) <a href="https://en.m.wikipedia.org/wiki/PlantUML">https://en.m.wikipedia.org/wiki/PlantUML</a> ;</li>
<li>Web Sequence Diagrams (service en ligne via un logiciel propriétaire ?) <a href="https://www.websequencediagrams.com/">https://www.websequencediagrams.com/</a> ;</li>
<li>Msc-generator (AGPL) <a href="https://sites.google.com/site/mscgen2393/">https://sites.google.com/site/mscgen2393/</a> ;</li>
<li>Runway Systems (MIT) <a href="https://runway.systems/">https://runway.systems/</a> ;</li>
<li>Seqdiag (APLv2) <a href="http://blockdiag.com/en/seqdiag/">http://blockdiag.com/en/seqdiag/</a> ;</li>
<li>Blueprint (CeCILL-B) <a href="https://github.com/michipili/blueprint">https://github.com/michipili/blueprint</a> ;</li>
<li>Mermaid (MIT) <a href="http://knsv.github.io/mermaid/">http://knsv.github.io/mermaid/</a> ;</li>
<li>Markdeep (BSD) <a href="http://casual-effects.com/markdeep/">http://casual-effects.com/markdeep/</a>.</li>
</ul></div><div><a href="https://linuxfr.org/news/ecrire-des-diagrammes-de-sequences.epub">Télécharger ce contenu au format EPUB</a></div> <p>
<strong>Commentaires :</strong>
<a href="//linuxfr.org/nodes/110044/comments.atom">voir le flux Atom</a>
<a href="https://linuxfr.org/news/ecrire-des-diagrammes-de-sequences#comments">ouvrir dans le navigateur</a>
</p>
goebDavy DefaudBenoît Sibaudjcr83palm123https://linuxfr.org/nodes/110044/comments.atom