SlideShare une entreprise Scribd logo
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

Contenu connexe

Tendances

Intégration continue transco
Intégration continue transcoIntégration continue transco
Intégration continue transco
laurent_opnworks
 
20081023 - Paris Vi Master STL TA - Initiation Maven
20081023 - Paris Vi Master STL TA - Initiation Maven20081023 - Paris Vi Master STL TA - Initiation Maven
20081023 - Paris Vi Master STL TA - Initiation Maven
Arnaud Héritier
 
XebiCon'17 : Kotlin, état de l'art - Benjamin Lacroix et Sergio Dos Santos
XebiCon'17 : Kotlin, état de l'art - Benjamin Lacroix et Sergio Dos SantosXebiCon'17 : Kotlin, état de l'art - Benjamin Lacroix et Sergio Dos Santos
XebiCon'17 : Kotlin, état de l'art - Benjamin Lacroix et Sergio Dos Santos
Publicis Sapient Engineering
 
[Codeur en seine] Les Pipelines Jenkins dans la vraie vie
[Codeur en seine] Les Pipelines Jenkins dans la vraie vie[Codeur en seine] Les Pipelines Jenkins dans la vraie vie
[Codeur en seine] Les Pipelines Jenkins dans la vraie vie
Jean-Philippe Briend
 
Intégration continue
Intégration continueIntégration continue
Intégration continue
Klee Group
 
Realworld cd pipelines
Realworld cd pipelines Realworld cd pipelines
Realworld cd pipelines
TREEPTIK
 
Integration continue - Introduction
Integration continue - IntroductionIntegration continue - Introduction
Integration continue - Introduction
Olivier ETIENNE
 
JENKINS_OWF11_OSDC_PARIS20110924
JENKINS_OWF11_OSDC_PARIS20110924JENKINS_OWF11_OSDC_PARIS20110924
JENKINS_OWF11_OSDC_PARIS20110924
Gregory Boissinot
 
Déploiement, orchestration & sécurisation d’APIs
Déploiement, orchestration & sécurisation d’APIsDéploiement, orchestration & sécurisation d’APIs
Déploiement, orchestration & sécurisation d’APIs
Nicolas Herbaut
 
Intégration Continue PHP avec Jenkins CI
Intégration Continue PHP avec Jenkins CIIntégration Continue PHP avec Jenkins CI
Intégration Continue PHP avec Jenkins CI
Hugo Hamon
 
20081008 - Tours Jug - Apache Maven
20081008  - Tours Jug - Apache Maven20081008  - Tours Jug - Apache Maven
20081008 - Tours Jug - Apache Maven
Arnaud Héritier
 
Comment identifier et analyser les contenus conspiratoire sur Youtube
Comment identifier et analyser les contenus conspiratoire sur YoutubeComment identifier et analyser les contenus conspiratoire sur Youtube
Comment identifier et analyser les contenus conspiratoire sur Youtube
Nicolas Herbaut
 
JCertif 2012 : Integration continue avec Jenkins
JCertif 2012 : Integration continue avec JenkinsJCertif 2012 : Integration continue avec Jenkins
JCertif 2012 : Integration continue avec Jenkins
Rossi Oddet
 
L'integration continue pour tous
L'integration continue pour tousL'integration continue pour tous
L'integration continue pour tous
Aurelien Navarre
 
Paris Web 2015 - Atelier desendettement javascript
Paris Web 2015 - Atelier desendettement javascriptParis Web 2015 - Atelier desendettement javascript
Paris Web 2015 - Atelier desendettement javascript
Michael Akbaraly
 
BBL - TDD pour les DevOps - Puppet
BBL - TDD pour les DevOps - PuppetBBL - TDD pour les DevOps - Puppet
BBL - TDD pour les DevOps - Puppet
Olivier BAZOUD
 
Principes de L'intégration Continue
Principes de L'intégration ContinuePrincipes de L'intégration Continue
Principes de L'intégration Continue
Xavier Warzee
 
Concept de l’Intégration Continue
Concept de l’Intégration ContinueConcept de l’Intégration Continue
Concept de l’Intégration Continue
Frédéric Sagez
 
Rappels Modularisation application C/C++
Rappels Modularisation application C/C++Rappels Modularisation application C/C++
Rappels Modularisation application C/C++
Sylvain Leroy
 

Tendances (20)

Intégration continue transco
Intégration continue transcoIntégration continue transco
Intégration continue transco
 
