mageekblog - Mot-clé - Ivan EnderlinLe 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:26874ca5b8cd4cac8d08b0e68e64f63aDotclearL'avenir de PHP vu par Ivan Enderlinurn:md5:793bee0fa01b097ab8b0e36eabf6d8bd2013-11-06T14:00:00+01:002013-11-06T14:21:17+01:00mageekguyPHPHoainterviewIvan EnderlinPHP<p>À cause de <a href="https://github.com/atoum/atoum/issues/300">quelques</a> <a href="https://github.com/atoum/atoum/issues/261">discussions</a> qui ont accaparé ces jours derniers la plupart du temps que je consacre habituellement à ce blog, je n’ai pas publié la semaine dernière de nouvel opus de mon cycle d’interview à propos de PHP et de son avenir.</p>
<p>Cependant, les choses s’étant un peu calmées à présent, je peux donc reprendre, du moins je l’espère, mon rythme de publication habituel.</p>
<p>À la suite d’une remarque qu’a faite <a href="http://blog.mageekbox.net/?post/2013/09/27/L-avenir-de-PHP-vu-par-Perrick-Penet-Avez-1">Perrick dans son interview</a> sur le manque d’intérêt de la part des scientifiques pour PHP, j’ai une nouvelle fois décidé de donner la parole à quelqu’un qui n’a pas participé au premier cycle d’interview.</p>
<p>J’ai en effet choisi d’interroger Ivan Enderlin, car il est actuellement le seul chercheur en informatique que je connaisse qui travaille avec PHP.</p>
<p>De plus, ceux qui suivent ce blog savent que je le connais très bien, et je savais donc que je pouvais à la fois le contacter rapidement et obtenir des réponses intéressantes à mes questions.</p>
<p>C’est donc son interview que je publie aujourd’hui, pour vous faire patienter jusqu’à la publication de celle de <a href="http://blog.pascal-martin.fr">Pascal Martin</a> actuellement prévu pour la semaine prochaine.</p> <dl>
<dt>Peux-tu te (re) présenter en quelques mots ?</dt>
<dd>
<p>Je m’appelle Ivan Enderlin et je suis doctorant au <a href="http://disc.univ-fcomte.fr">DISC</a> et à <a href="http://www.inria.fr/">l’INRIA</a>.</p>
<p>Le domaine de ma thèse tourne autour de la génération de tests.</p>
<p>Je suis également le créateur et l’un des contributeurs de <a href="http://hoa-project.net/">Hoa</a>, un ensemble de bibliothèques PHP.</p>
<p>Je suis passé par Mozilla, un peu le W3C, bref, je me définis plutôt comme un <q>hacker</q> (un bidouilleur), car j’aime toucher à tout.</p>
</dd>
<dt>Que penses-tu de l’évolution de PHP depuis l’abandon du développement de PHP 6 ?</dt>
<dd>
<p>Impressionnante, car les releases sont nettement plus rapprochées, la qualité s’est améliorée, il y a plus de nouveautés, plus de nettoyage et ça bouge dans le bon sens !</p>
<p>Je pense aux fonctions anonymes, aux traits, à certains sucres syntaxiques, aux générateurs et à pleins d’autres choses…</p>
</dd>
<dt>Avec le recul, penses-tu que la communauté des contributeurs a tiré toutes les leçons des erreurs commises avec PHP 6 ?</dt>
<dd>
<p>La question porte sur la communauté des contributeurs mais ce n’est pas elle le problème, c’est uniquement certains contributeurs.</p>
<p>Mais comme dans toutes communautés, il faut faire avec tout le monde.</p>
<p>PHP 6 était un symptôme de l’organisation interne de PHP et il fallait que ça ne marche pas.</p>
<p>PHP s’est retrouvé propulsé sur le podium des langages les plus utilisés au monde, et un grand pouvoir implique de grandes responsabilités.</p>
<p>Mais avec le pouvoir viennent les angoisses et les inquiétudes.</p>
<p>Personne ne réagit de la même manière à ce genre de situations et l’écart entre les développeurs et les utilisateurs s’est creusé de plus en plus.</p>
<p>Des reproches ou des demandes ont été faits, et plusieurs, pour se défendre, se mirent à camper sur leurs positions.</p>
<p>Que ce soit justifié ou non, ce n’était pas la bonne attitude à adopter, car PHP 6 était un projet trop important.</p>
<p>Son échec était donc obligatoire pour qu’il y ait une prise de conscience générale.</p>
<p>Aujourd’hui, l’écart entre ces deux mondes diminue énormément et PHP s’ouvre clairement à de nouvelles contributions : passage à Git, miroirs sur Github, intégrations des PR de Github dans le workflow de PHP, etc.</p>
<p>Et ça porte ces fruits : de nouveaux contributeurs apportent un vent de fraicheur bienvenu et tout ceci n’est plus chaotique, monolithique, entre copains.</p>
<p>Le système de RFC avec votes permet d’ouvrir des débats, et nettement moins sur des choses stériles, il y a une base claire et « standardisée » sur laquelle discuter.</p>
<p>Une très grande force de PHP est sa documentation, mais elle est destinée aux utilisateurs du langage et non à ses développeurs.</p>
<p>Ce n’est que récemment que nous voyons apparaître des livres sur le <a href="http://phpinternalsbook.com">fonctionnement</a> <a href="http://blog.mageekbox.net/?post/2013/11/06/ https://leanpub.com/developper-une-extension-php">interne</a> de PHP.</p>
<p>C’est une excellente chose, car ça facilite encore plus les contributions et la naissance de nouvelles idées.</p>
<p>Donc oui, je trouve remarquable la façon dont PHP a su se remettre en cause et évoluer, et ce n’est pas terminé.</p>
</dd>
<dt>PHP évolue aujourd’hui beaucoup plus vite que par le passé, penses-tu que ce soit une bonne chose ?</dt>
<dd>
<p>Oui et non, ça dépend la casquette que l’on a sur la tête.</p>
<p>D’un point de vue utilisateur ou développeur, c’est beaucoup plus stimulant.</p>
<p>Quand on construit des outils sur PHP, les nouvelles fonctionnalités font saliver.</p>
<p>Les cycles courts évitent de replonger dans le casse-tête de PHP 6 avec trop de fonctionnalités ou des fonctionnalités trop importantes puisque les choses sont découpées et livrées plus tôt.</p>
<p>Toutefois, si nous nous plaçons du point de vue d’un administrateur système, c’est plus compliqué, car plus de versions impliquent plus de maintenances et des difficultés à conserver une compatibilité.</p>
<p>De plus, PHP, du fait qu’il soit un langage « glue » permettant de faire à peu près tout et n’importe quoi très rapidement, subît des effets de modes.</p>
<p>La communauté de PHP est très active, voire trop et le moindre outil faisant un peu le buzz peut être utilisé par la majorité de la communauté en quelques mois.</p>
<p>Ça a du bon, et du moins bon.</p>
<p><a href="http://getcomposer.org/">Composer</a>, par exemple, a eu un impact sans précédent sur PHP car La communauté avait besoin d’un tel outil : plus de projets de qualité, plus de versions de PHP à manipuler, il fallait pouvoir gérer tout ça.</p>
<p>Mais Composer est loin d’être parfait et son utilisation massive le cloître et l’oblige à suivre un chemin qu’il ne devrait ou ne voulait pas suivre.</p>
<p>Même si les choses vont vite, il est nécessaire de prendre son temps et de réfléchir.</p>
<p>C’est le dessin du côté obscur de PHP, mais l’autre côté est nettement plus important.</p>
<p>PHP va plus vite et sa communauté le suit, elle est très active comme nous l’avons dit.</p>
<p>C’est une chance énorme car elle essaye tout, donne des retours sur tout, contribue à tout.</p>
<p>Il n’est pas difficile de trouver des utilisateurs et même des contributeurs et il y a beaucoup de conférences à travers le monde, des associations motivées, des bénévoles… beaucoup d’énergie !</p>
<p>Comparé à d’autres communautés ou langages, il est plus facile d’expérimenter et construire des choses.</p>
</dd>
<dt>De nouveaux langages comme Go, Dart, Node.js, Scala ou Clojure sont venus s’ajouter à la liste des concurrents de PHP au côté de Ruby et python et ils semblent avoir un gros potentiel. En conséquence, penses-tu que PHP soit encore un bon choix actuellement pour commencer un projet ?</dt>
<dd>
<p>J’ai démarré des projets utilisant ces langages, mais ils sont tous expérimentaux.</p>
<p>Aujourd’hui, mon regard est tourné vers <a href="http://rust-lang.org/">Rust</a>, que je trouve, pour le coup, réellement intéressant.</p>
<p>Il ne veut pas bouleverser les choses, mais les améliorer en utilisant un état de l’art plus important, sur la sécurité, la sûreté, les performances, les bonnes pratiques, etc.</p>
<p>Node.js est intéressant, mais il faut lui donner le temps de murir.</p>
<p>Tout comme celle de PHP, la communauté JavaScript est très active, et il faut lui laisser le temps de s’organiser, même si elle le fait très vite.</p>
<p>Personnellement, je ne crois pas en Dart ou Go.</p>
<p>Certes, les concepts sont intéressants, mais ce ne sont que des concepts et ce n’est pas assez pour faire un langage.</p>
<p>Malgré tout, ce sont typiquement ce genre de langages et d’expérimentations qui s’ajoutent à l’état de l’art et qui auront un impact à plus long terme.</p>
<p>Enfin, je ne connais pas assez bien Scala et Clojure pour émettre une critique, même si les concepts (pour ne pas parler de théories) qu’ils utilisent n’ont rien de nouveau, et c’est pourquoi je ne m’y suis pas penché.</p>
</dd>
<dt>Quelles ont été pour toi les évolutions les plus significatives dans l’univers de PHP depuis 2010 ?</dt>
<dd>
<p>Les closures probablement car elles ont permis l’utilisation plus importante d’un nouveau paradigme dans PHP : les événements et les écouteurs.</p>
<p>Les générateurs ou les traits sont plus des évolutions qui touchent les performances, mais pas les usages.</p>
<p>En revanche, depuis 2010, grâce à un rythme plus soutenu et une remise en question, PHP voit apparaître des outils sur la qualité logiciel : des frameworks de tests, des plateformes d’intégration continue, ce genre de chose.</p>
<p>Il est souvent reproché à PHP d’être un langage bâtard, capable uniquement de produire du code sale et illisible.</p>
<p>Ces dernières années ont prouvé le contraire, grâce à des outils du genre, construits par une communauté dynamique, elle-même entraînée par le renouveau de PHP.</p>
</dd>
<dt>De quoi aurais-tu besoin aujourd’hui dans PHP dont tu ne disposes pas ?</dt>
<dd>
<p>Je n’ai surtout pas besoin des threads, mais énormément de l’asynchrone.</p>
<p>Ça permettrait d’introduire des théories comme <a href="http://blog.mageekbox.net/?post/2013/11/06/ http://rml.lri.fr/">la programmation réactive</a>, la programmation événementielle (la vraie), etc.</p>
<p>Mais il faut que ce soit très bien fait car PHP doit se démarquer là-dessus et ne pas reproduire les erreurs des autres langages.</p>
</dd>
<dt>Au vu de tes réponses précédentes, est-il possible de dire que tu crois toujours en l’avenir du langage ?</dt>
<dd>
<p>Bien sûr, car je vois des projets de grandes qualités arrivées.</p>
<p>J’observe également de nouveaux usages de PHP : dans des micro-systèmes, des TV, des téléphones…</p>
<p>PHP n’a pas encore montré de quoi il était réellement capable.</p>
<p>Ses aspects dynamiques et « glue » lui permet de s’intégrer et se brancher à n’importe quoi.</p>
<p>Je pense qu’il faut attendre des petites révolutions du côté de la qualité et des outils de développement.</p>
<p>Ça reste dans la philosophie première de PHP : tout le monde peut en faire, et les outils pour en faire peuvent réellement s’améliorer.</p>
</dd>
</dl>http://blog.mageekbox.net/?post/2013/11/06/L-avenir-de-PHP-vu-par-Ivan-Enderlin#comment-formhttp://blog.mageekbox.net/?feed/atom/comments/459Allez à la prochaine conférence de l'AFUP Lyon !urn:md5:e3b9e6d866bc75e0a3bfaa30e519dcc42013-10-15T10:50:00+02:002013-10-15T10:50:00+02:00mageekguyConférencesAFUPatoumHoaIvan EnderlinLyon<p>Si vous êtes dans la région lyonnaise et que vous aimez le code original aussi bien techniquement que fonctionnellement parlant, ou si vous êtes blasés des frameworks à la mode ou si vous pensez que ces outils sont performants, mais qu’ils ne sont pas suffisamment modulaires ou manque d’originalité, je vous invite à venir à <a href="http://lyon.afup.org/2013/10/01/conference-sur-hoa-le-28-octobre-a-19h00/">la prochaine conférence</a> oganisée par <a href="http://lyon.afup.org">l’antenne lyonnais de l’AFUP</a> le 28 octobre 2013 à 19 h.</p>
<p><a href="https://twitter.com/hoaproject">Ivan Enderlin</a> y présentera en effet <a href="http://hoa-project.net">Hoa</a>, l’ensemble de bibliothèques en <a href="http://www.php.net">PHP</a> qu’il a créé et qui contient des fonctionnalités très puissantes et pour certaines très surprenantes tout en offrant des performances remarquables.</p>
<p>Cette conférence sera aussi l’occasion pour vous de discuter avec l’un des rares chercheurs en informatique français travaillant à la fois sur <a href="http://www.php.net">PHP</a> et sur le test logiciel.</p> <p>Ivan est en effet thésard à l’UFR Sciences et Techniques de Besançon et travaille de plus avec l’INRIA ainsi qu’avec l’Institut Femto-ST.</p>
<p>C’est donc quelqu’un de très compétent et qui maîtrise parfaitement ces sujets, même les plus pointus, et la moindre discussion peut aller très loin, même s’il est parfois difficile de le suivre tellement il est passionné.</p>
<p>Bref, cette conférence sera pour vous l’occasion de découvrir des outils hors-normes et peu connus et qui sont conçus par un garçon qui vaut le détour.</p>
<p>Et je ne dis pas cela parce qu’il sera accompagné sur scène par <a href="http://blog.mageekbox.net/?post/2013/07/09/Merci-a-la-marmotte-et-au-rasta-blanc">le rasta blanc</a>, aka <a href="https://twitter.com/jubianchi">@jubianchi</a> et que certains outils développés dans le cadre de Hoa et concernant le test logiciel vont être intégrés à plus ou moins court terme dans <a href="http://www.atoum.org/atoum">atoum</a>.</p>
<p>Je pense en effet que c’est une réelle opportunité de découvrir des outils novateurs et puissants peu connus, car occultés par les frameworks dans le vent alors qu’ils peuvent avoir une réelle utilité en entreprise.</p>http://blog.mageekbox.net/?post/2013/10/15/Allez-a-la-prochaine-conference-de-l-AFUP-Lyon#comment-formhttp://blog.mageekbox.net/?feed/atom/comments/457À propos de atoum #3urn:md5:e482248a6f0f923cbfa0c3c96764234c2013-05-30T14:00:00+02:002013-05-30T14:00:00+02:00mageekguyatoumAmaury BouchardatoumHoaIvan EnderlinPHPSkrivMLtests unitaires<p>S’il y a bien une chose que je n’avais pas du tout anticipée lorsque j’ai libéré le code d’<a href="http://www.atoum.org/atoum">atoum</a>, c’est qu’il provoquerait une coopération entre plusieurs projets.</p>
<p>La <a href="http://docs.atoum.org">documentation</a> d’<a href="http://www.atoum.org/atoum">atoum</a> est en effet actuellement maintenu par <a href="https://twitter.com/marmotz">Renaud Littolff</a> et il a choisi de la rédiger en <a href="http://markup.skriv.org">SkrivML</a>, un langage de description de page dérivé du markdown et du Creole dévoilé par <a href="http://www.geek-directeur-technique.com/2009/01/23/Je-me-presente...">Amaury Bouchard</a> il y a <a href="http://www.geek-directeur-technique.com/2013/02/17/lancement-officiel-du-skrivml">quelque temps</a>.</p>
<p>Atoum profite donc du travail de <a href="http://www.geek-directeur-technique.com/2009/01/23/Je-me-presente...">Amaury</a> grâce auquel il dispose d’une <a href="http://docs.atoum.org">documentation</a> facile à maintenir et à faire évoluer.</p>
<p>Cependant, cette relation est loin d’être à sens unique.</p> <p><a href="https://twitter.com/marmotz">Renaud</a> a en effet rencontré un certain nombre de problématiques lors de la rédaction de la <a href="http://docs.atoum.org">documentation</a> d’<a href="http://www.atoum.org/atoum">atoum</a> et il a donc apporté à Amaury un précieux « feedback » qui lui a permis de faire évoluer SkrivML et les outils associés en fonction des besoins réels de ses utilisateurs.</p>
<p>Et parfois, il a tout simplement proposé une solution « clef en main » qu’<a href="http://www.geek-directeur-technique.com/2009/01/23/Je-me-presente...">Amaury</a> n’a eu qu’à <a href="https://github.com/Amaury/SkrivMarkup/pulls?direction=desc&page=1&sort=created&state=closed">intégrer dans son code</a>.</p>
<p>Cerise sur le gâteau, la <a href="http://docs.atoum.org">documentation</a> d’<a href="http://www.atoum.org/atoum">atoum</a> est à mon avis une excellente démonstration de ce que permet de réaliser SkrivML et elle offre donc une très bonne vitrine au projet de Amaury.</p>
<p>La relation entre les deux projets est donc du type « gagnant-gagnant » et de plus, elle a permis à deux développeurs de faire connaissance et de s’apprécier (du moins je l’espère).</p>
<p>Un autre exemple de collaboration est ce qui est en train de se passer entre <a href="http://www.atoum.org/atoum">atoum</a> et <a href="http://hoa-project.net">Hoa</a>.</p>
<p>Ce dernier intègre en effet un outil dénommé <a href="http://fr.wikipedia.org/wiki/Praspel">Praspel</a> qui permet à la fois de générer des données de test et de générer des tests en fonction d’un contrat.</p>
<p>Je ne donnerais pas plus d’information maintenant sur l’outil ainsi que sur ses possibilités, car j’ai prévu d’en parler dans le détail dans le cadre d’une interview de son créateur <a href="https://twitter.com/hoaproject">Ivan Enderlin</a>.</p>
<p>Cependant, si je vous dis que <a href="http://fr.wikipedia.org/wiki/Praspel">Praspel</a> rend possible la génération automatique d’une suite de test à partir d’un contrat, je pense que vous comprendrez rapidement ce qu’il est possible de faire à l’aide d’un outil fusionnant les possibilités d’<a href="http://www.atoum.org/atoum">atoum</a> et celles de cet outil.</p>
<p>Et encore une fois, il s’agit d’une relation « gagnant-gagnant » car <a href="http://fr.wikipedia.org/wiki/Praspel">Praspel</a> profite des possibilités et de l’efficacité d’<a href="http://www.atoum.org/atoum">atoum</a> en ce qui concerne l’exécution des tests, et <a href="http://www.atoum.org/atoum">atoum</a> profite de <a href="http://fr.wikipedia.org/wiki/Praspel">Praspel</a> pour proposer à ses utilisateurs une façon novatrice de rédiger des tests.</p>
<p>En effet, <a href="http://fr.wikipedia.org/wiki/Praspel">Praspel</a> est le fruit des travaux de recherche que <a href="https://twitter.com/hoaproject">Ivan</a> mène dans le domaine du test à l’<a href="http://fr.wikipedia.org/wiki/Institut_national_de_recherche_en_informatique_et_en_automatique">INRIA</a> et la fusion de ces deux projets risque donc bien d’aboutir à une nouvelle façon plus efficace à tout point de vue d’appréhender le test logiciel dans l’univers PHP.</p>
<p>Certes, pour cela, il faudra que ce « pont » qu’il est en train de bâtir entre nos deux projets valide ses théories, mais connaissant le bonhomme, j’ai bon espoir que ce soit effectivement le cas.</p>
<p>Et tout comme dans le cas de SkrivML, cette collaboration a permis à deux développeurs de faire connaissance et de s’apprécier puisque <a href="https://twitter.com/hoaproject">Ivan</a> a travaillé avec <a href="https://twitter.com/jubianchi">Julien Bianchi</a> pour permettre à <a href="http://fr.wikipedia.org/wiki/Praspel">Praspel</a> de générer des tests exécutables avec <a href="http://www.atoum.org/atoum">atoum</a>.</p>
<p>Et le plus beau dans tout cela, c’est que je ne suis quasiment jamais intervenu, que ce soit par rapport aux problématiques relatives à SkrivML ou à celles en rapport avec <a href="http://fr.wikipedia.org/wiki/Praspel">Praspel</a>.</p>
<p>Non pas que ces sujets ne m’intéressent pas, bien au contraire, mais il se trouve qu’à chaque fois, je ne disposais pas du temps nécessaire et que de plus, j’y ai vu une excellente opportunité pour que d’autres s’approprient <a href="http://www.atoum.org/atoum">atoum</a> et que le projet puisse donc à terme vivre sans moi !</p>http://blog.mageekbox.net/?post/2013/05/30/A-propos-de-atoum-3#comment-formhttp://blog.mageekbox.net/?feed/atom/comments/425Mettons fin aux rumeurs, voici les faits #2urn:md5:131b027521c849981da5aa25379baa2a2013-04-05T14:00:00+02:002013-04-05T14:00:00+02:00mageekguyPHPAmaury BouchardasynchroneHoaIvan EnderlinPHP<p>Régulièrement, quelqu'un publie un article pour dire à la face du monde à quel point PHP est un langage de merde.</p>
<p>D'ailleurs, je ne m'en prive pas<a href="http://blog.mageekbox.net/?post/2008/11/03/php-cdlamerde"> moi-même</a>.</p>
<p>Mais tout aussi régulièrement, les auteurs de ces articles racontent des conneries.</p>
<p>La plupart du temps, je n'y réagis pas, car ça serait m'engager dans un combat quotidien et je n'en ai ni le temps ni l'envie, car <a href="http://www.atoum.org/atoum">j'ai mieux à faire</a>.</p>
<p>Cependant, en lisant <a href="http://software-gunslinger.tumblr.com/post/47131406821/php-is-meant-to-die">ce billet</a>, je me suis dit que je devais préciser certaines choses, car il se trouve que je maîtrise très bien le sujet qu'il évoque.</p> <p>D'après l'auteur et en résumé, <a href="http://www.php.net">PHP</a> doit mourir, car il est totalement incapable de fonctionner de manière asynchrone correctement.</p>
<p>Ainsi, l'écriture d'un démon fiable en <a href="http://www.php.net">PHP</a> serait une mission quasi impossible, voire suicidaire, car le langage serait totalement incapable de gérer sa mémoire de manière correcte.</p>
<p>Il justifie cela par le fait que le <a href="http://fr.wikipedia.org/wiki/Zend_Engine">Zend Engine</a> n'est pas destiné à être exécuté en permanence et que cela aurait conduit ses concepteurs à négliger la gestion des éventuelles fuites de mémoire générées par leur code.</p>
<p>J’en rigole encore.</p>
<p>J'ai écrit mon premier démon en <a href="http://www.php.net">PHP</a> quelque part entre les années 2000 et 2005, dans le but de superviser certains traitements dans un environnement de production.</p>
<p>Et par la suite, j'en ai écrit bien d'autres pour remplir des tâches diverses et variées aussi bien dans un cadre professionnel que personnel.</p>
<p>Ainsi, en 2005, j'en ai par exemple conçu <a href="https://svn.mageekbox.net/repositories/wmiirc/trunk/">un certain nombre</a> pour gérer le comportement de <a href="https://wiki.archlinux.org/index.php/Wmii">wmii</a>, le gestionnaire de fenêtre que j'utilisais à l'époque sur mon ordinateur portable sous <a href="http://www.freebsd.org">FreeBSD</a>.</p>
<p>Dans un tel contexte, mes démons en <a href="http://www.php.net">PHP</a> étaient exécutés en permanence pendant plusieurs semaines, car je redémarre très peu mes ordinateurs.</p>
<p>Et dans tous les cas, je n'ai jamais constaté la moindre fuite de mémoire.</p>
<p>Quand je vous dis que j’en rigole encore, ce n’est pas pour rien…</p>
<p>D'autant que je ne suis pas le seul à m'amuser à ce genre d'exercice.</p>
<p><a href="http://www.geek-directeur-technique.com">Amaury Bouchard</a> est aussi un concepteur de démon en <a href="http://www.php.net">PHP</a>, à tel point qu'il a même donné une <a href="http://fr.slideshare.net/geekcto/dmons-en-php-de-inetd-zeromq">excellente conférence</a> sur le sujet lors du dernier Forum PHP.</p>
<p>Et Amaury ne fait pas particulièrement dans la dentelle, puisqu'il se sert de démons en PHP pour synchroniser <a href="https://code.google.com/p/finefs/">un système de fichier distribué</a> dans un cadre professionnel.</p>
<p>Et à ma connaissance, il n'a jamais rencontré le moindre problème de fuite de mémoire dans ce contexte.</p>
<p>Je sais également qu'<a href="https://twitter.com/hoaproject">Ivan Enderlin</a>, le créateur de l'ensemble de bibliothèques pour PHP connu sous le nom de <a href="http://hoa-project.net">Hoa</a>, s'est aussi beaucoup amusé à faire ce genre de choses.</p>
<p>Et toujours à ma connaissance, <a href="http://www.php.net">PHP</a> ne lui a jamais posé le moindre problème en ce qui concerne la gestion de sa mémoire, alors qu'il est vraiment très fort pour pousser le langage dans ses derniers retranchements.</p>
<p>De plus, si les références circulaires pouvaient effectivement être un problème par le passé, ce n'est plus le cas depuis <a href="http://www.php.net/ChangeLog-5.php#5.3.3">le 22 juillet 2010</a>, date de sortie de PHP 5.3.3.</p>
<p><a href="http://www.php.net">PHP</a>, n’en déplaise à ceux qui souhaitent sa mort, est en effet un langage encore bien vivant.</p>
<p>Il est en effet activement développé et ses développeurs sont tout à fait conscients, bien plus que vous ou moi, de ses forces et de ses faiblesses.</p>
<p>Ils font donc tout ce qu'il faut pour que PHP s'améliore et devienne plus efficace et performant, j'en veux pour preuve le gain de 30 % apporté par PHP 5.4 à la fois en terme de vitesse d'exécution et de consommation mémoire.</p>
<p>J'ajoute que <a href="http://php.net/manual/fr/install.fpm.php">PHP-FPM</a> est également un excellent moyen de faire réaliser des tâches asynchrones au langage.</p>
<p>De plus, <a href="http://www.php.net">PHP</a> permet également de déléguer très facilement ce genre de tâche à des outils spécifiquement conçu pour répondre à cette problématique, comme par exemple <a href="http://www.php.net/manual/fr/book.gearman.php">gearman</a>.</p>
<p>Certes, cela demande un hébergement disposant des extensions adéquates, mais quand on commence à avoir ce genre de besoin, on a en général à sa disposition une infrastructure plus sérieuse qu'un serveur mutualisé chez un hébergeur à bas prix.</p>
<p>En conséquence, si la légende urbaine colportait à une époque le fait que PHP n'était pas le langage adéquat pour faire de l'asynchrone ou écrire un démon, ce n'est certainement plus le cas aujourd'hui, si tant est que cela ne l'ait pas été un jour, et évidemment à la condition de coder correctement.</p>
<p>À bon entendeur…</p>http://blog.mageekbox.net/?post/2013/04/05/Mettons-fin-aux-rumeurs%2C-voici-les-faits-2#comment-formhttp://blog.mageekbox.net/?feed/atom/comments/416Le forum PHP 2012, c'est terminé !urn:md5:ad2b402c95ccd076a1481ba22d5ce6b22012-06-08T14:00:00+02:002012-06-08T14:00:00+02:00mageekguyConférencesatoumconférencesforum PHP 2012Ivan Enderlintest unitaire<p>Le <a href="http://afup.org/pages/forumphp2012/">forum PHP</a> est maintenant terminé, et comme les <a href="http://blog.mageekbox.net/?post/2010/11/15/Compte-rendu-du-forum-PHP-2010-1">années</a> <a href="http://blog.mageekbox.net/?post/2009/10/05/Forum-PHP-2009">précédentes</a>, j'aurais aimé qu'il dure un peu plus longtemps pour avoir encore plus le temps de discuter avec tous les participants, qu'ils soient conférenciers ou visiteurs.</p>
<p>Il aura eu pour moi cette année une saveur un peu particulière, car il a été l'occasion de beaucoup de <q>première fois</q>.</p>
<p style="margin-top: 0; "><span class="Apple-style-span">J'y ai ainsi donné pour la première fois deux conférences, pour la première fois devant plus de 200 personnes, pour la première fois avec </span><a href="http://twitter.com/#!/hoaproject">Ivan Enderlin</a><span class="Apple-style-span">, pour la première fois sans être réellement prêt, pour la première fois avec un stress perceptible (du moins pour ceux qui me connaisse bien), pour la première fois avec un incident technique en pleine présentation et pour la première fois en tant que <a href="http://blog.mageekbox.net/?post/2012/05/23/PHP-5-avanc%C3%A9">contributeur</a> à la dernière édition de <q><a href="http://www.amazon.fr/PHP-avancé-Cyril-Pierre-Geyer/dp/2212134355/ref=sr_1_1?s=books&ie=UTF8&qid=1339155778&sr=1-1">PHP 5 avancé</a></q>.</span></p>
<p>C'était aussi la première fois ou <a href="https://twitter.com/gectou4/status/211066950531559424">quelqu'un me tient le micro</a> pendant une conférence et également la première fois que j'ai pris la pleine mesure du soutien que reçoit <a href="http://www.php.net">atoum</a>, mon framework de tests unitaires pour PHP 5.3+, de la part de la communauté PHP française, ainsi que de l'intérêt qu'il suscite.</p> <p>L'<abbr title="Association Française des Utilisateurs de PHP"><a href="http://afup.org">AFUP</a></abbr> m'avait certes déjà convié à donner <a href="http://afup.org/pages/phptourlille2011/sessions.php#527">une conférence lors du PHP Tour 2011</a> à son sujet, mais elle a remis le couvert lors de de forum.</p>
<p>De plus, elle a communiqué énormément sur cette conférence, directement ou indirectement, ce qui a donné au projet une visibilité que j'aurais difficilement pu atteindre par mes propres moyens, ou du moins, beaucoup moins rapidement.</p>
<p>En outre, énormément de conférenciers ont cité <a href="http://www.atoum.org">atoum</a> lors de leur présentation, et j'avoue que je ne m'y attendais absolument pas, que j'en suis très touché et que je les en remercie.</p>
<p>Enfin, j'ai eu également beaucoup de discussions avec des personnes qui s'y intéressent ou bien avec des utilisateurs qui m'ont dit avoir été séduit par sa simplicité et son efficacité, ce qui prouve que l'outil atteint bien son objectif et m'encourage à poursuivre son développement.</p>
<p>Je profite donc de ce billet pour remercier l'<abbr title="Association Française des Utilisateurs de PHP"><a href="http://afup.org">AFUP</a> </abbr>de sa confiance et de son soutien, ainsi que toutes les personnes qui, de près ou de loin, par un moyen ou par un autre, ont apporté leur soutien au projet.</p>
<p>Cependant, ce forum n'a pas été pour moi uniquement une vitrine et un coup de projecteur pour <a href="http://www.atoum.org">atoum</a>, il a été également l'occasion de retrouvailles avec des amis que je vois rarement, et l'occasion de discussions passionnées avec des personnes très intelligentes et très sympathiques, autour d'un verre ou devant l'écran d'un ordinateur, sur une table ou debout sous la pluie, la nuit comme le jour.</p>
<p>Et c'est d'ailleurs ce que j'apprécie le plus dans cet événement, cet échange permanent, souvent très amusant, parfois extrêmement sérieux ou bien complètement décalé, sur des sujets très pointus ou alors complètement futiles, mais qui permet dans tous les cas de faire émerger des idées, d'avoir des confirmations ou de trouver des solutions à ses problèmes ou à ceux des autres, le tout dans le plus grand respect.</p>
<p>Les conférences auxquelles j'ai pu assisté étaient quand à elles pour la plupart très intéressantes et m'ont également donné quelques idées, mais je regrette d'avoir fait l'impasse sur certaine et plus particulièrement celle de <a href="http://afup.org/pages/forumphp2012/sessions.php#616">LB Denker</a> afin de pouvoir terminer la préparation des miennes.</p>
<p>Merci donc à l'<abbr title="Association Française des Utilisateurs de PHP"><a href="http://afup.org">AFUP</a></abbr> d'organiser cet événement et de parvenir à réunir des intervenants de qualité et d'un très haut niveau dans une ambiance bon enfant et sans prise de tête.</p>
<p>Je ne peux qu'espérer que vous y parviendrez tout aussi bien pour le <a href="http://www.afup.org/pages/phptournantes2012/index.php">PHP Tour 2012</a> qui se déroulera cette année à Nantes les 29 et 30 novembre prochain.</p>
<p>Et si par hasard, ami lecteur, tu souhaites à cette occasion passer de l'autre côté du miroir et y participer non plus en tant que visiteur mais en tant que conférencier, je t'invite à déposer <a href="http://www.afup.org/pages/phptournantes2012/appel-a-conferenciers.php">une ou plusieurs propositions</a> de conférence.</p>
<p>Dans l'intervalle, pour vous faire patienter, le support de <a href="http://keynote.hoa-project.net/ForumPHP12/">la conférence <q>Anatomie du test</q></a> que j'ai donné en duo avec <a href="http://twitter.com/#!/hoaproject">Ivan Enderlin</a>, le créateur de <a href="http://hoa-project.net/">Hoa</a>, est disponible et devrait vous permettre d'avoir à l'issue de sa consultation une assez bonne idée de la façon dont il faut mettre en œuvre une usine de tests pour qu'elle soit efficace.</p>
<p>La salle était quasiment pleine pour cette conférence, signe que le test commence à devenir une préoccupation des développeurs PHP et je ne peux que m'en réjouir.</p>
<p>Et malgré un manque de naturel à cause d'un manque de préparation (nous n'avons jamais vraiment trouvé le temps Ivan et moi de répéter ensemble notre histoire), notre message est apparemment <a href="http://joind.in/talk/view/6440">tout de même bien passé</a>.</p>
<p>Le support de ma conférence au sujet de <a href="http://www.atoum.org">atoum</a> ne sera pas quand à lui immédiatement disponible, car il est possible que je la rejoue dans un proche avenir et je m'en voudrais de le dévoiler trop tôt à mes potentiels futurs auditeurs, d'autant que mes spectateurs semblent <a href="https://joind.in/6463">l'avoir apprécié</a>.</p>
<p><span class="Apple-style-span">Néanmoins, je le mettrais en ligne dès que cela sera possible et je suis à votre disposition pour toute question au sujet de </span><a href="http://www.atoum.org">atoum</a><span class="Apple-style-span">.</span></p>
<p>La phrase qui précède est d'ailleurs une excellente occasion pour dévoiler l'image que j'ai omis de présenter lors du Forum PHP 2012 :</p>
<p><img src="http://blog.mageekbox.net/public/atoum/TDD-avec-atoum.jpg" alt="@mageekguy - IRC / Freenode / ##atoum - www.atoum.org" style="margin-top: 10px; margin-right: auto; margin-bottom: 0; margin-left: auto; display: block; border: solid 1px;" title="Atoum, Forum PHP, juin 2012" /></p>http://blog.mageekbox.net/?post/2012/06/08/Le-forum-PHP-2012%2C-c-est-termin%C3%A9-%21#comment-formhttp://blog.mageekbox.net/?feed/atom/comments/350De 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/349Coup de mou !urn:md5:c95dcd99d95c5f0ece88871516289cbf2012-05-05T00:30:00+02:002012-05-05T13:11:07+02:00mageekguyRéfléxionsatoumforum PHP 2012Ivan Enderlinphptests unitaires<p>C'est la première fois depuis très longtemps que je n'ai pas publié de billets au cours de la semaine, même si techniquement ce n'est pas tout à fait exact puisque je publie celui-ci.</p>
<p>Cependant, sa faible valeur ajoutée à mes yeux par rapport à ceux que je publie habituellement fait que je préfère ne pas en tenir compte.</p>
<p>Non pas que je n'ai rien à écrire ou que je manque d'inspiration, bien au contraire, car l'actualité de PHP est riche actuellement avec <a href="http://www.php.net/archive/2012.php#id2012-04-26-1">les sorties de PHP 5.3.11 et 5.4.1</a> suivie quelques jours plus tard d'une sortie dans l'urgence <a href="http://www.php.net/archive/2012.php#id2012-05-03-1">des versions 5.3.12 et 5.4.2</a> destinées à colmater <a href="http://www.kb.cert.org/vuls/id/520827">une faille de sécurité</a> dans le module <a href="http://fr.wikipedia.org/wiki/Common_Gateway_Interface"><abbr title="Common Gateway Interface">CGI</abbr></a> du langage (et il semble que ces versions soient encore <a href="http://www.metasploitminute.com/2012/05/cve-2012-1823-php-cgi-bug.html">vulnérables</a>).</p>
<p>J'ai de plus quelques autres idées de billets, notamment une portant sur les <a href="http://blog.mageekbox.net/?post/2010/05/17/Et-si-on-tirait-des-traits">traits</a> et plus particulièrement sur les cas dans lesquels il est pertinent de les mettre en œuvre.</p>
<p>Mon problème est plutôt que je manque de temps pour rédiger tout cela et que je commence à faire trop de choses pour pouvoir tout faire correctement.</p> <p>Dernièrement, j'ai écris pour le magazine <a href="http://www.programmez.com/magazine_articles.php?titre=PHP-54-est-il-le-successeur-de-PHP-6-&id_article=1691&magazine=152">Programmez!</a> un article au sujet de PHP 5.4 (je remercie au passage <a href="http://www.linkedin.com/pub/christophe-villeneuve/3/874/3a6">Christophe Villeneuve</a> de m'avoir proposé de le faire).</p>
<p>Simultanément, j'ai implémenté dans <a href="http://www.atoum.org">atoum</a>, mon framework de tests unitaires pour PHP 5.3+, le code nécessaire pour permettre à l'utilisateur via l'annotation <code>@engine</code> de définir la façon dont les tests seront exécutés.</p>
<p>L'annotation <code>@engine inline </code>sur une méthode de test permet donc maintenant de l'exécuter de manière non isolé, ce qui permet de l'exécuter très rapidement, au prix d'une consommation en mémoire potentiellement plus importante et surtout sans aucune garantie qu'une autre méthode de test exécutée <code>inline</code> précédemment n'aura pas une influence sur le résultat.</p>
<p>L'annotation<code> @engine isolate</code> permet quand à elle d'exécuter la méthode concernée dans un processus PHP indépendant afin de l'isoler des autres méthodes de test, mais <a href="http://www.php.net">atoum</a> attendra la fin de l'exécution de la méthode avant de passer à la suivante.</p>
<p>Le test est alors plus lent que lorsque <code>inline</code> est utilisée, mais l'isolation apportée par le processus PHP indépendant garantie qu'il n'y aura pas d'interférences de la part d'autres méthodes de test sur le résultat.</p>
<p>De plus, les éventuelles fuites de mémoire ont dans ce cas un impact quasi nul puisque le processus PHP correspondant à la méthode se terminera une fois cette dernière exécutée. </p>
<p>L'annotion <code>@engine concurrent</code> combine le meilleur des deux précédentes en permettant aux méthodes de tests sur lesquelles elle est utilisée de s'exécuter de manière isolée et en parallèle, donc rapidement.</p>
<p>Il s'agit donc à la fois du mode d'exécution des méthodes de test traditionnel et par défaut de <a href="http://www.atoum.org">atoum</a>.</p>
<p>De plus, il est possible de définir un mode d'exécution des méthodes de test par défaut pour l'ensemble des méthodes d'une classe en utilisant l'annotation <code>@engine</code> avec la valeur désirée au niveau de la classe.</p>
<p>Mais évidemment, si une annotation <code>@engine</code> est utilisée sur une méthode, elle prendra le pas sur celle définie au niveau de la classe.</p>
<p>Tout cela va peut être encore évoluer un peu, mais à court terme, il devrait même être possible aux utilisateurs de <a href="http://www.atoum.org">atoum</a> de définir leur propre moteur d'exécution des méthodes de test et de le mettre en œuvre via <code>@engine</code>, ce qui pourrait ouvrir par exemple la voie à une exécution des tests distribuées sur plusieurs machines et/ou dans le nuage.</p>
<p>Cerise sur le gâteau, le remaniement du code induit par tout cela a permis la correction d'un <a href="https://github.com/mageekguy/atoum/issues/49">bug très gênant sous windows</a>, et si tout les tests unitaires <a href="https://twitter.com/stealth35/status/198356085218885633">ne sont pas encore au vert</a> dans cet environnement, <a href="http://www.atoum.org">atoum</a> y est cependant maintenant utilisable.</p>
<p>J'ai cependant encore un peu de travail pour que cela soit possible, et en parallèle, je dois préparer <a href="http://blog.mageekbox.net/?post/2012/04/11/Je-serais-conferencier-au-Forum-PHP-2012">mes deux conférences</a> pour le <a href="http://afup.org/pages/forumphp2012/">forum PHP 2012</a> qui aura lieu dans un mois exactement, dont une que je dois préparer en duo avec <a href="http://afup.org/pages/forumphp2012/conferenciers.php#543">Ivan Enderlin</a> à distance.</p>
<p>Si on ajoute à cela une vie de famille trépidante, un travail intéressant et prenant, que la fatigue se fait sentir et une envie de profiter des jours de congé offert par le mois de mai, cela explique une baisse de la fréquence de parution de mes billets sur la semaine qui vient de s'écouler.</p>
<p>J'espère cependant que ce n'est que transitoire et que j'arriverais à maintenir un rythme de publication et une qualité suffisante.</p>http://blog.mageekbox.net/?post/2012/05/05/Coup-de-mou-%21#comment-formhttp://blog.mageekbox.net/?feed/atom/comments/347Je serais conférencier au Forum PHP 2012urn:md5:1b419f69790c0f477ba69754e37873772012-04-11T13:30:00+02:002012-04-12T10:19:52+02:00mageekguyConférencesAFUPatoumconférencesforum PHP 2012HoaIvan Enderlin<p>Pour ceux qui ne le sauraient pas encore, le <a href="http://afup.org/pages/forumphp2012/">Forum PHP 2012</a> aura lieu à Paris les 5 et 6 juin prochain.</p>
<p>L'appel à conférencier s'est terminé il y quelques temps, et l'<a href="http://www.afup.org'"><abbr title="Association Française des Utilisateurs de PHP">AFUP</abbr></a> vient de terminer leur sélection après un travail de sélection qui a du être assez ardu, au vu du nombre important de propositions de conférence qu'elle a reçu.</p>
<p>Le programme a donc <a href="http://afup.org/pages/forumphp2012/">été annoncé hier</a> dans ses très grandes lignes, et j'ai donc eu la joie d'apprendre que j'avais été retenu pour y donner deux conférences.</p> <p>La première prendra la forme d'un atelier et portera sur <a href="http://www.atoum.org">atoum</a>, mon framework de tests unitaires pour PHP 5.3+.</p>
<p>Elle sera donc le pendant technique et surtout pratique de la <a href="https://github.com/mageekguy/atoum/wiki/Phptourlille2011">conférence <q>philosophique</q></a> que j'avais donné à son sujet lors du <a href="http://afup.org/pages/phptourlille2011/">PHP Tour 2011</a>.</p>
<p>La seconde est une conférence que je ferai en duo avec <a href="http://twitter.com/#!/hoaproject">Ivan Enderlin</a>, le créateur et développeur principal de <a href="http://hoa-project.net/">Hoa</a>, et dont l'idée me trottait dans la tête depuis bien longtemps sans que j'ai eu jusqu'ici l'occasion de la concrétiser, et je remercie donc au passage l'<a href="http://www.afup.org'"><abbr title="Association Française des Utilisateurs de PHP">AFUP</abbr></a> de me permettre de le faire.</p>
<p>Intitulée <q>Anatomie du test</q>, en référence (humoristique) au <a href="http://fr.wikipedia.org/wiki/Anatomie_de_l'horreur">livre de Stephen King <q>Anatomie de l'horreur</q></a>, elle a pour but d'expliquer un certain nombre de choses au sujet du test logiciel, qu'il soit unitaire ou fonctionnel, automatisé ou non.</p>
<p>J'ai en effet constaté que si la pratique du test se démocratise parmi les développeurs <a href="http://www.php.net">PHP</a>, beaucoup ont une vision très floue, voire imparfaite ou incorrecte, de ce qu'est un test unitaire ou fonctionnel et/ou s'interrogent sur la bonne façon de mettre en place des tests, indépendamment de leur nature.</p>
<p>J'en ai d'ailleurs régulièrement la preuve via les questions que j'entend lors des conférences relatives aux tests que je donne ou auxquelles je me rends en tant que spectateur, ou qui me sont posées par courrier électronique ou via twitter.</p>
<p>Il m'a donc semblé pertinent d'aborder le sujet dans le cadre d'une conférence spécifique, mais si je maîtrise relativement bien l'aspect pratique via le développement de <a href="http://www.atoum.org">atoum</a> et mes quelques années de pratiques du test unitaire et fonctionnel, je n'en maîtrise pas l'aspect théorique et je n'ai donc aucune justification scientifique à apporter à mes propos.</p>
<p>J'ai donc trouvé judicieux de collaborer avec <a href="http://twitter.com/#!/hoaproject">Ivan</a> pour cette conférence, car c'est un scientifique pur et dur et le test est l'un de ses domaines de recherche de prédilection.</p>
<p>Il en maîtrise donc à ce titre parfaitement l'aspect théorique, et il a même quelques idées novatrices en stock sur le sujet.</p>
<p>Nous sommes donc très complémentaires, même si nous ne sommes pas toujours d'accord, ou bien peut être justement parce que nous ne sommes pas toujours d'accord.</p>
<p>Et si j'espère faire partager nos connaissances respectives à l'occasion de cette conférence lors du <a href="http://afup.org/pages/forumphp2012">Forum PHP 2012</a>, j'espère également beaucoup apprendre de lui.</p>
<p>Si vous êtes intéressé par le test, je vous donne donc rendez-vous les 5 et 6 juin prochain pour en discuter, durant mes/nos conférences, dans un couloir ou autour d'un verre.</p>
<p>Et si ce n'est pas le cas, je vous encourage tout de même à vous y rendre, car comme d'habitude, même si la totalité de la programmation n'a pas été dévoilée, elle vaut déjà largement le coût, d'autant que cette année, l'<a href="http://www.afup.org'"><abbr title="Association Française des Utilisateurs de PHP">AFUP</abbr></a> propose un tarif <q>Early bird</q> pour <a href="http://afup.org/pages/forumphp2012/inscription.php">les 50 premiers inscrits</a>.</p>
<p><del>Dieu</del> <a href="http://fr.wikipedia.org/wiki/Rasmus_Lerdorf">Rasmus Lerdorf</a> viendra en effet y donner une conférence, ainsi que <a href="http://jmertic.wordpress.com/">John Mertic</a> qui avait été contraint d'annuler une conférence au sujet du test qui m'intéressait énormément lors du PHP Tour, ou bien encore <a href="http://www.zimuel.it/">Enrico Zimuel</a> qui nous parlera de <a href="https://github.com/zendframework/zf2">ZF2</a> ou encore <a href="http://www.linkedin.com/in/jrenard">Jérome Renard</a> qui donnera une conférence au sujet de <a href="http://en.wikipedia.org/wiki/Varnish_(software)">Varnish</a>, sans parler évidemment des surprises que nous réserve l'<a href="http://www.afup.org'"><abbr title="Association Française des Utilisateurs de PHP">AFUP</abbr></a>.</p>
<p>À bon entendeur...</p>
<p>[EDIT] Le programme complet est <a href="http://afup.org/pages/forumphp2012/sessions.php">disponible</a>.</p>http://blog.mageekbox.net/?post/2012/04/11/Je-serais-conferencier-au-Forum-PHP-2012#comment-formhttp://blog.mageekbox.net/?feed/atom/comments/343La guerre des testsurn:md5:8801b9a68eef784e394d89f13679e5432010-11-18T09:00:00+01:002010-11-18T14:32:17+01:00mageekguyRéfléxionsAtoumencapsulationHoaIvan Enderlinprivateprotectedrefactorisationtest unitaire<p>Dans le petit monde des tests unitaires, et comme dans beaucoup d'autres, qu'ils soient réels ou virtuels, il y a différents courants de pensées, différentes philosophies, qui s'affrontent dans des débats enfiévrés qui ont lieu sur Internet ou dans le monde réel, la plupart du temps autour d'une ou plusieurs bières.</p>
<p>Et depuis quelques temps, via le développement d'<a href="http://blog.mageekbox.net/?post/2010/11/17/../?post/2010/10/11/Teasing-4">Atoum</a>, mon framework de tests unitaires qui tire pleinement parti des possibilités offertes par <a href="http://www.php.net">PHP</a> 5.3, je suis partie prenante de l'un de ces débats.</p>
<p>En effet, certaines personnes travaillant avec moi sur le projet n'ont pas la même définition que moi d'un test unitaire.</p>
<p>En conséquence, elles n'ont pas forcément la même vision que moi de ce que doit permettre ou non un framework de tests unitaires tel qu'<a href="http://blog.mageekbox.net/?post/2010/11/17/?post/2010/06/16/Teasing-2">Atoum</a>.</p>
<p>Nous avons donc régulièrement des discussions sur différentes sujets, et c'est la synthèse de mes réflexions sur l'un de ces débats que je vous livre dans les lignes qui suivent.</p> <p>Tout a commencé il y a maintenant quelques mois, lorsque l'un des membres actuels de l'équipe de développement d'<a href="http://blog.mageekbox.net/?post/2010/11/17/../?post/2010/10/11/Teasing-4">Atoum</a> m'a contacté pour me poser une question sur la façon d'écrire des tests unitaires.</p>
<p>À l'époque, il ne participait pas encore au développement du projet, et s'il connaissait parfaitement l'aspect théorique des tests unitaires et qu'il prônait leur utilisation, c'était la première fois qu'il devait effectivement les mettre en pratique.</p>
<p>Et comme la plupart des débutants dans les tests unitaires, il s'est demandé comment il était possible de tester une méthode de classe privée ou protégée.</p>
<p>J'avoue avoir répondu sans réfléchir, tellement la réponse me semblait évidente.</p>
<p>À mon sens, il n'est pas nécessaire de tester ces méthodes.</p>
<p>Et pourquoi donc me direz-vous ?</p>
<p>Tout d'abord, pour en finir immédiatement avec mon argument le plus subjectif, je pense que les solutions permettant de tester ces méthodes ne sont pas propres ou bien relativement lourdes à mettre en œuvre.</p>
<p>Ensuite, l'encapsulation, qui se traduit en <a href="http://www.php.net/">PHP</a> par l'utilisation des mots clefs <code>protected</code> et <code>private</code> affectés à une propriété ou une méthode de classe, a pour but de masquer l'implémentation technique de la classe à son utilisateur.</p>
<p>Or, de mon point de vue, un test unitaire valide l'implémentation de la classe du point de vue de son utilisateur, et non du point de vue de son développeur.</p>
<p>C'est pour moi avant tout un contrat passé entre le développeur et l'utilisateur, qui garanti à ce dernier que l'interface publique de la classe se comportera comme elle le doit, ni plus ni moins.</p>
<p>Il est donc logique que je ne me soucis pas de tester les méthodes protégées ou privées de mes classes, puisque seul compte à mes yeux le fait que les méthodes publiques de ma classe se comportent correctement.</p>
<p>De plus, lorsque l'on fait du développement piloté par les tests, ce qui est mon cas, le processus à suivre pour créer une classe est le suivant :</p>
<ol><li>le développeur écrit un test pour une méthode <em>publique</em> de la classe.</li>
<li>Le développeur écrit le code <em>le plus simple possible</em> qui permet à la classe de réussir le test écrit précédemment.</li>
<li>Le développement se poursuit de cette manière tant que le comportement des fonctionnalités devant être assurées par la classe n'est pas intégralement défini par les tests.</li>
</ol>
<p>Et le mot le plus important dans ce qui précède, outre le mot <em>publique</em>, est <em>simple.</em></p>
<p>Par <em>simple</em>, j’entends même naïf, dans le sens ou il est par exemple permis de faire de la duplication de code, d'utiliser des algorithmes peu efficaces, et surtout de ne pas se soucier de l'encapsulation.</p>
<p>L'encapsulation n’apparaît que lors de l'étape de <a href="http://fr.wikipedia.org/wiki/Refactorisation">refactorisation</a>, qui intervient à l'issue du processus décrit ci-dessous, et qui a pour but de passer d'une implémentation naïve à une implémentation faite dans les règles de l'art, avec la garantie que la classe continuera à se comporter comme elle le doit grâce aux tests écrits précédemment.</p>
<p>Comme vous pouvez le constater, il n'y a pas de place pour des tests relatifs aux méthodes protégées ou privées dans ce processus, puisqu'elles sont une conséquence de la <a href="http://fr.wikipedia.org/wiki/Refactorisation">refactorisation</a> et n'apparaissent aucunement lors de l'écriture des tests.</p>
<p>Enfin, J'ai un autre argument pour justifier le fait qu'il est inutile de tester les méthodes protégées ou privées d'une classe.</p>
<p>L'encapsulation ayant pour but de masquer l'implémentation d'une classe, elle permet de faire de la <a href="http://fr.wikipedia.org/wiki/Refactorisation">refactorisation</a> à tout moment au cours de la vie de la classe sans impacter l'utilisateur de la classe.</p>
<p>Il est donc tout à fait possible de modifier de manière très radicale le fonctionnement interne de la classe sans que l'utilisateur final en ait conscience.</p>
<p>Or, si les méthodes privées et protégées sont testées, il faut que le développeur, lorsqu'il effectue la <a href="http://fr.wikipedia.org/wiki/Refactorisation">refactorisation</a>, modifie également les tests, ce qui représente un travail supplémentaire non négligeable.</p>
<p>De plus, lors de ce processus, les tests ne sont pas censés être modifiés puisqu'ils sont là pour garantir que le comportement de la classe ne change pas malgré les modifications effectuées sur l'implémentation.</p>
<p>Évidement, le camp adverse a également des arguments lui permettant de justifier la définition de tests pour les méthodes privées et protégées, et celui qui revient le plus souvent est qu'il est difficile de localiser précisément un bug ou une régression si ces méthodes ne sont pas testées.</p>
<p>Je répond à cela qu'un test unitaire n'est pas un débugger et qu'il ne remplace pas un cerveau, mais vous vous doutez bien qu'il est assez mal reçu.</p>
<p>L'autre argument récurrent est que, selon eux, je pense que l'unité dans mes tests est la classe, alors qu'ils considèrent que l'unité est la méthode.</p>
<p>J'avoue que ce n'est pas entièrement faux, même si je me plaît à préciser que pour moi, l'unité est la méthode <em>publique</em> et non la classe.</p>
<p>Évidemment, ce débat est une bataille de chapelles, et en tant que tel, il n'aura jamais de réponse absolu, d'autant que le monde des tests unitaires évolue.</p>
<p>Il y a en effet des gens comme <a href="http://hoa-project.net/Contact.html">Ivan Enderlin</a>, le créateur du framework <a href="http://www.php.net/">PHP</a> <a href="http://hoa-project.net">Hoa</a>, dont c'est le métier de réfléchir à ces problématiques.</p>
<p>Et à force de réfléchir, il a trouvé un moyen novateur de réaliser des tests, qui n'est pas une autre façon de faire des tests unitaires, mais plutôt une technique complémentaire qui permet entre autre de ne pas se préoccuper de l'encapsulation.</p>
<p>Je ne vous donnerais aucun détail sur ce qu'il propose, car je considère que c'est à lui de le présenter, et de plus, je pense que cela mériterait bien plus qu'un simple billet.</p>
<p>J'ajouterais de plus que je ne suis pas entièrement convaincu par ce qu'il propose, et je suis donc assez mal placé pour parler de son travail.</p>
<p>Je considère cependant qu'il a trouvé une nouvelle voie qu'il est intéressant de suivre un minimum, ne serait-ce que pour voir ou elle peut mener.</p>
<p>Vous l'aurez compris, le débat sur l'intérêt de tester les méthodes privées et protégées n'est pas prêt de se terminer, la preuve en étant que ce débat a, depuis la question d'origine, débordé du cadre d'<a href="http://blog.mageekbox.net/?post/2010/11/17/../?post/2010/10/11/Teasing-4">Atoum</a>, puisque j'ai eu l'occasion de discuter de ce sujet sur <a href="http://www.twitter.com/mageekguy">twitter</a> ainsi qu'au <a href="http://blog.mageekbox.net/?post/2010/11/15/Compte-rendu-du-forum-PHP-2010-1">forum PHP 2010</a> avec des gens totalement externes au projet.</p>
<p>Et pour ceux qui se poseraient éventuellement la question, <a href="http://blog.mageekbox.net/?post/2010/10/11/Teasing-4">Atoum</a> est potentiellement capable de gérer les deux philosophies, et je n'ai aucun problème pour travailler avec quelqu'un qui défend un point de vue opposé au mien de manière constructive, bien au contraire.</p>
<p>Je considère en effet que c'est de la différence, du débat, qu'émerge les idées novatrices, car cela nous force à voir les choses sous un autre angle.</p>
<p>Je suis donc extrêmement heureux d'avoir une force contradictoire au sein de l'équipe de développement !</p>http://blog.mageekbox.net/?post/2010/11/17/La-guerre-des-tests#comment-formhttp://blog.mageekbox.net/?feed/atom/comments/210