Comment assurer le suivi qualite du code source d'une application web? Ce n'est pas une tache aisée ! C’est d’autant plus vrai que PHP est encore considéré aujourd'hui comme un langage peu professionnel. PHP est pourtant un langage dont l'outillage n'a rien a envier a l'ensemble de ses concurrents. L'objectif de cette conférence est de présenter les bonnes pratiques à adopter ainsi que les différents outils a mettre en oeuvre afin de contrôler la qualité d'un projet PHP au quotidien. Un focus particulier sera porté sur la plateforme d'intégration continue Jenkins, les tests unitaires ou bien encore la récupération et l'interprétation des métriques collectées.
3. « 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
6. 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
7. Alice
Build
Successful
SCM Server
Bob
Carlos
CI Server
8. Alice
Build Failed
SCM Server
Bob
Carlos Alerter l’équipe CI Server
9. Alice
Build
Successful
SCM Server
Bob
Carlos
CI Server
13. 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)
14.
15. 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)
34. 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…
58. 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.
60. Analyse statique du code
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….
65. Analyse statique du code
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…
70. 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
71. Installation du standard Symfony2
$ # 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
85. 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 …