{"id":90,"date":"2023-04-10T20:10:23","date_gmt":"2023-04-10T18:10:23","guid":{"rendered":"https:\/\/zoominandout.fr\/?p=90"},"modified":"2023-04-10T20:14:14","modified_gmt":"2023-04-10T18:14:14","slug":"un-si-vraiment-modulaire","status":"publish","type":"post","link":"https:\/\/zoominandout.fr\/index.php\/2023\/04\/10\/un-si-vraiment-modulaire\/","title":{"rendered":"Un SI vraiment modulaire ?"},"content":{"rendered":"\n<p>La modularit\u00e9 compte parmi les propri\u00e9t\u00e9s importantes d&rsquo;un syst\u00e8me d&rsquo;information, car elle facilite d&rsquo;autres caract\u00e9ristiques tr\u00e8s appr\u00e9ciables :<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>L&rsquo;\u00e9volutivit\u00e9 pour ajouter, supprimer, adapter ou remplacer une zone du SI de fa\u00e7on autonome, sans engager de changement radical sur l&rsquo;ensemble du SI ou une grande partie (aussi connue comme refonte ou <em>big bang<\/em>)<\/li>\n\n\n\n<li>La modernisation &#8211; ou le traitement de l&rsquo;obsolescence &#8211; pour remettre une zone du SI en conformit\u00e9 avec les exigences de maintien en condition op\u00e9rationnelle ind\u00e9pendamment des autres zones.<\/li>\n<\/ul>\n\n\n\n<p>Beaucoup de syst\u00e8mes pr\u00e9tendent \u00e0 \u00eatre modulaire. Pourtant, ce n&rsquo;est pas le cas en pratique. La raison est que l&rsquo;on confond modularit\u00e9 avec d\u00e9coupage, classement ou encore cartographie. \u00catre en mesure de ranger les applications dans des zones, quartiers ou \u00eelots ne suffit pas \u00e0 garantir la modularit\u00e9. <\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"530\" height=\"310\" src=\"https:\/\/zoominandout.fr\/wp-content\/uploads\/2023\/04\/modularite-et-decoupage.png\" alt=\"\" class=\"wp-image-91\" srcset=\"https:\/\/zoominandout.fr\/wp-content\/uploads\/2023\/04\/modularite-et-decoupage.png 530w, https:\/\/zoominandout.fr\/wp-content\/uploads\/2023\/04\/modularite-et-decoupage-300x175.png 300w\" sizes=\"auto, (max-width: 530px) 85vw, 530px\" \/><figcaption class=\"wp-element-caption\">Modularit\u00e9 versus D\u00e9coupage<\/figcaption><\/figure>\n\n\n\n<p>La raison vient que les processus se croisent dans le plan applicatif (g\u00e9n\u00e9ralement la chaine de valeur est orthogonale \u00e0 l&rsquo;organisation des fonctions de l&rsquo;entreprise) et de l\u00e0 nait un entrem\u00ealement qui va naturellement contre la modularit\u00e9. La modularit\u00e9 n&rsquo;est donc pas automatique et d\u00e9pend d&rsquo;un travail conscient de conception. <\/p>\n\n\n\n<p>La travers\u00e9e des applications par les processus se traduit par des flux. La modularit\u00e9 vient donc des caract\u00e9ristiques issues de ces flux : <\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Au niveau unitaire, la <strong>qualit\u00e9 du contrat de service<\/strong>, d\u00e9finissant les attendus et les contraintes applicables au flux<\/li>\n\n\n\n<li>Au niveau global, le <strong>niveau d&rsquo;acyclicit\u00e9 dans le graphe des flux<\/strong>, c&rsquo;est-\u00e0-dire la densit\u00e9 des d\u00e9pendances circulaires. <\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Le bon contrat de service (MaRTiN)<\/h2>\n\n\n\n<p>Le flux contribue \u00e0 la modularit\u00e9 du SI s&rsquo;il r\u00e9pond \u00e0 un contrat de service qui a de bonnes propri\u00e9t\u00e9s :<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>M<\/strong>ont\u00e9e en charge (ou scalabilit\u00e9) : le consommateur peut demander un accroissement du d\u00e9bit du flux \u00e0 condition de respecter le <em>capacity planning<\/em> du producteur.<\/li>\n\n\n\n<li><strong>R<\/strong>\u00e9trocompatibilit\u00e9 : le consommateur du flux peut converser avec le producteur dans une version plus ancienne. <\/li>\n\n\n\n<li><strong>T<\/strong>ol\u00e9rance \u00e0 la latence : la communication entre le producteur du flux et le consommateur du flux peut se faire avec des conditions larges de synchronicit\u00e9 (voir se faire en asynchrone).<\/li>\n\n\n\n<li><strong d__=\"\">N<\/strong>\u00e9cessaire et suffisant : les donn\u00e9es \u00e9chang\u00e9es sont n\u00e9cessaires pour r\u00e9pondre au cas d&rsquo;usage sans d\u00e9voiler plus que n\u00e9cessaire l&rsquo;encapsulation du producteur.<\/li>\n<\/ul>\n\n\n\n<p>Un moyen mn\u00e9motechnique est de se demander si notre contrat de service est bien MaRTiN !<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"816\" height=\"849\" src=\"https:\/\/zoominandout.fr\/wp-content\/uploads\/2023\/04\/le-bon-contrat-.png\" alt=\"\" class=\"wp-image-92\" srcset=\"https:\/\/zoominandout.fr\/wp-content\/uploads\/2023\/04\/le-bon-contrat-.png 816w, https:\/\/zoominandout.fr\/wp-content\/uploads\/2023\/04\/le-bon-contrat--288x300.png 288w, https:\/\/zoominandout.fr\/wp-content\/uploads\/2023\/04\/le-bon-contrat--768x799.png 768w\" sizes=\"auto, (max-width: 709px) 85vw, (max-width: 909px) 67vw, (max-width: 984px) 61vw, (max-width: 1362px) 45vw, 600px\" \/><figcaption class=\"wp-element-caption\">Le contrat de service MaRTiN<\/figcaption><\/figure>\n\n\n\n<p>On peut se convaincre que ces propri\u00e9t\u00e9s sont bien utiles :<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>La mont\u00e9e en charge est n\u00e9cessaire pour supporter un cas d&rsquo;usage qui s&rsquo;ajoute ou se d\u00e9veloppe.<\/li>\n\n\n\n<li>La r\u00e9trocompatibilit\u00e9 permet de faire \u00e9voluer un composant sans propager les changements.<\/li>\n\n\n\n<li>La tol\u00e9rance \u00e0 la latence permet de localiser un composant plus ou moins pr\u00e8s d&rsquo;un autre avec qui il communique. On pourra penser aux contraintes pos\u00e9es par le <em>Cloud hybride<\/em>, l&rsquo;<em>Edge<\/em>, &#8230;<\/li>\n\n\n\n<li>Enfin, la derni\u00e8re propri\u00e9t\u00e9 demande un effort particulier de conception : assez pour transmettre la charge utile d&rsquo;information, pas trop pour ne pas compromettre l&rsquo;encapsulation des applications. <\/li>\n<\/ul>\n\n\n\n<p>Id\u00e9alement, les applications communiquent au travers de bons contrats de service. H\u00e9las, ce n&rsquo;est qu&rsquo;un id\u00e9al. Il n&rsquo;y a pas d&rsquo;alignement d&rsquo;int\u00e9r\u00eat entre les \u00e9diteurs d&rsquo;applications et les int\u00e9grateurs d&rsquo;applications : les premiers recherchent la valeur ajout\u00e9e fonctionnelle quand les seconds s&rsquo;int\u00e9ressent \u00e0 la continuit\u00e9 du SI. Quand le SI est le produit d&rsquo;un patchwork de logiciels, il n&rsquo;y a donc pas de raison particuli\u00e8re que les flux suivent de bons contrats. <\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Casser les contrats pour faire \u00e9voluer le SI<\/h2>\n\n\n\n<p>Dans un monde concret, les contrats doivent \u00eatre cass\u00e9s pour permettre l&rsquo;\u00e9volution du SI. Tout n&rsquo;est pas perdu ! Si les flux respectent l&rsquo;acyclicit\u00e9, il est alors possible de casser les contrats sans d\u00e9stabiliser le SI. On pourrait parler de <em d__=\"\">modularit\u00e9 faible<\/em>. Il est temps d&rsquo;aborder la seconde caract\u00e9ristique utile des flux : l&rsquo;acyclicit\u00e9. <\/p>\n\n\n\n<p>Les flux correspondent \u00e0 des flots de donn\u00e9es allant des producteurs vers les consommateurs. Quand les flux vont dans le m\u00eame sens, il est alors possible de casser les contrats dans le m\u00eame ordre et d&rsquo;avoir un SI coh\u00e9rent \u00e0 chaque \u00e9tape. \u00c0 l&rsquo;inverse, quand les flux refluent et forment des cycles, casser le contrat am\u00e8ne au dilemme suivant : mettre \u00e0 jour l&rsquo;ensemble du cycle (et faire une op\u00e9ration g\u00e9n\u00e9ralement crainte de bonne raison, le <em d__=\"\">big bang<\/em>) ou accepter d&rsquo;avoir un SI instable pendant une certaine p\u00e9riode de temps. Les flux peuvent \u00eatre organis\u00e9es selon un Graphe Acyclique Dirig\u00e9 (<em>Directed Acyclic Graph<\/em>, DAG), un graphe complet  ou une situation interm\u00e9diaire entre ces deux cas extr\u00eames avec plus ou moins de d\u00e9pendances circulaires. <\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"803\" height=\"332\" src=\"https:\/\/zoominandout.fr\/wp-content\/uploads\/2023\/04\/DAG-et-dependances-circulaires-.png\" alt=\"\" class=\"wp-image-93\" srcset=\"https:\/\/zoominandout.fr\/wp-content\/uploads\/2023\/04\/DAG-et-dependances-circulaires-.png 803w, https:\/\/zoominandout.fr\/wp-content\/uploads\/2023\/04\/DAG-et-dependances-circulaires--300x124.png 300w, https:\/\/zoominandout.fr\/wp-content\/uploads\/2023\/04\/DAG-et-dependances-circulaires--768x318.png 768w\" sizes=\"auto, (max-width: 709px) 85vw, (max-width: 909px) 67vw, (max-width: 984px) 61vw, (max-width: 1362px) 45vw, 600px\" \/><figcaption class=\"wp-element-caption\">Organisation des flux<\/figcaption><\/figure>\n\n\n\n<p>Un moyen pour pouvoir \u00e9valuer la situation courante est de faire une analyse DSM (<em>Dependency Structure Matrix<\/em>) en consid\u00e9rant les flux de donn\u00e9es entre les n\u0153uds applicatifs. Les flux sont rang\u00e9s dans une matrice. L&rsquo;algorithme DSM vise \u00e0 arranger l&rsquo;ordre des n\u0153uds applicatifs pour rendre la matrice aussi triangulaire que possible. Si elle est triangulaire, bravo, il n&rsquo;y a pas de d\u00e9pendance circulaire. Vous avez m\u00eame deux enchainements possibles pour remanier le SI tout en ayant des \u00e9tapes interm\u00e9diaires stables. \u00c0 l&rsquo;inverse, si la matrice est remplie, le SI est analogue \u00e0 un sac de n\u0153ud (ou un <em>big ball of mud<\/em>, comme disent nos amis anglo-saxons).<\/p>\n\n\n\n<p>Pour se convaincre de l&rsquo;analogie entre la triangularisation de la matrice DSM et de l&rsquo;absence de d\u00e9pendance circulaire, prenons l&rsquo;exemple suivant : l&rsquo;application A envoie un flux vers l&rsquo;application B\u202f; B envoie un flux vers C et C renvoie un flux vers A. Toutes les applications \u00e9mettent un flux vers elles-m\u00eames, naturellement. On constate un cycle de d\u00e9pendance.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"551\" height=\"253\" src=\"https:\/\/zoominandout.fr\/wp-content\/uploads\/2023\/04\/exemple-de-graphe-de-dependances.png\" alt=\"\" class=\"wp-image-94\" srcset=\"https:\/\/zoominandout.fr\/wp-content\/uploads\/2023\/04\/exemple-de-graphe-de-dependances.png 551w, https:\/\/zoominandout.fr\/wp-content\/uploads\/2023\/04\/exemple-de-graphe-de-dependances-300x138.png 300w\" sizes=\"auto, (max-width: 551px) 85vw, 551px\" \/><figcaption class=\"wp-element-caption\">Un exemple de graphe de d\u00e9pendance<\/figcaption><\/figure>\n\n\n\n<p>Maintenant, traduisons ce graphe dans une matrice de d\u00e9pendance. On constate qu&rsquo;on ne peut pas la triangulariser, c&rsquo;est-\u00e0-dire faire que toutes les cases coch\u00e9es soient au-dessus ou en dessous de la diagonale de la matrice. Si on casse le contrat de A vers B, alors l&rsquo;impact concerne A, B, mais aussi C et doit \u00eatre instruit <em>simultan\u00e9ment <\/em>pour maintenir la coh\u00e9rence de l&rsquo;ensemble.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"783\" height=\"493\" src=\"https:\/\/zoominandout.fr\/wp-content\/uploads\/2023\/04\/matrice-DSM.png\" alt=\"\" class=\"wp-image-95\" srcset=\"https:\/\/zoominandout.fr\/wp-content\/uploads\/2023\/04\/matrice-DSM.png 783w, https:\/\/zoominandout.fr\/wp-content\/uploads\/2023\/04\/matrice-DSM-300x189.png 300w, https:\/\/zoominandout.fr\/wp-content\/uploads\/2023\/04\/matrice-DSM-768x484.png 768w\" sizes=\"auto, (max-width: 709px) 85vw, (max-width: 909px) 67vw, (max-width: 984px) 61vw, (max-width: 1362px) 45vw, 600px\" \/><figcaption class=\"wp-element-caption\">Matrice DSM<\/figcaption><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Les surfaces des contrats de services sont plus grandes qu&rsquo;on ne le pense.<\/h2>\n\n\n\n<p>Les surfaces de contact entre les applications sont souvent plus grandes qu&rsquo;on ne le pense. C&rsquo;est aussi une des raisons dans mon exp\u00e9rience qui explique le d\u00e9calage entre la perception des acteurs sur la modularit\u00e9 de leur SI et la r\u00e9alit\u00e9. Il arrive que les acc\u00e8s aux donn\u00e9es puissent se faire en dehors de la couche de service. Par exemple, une application tierce peut avoir un acc\u00e8s direct sur la base de donn\u00e9e, rendant caduque son encapsulation au passage. Un cas plus subtil est quand l&rsquo;application exporte sa base de donn\u00e9es dans un lac de donn\u00e9es, son contrat de service s&rsquo;\u00e9tend <em>de facto<\/em> au sch\u00e9ma de la base de donn\u00e9es. Nous pouvons un cas combin\u00e9 de surface large et de d\u00e9pendance circulaire quand les applications ont un acc\u00e8s aux autres bases de donn\u00e9es.  Cette situation, tr\u00e8s d\u00e9favorable, n&rsquo;est malheureusement pas rare. Elle s&rsquo;explique souvent par une strat\u00e9gie opportuniste dans la dur\u00e9e.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"722\" height=\"628\" src=\"https:\/\/zoominandout.fr\/wp-content\/uploads\/2023\/04\/surface-de-contrat.png\" alt=\"\" class=\"wp-image-96\" srcset=\"https:\/\/zoominandout.fr\/wp-content\/uploads\/2023\/04\/surface-de-contrat.png 722w, https:\/\/zoominandout.fr\/wp-content\/uploads\/2023\/04\/surface-de-contrat-300x261.png 300w\" sizes=\"auto, (max-width: 709px) 85vw, (max-width: 909px) 67vw, (max-width: 984px) 61vw, (max-width: 1362px) 45vw, 600px\" \/><figcaption class=\"wp-element-caption\">Extensions de surface de contrat non d\u00e9sir\u00e9es !<\/figcaption><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Conclusion<\/h2>\n\n\n\n<p>La modularit\u00e9 du SI est le produit de la qualit\u00e9 des contrats de service et de l&rsquo;organisation des flux dans le SI. Elle d\u00e9pend d&rsquo;un travail soutenu de conception (et d&rsquo;architecture !). <\/p>\n\n\n\n<p>La modularit\u00e9 n&rsquo;est jamais acquise : elle est fr\u00e9quemment la premi\u00e8re victime de l&rsquo;entropie du SI. Bien souvent, la d\u00e9gradation de la modularit\u00e9 se fait sans la prise de conscience des acteurs.  \u00c0 plusieurs reprises, j&rsquo;ai vu des responsables \u00eatre effar\u00e9es par le sac de n\u0153uds derri\u00e8re un SI pourtant bien ordonn\u00e9 d&rsquo;un point de vue externe : l&rsquo;acceptation passe alors par les phases du deuil. <\/p>\n\n\n\n<p>Accessoirement, l&rsquo;analyse de la modularit\u00e9 d&rsquo;un SI est le seul cas d&rsquo;usage o\u00f9 j&rsquo;ai fait appel \u00e0 l&rsquo;alg\u00e8bre dans mes activit\u00e9s d&rsquo;architecte. Rien que pour \u00e7a, cela m\u00e9ritait de s&rsquo;y pencher !<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Comment savoir si son SI est vraiment modulaire ? Souvent, on le croit \u00e0 tort.<br \/>\nCet article explique les points \u00e0 consid\u00e9rer dans l&rsquo;\u00e9valuation de la modularit\u00e9 de son SI. <\/p>\n","protected":false},"author":1,"featured_media":98,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[5],"tags":[],"class_list":["post-90","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-general"],"_links":{"self":[{"href":"https:\/\/zoominandout.fr\/index.php\/wp-json\/wp\/v2\/posts\/90","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/zoominandout.fr\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/zoominandout.fr\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/zoominandout.fr\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/zoominandout.fr\/index.php\/wp-json\/wp\/v2\/comments?post=90"}],"version-history":[{"count":3,"href":"https:\/\/zoominandout.fr\/index.php\/wp-json\/wp\/v2\/posts\/90\/revisions"}],"predecessor-version":[{"id":101,"href":"https:\/\/zoominandout.fr\/index.php\/wp-json\/wp\/v2\/posts\/90\/revisions\/101"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/zoominandout.fr\/index.php\/wp-json\/wp\/v2\/media\/98"}],"wp:attachment":[{"href":"https:\/\/zoominandout.fr\/index.php\/wp-json\/wp\/v2\/media?parent=90"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/zoominandout.fr\/index.php\/wp-json\/wp\/v2\/categories?post=90"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/zoominandout.fr\/index.php\/wp-json\/wp\/v2\/tags?post=90"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}