Intégration à Eclipse d’outils d’assurance qualité pour PHP

L’écosystème PHP regorge d’outils permettant d’augmenter sensiblement la qualité du code produit par les équipes de développement. On peut noter les travaux avancés de Sebastian Bergmann et plus généralement des contributeurs de la PHP Quality Assurance Toolchain qui fournissent à la communauté un outillage précieux.

Ce billet explore les outils les plus couramment utilisés lors d’une analyse du code PHP. Souvent plébiscités dans un cycle d’intégration continue ; ils sont rarement intégrés à l’environnement de développement : lancement manuel via un terminal, pre-hook sur un serveur de versionning. L’objectif est ici d’augmenter l’interactivité de ces outils avec les développeurs et de leur permettre d’aborder des méthodologies comme le Test Driven Development (TDD) plus sereinement.

Prérequis

Zoom sur les outils

Nous n'allons pas aborder l'ensemble des outils utilisables, mais nous focaliser sur 2 d'entre eux.

PHP CodeSniffer

Détecte les violations de convention de nommage. PHP
CodeSniffer  propose plusieurs
conventions par défaut comme Zend ou PEAR ; il est possible de définir
facilement vos propres normes en écrivant votre propre standard, l’outil étant
développé en PHP.

http://pear.php.net/package/PHP_CodeSniffer

PHP Unit

PHP Unit propose une solution afin de couvrir
unitairement le code source produit. Il représente en soit 2 outils :
  • un Framework qui permet d’écrire facilement des tests
    unitaires pour l’univers PHP ;
  • un exécutable, pour lancer des tests écrits grâce au Framework dans le but d’en analyser les résultats.
Notes : il existe plusieurs extensions pour écrire des tests plus aboutis (mocking, intégration avec Sélénium, etc.), disponibles sur le dépôt PEAR pear.phpunit.de.
La documentation a été récemment traduite en français : http://www.phpunit.de/manual/3.6/fr/index.html

Intégration avec Eclipse

PHP Tool Integration (PTI)

PTI est un plugin Eclipse. Plus concrètement, il est construit de façon modulaire afin
de proposer plusieurs sous plugins (intégration d’outils à Eclipse, librairie
PEAR, interaction avec le parseur de validation d’Eclipse).

La librairie PEAR embarqué dispose déjà des outils abordés
précédemment : vous n’avez donc pas à les installer manuellement.

Des outils de métrique sont également de la partie avec PHP
Depend et PHP Mess Detector qui proposent une analyse statique du code source.

Site officiel : http://www.phpsrc.org/

Installation

L’installation testée avec la dernière version d’Eclipse
(Indigo 3.7) :

  • depuis Eclipse, accèdez au menu « Help » ->
    « Install New Software » ;
  • ajoutez le site http://www.phpsrc.org/eclipse/pti/
    puis lancez l’installation ;
  • redémarrez Eclipse.

Note : cette version, bien que fonctionnelle se fait
vieillissante ;  son développeur se
penche en ce moment sur une version 2 totalement refondue afin de faciliter les
contributions externes.

Configuration d'Eclipse

Pour fonctionner, les outils doivent utiliser votre
version de PHP5.3. Vous devez donc spécifier à Eclipse à quel emplacement elle
est installée via le menu « Windows » -> « Preferences »
-> « PHP » -> « PHP Executables ».

 Ajouter l'exécutable PHP à la configuration d'Eclipse

Validez : votre espace de travail Eclipse est maintenant configuré.

Configuration de votre projet

Nous allons maintenant configurer les outils par projet.
Vous pouvez cependant spécifier une configuration pour l’ensemble de votre espace
de travail depuis le menu « Window » -> « Preferences ».

Créez un nouveau projet PHP puis accédez à ses propriétés.
Le menu PHP Tools vous propose 4 outils à configurer : PHP CodeSniffer, PHP Copy/Paste Dectector, PHP Depend, PHPUnit.

Pour chacun des outils, vous devez sélectionner
l’exécutable PHP qui leur permettra de fonctionner ainsi que la librairie PEAR
que vous utilisez pour les détecter. Par défaut, le plugin PTI a installé une  librairie PEAR incluant les outils nécessaires
sous le nom « Internal ». 

Configuration de PHP CodeSniffer

Chaque outil possède ensuite ses propres réglages : ici pour PHPCodeSniffer il s'agira de sélectionner les standards d'écriture utilisés.

En action !

Pour la détection de différent par rapport à la norme de
codage choisie, le plugin est intégré au parseur d’Eclipse et se lancera dès
que des modifications seront apportées à un fichier. 

Exemple d'utilisation de PHPCodeSniffer intégré à Eclipse

Comme nous pouvons le voir, le passage vers la norme de
codage du CMS Drupal ne se fait pas en douceur : les messages d’erreurs
sont très envahissants.

Si nous désirons tester unitairement cette classe ;
le plugin peut se charger de générer le fichier de test via un clic droit sur
notre fichier -> New -> Other -> PHP -> PHPUnit -> PHPUnit Test
Case.

Génération d'une classe de test via l'assistant Eclipse

On peut noter qu’il est également possible de sélectionner
le template « PHP Class from PHPUnit Test Case qui, comme son nom
l’indique, vous offre la possibilité d’écrire en premier lieu votre classe de
test afin de générer le squelette de votre future classe.

L’arborescence est alors déployée et la classe de test est
déjà pré-remplie.

Résultat de la génération de l'assistant d'Eclipse pour PHPUnit

Il est intéressant de noter qu’aucun standard fourni avec
PHP CodeSniffer n’a permis de valider le fichier généré. Nous pouvons alors
lancer notre test, depuis l’un des boutons situés au-dessus de l’éditeur de
texte. Si vous lancez le test avec l’option de couverture de code, un message
d’information vous avertira des portions qui n’ont pas été testées :

Lancer un test unitaire via Eclipse

La vue PHPUnit peut alors vous informer des tests qui ont
échoué :

Vue Eclipse de PHPUnit : affichage des résultats

Ce billet, déjà bien
long, s'arrête ici ; si vous désirez approfondir la discussion autour de l’un
des outils en particulier, n’hésitez pas, exprimez-vous !

4 commentaires

  1. C’est une vraie mine d’or. Il y aura-t-il une manière d’installer le pack à partir d’un fichier archive? sans connexion internet?

  2. Le plugin PTI (PHPsrc) est il compatible avec la dernière version d éclipse PDT 3.8… Les items du menu restent grises…frustrant !

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Captcha *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.