Soirée Meet’OSS par Smile – Industrialisation de PHP

flattr this!

J'ai assisté jeudi dernier avec mon éternel binôme, m0hda, à la soirée Meet'OSS organisée par la société Smile. Le thème de la soirée était l'industrialisation de PHP. Comme d'habitude, ceci n'est qu'un compte-rendu personnel, dépendant de mes notes au cours de la soirée.

Smile

Nos hôtes nous ayant accueilli gratuitement, une présentation s'impose. Smile est une société de services existant depuis une vingtaine d'années, composée de 14 agences à travers l'Europe et même l'Afrique du Nord depuis peu, regroupant environ 600 collaborateurs. La société a généré en 2010 un CA de 37 millions d'euros.

La société se présente avant tout comme un intégrateur de solutions open-sources. Elle participe activement au mouvement en publiant notamment régulièrement des livres blancs basés sur son expérience. Vous pouvez les récupérer ici.

Je n'ai pas retenu les noms des orateurs, mais en gros, l'essentiel de la présentation a été faite par le CTO, et deux responsables techniques. L'un étant d'ailleurs spécialiste Java. Vous comprendrez plus bas.

Les défis de l'industrialisation

Buts

Augmentation de la productivité et de la qualité.

Moyens disponibles

Mise en place de standards et automatisation maximale des tâches.

En quoi l'industrialisation est-elle un défi ?

PHP, à son origine, est un langage qui n'était pas fait pour les entreprises. D'où la signification première de l'acronyme : "Personal Home Page". Il a du coup une présence particulièrement forte dans le monde des sites persos, des blogs ou encore des CMS et des forums.

On parle d'un langage user centric et non developer centric.

Environnements de développement

IDE

L'implication de l'utilisation des IDE dans l'industrialisation est irréfutable. Permettant l'intégration d'outils divers et variés, ils permettent aussi d'assurer une homogénéité des méthodes de travail de chaque développeur.

Ont été cités en priorité : Netbeans et Eclipse. Vi/Vim a été évoqué mais ils n'avaient pas l'air fan. A titre personnel, j'utilise Aptana.

Versions

Logiquement, la version de PHP utilisée doit être la même entre le dev et la prod et chez tous les développeurs. Évidement, il en va de même concernant les extensions de PHP mais aussi de tous les serveurs liés tels que ceux de bases de données. Cela semble normal mais pourtant ce n'est pas encore un acquis.

Environnements

Ils ont suggéré que les serveurs de développement centralisés ne sont pas une bonne idée, notamment pour une question de réactivité. Ce qui se défend. Quand un développeur veut faire une modification, idéalement, il créé une branche, l'importe sur sa machine, fait la modif, la renvoie sur le serveur, la teste et la pousse sur le tronc commun. C'est long et il devrait pouvoir le tester sur sa machine avant de devoir systématiquement la pousser sur le serveur.

On a donc ensuite abordé la question des VMs. Bien plus intéressante grâce à l'étanchéité qu'elle procure. Deux solutions se distinguent alors :

  • VirtualBox : fonctionne sur tous les OS mais est lente et réserve systématiquement de la mémoire, pouvant bloquer d'autres processus ;
  • VServeur/OpenVZ/LXC : ne fonctionne que sur Linux, rapide du fait de son intégration directe au système et mutualise l'utilisation de la mémoire. Ils travaillent avec LXC.

Standardisation du code

Buts

Atteindre un haut niveau de maintenabilité, si tout le monde code de la même façon, tout le monde peut travailler "facilement" sur  le code de tout le monde. Ce qui du coup procure forcément une certaine flexibilité à l'entreprise. Si le dev originel n'est pas disponible, la maintenance peut alors aisément être faite pas un autre. Cela augmente aussi la testabilité d'un code en permettant l'utilisation d'outils comme on l'a vu après.

Moyens

Uniformisation des méthodes, établissement d'une nomenclature de code commune pour faciliter la lisibilité. Cela passe par l'indentation, le formatage, le nommage...

Problèmes

La syntaxe de PHP elle-même peut provoquer quelques soucis. Ont été mises en avant les fonctions comme : array_merge, asort et join. Elles manipulent toutes trois des tableaux mais on ne peut se fier au nom comme repère global pour savoir ce qu'elles font. De façon générale, il y a une absence de norme globale inter-produits. Chacun étant tellement libre qu'on retrouve absolument de tout. Ce qui est moins envisageable dans d'autres langages comme Java, .Net ou encore Python.

Solutions

Définir une architecture systématique et commune à tous les projets. S'assurer que le code est commenté/documenté. La réalisation de revues de code permet aussi d'optimiser certaines portions de code, d'éliminer le code mort, d'assurer la modularité et une factorisation optimale.

L'utilisation de frameworks est un plus également. Une norme de code ainsi qu'une organisation sont souvent déjà établies. Les développeurs disposent d'un existant pour ne pas systématiquement repenser la roue et cette base commune est partagée par des milliers de développeurs, ce qui permet de limiter les erreurs.

Analyse statique

L'utilisation régulière d'outils comme PHPCodeSnifferPHPCheckStylePHPMessDetector ou encore PHPCopyPasteDetector est aussi suggérée comme un vrai plus.

