View
3.941
Download
0
Category
Preview:
Citation preview
Symphonie pour PHP industrialisé en agilité majeure
Agile Grenoble 2011 - #agilegrenoble
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
Marc Nazarian
Bernard Huguet
Jonathan Bonzy
Acteurs
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
Tom’s Labs
Articles sur la R&D chez Best of Media
http://www.tomslabs.com
Machine learning, agilité, … ;)
Tests, BDD, TDD ?
Public
Projet Web ?
Développeur, Product Owner, Scrummaster ?
PHP ou Java ?
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 ?
Acte 1 : un boilerplate
Le product owner
Le développeur quick win
Le développeur clean code
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
L’IDE
Netbeans ou Eclipse ?
Bloc note ou Vi ?
Choix pour le boilerplate : Netbeans
Netbeans intègre le mieux la syntaxe PHP
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
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, …
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
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
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
Acte 2 : un nouveau projet
Le product owner
Le développeur clean code
Le développeur clean code aussi ;)
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 ?
15 jours s’écoulent …
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
Initier le framework + Git
Télécharger Symfony 1.4
Configurer ses hosts Apache
Raccourci : passage par Github
Checklist des tâches :
Exécuter des tests unitaires
Installer PHPUnit (via PEAR)
Ecrire un test simple
Vérifier que ça marche
Checklist des tâches :
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
La pyramide des tests
http://www.tomslabs.com/index.php/2011/04/test-automation-strategy/
Maintenance des tests et temps d’exécution
Packager l’application
Installer Maven2
Ecrire un pom.xml
Lancer un mvn clean test VERT
Checklist des tâches :
Packager ça veut dire quoi ?
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
Deployment Pipeline
http://www.tomslabs.com/index.php/2011/06/development-to-production-pipeline/
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
Quelques mois plus tard …
Acte 3 : reprendre un projet
Le product owner
Le développeur clean code - maverick
Le développeur clean code - iceman
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
Test harness strategy
01 – Ecrire des scenarii
03 – Encapsuler dans une API
04 – Migrer l’API
02 – Implémenter les scenarii
Story board des mois passés …
01 – Harnais de sécurité
02 – Implémenter scenarii
03 – Encapsuler dans une API
04 – Migrer l’API
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
Bilan de cette symphonie …
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é
Fin & Questions
Jonathan Bonzy @jonathanbonzy
Bernard Huguet @bernardhuguet
Marc Nazarian @marcnazarian
Recommended