40
Symphonie pour PHP industrialisé en agilité majeure Agile Grenoble 2011 - #agilegrenoble

Symphonie pour PHP industrialisé en agilité majeure

Embed Size (px)

Citation preview

Page 1: Symphonie pour PHP industrialisé en agilité majeure

Symphonie pour PHP industrialisé en agilité majeure

Agile Grenoble 2011 - #agilegrenoble

Page 2: Symphonie pour PHP industrialisé en agilité majeure

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

Marc Nazarian

Bernard Huguet

Jonathan Bonzy

Acteurs

Page 4: Symphonie pour PHP industrialisé en agilité majeure

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

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

Tests, BDD, TDD ?

Public

Projet Web ?

Développeur, Product Owner, Scrummaster ?

PHP ou Java ?

Page 7: Symphonie pour PHP industrialisé en agilité majeure

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

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

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

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

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

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

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

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

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

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

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

15 jours s’écoulent …

Page 19: Symphonie pour PHP industrialisé en agilité majeure

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

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

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

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

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

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

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

Deployment Pipeline

http://www.tomslabs.com/index.php/2011/06/development-to-production-pipeline/

Page 27: Symphonie pour PHP industrialisé en agilité majeure

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

Quelques mois plus tard …

Page 29: Symphonie pour PHP industrialisé en agilité majeure

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

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

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

Story board des mois passés …

Page 33: Symphonie pour PHP industrialisé en agilité majeure

01 – Harnais de sécurité

Page 34: Symphonie pour PHP industrialisé en agilité majeure

02 – Implémenter scenarii

Page 35: Symphonie pour PHP industrialisé en agilité majeure

03 – Encapsuler dans une API

Page 36: Symphonie pour PHP industrialisé en agilité majeure

04 – Migrer l’API

Page 37: Symphonie pour PHP industrialisé en agilité majeure

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

Bilan de cette symphonie …

Page 39: Symphonie pour PHP industrialisé en agilité majeure

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

Fin & Questions

Jonathan Bonzy @jonathanbonzy

Bernard Huguet @bernardhuguet

Marc Nazarian @marcnazarian