20081023 - Paris Vi Master STL TA - Initiation Maven
20081023 - Paris Vi Master STL TA - Initiation Maven20081023 - Paris Vi Master STL TA - Initiation Maven
20081023 - Paris Vi Master STL TA - Initiation Maven
 
XebiCon'17 : Kotlin, état de l'art - Benjamin Lacroix et Sergio Dos Santos
XebiCon'17 : Kotlin, état de l'art - Benjamin Lacroix et Sergio Dos SantosXebiCon'17 : Kotlin, état de l'art - Benjamin Lacroix et Sergio Dos Santos
XebiCon'17 : Kotlin, état de l'art - Benjamin Lacroix et Sergio Dos Santos
 
[Codeur en seine] Les Pipelines Jenkins dans la vraie vie
[Codeur en seine] Les Pipelines Jenkins dans la vraie vie[Codeur en seine] Les Pipelines Jenkins dans la vraie vie
[Codeur en seine] Les Pipelines Jenkins dans la vraie vie
 
Intégration continue
Intégration continueIntégration continue
Intégration continue
 
Realworld cd pipelines
Realworld cd pipelines Realworld cd pipelines
Realworld cd pipelines
 
Integration continue - Introduction
Integration continue - IntroductionIntegration continue - Introduction
Integration continue - Introduction
 
JENKINS_OWF11_OSDC_PARIS20110924
JENKINS_OWF11_OSDC_PARIS20110924JENKINS_OWF11_OSDC_PARIS20110924
JENKINS_OWF11_OSDC_PARIS20110924
 
Déploiement, orchestration & sécurisation d’APIs
Déploiement, orchestration & sécurisation d’APIsDéploiement, orchestration & sécurisation d’APIs
Déploiement, orchestration & sécurisation d’APIs
 
Intégration Continue PHP avec Jenkins CI
Intégration Continue PHP avec Jenkins CIIntégration Continue PHP avec Jenkins CI
Intégration Continue PHP avec Jenkins CI
 
20081008 - Tours Jug - Apache Maven
20081008  - Tours Jug - Apache Maven20081008  - Tours Jug - Apache Maven
20081008 - Tours Jug - Apache Maven
 
JENKINS_BreizhJUG_20111003
JENKINS_BreizhJUG_20111003JENKINS_BreizhJUG_20111003
JENKINS_BreizhJUG_20111003
 
Comment identifier et analyser les contenus conspiratoire sur Youtube
Comment identifier et analyser les contenus conspiratoire sur YoutubeComment identifier et analyser les contenus conspiratoire sur Youtube
Comment identifier et analyser les contenus conspiratoire sur Youtube
 
JCertif 2012 : Integration continue avec Jenkins
JCertif 2012 : Integration continue avec JenkinsJCertif 2012 : Integration continue avec Jenkins
JCertif 2012 : Integration continue avec Jenkins
 
L'integration continue pour tous
L'integration continue pour tousL'integration continue pour tous
L'integration continue pour tous
 
Paris Web 2015 - Atelier desendettement javascript
Paris Web 2015 - Atelier desendettement javascriptParis Web 2015 - Atelier desendettement javascript
Paris Web 2015 - Atelier desendettement javascript
 
BBL - TDD pour les DevOps - Puppet
BBL - TDD pour les DevOps - PuppetBBL - TDD pour les DevOps - Puppet
BBL - TDD pour les DevOps - Puppet
 
Principes de L'intégration Continue
Principes de L'intégration ContinuePrincipes de L'intégration Continue
Principes de L'intégration Continue
 
Concept de l’Intégration Continue
Concept de l’Intégration ContinueConcept de l’Intégration Continue
Concept de l’Intégration Continue
 
Rappels Modularisation application C/C++
Rappels Modularisation application C/C++Rappels Modularisation application C/C++
Rappels Modularisation application C/C++
 

En vedette

La Hora
La HoraLa Hora
Sociedad De La InformacióN Y Del Conocimiento
Sociedad De La InformacióN Y Del ConocimientoSociedad De La InformacióN Y Del Conocimiento
Sociedad De La InformacióN Y Del Conocimiento
guest5a81c9a
 
Exposicion Costos Ambientales111
Exposicion Costos Ambientales111Exposicion Costos Ambientales111
Exposicion Costos Ambientales111
FRAYDERLEY
 
