Utiliser PHP Mess Detector, PHP Code Sniffer et PHP Coding Standards Fixer pour vos projets PHP

Utiliser PHP Mess Detector, PHP Code Sniffer et PHP Coding Standards Fixer pour vos projets PHP

Après Gitorious et Redmine, Nous sommes en train de mettre en place en interne Jenkins pour assurer l’automatisation des tests de nos projets PHP et ainsi ajouter une couche supplémentaire de qualité lors du développement de nos projets.

Jenkins, c’est bien. Que chaque développeur s’assure que son code soit propre avant de livrer à ses collègues, c’est mieux.

Voici donc quelques outils à installer sur son poste pour pouvoir vérifier la qualité de son code. PHP Mess Detector, PHP Code Sniffer et PHP Coding Standards Fixer sont là pour vous aider

Installation des outils

Prérequis : PHP et pear accessibles en ligne de commande. Pour nos amis sur Windows, nous partirons du principe que vous disposez de la ligne de commande via Git Bash (voir ici notre article pour l’installer).

# Installation de PHPMD et PHP CodeSniffer
pear channel-discover pear.phpmd.org 
pear channel-discover pear.pdepend.org
pear install --alldeps phpmd/PHP_PMD
pear install PHP_CodeSniffer
# Configutation de CodeSniffer pour Symfony2
#
# Localiser le répertoire d'installation de PEAR
pear config-show | grep php_dir 
cd /path/to/pear/PHP/CodeSniffer/Standards 
git clone git://github.com/opensky/Symfony2-coding-standard.git Symfony2 
phpcs --config-set default_standard Symfony2
# Installation de PHP Coding Standard Fixer
# Pour utiliser CURL plutôt que wget, utiliser la commande ci-dessous
# curl http://cs.sensiolabs.org/get/php-cs-fixer.phar -o /usr/local/bin/php-cs-fixer
# Pour les personnes sur Windows, utiliser un répertoire accessible dans votre PATH
wget http://cs.sensiolabs.org/get/php-cs-fixer.phar -O /usr/local/bin/php-cs-fixer
# Donner ensuite les droits d'exécution à php-cs-fixer
chmod a+x /usr/local/bin/php-cs-fixer 

Une fois ces commandes exécutées, vous devriez disposer dans votre terminal des commandes phpcs, phpmd, php-cs-fixer

Utilisation des outils

PHP Mess Detector

PHP Mess Detector applique certaines règles pour vérifier la qualité de votre code. La liste des règles peut se trouver ici.

Les règles peuvent être contenues dans un fichier XML, dont voici un exemple :

<!-- Fichier phpmd.xml -->
<?xml version="1.0"?>
<ruleset name="PHPMD ACSEO RULESET"
 xmlns="http://pmd.sf.net/ruleset/1.0.0"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://pmd.sf.net/ruleset/1.0.0 http://pmd.sf.net/ruleset_xml_schema.xsd"
 xsi:noNamespaceSchemaLocation="http://pmd.sf.net/ruleset_xml_schema.xsd">
 <description>Règles PHP MD basées sur les règles de Sebastian Bergmann</description>
<!--
 <rule ref="rulesets/codesize.xml/CyclomaticComplexity" />
 <rule ref="rulesets/codesize.xml/NPathComplexity" />
-->
 <rule ref="rulesets/codesize.xml/ExcessiveClassComplexity" />
 <rule ref="rulesets/codesize.xml/ExcessiveClassLength" />
 <rule ref="rulesets/codesize.xml/ExcessiveMethodLength" />
 <rule ref="rulesets/codesize.xml/ExcessiveParameterList" />
<rule ref="rulesets/design.xml/EvalExpression" />
 <rule ref="rulesets/design.xml/ExitExpression" />
 <rule ref="rulesets/design.xml/GotoStatement" />
<rule ref="rulesets/naming.xml/ConstructorWithNameAsEnclosingClass" />
<rule ref="rulesets/unusedcode.xml/UnusedFormalParameter" />
 <rule ref="rulesets/unusedcode.xml/UnusedLocalVariable" />
 <rule ref="rulesets/unusedcode.xml/UnusedPrivateField" />
 <rule ref="rulesets/unusedcode.xml/UnusedPrivateMethod" />
</ruleset>

Pour générer le rapport de PHPMD avec ce jeu de règles :

cd /path/to/myproject 
#lance phpmd sur le répertoire src avec les règles contenues dans phpmd.xml et génère le rapport myrepport.html au format HTML
phpmd src html /path/to/phpmd.xml > /path/to/myreport.html

PHP Code Sniffer

PHP Code Sniffer a été configuré pour suivre le standard de Symfony2. Pour tester un fichier

phpcs /path/to/myrpoject/src/FunkyBundle/Controller/FunkyController.php

PHP Coding Standard Fixer

Mis à disposition par Sensio, cet outil permet de fixer un certains nombres de standards de développement pour vos fichiers sources.

Voici un exemple de commandes à utiliser. La liste des règles et des fixers disponibles peut se trouver ici

# Passe les tabulations en 4 espaces
php-cs-fixer fix /path/to/dir --fixers=indentation # Analyse du code selon le Standard PSR2 (standard par défaut)
php-cs-fixer fix /path/to/dir --level=psr2 # Analyse du code selon le Standard Symfony 2.0
php-cs-fixer fix /path/to/dir --config=sf20 # Analyse du code selon le Standard Symfony 2.1
php-cs-fixer fix /path/to/dir --config=sf21 

 En conclusion

Ces outils, simples d’utilisation, permettent d’augmenter la qualité du code produit, et facilitent ainsi sa maintenance, sa réutilisation et sa diffusion.

Tout au long du cycle de projet, Jenkins automatisera ces tests de façon à ajouter une qualité supplémentaire aux travaux livrés.