Symphonie pour PHP industrialisé en agilité majeure

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