Fr 4 oat 4 practice
Fr 4 oat 4 practiceFr 4 oat 4 practice
Fr 4 oat 4 practice
Doug Doug
 
El conocimiento, insumo para los Estado y el Poder
El conocimiento, insumo para los Estado y el PoderEl conocimiento, insumo para los Estado y el Poder
El conocimiento, insumo para los Estado y el Poder
Universidad de Córdoba
 
CrééR Un Chapitre Afrique De L Ouest Et Du Centre Jean Marc Lezcano - Club ...
CrééR Un Chapitre Afrique De L Ouest Et Du Centre   Jean Marc Lezcano - Club ...CrééR Un Chapitre Afrique De L Ouest Et Du Centre   Jean Marc Lezcano - Club ...
CrééR Un Chapitre Afrique De L Ouest Et Du Centre Jean Marc Lezcano - Club ...
SOGETI
 
Islam et le développement
Islam et le développement Islam et le développement
Islam et le développement
centurywa
 
Ad words conférence planete-ecommerce-17-avril-2013
Ad words  conférence planete-ecommerce-17-avril-2013Ad words  conférence planete-ecommerce-17-avril-2013
Ad words conférence planete-ecommerce-17-avril-2013
webconnexion
 
Les sacrements et le pere laval 1
Les sacrements et le pere laval 1Les sacrements et le pere laval 1
Les sacrements et le pere laval 1
VirginieJulien
 
Jeunes, information, Internet
Jeunes, information, InternetJeunes, information, Internet
Jeunes, information, Internet
Gérard Marquié
 
Realidad Aumentada
Realidad AumentadaRealidad Aumentada
PresentacióN Inicial Clase 3
PresentacióN Inicial Clase 3PresentacióN Inicial Clase 3
PresentacióN Inicial Clase 3
Christian Sequin
 
Proyecto
ProyectoProyecto
Inscripcion Curso Atlas Moodle
Inscripcion Curso Atlas MoodleInscripcion Curso Atlas Moodle
Inscripcion Curso Atlas Moodle
María Cristina Pérez Pietri
 

En vedette (20)

La Hora
La HoraLa Hora
La Hora
 
Sociedad De La InformacióN Y Del Conocimiento
Sociedad De La InformacióN Y Del ConocimientoSociedad De La InformacióN Y Del Conocimiento
Sociedad De La InformacióN Y Del Conocimiento
 
Md1 evaluation du diamètre 2
Md1 evaluation du diamètre 2Md1 evaluation du diamètre 2
Md1 evaluation du diamètre 2
 
Exposicion Costos Ambientales111
Exposicion Costos Ambientales111Exposicion Costos Ambientales111
Exposicion Costos Ambientales111
 
Web 2.0
Web 2.0Web 2.0
Web 2.0
 
Fr 4 oat 4 practice
Fr 4 oat 4 practiceFr 4 oat 4 practice
Fr 4 oat 4 practice
 
Revue de presse
Revue de presseRevue de presse
Revue de presse
 
El conocimiento, insumo para los Estado y el Poder
El conocimiento, insumo para los Estado y el PoderEl conocimiento, insumo para los Estado y el Poder
El conocimiento, insumo para los Estado y el Poder
 
CrééR Un Chapitre Afrique De L Ouest Et Du Centre Jean Marc Lezcano - Club ...
CrééR Un Chapitre Afrique De L Ouest Et Du Centre   Jean Marc Lezcano - Club ...CrééR Un Chapitre Afrique De L Ouest Et Du Centre   Jean Marc Lezcano - Club ...
CrééR Un Chapitre Afrique De L Ouest Et Du Centre Jean Marc Lezcano - Club ...
 
Prg nddm ete2013-of
Prg nddm ete2013-ofPrg nddm ete2013-of
Prg nddm ete2013-of
 
Cap02 transmisoresa creus
Cap02 transmisoresa creusCap02 transmisoresa creus
Cap02 transmisoresa creus
 
Islam et le développement
Islam et le développement Islam et le développement
Islam et le développement
 
Ad words conférence planete-ecommerce-17-avril-2013
Ad words  conférence planete-ecommerce-17-avril-2013Ad words  conférence planete-ecommerce-17-avril-2013
Ad words conférence planete-ecommerce-17-avril-2013
 
Les sacrements et le pere laval 1
Les sacrements et le pere laval 1Les sacrements et le pere laval 1
Les sacrements et le pere laval 1
 
