mageekblog - Mot-clé - testsLe blog personnel de Frédéric Hardy. Au menu, PHP, agilité, FreeBSD, cuisine et photographies.2021-12-02T08:20:54+01:00Frédéric Hardyurn:md5:26874ca5b8cd4cac8d08b0e68e64f63aDotclearDe l'intérêt des testsurn:md5:dc43e360dc2954646f4cff0b234ace9a2014-01-31T21:20:00+01:002014-01-31T21:55:59+01:00mageekguyRéfléxionsatoumDemeterLiskovSOLIDtests<p>Il y a quelques jours, j’ai remarqué un fait intéressant.</p>
<p>En effet, j’avais encore il y a peu régulièrement envie de vomir lorsque je revenais sur du code quelque temps après l’avoir écrit.</p>
<p>Mais aujourd’hui, cette envie de vomir ne me prend plus lorsque je regarde mon code, mais plutôt les tests associés.</p>
<p>J’ai donc essayé de comprendre cette évolution, et j’en suis arrivé à la conclusion que cela vient du fait que ma façon de développer a profondément changé.</p>
<p>En effet, depuis que je développe <a href="http://www.atoum.org/atoum">atoum</a>, j’essaye (et ce n’est pas toujours facile, car les mauvaises habitudes ont la vie dure) de faire du <a href="http://fr.wikipedia.org/wiki/Test_Driven_Development">développement piloté par les tests</a>.</p> <p>De cette façon, j’obtiens donc forcément du code testable, donc du code qui respecte les principes fondamentaux de la programmation orientée objet tels que <a href="http://fr.wikipedia.org/wiki/SOLID_(informatique)">SOLID</a>, <a href="http://fr.wikipedia.org/wiki/Principe_de_substitution_de_Liskov">Liskov</a> et la <a href="http://fr.wikipedia.org/wiki/Loi_de_Déméter">loi de Demeter</a>.</p>
<p>Par contre, je me rends compte encore régulièrement que ma façon d’écrire des tests n’est pas forcément la meilleure, notamment lorsque je lis de la littérature sur le sujet ou lorsque je modifie le code d’une de mes classes afin de l’optimiser et que les tests associés passent au rouge alors que le périmètre fonctionnel n’a pas changé.</p>
<p>Il est donc finalement normal qu’aujourd’hui, mes tests me donnent régulièrement envie de vomir, d’autant plus qu’il n’existe pas à ma connaissance de bible de référence ou de lois aussi absolue que SOLID ou Demeter en ce qui concerne leur rédaction.</p>
<p>Il y a certes de très bonnes sources d’inspiration, mais l’information est fragmentée et le vocabulaire est souvent fluctuant en fonction des sources, d’autant qu’en règle générale elles sont spécifiques à un outil de test particulier et n’embrassent pas l’intégralité du domaine du test.</p>
<p>Dans un tel contexte, celui qui souhaite améliorer la qualité de ces tests le fait donc en fonction de l’outil qu’il utilise, de l’expérience qu’il acquière en le manipulant et de ses lectures.</p>
<p>Le coefficient directeur de sa courbe d’apprentissage est donc relativement faible et elle est de plus relativement linéaire, car l’apprentissage est très progressif par rapport à celui d’une personne qui disposerait d’une bible de référence efficace pour appréhender un nouveau domaine d’expertise.</p>
<p>J’ai de plus remarqué deux autres facteurs expliquant l’amélioration de la qualité de mon code depuis que j’ai adopté le développement piloté par les tests.</p>
<p>Le premier est que cette méthode de travail oblige en effet à suivre les bonnes pratiques de la programmation orientée objet, sans quoi le code devient très difficilement testable de manière correcte, c’est à dire avec un taux de couverture suffisamment significatif.</p>
<p>Et comme l’une de ces bonnes pratiques est de découpler fortement les fonctionnalités, je passe donc par exemple parfois un temps négligeable à réfléchir à un nom adéquat pour mes variables, propriétés, fonction, classe et interface afin d’avoir une sémantique suffisante pour que mon code reste compréhensible pour celui qui le découvre, ce qui confirme que <a href="http://www.meerkat.com/karlton/">Phil Karlton</a> a bien raison lorsqu’il dit que trouver un nom est l’une des deux seules choses réellement difficiles en informatique.</p>
<blockquote>
<p>There are only two hard things in Computer Science: cache invalidation and naming things.</p>
<div>Phil Karlton</div>
</blockquote>
<p>Le second facteur est que je développe plus lentement qu’auparavant, indépendamment du fait que j’écris maintenant des tests en plus du code.</p>
<p>Le développement piloté par les tests m’oblige en effet, pour que je puisse rédiger mes tests, à réfléchir à l’architecture de mon code avant de l’écrire, au lieu de laisser émerger cette architecture de mon code et éventuellement de la corriger à postériori, au risque d’y introduire des bogues ou de provoquer des régressions.</p>
<p>Et même si les tests facilitent le processus, car ils mettent le code en situation d’exploitation, cela peut être un réel challenge, notamment dans le cas de fonctionnalités complexes.</p>
<p>De plus, les tests sont une mise en pratique du code, et ils encouragent donc le développeur à gérer correctement les cas d’erreur ou limite, soit parce que ces derniers surviennent lors de l’exécution des tests, soit parce que leur écriture l’y fait penser naturellement.</p>
<p>En conséquence, ma productivité quotidienne instantanée a donc baissé puisque je réfléchis beaucoup plus que par le passé lorsque je développe, mais mécaniquement, la qualité de mon code en est augmentée d’autant.</p>
<p>De plus, je suis persuadé qu‘assez paradoxalement, cette amélioration de la qualité de mon code m’a à contrario fait augmenter ma productivité moyenne, notamment parce que les tests me permettent de remettre en cause partiellement ou totalement le code que j’ai écrit en ayant la garantie de ne pas altérer son fonctionnement, sans parler du fait que les tests documentent mon code automatiquement.</p>
<p>Reste que je n’ai aucune donnée objective pour étayer ce qui n’est donc qu’une intuition, et que je ne sais pas comment les obtenir alors qu’elles me permettraient de démontrer l’intérêt des tests sans coup férir.</p>http://blog.mageekbox.net/?post/2014/01/31/De-l-int%C3%A9r%C3%AAt-des-tests#comment-formhttp://blog.mageekbox.net/?feed/atom/comments/472De retour !urn:md5:8548db9f791298160af7014fbbb94bf12012-06-04T15:46:00+02:002012-06-19T16:35:44+02:00mageekguyConférencesatoumconférencesforum PHP 2012Ivan Enderlintests<p>Comme prévu, ce blog a été relativement calme depuis une quinzaine de jours.</p>
<p>La faute à un emploi du temps très chargé, partagé entre différents projets et plus particulièrement la préparation des <a href="http://afup.org/pages/forumphp2012/conferenciers.php#512">deux conférences</a> que je donne cette année à l'occasion du <a href="http://afup.org/pages/forumphp2012/">Forum PHP 2012</a>.</p>
<p>J'avoue avoir très mal anticipé le temps que me prendrait le travail préparatoire nécessaire, notamment celle que je donnerais en duo avec <a href="http://twitter.com/#!/hoaproject">Ivan Enderlin</a>, et les raisons en son multiples.</p> <p>Tout d'abord, c'est la première conférence que je donne en compagnie de quelqu'un qui est à la fois très proche et très éloigné de moi dans sa façon de travailler.</p>
<p><a href="http://twitter.com/#!/hoaproject">Ivan</a> et moi partageons en effet énormément sur la façon d'appréhender le test logiciel, et c'est d'ailleurs tout ce qui fait l'intérêt de notre conférence.</p>
<p>Cependant, là où je privilégie une approche pragmatique, lui a une approche scientifique, ce qui n'est pas du tout la même chose, et travailler ensemble nécessite que chacun de nous fasse des compromis.</p>
<p>Or, ceux qui ont déjà travaillé avec moi, ou travaillent actuellement avec moi (les pauvres) savent que ce n'est pas dans ma nature.</p>
<p>De plus, je suis très maniaque et perfectionniste, ce qui n'arrange rien.</p>
<p>j'ajoute que <a href="http://twitter.com/#!/hoaproject">Ivan</a> l'est tout autant, et il est également tout aussi réfractaire au compromis, même si je sais qu'il a fait de gros efforts.</p>
<p>Je le remercie d'ailleurs au passage d'avoir été aussi patient et j'espère qu'il ne m'en veut pas trop.</p>
<p>Nous avons aussi quelques divergences au sujet des tests, qu'il nous a fallu expliciter afin de pouvoir mieux nous comprendre.</p>
<p>Pour finir, si on ajoute à cela des emplois du temps chargés de part et d'autre et le fait que nous n'avons pas la même approche d'une conférence, nous avons largement dépassé le délai que je m'étais alloué pour mettre notre conférence au point, à tel point qu'il reste encore quelques détails à régler à l'heure ou j'écris ces lignes.</p>
<p>Heureusement, ce ne sont que des détails, et au final, toutes ces difficultés ont été au final un mal pour un bien, puisque comme je l'espérais, <a href="http://twitter.com/#!/hoaproject">Ivan</a> m'a permis d'éclaircir certaines choses que je percevais instinctivement au sujet des tests, et j'espère qu'il en est un peu de même de son côté, même si je doute d'avoir quelque chose à lui apprendre.</p>
<p>Je suis donc très satisfait de notre collaboration, et j'espère que ceux qui assisterons à notre <a href="http://afup.org/pages/forumphp2012/sessions.php#673">conférence demain</a> le seront tout autant.</p>
<p>Et pour vous faire patienter, en voici un extrait :</p>
<p><img src="http://blog.mageekbox.net/public/mockalorusVulgaris.jpg" alt="mockalorus vulgaris" style="margin-top: 10px; margin-right: auto; margin-bottom: 10px; margin-left: auto; display: block; border: solid 1px" title="mockalorus vulgaris, juin 2012" /></p>
<p>Ma <a href="http://afup.org/pages/forumphp2012/sessions.php#674">seconde conférence</a> est quant à elle quasi prête, mais elle m'a demandé bien moins de travail que <q><a href="http://afup.org/pages/forumphp2012/sessions.php#673">Anatomie du test</a></q> vu que je maîtrise parfaitement mon sujet puisqu'elle concerne <a href="http://www.atoum.org">atoum</a>, mon framework de tests unitaires pour PHP 5.3+.</p>
<p>Je pense même que je me permettrais d'improviser dans une certaine mesure, en fonction du temps dont je disposerais.</p>
<p>Dans maintenant quelques heures, je sais sur Paris et j'y retrouverais des gens que je croise tous les jours dans le virtuel et quasiment jamais dans la vie réelle.</p>
<p>Comme d'habitude, les discussions autour d'une bière risque d'être passionnante et se poursuivre très longtemps dans la nuit, et j'avoue être impatient d'y être et de participer pour la quatrième année au <a href="http://afup.org/pages/forumphp2012">forum PHP</a>.</p>
<p>En effet, je ne vois aucune raison pour laquelle cette nouvelle édition ne serait pas tout aussi bien, voir mieux que les précédentes.</p>
<p>D'ailleurs, si vous n'avez pas encore votre place, il parait qu'il reste encore <a href="http://afup.org/pages/forumphp2012/inscription.php">quelques places</a>.</p>http://blog.mageekbox.net/?post/2012/06/04/De-retour-%21#comment-formhttp://blog.mageekbox.net/?feed/atom/comments/349mv PMSIpilot/mageekguy Aixia/urn:md5:f757a1bbb35295331fe08ebfb8ce32a12011-11-20T15:00:00+01:002011-11-20T15:28:55+01:00mageekguyRéfléxionsatoumindustrialisationméthodes agilesPHPtests<p>Dans le milieu de la semaine dernière, j'ai pris mes fonctions de directeur technique et fonctionnel au sein du groupe Aixia.</p>
<p>Spécialiste de la location de véhicules via des enseignes telles que <a href="http://www.rentiz.com/">Rentiz</a> ou <a href="http://www.rentanddrop.com/">Rentn'drop</a>, ce groupe est aussi l'éditeur d'un logiciel de gestion de parc automobile dénommé <a href="http://www.aixia-services.com/logiciel-gestion-parc-automobile-1">webaixia</a>. </p>
<p>C'est donc plus particulièrement à ce niveau que j'interviens en reprenant la gestion et la supervision de son développement, actuellement réalisé par une équipe de 5 personnes en <a href="http://www.php.net">PHP</a> et en <a href="http://www.mysql.com">MySQL</a>.</p> <p>C'est l'occasion pour moi de renouer avec le management, une activité que j'avais délaissé depuis quelques années, par manque d'opportunité et parce que je souhaitais garder le contact avec la technique, car je pensais que je pourrais de cette façon promouvoir les <q>bonnes pratiques</q> de développement.</p>
<p>Cependant, ma précédente expérience professionnelle au sein de <a href="http://www.pmsipilot.com/">PMSIpilot</a> m'a fait comprendre que ce n'était pas une bonne stratégie et que pour réellement parvenir à faire avancer les choses, il fallait avoir le pouvoir de le faire.</p>
<p>C'est donc avec joie que j'ai accepté ce poste chez Aixia, d'autant qu'il y a beaucoup à faire et que l'équipe est très volontaire pour évoluer.</p>
<p>Je vais donc introduire progressivement les méthodes agiles, les tests unitaires et fonctionnels ainsi que divers processus d'industrialisation afin de mettre en place dans les meilleurs délais une usine de code productive et de qualité.</p>
<p>Ce sera donc pour moi l'opportunité de modifier un peu la ligne éditoriale de ce blog pour donner une plus grande place aux méthodes agiles et à l'industrialisation, certainement sous la forme de retour d'expérience à la manière de ce que fait <a href="http://www.cascrum.dibus.org/">cascrum</a> pour son projet <a href="http://www.cascrum.dibus.org/2011/03/29/projet-marguerite-le-niko-niko/"><q>marguerite</q></a>.</p>
<p>Cependant, cela ne veut pas dire que je vais laisser de côté la technique en général et <a href="http://www.php.net">PHP</a> en particulier.</p>
<p>Je suis <a href="http://blog.mageekbox.net/?post/2010/08/12/Qui-suis-je">avant tout un technicien</a>, et si je vais avoir un peu moins de temps à consacrer au code professionnellement puisque je vais devoir partager mon temps entre le fonctionnel et le développement, je vais cependant garder un contact étroit avec <a href="http://www.php.net">PHP</a> via mes projets personnels et surtout <a href="https://github.com/mageekguy/atoum">atoum</a>.</p>
<p>Je continuerais également à suivre le développement des prochaines versions de <a href="http://www.php.net">PHP</a>, mais d'une manière moins régulière que ce que j'ai pu faire par le passé.</p>
<p>Cette activité est en effet très chronophage, et je pense donc que je vais poursuivre sur le même rythme que celui que j'ai pris depuis la <a href="http://blog.mageekbox.net/?post/2011/09/16/PHP-5.4-%C3%9F">première version ß</a> de PHP 5.4, en ne parlant que de ce que je jugerais réellement pertinent.</p>
<p>Je sais que ce changement d'orientation décevra certainement une partie de mon lectorat, mais la Vie est faite de changements constants et il faut savoir évoluer et s'adapter.</p>http://blog.mageekbox.net/?post/2011/11/18/mv-PMSIpilot/mageekguy-Aixia/#comment-formhttp://blog.mageekbox.net/?feed/atom/comments/307