Slide 1

Slide 1 text

No content

Slide 2

Slide 2 text

Comment surveiller la qualité de vos projets PHP au quotidien ?

Slide 3

Slide 3 text

« L'intégration continue est un ensemble de pratiques qui consistent à véri er à chaque changement du code source que le résultat des modi cations ne produit pas de régression de l'application en cours de développement » Wikipedia

Slide 4

Slide 4 text

Quels avantages ?

Slide 5

Slide 5 text

Quelles pratiques au quotidien ?

Slide 6

Slide 6 text

q  Maintenir un dépôt unique de code versionné q  Tous les développeurs committent quotidiennement q  Automatiser les compilations (builds) q  Tout commit doit compiler le tronc du code versionné q  Maintenir une compilation courte en permanence q  Rendre disponible le résultat du build à tout le monde q  Automatiser le déploiement

Slide 7

Slide 7 text

Alice Bob Carlos SCM Server CI Server Build Successful

Slide 8

Slide 8 text

Alice Bob Carlos SCM Server CI Server Build Failed Alerter l’équipe

Slide 9

Slide 9 text

Alice Bob Carlos SCM Server CI Server Build Successful

Slide 10

Slide 10 text

Quelles PIC sur le marché ?

Slide 11

Slide 11 text

No content

Slide 12

Slide 12 text

Mettre en œuvre une PIC pour PHP

Slide 13

Slide 13 text

q  Exécution de la suite de tests unitaires (PHPUnit) q  Génération du rapport de couverture de code (PHPUnit) q  Génération de la documentation d’API (PHPDocumentor) q  Génération du rapport des dépendances (PDepend) q  Analyse statique du code source (PMD) q  Détection des violations de codage (PHP_CodeSniffer) q  Détection du code dupliqué (PHPCPD) q  Génération du navigateur de code (PHP Code Browser)

Slide 14

Slide 14 text

No content

Slide 15

Slide 15 text

q  Hudson rebaptisé Jenkins en février 2011 q  Ecrit en Java q  Exécute des tâches Ant, Maven, Shell et Windows q  +300 plugins q  Analyse des rapports de compilation q  Génération de statistiques et de graphiques (métriques)

Slide 16

Slide 16 text

No content

Slide 17

Slide 17 text

http://jenkins-ci.org

Slide 18

Slide 18 text

$ java –jar jenkins.war

Slide 19

Slide 19 text

http://localhost:8080

Slide 20

Slide 20 text

q  XDebug q  PDepend q  PHP Mess Detector q  PHP CodeSniffer q  PHPUnit 3.6.x q  PHPCPD q  PHP Documentor q  PHP CodeBrowser

Slide 21

Slide 21 text

$ pecl install xdebug $ pear channel-discover pear.pdepend.org $ pear channel-discover pear.phpmd.org $ pear channel-discover pear.phpunit.de $ pear channel-discover components.ez.no $ pear channel-discover pear.symfony-project.com $ pear channel-discover pear.phing.info $ pear install phing/phing $ pear install pdepend/PHP_Depend-beta $ pear install phpmd/PHP_PMD-alpha $ pear install phpunit/phpcpd $ pear install PHPDocumentor $ pear install PHP_CodeSniffer $ pear install --alldeps phpunit/PHP_CodeBrowser-alpha $ pear install --alldeps phpunit/PHPUnit

Slide 22

Slide 22 text

Plugins Jenkins

Slide 23

Slide 23 text

q  Subversion q  Git q  Checkstyle q  Dry q  HTML Publisher q  Green Balls q  JDepend q  PMD q  Violations q  xUnit q  Clover

Slide 24

Slide 24 text

Démarrer un projet

Slide 25

Slide 25 text

Projet free-style

Slide 26

Slide 26 text

Con guration du projet

Slide 27

Slide 27 text

Con guration du dépôt Subversion

Slide 28

Slide 28 text

Dé nition des droits d’accès au SVN

Slide 29

Slide 29 text

Con guration du dépôt Git

Slide 30

Slide 30 text

Con guration des builds

Slide 31

Slide 31 text

Exécution et contrôle du build

Slide 32

Slide 32 text

Exécution et contrôle du build

Slide 33

Slide 33 text

Phing

Slide 34

Slide 34 text

q  Phing est un portage de Ant en PHP q  Outil d’automatisation de tâches q  Phing exécute des tâches à la suite q  Les tâches sont décrites dans un chier build.xml q  Supporte les dépendances entre les tâches q  Tâches prédé nies pour PHPUnit, Code Sniffer, PMD…

Slide 35

Slide 35 text

Slide 36

Slide 36 text

phing –f $WORKSPACE/build.xml build –Dws=$WORKSPACE

Slide 37

Slide 37 text

PHPUnit http://phpunit.de/

Slide 38

Slide 38 text

q  Exécuter les tests unitaires q  Générer un rapport JUnit q  Générer un rapport Clover XML q  Générer un rapport de couverture HTML