Jeunes, information, Internet
Jeunes, information, InternetJeunes, information, Internet
Jeunes, information, Internet
 
Realidad Aumentada
Realidad AumentadaRealidad Aumentada
Realidad Aumentada
 
PresentacióN Inicial Clase 3
PresentacióN Inicial Clase 3PresentacióN Inicial Clase 3
PresentacióN Inicial Clase 3
 
Armvop programme scientifique
Armvop programme scientifiqueArmvop programme scientifique
Armvop programme scientifique
 
Proyecto
ProyectoProyecto
Proyecto
 
Inscripcion Curso Atlas Moodle
Inscripcion Curso Atlas MoodleInscripcion Curso Atlas Moodle
Inscripcion Curso Atlas Moodle
 

Similaire à Symphonie pour PHP industrialisé en agilité majeure

Php sous Windows - webcamps Paris
Php sous Windows - webcamps ParisPhp sous Windows - webcamps Paris
Php sous Windows - webcamps Paris
LeTesteur
 
Mettez du libre dans vos projets web
Mettez du libre dans vos projets webMettez du libre dans vos projets web
Mettez du libre dans vos projets web
Pierre Rudloff
 
Industrialisation PHP - Canal+
Industrialisation PHP - Canal+Industrialisation PHP - Canal+
Industrialisation PHP - Canal+
ekino
 
20090615 - Ch'ti JUG - Apache Maven
20090615 - Ch'ti JUG - Apache Maven20090615 - Ch'ti JUG - Apache Maven
20090615 - Ch'ti JUG - Apache Maven
Arnaud Héritier
 
Industrialisation bar camp2010
Industrialisation bar camp2010Industrialisation bar camp2010
Industrialisation bar camp2010
Lushkah911
 
Princesse CI au pays des tests
Princesse CI au pays des testsPrincesse CI au pays des tests
Princesse CI au pays des tests
Hubert Lenoir
 
Industrialisez vos projets Php
Industrialisez vos projets Php Industrialisez vos projets Php
Industrialisez vos projets Php
ALTER WAY
 
At2008 Grenoble Hugonnet Sanlaville Public
At2008 Grenoble Hugonnet Sanlaville PublicAt2008 Grenoble Hugonnet Sanlaville Public
At2008 Grenoble Hugonnet Sanlaville Public
Emmanuel Hugonnet
 
Formation Extreme Programming, Tests unitaires, travail collaboratif
Formation Extreme Programming, Tests unitaires, travail collaboratifFormation Extreme Programming, Tests unitaires, travail collaboratif
Formation Extreme Programming, Tests unitaires, travail collaboratif
kemenaran
 
Industrialisation des développements logiciels
Industrialisation des développements logicielsIndustrialisation des développements logiciels
Industrialisation des développements logiciels
Sylvain Leroy
 
Des bancs de l’école à la réalité en entreprise, retour d’expérience sur...
Des bancs de l’école à la réalité en entreprise, retour d’expérience sur...Des bancs de l’école à la réalité en entreprise, retour d’expérience sur...
Des bancs de l’école à la réalité en entreprise, retour d’expérience sur...
Scaleway
 
20081113 - Nantes Jug - Apache Maven
20081113 - Nantes Jug - Apache Maven20081113 - Nantes Jug - Apache Maven
20081113 - Nantes Jug - Apache Maven
Arnaud Héritier
 
Performance au quotidien dans un environnement symfony
Performance au quotidien dans un environnement symfonyPerformance au quotidien dans un environnement symfony
Performance au quotidien dans un environnement symfony
Xavier Leune
 
Intégration continue des projets PHP avec Jenkins
Intégration continue des projets PHP avec JenkinsIntégration continue des projets PHP avec Jenkins
Intégration continue des projets PHP avec Jenkins
Hugo Hamon
 
Comment travailler avec les logiciels Open Source
Comment travailler avec les logiciels Open SourceComment travailler avec les logiciels Open Source
Comment travailler avec les logiciels Open Source
Christian Charreyre
 
Python application packaging @ MeilleursAgents
Python application packaging @ MeilleursAgentsPython application packaging @ MeilleursAgents
Python application packaging @ MeilleursAgents
Nicolas Mussat
 
wallabag, comment on a migré vers symfony3
wallabag, comment on a migré vers symfony3wallabag, comment on a migré vers symfony3
wallabag, comment on a migré vers symfony3
Nicolas Lœuillet
 
