AGL, PHP et open-source

Depuis longtemps, le PHP est employé pour réaliser des projets d'envergures. Dans cette optique, il est nécessaire de soutenir l'effort de développement par une démarche d'AGL sérieuse.
La construction d'un AGL passe par la découverte, le test et la qualification d'outils. Cela demande un effort de veille technologique important. De plus, un AGL doit être vivant et on ne doit pas hésiter à abandonner un outil pour un autre. Dans ce cas, un outil sans coût de licence sera toujours plus facile à adopter/abandonner qu'un outil payant. Par ailleurs, la force d'un AGL est d'être composé d'outils qui communiquent entre eux. Cela passe par une certaine ouverture, un respect des standards et un fonctionnement extensible, qualité a priori détenue par les outils open-source.

Spécification et maquettage

La réalisation d'une application web comporte un certain nombre de spécificités. L'interface en est une, on travaille pour réaliser une application qui sera utilisée via un navigateur dont on ne maîtrise pas le fonctionnement futur. Comme indiqué dans le billet précédent (quels types d'outils pour maquettage html dans un AGL), il n'y a pas réellement d'outils adaptés à cette tâche. Toutefois, on ne présente plus la webdevelopper toolbar et Firebug, 2 plugs-in de firefox devenus indispensables pour accompagner le webdesign.
Côté Internet Explorer, on connait moins la debugbar qui, sans atteindre le niveau de fonctionnalité de ce qu'on peut avoir dans firefox, dépanne bien les webdesigners.

Conception

(voir quel est ce type d'outil (conception) dans une démarche d'AGL) La référence reste encore et toujours Rational Rose. Toutefois Il existe de nombreux outils de conception open-source. On trouve notamment ArgoUML de Tigris (écris en Java donc multi-plateforme) mais l'apparence et l'ergonomie risque d'en rebuter plus d'un.
BoUML (multi-plateforme également) est compatible avec de nombreuse formats (xmi, mais aussi Rose ce qui est assez rare). Le reverse engineering est très efficace mais le logiciel n'est pas facile à exploiter. Sous Windows, on trouve également StarUML.

Le paquet pear php_uml permet le reverse engineering en ligne de commande. Il ne s'agit pas d'un outil de modélisation mais simplement d'un utilitaire de reverse engineering. En traitant un code source existant avec cet outil, on obtient un fichier xmi que l'on peut ensuite visualiser et modifier, en théorie, avec n'importe quelle éditeur. Dans la pratique, seul BoUML exploite ce fichier. D'autres logiciels dont Umbrello n'ont jamais réussi à en faire de même. Dommage.
Umbrello (nécessitant KDE) est un logiciel particulièrement agréable à utiliser. Toutefois, les fonctionnalités de reverse engineering sont absentes. Umbrello exploite pourtant le format de fichier xmi pour décrire les objets.


Toutes ces solutions génèrent des squelettes de classes PHP. Dans l'exemple ci dessous, on retrouve les éléments créés via l'interface graphique et les commentaires saisis. Ces commentaires se retrouvent dans le code source généré. A la fin, les commentaires saisis en conception et enrichis pendant le développement seront exploités par d'autres outils pour générer la documentation du projet.

require_once 'nouvelle_classe_3.php';

/**
 * class class_catalogue
 * This classe manage all operation on catalogs, specialy, it ..
 */

class class_catalogue
{

  /** Aggregations: */

  /** Compositions: */

   /*** Attributes: ***/

  /**
   *
   * @access public
   */

  public $nouvel_attribut;


  /**
   *
   *
   * @param nouvelle_classe id the id of the object in the database

   * @return

Modélisation

(voir l'importance d'un outil de modelisation dans un AGL) Le vieillissant DBesigner a longtemps été une référence, mais, l'absence d'évolution et de maintenance de cette solution a généré un réel besoin de changement. Certains se sont essayés à Clay (plug-in pour Eclipse) mais sans conviction.
Aujourd'hui, Mysql Workbench est un outil à utiliser sans hésitation. Il est multi-plateforme et s'installe sans problème. L'interface est claire, l'outil fait ce qu'on attend d'un outil de modélisation. Mais MySQL Workbench va plus loin. Le reverse engineering est particulièrement efficace pour un produit open-source. Workbench reconstitue les relations entre les tables. On n'avait jamais vu cela fonctionner dans aucun logiciel open-source avant (DbDesigner se limite à la récupération des tables).

Reverse Engineering de Dotclear 2 avec Mysql Workbench.

Environnement de développement

Il existe finalement peu d'outils de développement complets (donc on exclu de ce paragraphe les NotePad++ ou autre Ultraedit, voir le positionnement de ce type d'outil pour un AGL). Le marché peut se résumer à 2 solutions, toutes 2 écrites en JAVA (donc compatible linux/windows/mac) et toutes les issues de 2 poids lourds de l'informatique
  • Net beans IDE créé par Sun (mais écrit initialement par des étudiants tchécoslovaques qui ont monté leur boite, boite rachetée par Sun)
  • Eclipse créé par IBM (et dont Websphere Application Developper est la version payante inavouée)
eclipse.jpg net-beans.jpg
EclipseNet Beans


La liste des points communs est longues. Ils sont multi-langages, d'où la possibilité de les utiliser pour le php (et multi-langues, les fichiers de traduction français sont disponibles). Tout deux ont initialement été écris pour le Java.

Eclipse semble être le plus largement utilisé mais il souffre de sa lenteur, de sa lourdeur. En fait, Eclipse est un éditeur basé sur l'environnement Platform Runtime. Par dessus viennent se greffer l'interface via les bibliothèques graphiques, le workbench et les plugins. Car Eclipse est une base largement modulaire dont la version de base ne permet pas de faire de PHP alors que NetBeans est décliné spécifiquement pour chaque langage:

Par ailleurs, Eclipse inclus un système de paquet, une gestion des dépendances, la gestion des sources de logiciels ... on peut dire ironiquement que c'est presque un système d'exploitation.

Utiliser éclipse pour écrire du php nécessite un plug-in spécifique.
phpeclipse est le plug-in le plus ancien. Mais est resté longtemps sans grande évolution, laissant une place pour PDT. PDT est  le projet Eclipse le plus téléchargé. Le développement de PDT est organisé par la société Zend. Un autre point négatif, les modules d'eclipse ne sont pas toujours facile à installer (voir billet sur l'installation de PDT sous karmic). Toutefois, la solution eclispe +PDT est particulièrement complète. PDT intègre également l'interfaçage avec xdebug.
Eclipse reste une référence incontournable sur laquelle s'appuient de nombreuses initiatives de génie logiciel comme Nwire.

Face aux 2 lourds, 2 outsiders :
  • Zend propose son propre IDE dédié au PHP: Zend Studio, basé sur Eclipse PDT (PHP Development Tools).  Les utilisateurs soulignent que Zend Studio est plus stable qu'Eclipse et s'installe facilement. La ressemblance avec Eclipse + PDT est assez frappante au point qu'on se demande pourquoi on paye.
  • Aptana, IDE spécialisé pour le web. Il est proposé de manière indépendante ou sous la forme d'un plug-in Eclipse.
Zend Studio (l'interface est sensiblement identique à Eclipse) Zend Studio

Référentiel de source

Là aussi pas beaucoup de choix. Le paysage open-source est dominé par CSV (Concurrent Version system) ou SVN(Subversion).  Subversion étant dans une optique de remplacement de CVS en apportant de nouvelles fonctionnalités, il est donc judicieux d'utiliser cet outil.
Si Eclipse fournit de base le support de SVN, il est nécessaire d'installer un plug-in pour profiter la connexion à un repository Subversion. Il existe plusieurs plug-in pour cela. Attention, orientez vous plutôt vers Subclipse. L'autre plug-in connu : Subversive laisse généralement de mauvais souvenirs.

Génération de documentation

Dans ce domaine (lire l'utilité de la génération de documentation dans un atelier de génie logiciel), l'inspiration issue du monde Java est évidente. La syntaxe retenue est celle de la javadoc, le phpdoc. Les différents outils disponibles ne se différencient donc pas à ce niveau. Il y a environ une dizaine d'outils la plupart abandonnée (en même temps, il n'y a pas d'évolution à attendre dans la mesure où le besoin à couvrir par ces outils est stable). Retenons :
  • phpdocumentor, l'outil de référence
  • Doxygen, n'est pas limité au php. Il propose la génération de code pour une dizaine de langages
  • Natural Docs supporte 19 langages (dont le javascript)

Bugtracker

Dans un projet, il est important d'avoir un bugtracker dans son AGL.
Beaucoup d'intervenants en PHP partagent la même analyse, actuellement il n'existe pas un très bon bugtracker. Tout le monde connait les 2 poids lourds :
  • Mantis, un bugtracker assez complet
  • Trac qui propose également un wiki et l'interfaçage avec le SVN
Tout le monde a testé un ou plusieurs outsiders, Redmin, phpbt, ... pour finalement revenir à l'un des 2 poids lourds. Pour une utilisation pur bugtracker, Mantis est plus complet. Mais la logique et le workflow de l'outil sont parfois mal adaptés aux organisations projets que l'on met en place. Il faut alors utiliser les mécanismes de personnalisation pour arriver à ses fins.

Interactions

Ci dessous un schéma récapitulatif des outils et leurs interactions.



Le dispositif reste à compléter. Les différents types de tests et les nombreux outils associés sont à considérer sérieusement. A lire dans un prochain billet.