![Page 1: Symphonie pour PHP industrialisé en agilité majeure](https://reader037.vdocuments.fr/reader037/viewer/2022110204/55d4c753bb61eb4f7c8b46e1/html5/thumbnails/1.jpg)
Symphonie pour PHP industrialisé en agilité majeure
Agile Grenoble 2011 - #agilegrenoble
![Page 2: Symphonie pour PHP industrialisé en agilité majeure](https://reader037.vdocuments.fr/reader037/viewer/2022110204/55d4c753bb61eb4f7c8b46e1/html5/thumbnails/2.jpg)
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
![Page 3: Symphonie pour PHP industrialisé en agilité majeure](https://reader037.vdocuments.fr/reader037/viewer/2022110204/55d4c753bb61eb4f7c8b46e1/html5/thumbnails/3.jpg)
Marc Nazarian
Bernard Huguet
Jonathan Bonzy
Acteurs
![Page 4: Symphonie pour PHP industrialisé en agilité majeure](https://reader037.vdocuments.fr/reader037/viewer/2022110204/55d4c753bb61eb4f7c8b46e1/html5/thumbnails/4.jpg)
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
![Page 5: Symphonie pour PHP industrialisé en agilité majeure](https://reader037.vdocuments.fr/reader037/viewer/2022110204/55d4c753bb61eb4f7c8b46e1/html5/thumbnails/5.jpg)
Tom’s Labs
Articles sur la R&D chez Best of Media
http://www.tomslabs.com
Machine learning, agilité, … ;)
![Page 6: Symphonie pour PHP industrialisé en agilité majeure](https://reader037.vdocuments.fr/reader037/viewer/2022110204/55d4c753bb61eb4f7c8b46e1/html5/thumbnails/6.jpg)
Tests, BDD, TDD ?
Public
Projet Web ?
Développeur, Product Owner, Scrummaster ?
PHP ou Java ?
![Page 7: Symphonie pour PHP industrialisé en agilité majeure](https://reader037.vdocuments.fr/reader037/viewer/2022110204/55d4c753bb61eb4f7c8b46e1/html5/thumbnails/7.jpg)
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 ?
![Page 8: Symphonie pour PHP industrialisé en agilité majeure](https://reader037.vdocuments.fr/reader037/viewer/2022110204/55d4c753bb61eb4f7c8b46e1/html5/thumbnails/8.jpg)
Acte 1 : un boilerplate
Le product owner
Le développeur quick win
Le développeur clean code
![Page 9: Symphonie pour PHP industrialisé en agilité majeure](https://reader037.vdocuments.fr/reader037/viewer/2022110204/55d4c753bb61eb4f7c8b46e1/html5/thumbnails/9.jpg)
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
![Page 10: Symphonie pour PHP industrialisé en agilité majeure](https://reader037.vdocuments.fr/reader037/viewer/2022110204/55d4c753bb61eb4f7c8b46e1/html5/thumbnails/10.jpg)
L’IDE
Netbeans ou Eclipse ?
Bloc note ou Vi ?
Choix pour le boilerplate : Netbeans
Netbeans intègre le mieux la syntaxe PHP
![Page 11: Symphonie pour PHP industrialisé en agilité majeure](https://reader037.vdocuments.fr/reader037/viewer/2022110204/55d4c753bb61eb4f7c8b46e1/html5/thumbnails/11.jpg)
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
![Page 12: Symphonie pour PHP industrialisé en agilité majeure](https://reader037.vdocuments.fr/reader037/viewer/2022110204/55d4c753bb61eb4f7c8b46e1/html5/thumbnails/12.jpg)
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, …
![Page 13: Symphonie pour PHP industrialisé en agilité majeure](https://reader037.vdocuments.fr/reader037/viewer/2022110204/55d4c753bb61eb4f7c8b46e1/html5/thumbnails/13.jpg)
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
![Page 14: Symphonie pour PHP industrialisé en agilité majeure](https://reader037.vdocuments.fr/reader037/viewer/2022110204/55d4c753bb61eb4f7c8b46e1/html5/thumbnails/14.jpg)
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
![Page 15: Symphonie pour PHP industrialisé en agilité majeure](https://reader037.vdocuments.fr/reader037/viewer/2022110204/55d4c753bb61eb4f7c8b46e1/html5/thumbnails/15.jpg)
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
![Page 16: Symphonie pour PHP industrialisé en agilité majeure](https://reader037.vdocuments.fr/reader037/viewer/2022110204/55d4c753bb61eb4f7c8b46e1/html5/thumbnails/16.jpg)
Acte 2 : un nouveau projet
Le product owner
Le développeur clean code
Le développeur clean code aussi ;)
![Page 17: Symphonie pour PHP industrialisé en agilité majeure](https://reader037.vdocuments.fr/reader037/viewer/2022110204/55d4c753bb61eb4f7c8b46e1/html5/thumbnails/17.jpg)
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 ?
![Page 18: Symphonie pour PHP industrialisé en agilité majeure](https://reader037.vdocuments.fr/reader037/viewer/2022110204/55d4c753bb61eb4f7c8b46e1/html5/thumbnails/18.jpg)
15 jours s’écoulent …
![Page 19: Symphonie pour PHP industrialisé en agilité majeure](https://reader037.vdocuments.fr/reader037/viewer/2022110204/55d4c753bb61eb4f7c8b46e1/html5/thumbnails/19.jpg)
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
![Page 20: Symphonie pour PHP industrialisé en agilité majeure](https://reader037.vdocuments.fr/reader037/viewer/2022110204/55d4c753bb61eb4f7c8b46e1/html5/thumbnails/20.jpg)
Initier le framework + Git
Télécharger Symfony 1.4
Configurer ses hosts Apache
Raccourci : passage par Github
Checklist des tâches :
![Page 21: Symphonie pour PHP industrialisé en agilité majeure](https://reader037.vdocuments.fr/reader037/viewer/2022110204/55d4c753bb61eb4f7c8b46e1/html5/thumbnails/21.jpg)
Exécuter des tests unitaires
Installer PHPUnit (via PEAR)
Ecrire un test simple
Vérifier que ça marche
Checklist des tâches :
![Page 22: Symphonie pour PHP industrialisé en agilité majeure](https://reader037.vdocuments.fr/reader037/viewer/2022110204/55d4c753bb61eb4f7c8b46e1/html5/thumbnails/22.jpg)
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
![Page 23: Symphonie pour PHP industrialisé en agilité majeure](https://reader037.vdocuments.fr/reader037/viewer/2022110204/55d4c753bb61eb4f7c8b46e1/html5/thumbnails/23.jpg)
La pyramide des tests
http://www.tomslabs.com/index.php/2011/04/test-automation-strategy/
Maintenance des tests et temps d’exécution
![Page 24: Symphonie pour PHP industrialisé en agilité majeure](https://reader037.vdocuments.fr/reader037/viewer/2022110204/55d4c753bb61eb4f7c8b46e1/html5/thumbnails/24.jpg)
Packager l’application
Installer Maven2
Ecrire un pom.xml
Lancer un mvn clean test VERT
Checklist des tâches :
Packager ça veut dire quoi ?
![Page 25: Symphonie pour PHP industrialisé en agilité majeure](https://reader037.vdocuments.fr/reader037/viewer/2022110204/55d4c753bb61eb4f7c8b46e1/html5/thumbnails/25.jpg)
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
![Page 26: Symphonie pour PHP industrialisé en agilité majeure](https://reader037.vdocuments.fr/reader037/viewer/2022110204/55d4c753bb61eb4f7c8b46e1/html5/thumbnails/26.jpg)
Deployment Pipeline
http://www.tomslabs.com/index.php/2011/06/development-to-production-pipeline/
![Page 27: Symphonie pour PHP industrialisé en agilité majeure](https://reader037.vdocuments.fr/reader037/viewer/2022110204/55d4c753bb61eb4f7c8b46e1/html5/thumbnails/27.jpg)
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
![Page 28: Symphonie pour PHP industrialisé en agilité majeure](https://reader037.vdocuments.fr/reader037/viewer/2022110204/55d4c753bb61eb4f7c8b46e1/html5/thumbnails/28.jpg)
Quelques mois plus tard …
![Page 29: Symphonie pour PHP industrialisé en agilité majeure](https://reader037.vdocuments.fr/reader037/viewer/2022110204/55d4c753bb61eb4f7c8b46e1/html5/thumbnails/29.jpg)
Acte 3 : reprendre un projet
Le product owner
Le développeur clean code - maverick
Le développeur clean code - iceman
![Page 30: Symphonie pour PHP industrialisé en agilité majeure](https://reader037.vdocuments.fr/reader037/viewer/2022110204/55d4c753bb61eb4f7c8b46e1/html5/thumbnails/30.jpg)
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
![Page 31: Symphonie pour PHP industrialisé en agilité majeure](https://reader037.vdocuments.fr/reader037/viewer/2022110204/55d4c753bb61eb4f7c8b46e1/html5/thumbnails/31.jpg)
Test harness strategy
01 – Ecrire des scenarii
03 – Encapsuler dans une API
04 – Migrer l’API
02 – Implémenter les scenarii
![Page 32: Symphonie pour PHP industrialisé en agilité majeure](https://reader037.vdocuments.fr/reader037/viewer/2022110204/55d4c753bb61eb4f7c8b46e1/html5/thumbnails/32.jpg)
Story board des mois passés …
![Page 33: Symphonie pour PHP industrialisé en agilité majeure](https://reader037.vdocuments.fr/reader037/viewer/2022110204/55d4c753bb61eb4f7c8b46e1/html5/thumbnails/33.jpg)
01 – Harnais de sécurité
![Page 34: Symphonie pour PHP industrialisé en agilité majeure](https://reader037.vdocuments.fr/reader037/viewer/2022110204/55d4c753bb61eb4f7c8b46e1/html5/thumbnails/34.jpg)
02 – Implémenter scenarii
![Page 35: Symphonie pour PHP industrialisé en agilité majeure](https://reader037.vdocuments.fr/reader037/viewer/2022110204/55d4c753bb61eb4f7c8b46e1/html5/thumbnails/35.jpg)
03 – Encapsuler dans une API
![Page 36: Symphonie pour PHP industrialisé en agilité majeure](https://reader037.vdocuments.fr/reader037/viewer/2022110204/55d4c753bb61eb4f7c8b46e1/html5/thumbnails/36.jpg)
04 – Migrer l’API
![Page 37: Symphonie pour PHP industrialisé en agilité majeure](https://reader037.vdocuments.fr/reader037/viewer/2022110204/55d4c753bb61eb4f7c8b46e1/html5/thumbnails/37.jpg)
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
![Page 38: Symphonie pour PHP industrialisé en agilité majeure](https://reader037.vdocuments.fr/reader037/viewer/2022110204/55d4c753bb61eb4f7c8b46e1/html5/thumbnails/38.jpg)
Bilan de cette symphonie …
![Page 39: Symphonie pour PHP industrialisé en agilité majeure](https://reader037.vdocuments.fr/reader037/viewer/2022110204/55d4c753bb61eb4f7c8b46e1/html5/thumbnails/39.jpg)
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é
![Page 40: Symphonie pour PHP industrialisé en agilité majeure](https://reader037.vdocuments.fr/reader037/viewer/2022110204/55d4c753bb61eb4f7c8b46e1/html5/thumbnails/40.jpg)
Fin & Questions
Jonathan Bonzy @jonathanbonzy
Bernard Huguet @bernardhuguet
Marc Nazarian @marcnazarian