Symphonie pour PHP industrialisé en agilité majeure
1. Symphonie pour PHP industrialisé en agilité majeure Agile Grenoble 2011 - #agilegrenoble
2. PHP n’est pas que le “langage pour les nuls” PHP peut être aussi agile que d’autres A retenir en partant … Un projet PHP from scratch peut être clean En 4 étapes, on “refactore” un projet PHP legacy
4. Best of Media 40 millions de visiteurs uniques par mois Tom’s Hardware | Tom’s Guide | Tom’s Games News, Forum et Tech support 3 ème éditeur mondial de news High Tech 200 millions de pages vues par mois
5. Tom’s Labs Articles sur la R&D chez Best of Media http://www.tomslabs.com Machine learning, agilité, … ;)
6. Tests, BDD, TDD ? Public Projet Web ? Développeur, Product Owner, Scrummaster ? PHP ou Java ?
7. Au programme Boilerplate PHP Un projet from scratch Un projet legacy Comment planter le décor de mon projet ? A quoi ressemble un projet neuf ? Comment reprendre la main sur le legacy ?
8. Acte 1 : un boilerplate Le product owner Le développeur quick win Le développeur clean code
9. Le langage Quick and dirty avec PHP Projet Web Front Industriel 80% PHP / 10% Asp.net / 5% Java / … PHP : Facebook, Yahoo, Kelkoo, Best of Media … Choix pour le boilerplate : PHP
10. L’IDE Netbeans ou Eclipse ? Bloc note ou Vi ? Choix pour le boilerplate : Netbeans Netbeans intègre le mieux la syntaxe PHP
11. Le framework index.php … faut coder, faut coder ! Choix pour le boilerplate : Symfony 1.4 Ne pas réinventer la roue … framework Créer notre propre framework ? Choisir un framework populaire
12. Le gestionnaire de sources Choix pour le boilerplate : Git Avancer en parallèle Messagerie et Zip des fichiers le soir Git ou SVN ? Git : branch, local, bisect, …
13. Les tests Choix boilerplate : PHPUnit, Behat & Selenium Développeur sénior => pas de bug ! PHPUnit : standard pour les tests unitaires PHP Behat : test fonctionnel PHP Selenium : test d’intégration / sanity Test Driven Development
14. Intégration & déploiement continus Choix pour le boilerplate : Jenkins Jouer les tests au cas par cas à la main Automatiser la construction du projet Automatiser le déploiement de l’application Automatiser l’exécution de la suite de tests
15. Bilan du boilerplate PHP PHP : langage Web Symfony 1.4 : framework populaire Git : gestionnaire de sources fléxible Netbeans : IDE intégrant la syntaxe PHP PHPUnit & Behat : TDD & BDD PHP Jenkins : intégration & déploiement
16. Acte 2 : un nouveau projet Le product owner Le développeur clean code Le développeur clean code aussi ;)
17. Bootstrap du projet Déploiement automatique d’une coquille vide Je veux un forum Construire le forum de manière itérative Objectif : on livre en prod un squelette Je n’aurai pas de valeur produit ?
19. Menu démo du sprint 1 Passer l’application sous Git Dummy test unitaire en PHPUnit Créer un squelette d’application Premier test fonctionnel en Behat Packager en Maven Job dans Jenkins
20. Initier le framework + Git Télécharger Symfony 1.4 Configurer ses hosts Apache Raccourci : passage par Github Checklist des tâches :
21. Exécuter des tests unitaires Installer PHPUnit (via PEAR) Ecrire un test simple Vérifier que ça marche Checklist des tâches :
22. Exécuter des tests fonctionnels Installer Behat (via PEAR) Contrôler sa pyramide des tests Checklist des tâches : Scenario simple Ecrire les steps suggérés Implémenter le code et scenario à vert
23. La pyramide des tests http://www.tomslabs.com/index.php/2011/04/test-automation-strategy/ Maintenance des tests et temps d’exécution
24. Packager l’application Installer Maven2 Ecrire un pom.xml Lancer un mvn clean test VERT Checklist des tâches : Packager ça veut dire quoi ?
25. Créer un job Jenkins Créer un job dans jenkins Déployer le build lors d’un succès Checklist des tâches : Lancer périodiquement le build
27. Bilan du squelette PHP en prod “ Défoncer” les portes pour aller en prod 48 déploiements par jour ou plus ;) Surveillance de la pyramide des tests Itération sur une coquille vide
29. Acte 3 : reprendre un projet Le product owner Le développeur clean code - maverick Le développeur clean code - iceman
30. Contexte du projet Quelle stratégie adopter ? Forum avec des millions de topics Zéro bug autorisé Changer l’ancienne gestion des catégories 20 commiters
31. Test harness strategy 01 – Ecrire des scenarii 03 – Encapsuler dans une API 04 – Migrer l’API 02 – Implémenter les scenarii
37. Bilan du code PHP legacy Pas d’obligation de tout jeter Surveillance des bugs avec les scenarii du harnais 4 étapes pour aborder sereinement le refactoring
39. Ce qu’on a vu : Boilerplate PHP Un projet from scratch Un projet legacy Démarrez demain avec une stack PHP industrielle Mettre en place le déploiement d’un squelette Stratégie en 4 étapes avec un harnais de sécurité
40. Fin & Questions Jonathan Bonzy @jonathanbonzy Bernard Huguet @bernardhuguet Marc Nazarian @marcnazarian