II. Maîtriser le cycle de vie d'un projet PHP▲
PHP a été créé le 8 juin 1995 pour répondre à des problématiques Web.
A cette époque, Perl occupait trop de ressources pour que le créateur, Rasmus Lerdorf, puisse l'utiliser sur une simple page de CV. Il a ainsi revu l'approche des applications Web et conçu une plate-forme de développement pragmatique et efficace.
Cette description de compteur de pages de CV est restée collée à PHP. Publié à code ouvert, il est pourtant entré rapidement dans une phase d'expérimentation auprès des internautes et des entreprises. Il s'agissait pour cette nouvelle technologie de passer sous les fourches caudines de l'utilité : développements rapides, montée en charge sur le grandes architectures, capacité à évoluer et interfaces avec toutes les technologiques utiles pour publier des informations sur le Web et s'interfacer avec le SI. Durant cette première partie de sa vie, PHP a conquis le coeur d'une communauté toujours plus grande, et est entré dans la vie de nombreuses entreprises.
Depuis, PHP est poursuivi par certaines de ses pratiques originelles. Plateforme parfaite pour les prototypes, nombre d'entre eux se sont retrouvés en production et ont évolué en de grands et vénérables sites. Dans l'ensemble, l'approche de développement reste encore trop souvent réactive et peu pro-active. Les projets adoptent souvent des capacités de réactions rapides : dès qu'un problème est détecté, il est remonté aux développeurs, analysé, corrigé et le code source est publié à nouveau.
"Fail early, fail often" a même été une devise pour un temps : PHP était parfait pour tester une idée rapidement et de manière économique. L'important était alors de détecter la fausse route le plus tôt possible (Fail Early), pour ne pas perdre trop de ressources ou de temps. La philosophie des sites Web en PHP est loin des techniques de lancement de fusée spatiale.
Pour les projets d'envergure, la pratique montre différents signes de vieillissement classiques des logiciels : les premières itérations sont rapides et spectaculaires; progressivement, avec chaque nouvelle version, le temps de développement s'allonge et les versions s'espacent. Le code mis en production, testé manuellement, rencontre des problèmes inattendus en production. Il faut donc consacrer de précieux moments à corriger des bogues qui, détectés trop tard, sont arrivés jusqu'en production. Ou bien il faut se plonger dans du code historique, avec plusieurs couches de corrections et de mises à niveau depuis PHP 4, PHP 5, l'ère des frameworks maison ou des frameworks objets. Tout cela s'accumule comme la poussière dans une maison trop longtemps fermée. Finalement, on n'ose plus entrer dans ce code et, le cas échéant, on fait appel à un audit pour pouvoir en reprendre la maîtrise.
PHP a toujours eu une approche pragmatique et efficace, qui lui a permis de compenser ces travers. Les méthodologies agiles sont déjà adoptées par de nombreuses équipes Web. Les IDE et les frameworks portent l'essentiel de l'effort de l'industrialisation. Ils assurent la promotion des tests unitaires, des composants réutilisables et des méthodologies. PHP n'a ni l'apanage, ni la primeur de ces approches, qui sont parfois aussi vieilles que l'informatique elle-même : il a toujours pratiqué l'emprunt du meilleur auprès des autres technologies.
Parmi les pratiques répandues dans l'industrie, on trouve certaines approches récurrentes. Nous avons pensé qu'il était bon de les rappeler aujourd'hui, car elles sont déjà matures pour PHP. Malheureusement, elles ne sont que très rarement rassemblées toutes dans un même projet.
- Faire appel à un audit expert
- Former les équipes
- Appliquer une convention de programmation
- Utiliser un dépôt de code
- Utiliser un framework
- Adopter un IDE de développement.
Par ailleurs, l'innovation est très présente en PHP et de nouvelles pratiques s'adaptent au Web et à PHP. Elles viennent compléter les approches traditionnelles. Elles sont novatrices et offrent de beaux défis, et des champs d'exploration encore vierges.
- Tests unitaires, IHM et fonctionnels
- Déploiement automatique
- Analyse statique
- Discipline et méthode de programmation
- Surveillance continue de la qualité
- Collaboration avec les utilisateurs.
Voyons maintenant toutes ces approches en détails.