Usine logicielle à Orange Labs
Usine logicielle à Orange LabsUsine logicielle à Orange Labs
Usine logicielle à Orange Labs
Emmanuel Hugonnet
 
Catalogue PFE 2019
Catalogue PFE 2019Catalogue PFE 2019
Catalogue PFE 2019
NeoXam Tunisia
 

Similaire à Symphonie pour PHP industrialisé en agilité majeure (20)

Php sous Windows - webcamps Paris
Php sous Windows - webcamps ParisPhp sous Windows - webcamps Paris
Php sous Windows - webcamps Paris
 
Mettez du libre dans vos projets web
Mettez du libre dans vos projets webMettez du libre dans vos projets web
Mettez du libre dans vos projets web
 
Industrialisation PHP - Canal+
Industrialisation PHP - Canal+Industrialisation PHP - Canal+
Industrialisation PHP - Canal+
 
20090615 - Ch'ti JUG - Apache Maven
20090615 - Ch'ti JUG - Apache Maven20090615 - Ch'ti JUG - Apache Maven
20090615 - Ch'ti JUG - Apache Maven
 
Industrialisation bar camp2010
Industrialisation bar camp2010Industrialisation bar camp2010
Industrialisation bar camp2010
 
Princesse CI au pays des tests
Princesse CI au pays des testsPrincesse CI au pays des tests
Princesse CI au pays des tests
 
Industrialisez vos projets Php
Industrialisez vos projets Php Industrialisez vos projets Php
Industrialisez vos projets Php
 
At2008 Grenoble Hugonnet Sanlaville Public
At2008 Grenoble Hugonnet Sanlaville PublicAt2008 Grenoble Hugonnet Sanlaville Public
At2008 Grenoble Hugonnet Sanlaville Public
 
Formation Extreme Programming, Tests unitaires, travail collaboratif
Formation Extreme Programming, Tests unitaires, travail collaboratifFormation Extreme Programming, Tests unitaires, travail collaboratif
Formation Extreme Programming, Tests unitaires, travail collaboratif
 
Industrialisation des développements logiciels
Industrialisation des développements logicielsIndustrialisation des développements logiciels
Industrialisation des développements logiciels
 
Des bancs de l’école à la réalité en entreprise, retour d’expérience sur...
Des bancs de l’école à la réalité en entreprise, retour d’expérience sur...Des bancs de l’école à la réalité en entreprise, retour d’expérience sur...
Des bancs de l’école à la réalité en entreprise, retour d’expérience sur...
 
20081113 - Nantes Jug - Apache Maven
20081113 - Nantes Jug - Apache Maven20081113 - Nantes Jug - Apache Maven
20081113 - Nantes Jug - Apache Maven
 
Performance au quotidien dans un environnement symfony
Performance au quotidien dans un environnement symfonyPerformance au quotidien dans un environnement symfony
Performance au quotidien dans un environnement symfony
 
Intégration continue des projets PHP avec Jenkins
Intégration continue des projets PHP avec JenkinsIntégration continue des projets PHP avec Jenkins
Intégration continue des projets PHP avec Jenkins
 
Comment travailler avec les logiciels Open Source
Comment travailler avec les logiciels Open SourceComment travailler avec les logiciels Open Source
Comment travailler avec les logiciels Open Source
 
Python application packaging @ MeilleursAgents
Python application packaging @ MeilleursAgentsPython application packaging @ MeilleursAgents
Python application packaging @ MeilleursAgents
 
wallabag, comment on a migré vers symfony3
wallabag, comment on a migré vers symfony3wallabag, comment on a migré vers symfony3
wallabag, comment on a migré vers symfony3
 
Usine logicielle à Orange Labs
Usine logicielle à Orange LabsUsine logicielle à Orange Labs
Usine logicielle à Orange Labs
 
Catalogue PFE 2019
Catalogue PFE 2019Catalogue PFE 2019
Catalogue PFE 2019
 
Normandy JUG integration Continue
Normandy JUG integration ContinueNormandy JUG integration Continue
Normandy JUG integration Continue
 

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
  • 3. Marc Nazarian Bernard Huguet Jonathan Bonzy Acteurs
  • 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
  • 28. Quelques mois plus tard …
  • 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
  • 32. Story board des mois passés …
  • 33. 01 – Harnais de sécurité
  • 35. 03 – Encapsuler dans une API
  • 36. 04 – Migrer l’API
  • 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
  • 38. Bilan de cette symphonie …
  • 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