Slide 39

Slide 39 text

./tests/Syndication/ ./src/Syndication/

Slide 40

Slide 40 text

Slide 41

Slide 41 text

Con gurer la suite de tests unitaires

Slide 42

Slide 42 text

Con gurer la couverture de code

Slide 43

Slide 43 text

Analyse de la couverture de code

Slide 44

Slide 44 text

Analyse des rapports de tests unitaires

Slide 45

Slide 45 text

Analyse des rapports de tests unitaires

Slide 46

Slide 46 text

Publication de la couverture de code

Slide 47

Slide 47 text

Publication de la couverture de code

Slide 48

Slide 48 text

PHPDocumentor http://www.phpdoc.org/

Slide 49

Slide 49 text

Générer la documentation d’API

Slide 50

Slide 50 text

Slide 51

Slide 51 text

Publication de la documentation d’API

Slide 52

Slide 52 text

Publication de la documentation d’API

Slide 53

Slide 53 text

PHPCPD Copy Paste Detector https://github.com/sebastianbergmann/phpcpd

Slide 54

Slide 54 text

Rechercher les duplications de code

Slide 55

Slide 55 text

Slide 56

Slide 56 text

No content

Slide 57

Slide 57 text

No content

Slide 58

Slide 58 text

Ce graphique montre que le code dupliqué a bien été retiré dans le nouveau commit qui a donné lieu au dernier build. Le graphique ci-contre montre l’évolution du nombre de tests unitaires réussis au dernier build.

Slide 59

Slide 59 text

PHP Depend http://pdepend.org/

Slide 60

Slide 60 text

q  Complexité cyclomatique q  Qualité globale du code q  Nombre de classes / méthodes / fonctions / interfaces q  Nombre d’appels d’une méthode q  Nombre de propriétés / méthodes publiques vs privées q  Nombre de lignes de code en commentaires…. Analyse statique du code

Slide 61

Slide 61 text

Analyse statique du code build/logs/jdepend.xml

Slide 62

Slide 62 text

Slide 63

Slide 63 text

No content

Slide 64

Slide 64 text

PHP Mess Detector http://phpmd.org/

Slide 65

Slide 65 text

q  PHP Mess Detector est un portage en PHP de PMD (Java) q  Recherche de bugs potentiels q  Recherche de code mort (ie: méthodes non appelées) q  Code non optimisé q  Expressions trop complexes… Analyse statique du code

Slide 66

Slide 66 text

No content

Slide 67

Slide 67 text

Slide 68

Slide 68 text

No content

Slide 69

Slide 69 text

PHP Code Sniffer http://pear.php.net/manual/en/package.php.php-codesniffer.php

Slide 70

Slide 70 text

q  Analyse des violations de codage q  Nombreuses règles par défaut q  Standards prédé nis : PEAR, Zend, Squiz, PHPCS… q  Possibilité d’ajouter des règles supplémentaires

Slide 71

Slide 71 text

$ # Looking for the PEAR PHP directory $ pear config-show | grep php_dir $ # Move to the CodeSniffer standards folder $ cd /path/to/pear/PHP/CodeSniffer/Standards $ # Checkout the Symfony2 CodeSniffer standard from Github $ git clone git://github.com/opensky/Symfony2-coding-standard.git Symfony2 $ # Eventually, set Symfony2 as your default CodeSniffer standard $ phpcs --config-set default_standard Symfony2 Installation du standard Symfony2

Slide 72

Slide 72 text

Installation du standard Symfony2 build/logs/checkstyle.xml

Slide 73

Slide 73 text

Slide 74

Slide 74 text

No content

Slide 75

Slide 75 text

No content

Slide 76

Slide 76 text

PHP Code Browser https://github.com/mayflower/PHP_CodeBrowser

Slide 77

Slide 77 text

build/browser

Slide 78

Slide 78 text

Slide 79

Slide 79 text

No content

Slide 80

Slide 80 text

Prévenir plutôt que guérir!

Slide 81

Slide 81 text

q  Emails q  Twitter q  Jabber q  RSS q  SMS q  …

Slide 82

Slide 82 text

Comment industrialiser la PIC d’un projet PHP dans Jenkins ?

Slide 83

Slide 83 text

http://jenkins-php.org/

Slide 84

Slide 84 text

Aller plus loin avec Jenkins

Slide 85

Slide 85 text

q  Générer des archives PHAR, PEAR, TAR ou ZIP q  Automatiser le déploiement des builds stables q  Faciliter les audits de code q  Intégration avec un bug tracker (Trac, Redmine, Jira) q  Exécution de tests Sélénium / Fitness q  …

Slide 86

Slide 86 text

Merci !

Slide 87

Slide 87 text

Ques%ons?   92-98, boulevard Victor Hugo 92 115 Clichy Cedex [email protected] (+33 (0)1 40 99 82 11) sensiolabs.com - symfony.com – trainings.sensiolabs.com