{"id":2867,"date":"2025-05-13T11:00:00","date_gmt":"2025-05-13T09:00:00","guid":{"rendered":"https:\/\/wp.unil.ch\/newsci\/?p=2867"},"modified":"2025-11-12T13:55:13","modified_gmt":"2025-11-12T12:55:13","slug":"modernisation-sylvia-une-histoire-de-recettes","status":"publish","type":"post","link":"https:\/\/wp.unil.ch\/newsci\/modernisation-sylvia-une-histoire-de-recettes\/","title":{"rendered":"Modernisation Sylvia \u2013 une histoire de recettes"},"content":{"rendered":"\n<h2 class=\"wp-block-heading\">Et si Sylvia \u00e9tait un livre de cuisine<\/h2>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-9d6595d7 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:66.66%\">\n<p>Vos parents vous ont l\u00e9gu\u00e9 leur cahier de recettes de cuisine, qu\u2019ils tenaient eux-m\u00eames de leurs parents. Chaque recette, gentiment anarchique, y est d\u00e9crite selon l\u2019inspiration et les connaissances de leur auteur\u00b7e. Les ingr\u00e9dients sont parfois list\u00e9s, parfois il faut les d\u00e9duire en lisant toutes les instructions. Les dur\u00e9es de cuisson parcourent tout le spectre de pr\u00e9cision allant de \u00ab&nbsp;2,5 minutes&nbsp;\u00bb \u00e0 \u00ab&nbsp;pas trop longtemps&nbsp;\u00bb. Certaines manipulations ne sont m\u00eame pas d\u00e9crites, \u00e0 vous de savoir comment monder les amandes ou de connaitre la diff\u00e9rence entre <em>faire revenir<\/em> et <em>rissoler<\/em>.<\/p>\n\n\n\n<p>Pourtant, vous savez que c\u2019est sur la base de ce livre que tous les plats que vous adorez ont \u00e9t\u00e9 pr\u00e9par\u00e9s. Les recettes ont fait leurs preuves et vous souhaitez continuer \u00e0 vous en servir. Mais comment vous y retrouver dans ce fouillis&nbsp;? Et comment pr\u00e9venir vos enfants, qui souhaitent \u00e9galement cuisiner, que toutes les fois o\u00f9 il est fait mention de sauce b\u00e9chamel, la nouvelle tendance familiale privil\u00e9gie l\u2019huile \u00e0 la place du beurre pour la r\u00e9aliser&nbsp;?<\/p>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:33.33%\">\n<div class=\"wp-block-group has-light-background-background-color has-background\"><div class=\"wp-block-group__inner-container is-layout-constrained wp-block-group-is-layout-constrained\">\n<h5 class=\"wp-block-heading\"><em>R\u00f6stis&nbsp;de Grand-Papa <\/em><\/h5>\n\n\n\n<p>Peler suffisamment de patates pour 4 personnes, les r\u00e2per et les faire revenir dans du gras avec un peu de sel jusqu\u2019\u00e0 ce qu\u2019elles deviennent dor\u00e9es en touillant de temps en temps. Faire une galette et servir chaud.<\/p>\n\n\n\n<p class=\"has-small-font-size\"><em>Une recette \u00ab\u00a0p\u00eale-m\u00eale\u00a0\u00bb, \u00e0 l&rsquo;ancienne<\/em><\/p>\n<\/div><\/div>\n<\/div>\n<\/div>\n\n\n\n<h2 class=\"wp-block-heading\">Du vieux cahier au recueil professionnel<\/h2>\n\n\n\n<p>Ces d\u00e9fis sont exactement ceux auxquels notre \u00e9quipe de d\u00e9veloppeurs a d\u00e9cid\u00e9 de s\u2019attaquer, dans le cadre du programme de modernisation de Sylvia, notre intranet administratif.<\/p>\n\n\n\n<p>Le code derri\u00e8re chaque page de l\u2019intranet \u00e9tait \u00e0 l\u2019image des recettes familiales&nbsp;: on y trouvait p\u00eale-m\u00eale les ingr\u00e9dients (donn\u00e9es), les instructions de pr\u00e9paration (logique de traitement) et m\u00eame la fa\u00e7on de dresser les assiettes (pr\u00e9sentation \u00e0 l\u2019\u00e9cran). Tout ceci fonctionne, mais quel casse-t\u00eate pour y corriger les \u00e9ventuels bugs ou pour introduire des nouveaut\u00e9s&nbsp;!<\/p>\n\n\n\n<p>L&rsquo;\u00e9quipe a donc d\u00e9cid\u00e9 de transformer le vieux cahier de recettes en un livre de cuisine professionnel, bien structur\u00e9 selon un standard en informatique appel\u00e9 \u00ab&nbsp;Model-View-Presenter (MVP)&nbsp;\u00bb :<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Les \u00ab\u00a0Model\u00a0\u00bb (mod\u00e8les) : comme une liste organis\u00e9e d&rsquo;ingr\u00e9dients et leurs propri\u00e9t\u00e9s<\/li>\n\n\n\n<li>Les \u00ab\u00a0View\u00a0\u00bb (vues) : la pr\u00e9sentation finale du plat dans l&rsquo;assiette<\/li>\n\n\n\n<li>Les \u00ab\u00a0Presenter\u00a0\u00bb : les instructions \u00e0 ex\u00e9cuter pour transformer les ingr\u00e9dients en plat pr\u00e9sentable.<\/li>\n<\/ul>\n\n\n\n<p>Cette r\u00e9organisation permet de standardiser les recettes. Si cette fameuse sauce b\u00e9chamel change, on ne modifie qu&rsquo;une seule \u00ab\u00a0fiche ingr\u00e9dient\u00a0\u00bb et toutes les recettes qui l&rsquo;utilisent sont automatiquement mises \u00e0 jour.<\/p>\n\n\n\n<div class=\"wp-block-group has-electric-grass-gradient-background has-background\"><div class=\"wp-block-group__inner-container is-layout-constrained wp-block-group-is-layout-constrained\">\n<p>Cette r\u00e9organisation du code est \u00e9galement appel\u00e9e refactorisation. Elle constitue l\u2019un des trois axes strat\u00e9giques de la modernisation de Sylvia, les deux autres \u00e9tant l\u2019externalisation (trier, sortir de Sylvia ce qui n\u2019a pas trait \u00e0 la gestion acad\u00e9mique) et la satellisation (revoir la communication entre Sylvia et les autres applications qui ont besoin de ses donn\u00e9es). Plus de d\u00e9tails sur les articles de ce blog du <a href=\"https:\/\/wp.unil.ch\/newsci\/modernisation-sylvia-feuille-de-route-2023\/\">3 mars 2023<\/a> et du <a href=\"https:\/\/wp.unil.ch\/newsci\/modernisation-sylvia-etat-a-mi-2024\/\">1er octobre 2024<\/a>.<\/p>\n<\/div><\/div>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-9d6595d7 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<h2 class=\"wp-block-heading\">D\u00e9fis et b\u00e9n\u00e9fices<\/h2>\n\n\n\n<p>\u00c9videmment, il n\u2019\u00e9tait pas question de cesser de cuisiner (mettre Sylvia hors service) le temps de restructurer le livre de recettes&nbsp;!<\/p>\n\n\n\n<p>L\u2019\u00e9quipe a ainsi cr\u00e9\u00e9 un syst\u00e8me ing\u00e9nieux de \u00ab\u00a0traducteurs culinaires\u00a0\u00bb, qui permettent de lire les anciennes recettes avec la nouvelle m\u00e9thode, le temps de restructurer ces derni\u00e8res petit \u00e0 petit. Tout cela sans que personne ne remarque la diff\u00e9rence dans son assiette.<\/p>\n\n\n\n<p>Au final, apr\u00e8s presque 18 mois de travail patient, les r\u00e9sultats sont all\u00e9chants&nbsp;:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Le \u00ab&nbsp;livre de cuisine num\u00e9rique&nbsp;\u00bb est d\u00e9sormais parfaitement organis\u00e9<\/li>\n\n\n\n<li>De nouvelles recettes (fonctionnalit\u00e9s) peuvent \u00eatre ajout\u00e9es facilement<\/li>\n\n\n\n<li>Les anciennes recettes restent pertinentes en attendant d\u2019\u00eatre r\u00e9\u00e9crites<\/li>\n\n\n\n<li>Les nouveaux\u00b7elles cuisiniers\u00b7\u00e8res (d\u00e9veloppeuses et d\u00e9veloppeurs) trouvent rapidement leurs rep\u00e8res<\/li>\n\n\n\n<li>Les ingr\u00e9dients (composants logiciels) peuvent \u00eatre r\u00e9utilis\u00e9s dans diff\u00e9rentes recettes<\/li>\n<\/ul>\n\n\n\n<p>Les convives (utilisatrices et utilisateurs) n&rsquo;ont rien remarqu\u00e9 dans leur exp\u00e9rience quotidienne.<\/p>\n\n\n\n<p>Un grand bravo aux chef\u00b7fes num\u00e9riques de l\u2019\u00e9quipe Legacy qui ont su transformer leur cuisine informatique sans laisser personne sur sa faim&nbsp;!<\/p>\n\n\n\n<p>Apr\u00e8s cet immense travail qu\u2019a repr\u00e9sent\u00e9 la r\u00e9vision de la logique des recettes, il s\u2019agit d\u00e9sormais de finaliser&nbsp;: \u00e0 chaque fois que l\u2019\u00e9quipe cuisinera un repas, la recette correspondante devra \u00eatre r\u00e9\u00e9crite selon la nouvelle norme, afin de pouvoir se passer des \u00ab&nbsp;traducteurs&nbsp;\u00bb. Avec les 46 recettes comprises dans notre recueil, cela prendra du temps&nbsp;; mais comme pour tout ce qu\u2019on laisse longtemps mijoter, le r\u00e9sultat n\u2019en sera que plus go\u00fbtu&nbsp;! &nbsp;<\/p>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<div class=\"wp-block-group has-light-background-background-color has-background\"><div class=\"wp-block-group__inner-container is-layout-constrained wp-block-group-is-layout-constrained\">\n<h3 class=\"wp-block-heading\"><em>R\u00f6stis<\/em><\/h3>\n\n\n\n<p>Nombre de personnes&nbsp;: 4<br>Temps : 15 minutes pr\u00e9paration + 30 minutes cuisson<br>Ustensiles&nbsp;: \u00e9plucheur, r\u00e2pe \u00e0 r\u00f6stis, po\u00eale, spatule<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Ingr\u00e9dients<\/th><th>Quantit\u00e9s<\/th><\/tr><\/thead><tbody><tr><td>Pommes de terre<\/td><td>800 g<\/td><\/tr><tr><td>Beurre<\/td><td>30 g<\/td><\/tr><tr><td>Sel <\/td><td>1 g<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p><strong>Pr\u00e9paration<\/strong><\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Action<\/th><th>Ingr\u00e9dients<\/th><th>Ustensile<\/th><th>Mani\u00e8re<\/th><\/tr><\/thead><tbody><tr><td>Peler<\/td><td>Pommes de terre<\/td><td>\u00c9plucher<\/td><td><\/td><\/tr><tr><td>R\u00e2per<\/td><td>Pommes de terre<\/td><td>R\u00e2pe \u00e0 r\u00f6stis<\/td><td><\/td><\/tr><tr><td>Fondre<\/td><td>Beurre<\/td><td>Po\u00eale<\/td><td>Feu moyenne intensit\u00e9<\/td><\/tr><tr><td>Ajouter<\/td><td>Pommes de terre<\/td><td>Po\u00eale<\/td><td><\/td><\/tr><tr><td>M\u00e9langer<\/td><td>Pommes de terre, beurre<\/td><td>Spatule<\/td><td>Toutes les 3 minutes<\/td><\/tr><tr><td>Arranger<\/td><td>Pommes de terre, beurre<\/td><td>Spatule<\/td><td>En forme de galette<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p><strong>Dressage&nbsp;: La galette est dor\u00e9e et se sert chaude.<\/strong><\/p>\n\n\n\n<p class=\"has-small-font-size\"><em>Recette restructur\u00e9e. Pour une analogie plus exacte, imaginez \u00e9galement un glossaire qui donne une d\u00e9finition de chacune des actions de la pr\u00e9paration.<\/em><\/p>\n<\/div><\/div>\n<\/div>\n<\/div>\n\n\n\n<figure class=\"wp-block-image alignwide size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"735\" src=\"https:\/\/wp.unil.ch\/newsci\/files\/2025\/05\/pg22168_progmodsylvia_articleblogci_2025_mvp_image-1024x735.jpg\" alt=\"Bonus : authentique recette d'un excellent g\u00e2teau au chocolat\" class=\"wp-image-2880\" srcset=\"https:\/\/wp.unil.ch\/newsci\/files\/2025\/05\/pg22168_progmodsylvia_articleblogci_2025_mvp_image-1024x735.jpg 1024w, https:\/\/wp.unil.ch\/newsci\/files\/2025\/05\/pg22168_progmodsylvia_articleblogci_2025_mvp_image-300x215.jpg 300w, https:\/\/wp.unil.ch\/newsci\/files\/2025\/05\/pg22168_progmodsylvia_articleblogci_2025_mvp_image-768x551.jpg 768w, https:\/\/wp.unil.ch\/newsci\/files\/2025\/05\/pg22168_progmodsylvia_articleblogci_2025_mvp_image-1536x1102.jpg 1536w, https:\/\/wp.unil.ch\/newsci\/files\/2025\/05\/pg22168_progmodsylvia_articleblogci_2025_mvp_image-540x388.jpg 540w, https:\/\/wp.unil.ch\/newsci\/files\/2025\/05\/pg22168_progmodsylvia_articleblogci_2025_mvp_image-1080x775.jpg 1080w, https:\/\/wp.unil.ch\/newsci\/files\/2025\/05\/pg22168_progmodsylvia_articleblogci_2025_mvp_image-1320x947.jpg 1320w, https:\/\/wp.unil.ch\/newsci\/files\/2025\/05\/pg22168_progmodsylvia_articleblogci_2025_mvp_image.jpg 1672w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption class=\"wp-element-caption\">Bonus : authentique recette d&rsquo;un excellent g\u00e2teau au chocolat<\/figcaption><\/figure>\n\n\n\n<div class=\"wp-block-group has-luminous-vivid-amber-to-luminous-vivid-orange-gradient-background has-background\"><div class=\"wp-block-group__inner-container is-layout-constrained wp-block-group-is-layout-constrained\">\n<p>Des questions, commentaires ou souhaits de pr\u00e9cisions techniques ? l\u2019\u00e9quipe du programme vous lira avec plaisir \u00e0 l\u2019adresse <a href=\"mailto:modernisation.sylvia@unil.ch\">modernisation.sylvia@unil.ch<\/a> !<\/p>\n\n\n\n<p>Pour les personnes qui auraient l\u2019app\u00e9tit pour des aspect plus techniques\u00a0: <\/p>\n\n\n\n<p><a href=\"https:\/\/medium.com\/unil-ci-software-engineering\/dompter-un-mastodonte-comment-mettre-en-place-des-tests-de-caract\u00e9risation-dans-un-syst\u00e8me-3a7974d56cec\">Dompter un mastodonte : Comment mettre en place des tests de caract\u00e9risation dans un syst\u00e8me Legacy ? &#8211; Le d\u00e9fi : Refactorisation d\u2019un code de presque 30 ans, sans interruption de service ni r\u00e9gression.<\/a><\/p>\n<\/div><\/div>\n\n\n\n<p><em>R\u00e9daction&nbsp;: RSI acad\u00e9mique avec remerciements \u00e0 L. D\u00e9caillet, E. Kestenholz et J. Rimaz pour les explications, et \u00e0 Claude.ai pour la structure et une ou deux formulations.<\/em><\/p>\n\n\n\n<div style=\"height:100px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p class=\"has-secondary-color has-text-color has-link-color has-small-font-size wp-elements-6b03ecf1715a0f254cbb74a4b1181480\"><br>Image d\u2019en-t\u00eate g\u00e9n\u00e9r\u00e9e avec DALL\u00b7E par <a href=\"https:\/\/zegwaart.ch\">Karim Khouw Zegwaart<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>D\u00e9couvrez le grand art de la modernisation invisible du syst\u00e8me de gestion administrative des \u00e9tudes, des \u00e9tudiantes et \u00e9tudiants de l\u2019UNIL (Sylvia) <\/p>\n","protected":false},"author":1001466,"featured_media":2877,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"template-full-width-cover.php","format":"standard","meta":{"_seopress_robots_primary_cat":"","_seopress_titles_title":"","_seopress_titles_desc":"","_seopress_robots_index":"","footnotes":""},"categories":[8],"tags":[18],"class_list":["post-2867","post","type-post","status-publish","format-standard","has-post-thumbnail","category-informatique-administrative","tag-affiche"],"_links":{"self":[{"href":"https:\/\/wp.unil.ch\/newsci\/wp-json\/wp\/v2\/posts\/2867","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wp.unil.ch\/newsci\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wp.unil.ch\/newsci\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wp.unil.ch\/newsci\/wp-json\/wp\/v2\/users\/1001466"}],"replies":[{"embeddable":true,"href":"https:\/\/wp.unil.ch\/newsci\/wp-json\/wp\/v2\/comments?post=2867"}],"version-history":[{"count":5,"href":"https:\/\/wp.unil.ch\/newsci\/wp-json\/wp\/v2\/posts\/2867\/revisions"}],"predecessor-version":[{"id":3064,"href":"https:\/\/wp.unil.ch\/newsci\/wp-json\/wp\/v2\/posts\/2867\/revisions\/3064"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wp.unil.ch\/newsci\/wp-json\/wp\/v2\/media\/2877"}],"wp:attachment":[{"href":"https:\/\/wp.unil.ch\/newsci\/wp-json\/wp\/v2\/media?parent=2867"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wp.unil.ch\/newsci\/wp-json\/wp\/v2\/categories?post=2867"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wp.unil.ch\/newsci\/wp-json\/wp\/v2\/tags?post=2867"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}