{"id":35,"date":"2023-04-01T09:40:00","date_gmt":"2023-04-01T07:40:00","guid":{"rendered":"https:\/\/malinssireglouglou.fr\/?p=35"},"modified":"2024-01-03T16:06:14","modified_gmt":"2024-01-03T15:06:14","slug":"des-tests-et-des-responsabilites","status":"publish","type":"post","link":"https:\/\/malinssireglouglou.fr\/?p=35","title":{"rendered":"Des tests et des responsabilit\u00e9s"},"content":{"rendered":"\n<h2 class=\"wp-block-heading\">TL;DR<\/h2>\n\n\n\n<p>Dans nos m\u00e9tiers, nous avons l&rsquo;habitude de classer les tests en fonction du p\u00e9rim\u00e8tre test\u00e9 (tests unitaires, d&rsquo;int\u00e9gration, fonctionnels), potentiellement en fonction de comment on test (en boite noire, en boite blanche, par fuzzing, par mutation), et on a une petite place suppl\u00e9mentaire pour les tests de performance, les tests d&rsquo;intrusions, voir deux trois petites choses \u00e0 cot\u00e9. Voil\u00e0. On a des tests, potentiellement pour diff\u00e9rentes raisons (facilit\u00e9 de developpement, bonnes pratiques, habitudes), les devs les \u00e9crivent lorsqu&rsquo;ils produisent les fonctionnalit\u00e9s ou lorsqu&rsquo;ils corrigent des bugs. Et c&rsquo;est tr\u00e8s bien.  Cet article a pour but de pr\u00e9senter une fa\u00e7on diff\u00e9rente d&rsquo;aborder les tests : les aborder par \u00abqui garanti quoi vis \u00e0 vis de qui ?\u00bb. Une fois qu&rsquo;on a r\u00e9pondu \u00e0 cette question \u00e7a change grandement la fa\u00e7on de cat\u00e9goriser les tests et la fa\u00e7on de le \u00e9crire.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Un exemple industriel<\/h2>\n\n\n\n<p>Mon approche sur les tests \u00e9tant lourdement influenc\u00e9e par mon exp\u00e9rience chez EDF, on va commencer par r\u00e9sumer grossi\u00e8rement comment fonctionne une centrale de production d&rsquo;\u00e9lectricit\u00e9.<\/p>\n\n\n\n<p>On va globalement s\u00e9parer les services en deux : le service conduite qui assure l&rsquo;exploitation du r\u00e9acteur (et donc la production \u00e9nergie) et les services de maintenance qui assurent les op\u00e9rations sur le mat\u00e9riel (en pr\u00e9ventif ou correctif). <\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Comment va se passer une op\u00e9ration de maintenance ? <\/h3>\n\n\n\n<p>Prenons un exemple.<\/p>\n\n\n\n<p>Pour une raison quelconque (anomalie constat\u00e9e, op\u00e9ration p\u00e9riodique&#8230;), il faut faire le contr\u00f4le d&rsquo;une pompe. Si on purge tous les \u00e9l\u00e9ments de proc\u00e9dure pour se concentrer sur ce qui nous int\u00e9resse : <\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>la conduite va poser des scell\u00e9s sur les disjoncteurs et vannes pour isoler la pompe du reste de l&rsquo;installation,<\/li>\n\n\n\n<li>les diff\u00e9rents services vont faire ce qu&rsquo;ils ont \u00e0 faire (d\u00e9brancher la pompe, retirer les capteurs, d\u00e9poser la pompe, la visiter, reposer la pompe, remettre les capteurs, etc)<\/li>\n<\/ul>\n\n\n\n<p>Et l\u00e0, avant de remettre le mat\u00e9riel en exploitation, il va y avoir deux choses \u00e0 faire : une requalification intrins\u00e8que et une requalification fonctionnelle.<\/p>\n\n\n\n<p>La requalification intrins\u00e8que est faite par le service de maintenance, alors que le mat\u00e9riel est encore isol\u00e9. C&rsquo;est une premi\u00e8re \u00e9tape de v\u00e9rification de la performance du mat\u00e9riel permettant de dire \u00abDe ce qu&rsquo;on peut \u00e9valuer en isolation, le mat\u00e9riel va fonctionner normalement\u00bb. Un peu comme lorsqu&rsquo;on a chang\u00e9 une chambre a air sur un v\u00e9lo, il est encore \u00e0 l&rsquo;envers sur le guidon, on v\u00e9rifie que le pneu est gonfl\u00e9 uniform\u00e9ment et on consid\u00e8re qu&rsquo;on peut faire un test plus pouss\u00e9.<\/p>\n\n\n\n<p>Si tout est bon, on va op\u00e9rer une requalification fonctionnelle. L\u00e0, l&rsquo;exploitant \u00e0 partir de ses connaissances sur le mat\u00e9riel et des contraintes auxquels il est soumis va d\u00e9cider de comment il test le mat\u00e9riel avant de le remettre en condition d&rsquo;exploitation. Un peu comme apr\u00e8s avoir remis le v\u00e9lo \u00e0 l&rsquo;endroit, on sautille sur le v\u00e9lo, on acc\u00e9l\u00e8re un coup puis on freine ; histoire de v\u00e9rifier que tout r\u00e9agit normalement avant de repartir \u00abpour de vrai\u00bb. <\/p>\n\n\n\n<p>L\u2019\u00e9l\u00e9ment que je tiens \u00e0 souligner dans cette requalification fonctionnelle, c&rsquo;est que c&rsquo;est l&rsquo;exploitant qui d\u00e9cide comment il teste le mat\u00e9riel avant de le remettre en exploitation. Ce qui est logique puisque c&rsquo;est lui qui est responsable de l&rsquo;exploitation. L&rsquo;autre \u00e9l\u00e9ment important qui est en filigrane est que l&rsquo;exploitant a besoin d&rsquo;avoir une excellente connaissance sur les \u00e9quipements.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Et les essais p\u00e9riodiques ? <\/h3>\n\n\n\n<p>Les essais p\u00e9riodiques sont&#8230; des essais&#8230; fait r\u00e9guli\u00e8rement&#8230; pour s&rsquo;assurer que l&rsquo;exploitation fonctionne normalement. Par exemple, on va s&rsquo;assurer qu&rsquo;entre le moment o\u00f9 on appui sur l&rsquo;interrupteur pour actionner un g\u00e9n\u00e9rateur de secours et le moment o\u00f9 il d\u00e9marre il s&rsquo;\u00e9coule moins d&rsquo;un certain temps. <\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Pour r\u00e9sumer<\/h3>\n\n\n\n<p>Si on r\u00e9sume, on a : <\/p>\n\n\n\n<p>Une requalification intrins\u00e8que faite par la maintenance, dans un environnement isol\u00e9, pour garantir \u00e0 l&rsquo;exploitant qu&rsquo;il n&rsquo;y a rien d&rsquo;\u00e9vident qui serait bloquant (une vis manquante, un axe voil\u00e9, etc)<\/p>\n\n\n\n<p>Une requalification fonctionnelle faite par l&rsquo;exploitant, en environnement contr\u00f4l\u00e9, pour lui garantir qu&rsquo;il peut remettre le mat\u00e9riel en exploitation et garantir \u00e0 l&rsquo;autorit\u00e9 de contr\u00f4le qu&rsquo;il respecte les normes attendues.<\/p>\n\n\n\n<p>Des essais p\u00e9riodique pilot\u00e9 par l&rsquo;exploitant, en production, qui garantissent  \u00e0 l&rsquo;autorit\u00e9 de contr\u00f4le que les \u00e9quipements fonctionnent correctement.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Que retirer de tout \u00e7a ? <\/h2>\n\n\n\n<p>\u00c0 partir de l\u00e0, j&rsquo;ai plusieurs impressions qui ressortent : <\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>On a l&rsquo;habitude de faire de la qualification fonctionnelle. Les \u00e9quipes de d\u00e9veloppement \u00e9crivent des tests unitaires et fonctionnels avant de livrer une feature. \u00c7a fait partie du process, mais c&rsquo;est un process interne aux \u00e9quipes.<\/li>\n\n\n\n<li>Gr\u00e2ce \u00e0 la conteneurisation, on en d\u00e9duit qu&rsquo;on est iso-prod et que \u00e7a va marcher pareil en prod.<\/li>\n\n\n\n<li>On est bien outill\u00e9 pour surveiller ce qu&rsquo;il se passe en production, surveiller la disponibilit\u00e9, avoir des m\u00e9triques<\/li>\n<\/ul>\n\n\n\n<p>Alors quel est le souci ? <\/p>\n\n\n\n<p>Le souci, c&rsquo;est que la responsabilit\u00e9 \u00abL&rsquo;ensemble doit fonctionner en prod\u00bb est \u00e0 la fois dilu\u00e9 un peu partout entre les \u00e9quipes \u00absyst\u00e8me\u00bb et les \u00e9quipe de \u00abdev\u00bb. Et du fait de cette dilution, le poids de cette responsabilit\u00e9 va \u00eatre plus \u00e9crasant. Prenons l&rsquo;exemple d&rsquo;un test fonctionnel de cr\u00e9ation d&rsquo;un compte. Est-ce que j&rsquo;ai beaucoup moins confiance dans le test s&rsquo;il utilise une BDD sqlite en m\u00e9moire plut\u00f4t qu&rsquo;un vrai serveur MySQL comme en production ? <\/p>\n\n\n\n<p>Et si on est un peu plus confiant avec le vrai serveur MySQL, est-ce que ce niveau de confiance vaut l&rsquo;effort suppl\u00e9mentaire de suivi des versions sur les environnement de d\u00e9veloppement ? <\/p>\n\n\n\n<p><\/p>\n\n\n\n<p>Cette question est int\u00e9ressante. Elle vient assez naturellement \u00e0 toute \u00e9quipe de Dev, surtout si l&rsquo;\u00e9quipe n&rsquo;est pas homog\u00e8ne d&rsquo;un point de vue technologie et syst\u00e8me d&rsquo;exploitation. Et surtout,elle n&rsquo;est pas du tout li\u00e9e au fait d&rsquo;\u00eatre serein sur les productions. Pour prendre un exemple un peu concret : dans mon souci d&rsquo;avoir une exploitation fonctionnelle, je ne me pose m\u00eame pas la question de si les \u00e9quipes front compilent leurs framework depuis l&rsquo;env \u00abiso-prod\u00bb ou s&rsquo;il le font depuis leur environnement host parce que pour des soucis de performance, c&rsquo;est plus pratique pour eux. Et je peux me permettre de ne pas m&rsquo;int\u00e9resser \u00e0 ce sujet parce que j&rsquo;ai des tests end-to-end qui tournent avec un syst\u00e8me d&rsquo;installation et d\u2019ex\u00e9cution que j&rsquo;estime suffisamment proche de la r\u00e9alit\u00e9 pour \u00eatre serein. Mais si \u00e7a n&rsquo;avait pas \u00e9t\u00e9 sp\u00e9cifiquement mon r\u00f4le de faire en sorte que \u00e7a marche en prod, \u00e7a aurait \u00e9t\u00e9 beaucoup plus compliqu\u00e9 de justifier le temps pass\u00e9 \u00e0 la mise en place de cet environnement.<\/p>\n\n\n\n<p>In fine, avoir des gens qui ont formellement la responsabilit\u00e9 de faire en sorte que \u00ab\u00e7a marche\u00bb fait que de solutions cr\u00e9\u00e9es sp\u00e9cifiquement pour s&rsquo;assurer que \u00ab\u00e7a marche\u00bb \u00e9mergent. Cr\u00e9ez des r\u00f4les sp\u00e9cifiquement pour s&rsquo;assurer de la p\u00e9rennit\u00e9 de la production et des solutions adapt\u00e9es \u00e0 votre environnement \u00e9mergeront.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>TL;DR Dans nos m\u00e9tiers, nous avons l&rsquo;habitude de classer les tests en fonction du p\u00e9rim\u00e8tre test\u00e9 (tests unitaires, d&rsquo;int\u00e9gration, fonctionnels), potentiellement en fonction de comment on test (en boite noire, en boite blanche, par fuzzing, par mutation), et on a une petite place suppl\u00e9mentaire pour les tests de performance, les [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-35","post","type-post","status-publish","format-standard","hentry","category-non-classe"],"_links":{"self":[{"href":"https:\/\/malinssireglouglou.fr\/index.php?rest_route=\/wp\/v2\/posts\/35","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/malinssireglouglou.fr\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/malinssireglouglou.fr\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/malinssireglouglou.fr\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/malinssireglouglou.fr\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=35"}],"version-history":[{"count":7,"href":"https:\/\/malinssireglouglou.fr\/index.php?rest_route=\/wp\/v2\/posts\/35\/revisions"}],"predecessor-version":[{"id":44,"href":"https:\/\/malinssireglouglou.fr\/index.php?rest_route=\/wp\/v2\/posts\/35\/revisions\/44"}],"wp:attachment":[{"href":"https:\/\/malinssireglouglou.fr\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=35"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/malinssireglouglou.fr\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=35"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/malinssireglouglou.fr\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=35"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}