Minimiser les risques de bugs dans votre projet Symfony2 avec PHPMD

PHPMD ou PHP Mess Detector, est un analyseur de code PHP pour assurer la qualité de code. L’analyse de coude source permet de détecter plusieurs problèmes potentiels, tel-que :

  • Les bugs potentiels
  • Code non optimisé
  • Expressions trop compliquées (if-else, …)
  • Code non utilisé (variables, méthodes, propriétés)

Installation de PHPMD

PHP Mess Detector est disponible via PEAR :

pear channel-discover pear.phpmd.org
pear channel-discover pear.pdepend.org
pear install --alldeps phpmd/PHP_PMD

Nous pouvons aussi l’installer en récupérant son fichier .phar :

wget -c http://static.phpmd.org/php/latest/phpmd.phar
chmod +x phpmd.phar
mv phpmd.phar /usr/local/bin/phpmd

Utilisation de PHPMD

Afin de détecter ces problèmes, PHP Mess Detector applique certaines règles pour vérifier la qualité de votre code. La liste des règles peut se trouver ici.

L’utilisation de PHP est simple, il suffit de passer la liste des règles que nous désirons les vérifier en tant que paramètre séparé par une virgule ou passer un fichier xml contenant ces règles, le rapport généré peut être sous 3 formats : xml, text ou html.

#Vérifier le dossier src/
phpmd src html /path/to/phpmd.xml > myreport.html
#ou un fichier bien spécifique
phpmd src/AppBundle/Controller/DefaultController.php text codesize,unusedcode,naming

Voici un exemple d’un fichier XML contenant Les règles que je les utilise avec mes projets Symfony2

<?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 PHPMD pour Symfony2</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>

Le résultat de PHPMD ressemblera à ceci :

src/UserBundle/Controller/RegistrationController.php:227  Avoid unused parameters such as '$form'.
src/UserBundle/Controller/RegistrationController.php:227  Avoid unused parameters such as '$request'.
src/UserBundle/Controller/RegistrationController.php:227  Avoid unused parameters such as '$dispatcher'.
Publicités

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s