Cependant, attention, les outils peuvent s'assurer que le code est commenté mais ne peuvent s'assurer de la pertinence des commentaires.

Intégration

Les tests de code sont censés faire partie du quotidien du développeur. Ils sont un avantage indéniable pour le gain en productivité et en qualité du simple fait qu'ils permettent de vérifier à tout moment que le code fait ce qu'on attend de lui et de vérifier un certain nombre d'éléments comme les non-régressions. Les outils comme PHPUnit, SimpleTest et atoum ont été mis en avant. Même si PHPUnit fait figure de référence et qu'atoum "est encore jeune".

Le souci, c'est que repasser systématiquement tous les tests unitaires pour chaque modification, c'est beaucoup trop long. Mieux vaut repasser les tests d'une section définie correspondant à l'élément logiciel impacté "normalement" et laisser faire un serveur dédié qui tourne en permanence.

Il existe deux outils pour ça :

  • PHPUnderControl : basé sur CruiseControl (Java) mais qui ne dispose que d'une petite communauté ;
  • Jenkins (anciennement Hudson) : dispose d'une communauté importante et d'un grand nombre de plugins.

Du côté de la recette fonctionnelle, à faire à la main, c'est long et la répétition est source d'erreurs et de lassitude pour les humains. Son automatisation permet donc un gain de productivité et de qualité. Le seul outil cité pour l'occasion est Selenium.

Livraison

Dernier point abordé concernant PHP, la livraison implique plusieurs choses :

  • création d'une release ;
  • gestion des dépendances ;
  • déploiement ;
  • validation.

Enjeux

Minimiser les risques, réduire le temps d'indisponibilité, gérer le rollback en cas de problème et permettre à n'importe qui de déployer.

Problèmes

L'être humain est faillible, il ne peut penser à tout tout le temps. J'en connais qui se marrent déjà en pensant à ma mémoire de poisson rouge. De plus, il faut gérer les dépendances à l'environnement, sachant qu'elles ne peuvent pas toujours être embarquées.

Automatisation

Doit permettre une bonne gestion du numéro de version, des tags SVN (pour les concernés), de gérer le déploiement de diverses façons (SCP, FTP, RSync, ...), selon le besoin bien entendu. Et surtout s'occupe de rendre la disponibilité à l'application automatiquement le plus tôt possible.

Les difficultés sont surtout la gestion des dépendances et la vérification du bon fonctionnement. Les tests unitaires peuvent toujours être déroulés mais ne seront pas forcément suffisants.

Solutions

Il est possible de réaliser des scripts à exécuter pour s'assurer que l'environnement de production est prêt et capable de recevoir la livraison et la remise en production. Mais ces scripts sont difficiles à réaliser.

Du coup, il existe des solutions logicielles telles que Capistrano, Symfony Console ou encore Ant/Phing.

Et dans le monde du Java ?

C'est là qu'est intervenu l'expert Java cité plus haut. On a eu le droit à une démo de Maven, un outil de la fondation Apache qui est d'ailleurs assez bluffant/pratique. Voilà les différents le concernant et abordés :

  • Gestion technique complète ;
  • Standardisation totale ;
  • Centralisation des dépendances et de dés dépôts associés ;
  • Centralisation des propriétés des projets ;
  • Centralisation de la documentation ;
  • Gestion des versions, via des snapshots et des releases, 14 SCM gérés, dont SVN et Git ;
  • Possibilité de définir des archetypes, templates de projets pré-configurés ;
  • Standardisation de toutes les commandes ;
  • Configuration de l'intégration.

En gros le bazar permet de gérer un projet de sa création à sa livraison sans utiliser x outils différents. L'idée étant d'atteindre le concept de Software Factory.

Conclusion

Il existe un paquet d'outils mais ils sont tous indépendants les uns des autres, d'ailleurs ils sont tous fortement inspirés d'existants provenant de technologies telles que Java, RoR ou .Net. Pour cette dernière, j'ai beau apprécié le développement en .Net, je ne vois pas de lien d'outils entre .Net et PHP.

Heureusement les équipes de Symfony et de Zend Framework effectuent de plus en plus un rapprochement pour essayer d'adopter des standards communs.

L'équipe de Smile considère d'ailleurs Phing comme un ciment pour l'industrialisation de PHP.

Bilan à titre personnel

Je connaissais la plupart des outils, à minima de nom, j'en utilise certains, notamment atoum et le Zend Framework. J'ai déjà une nomenclature et des règles d'architecture mais j'ai quand même appris certaines choses dans cette soirée. Cependant je regrette quand même qu'on est assistés plus à un état de l'art qu'à une présentation de solution. Forcément, on a pris une claque avec la démo de Maven donc je me sens un peu allégé au niveau outillage. On a encore du boulot pour que PHP devienne aussi industrialisé que Java.

flattr this!

A propos de Mathieu

Ingénieur développeur web dans la vente par correspondance B2B, adepte de nouvelles technologies et d'innovation. Vous pouvez aussi me retrouver sur Twitter @mathrobin
Cette entrée a été publiée dans PHP, avec comme mot(s)-clef(s) , , , , , , , , , , , , , , , , , . Vous pouvez la mettre en favoris avec ce permalien.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Vous pouvez utiliser ces balises et attributs HTML : <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Articles liés