Atelier de Génie logiciel (AGL)

Une démarche d'atelier de génie logiciel consiste à organiser (construire et d'enrichir) un référentiel d'outils permettant la production de projets logiciels. Chaque composant de l'AGL est un OGL (Outil de Génie logiciel). La démarche est importante pour l'obtention d'un résultat final de qualité. Elle nécessite une veille technologique d'outil, beaucoup d'évaluations, des échanges avec les utilisateurs de ces solutions et finalement la prise de décision quant au choix de tel ou tel outil pour répondre à telle ou telle fonction de l'AGL. Par ailleur, la démarche d'AGL ce n'est pas que des outils, c'est aussi la méthode et la logique d'utilisation des outils ensemble. Il faut formé un ensemble cohérent d'outils qui communiquent entre eux. L'AGL doit contribué a élevé le niveau de maturité de l'organisation projet dans le cadre du CMMI. (voir AGL et CMMI)

Par exemple, AGL apporte la possibilité de documenter automatiquement un programme, de maintenir en permanence à jour la documentation du code, et, de sa conception aux tests.
L'objectif est souvent d'essayer de trouver le bon niveau de granularité dans la conception de chaque composant applicatif, de manière à essayer d'en améliorer la réutilisabilité.
Certains AGL peuvent aller jusqu'à la génération de code ou à l'inverse peuvent inclure des fonctionnalités de rétro-ingénierie et donc analyser pour modélisation les données contenues dans un programme. Enfin, certains peuvent faciliter la génération de jeux de test.

Les Types d'outils pour un AGL Web/PHP

L'AGL englobe les différentes phases d'un projet.

Spécification et maquettage

En génie logiciel, il n'existe pas de logiciel pour réaliser des spécifications de manière automatiser. Donc, ... à vos traitements de textes. Par contre, il est souvent nécessaire de recourir à des outils de maquettage de l'IHM. Les développement de logiciel stand-alone sont de ceux points de vue mieux équipés. Le web souffre d'un parc de navigateurs hétérogène. La réalisation d'une interface web passe par de nombreux tests, adaptations et debugs.
A défaut d'un éditeur html universelle et efficace, il faut s'armer d'outils palliatifs.
Voir les outils possibles pour le maquettage html

Conception UML

En premier lieu, il est particulièrement intéressant d'utiliser des outils de conception pour réaliser les modélisation UML. Ce type d'outil n'est pas spécifiques au web ni au php. Ces outils ont un double avantage:
  • ils vont créer une représentation visuelle permettant d'appréhender le fonctionnement et les interactions de l'application d'une manière global. Ces outils offrent donc une vision d'ensemble très importante;
  • à partir des diagrammes, ces outils vont générer du code. Ainsi, le diagramme de classe va générer les squelettes de classes de l'application.
Les indications saisies dans l'outil sont transmises dans le code via les commentaires. D'un point de vue méthodologique, il est toujours préférable de décrire l'algorithmique à employer lors de la conception. Bien que cette organisation limite l'action du développeur à un rôle d'exécutant des directives inscrites dans les commentaires, elle permet de maitriser très en amont la complexité de l'application.
De plus, on évite la duplication de code.
Voir l'état de l'art des outils de conception UML en PHP.

Modélisation de la base de données

De même des outils sont spécialiser dans la modélisation des base de données.
Certains outils fonctionnent en appliquant la méthode merise et propose la modélisation d'une Modèle conceptuelle de données et génèrent ensuite le Modèle Physique de données correspondant puis le code source via un fichier .sql.
D'autres outils propose directement la réalisation du modèle physique. Cela suppose de faire la réflexion sur papier où dans sa tête à part mais ce n'est pas vraiment un problème.
Ces outils proposent généralement des fonctionnalités de reverse-engineering plus ou moins poussée. Certains étant capable de reconstituer les liens entre table en identifiant les clefs étrangères, d'autres pas.
Voir l'inventaire des outils de modelisation.

Environnement de développement

L'outil de développement n'est pas toujours considéré comme faisant partie de l'AGL. L'opération de codage n'étant pas considéré comme une opération d'ingénierie. Toutefois, cette outil se trouve au cœur de l'action. C'est par lui que va transiter toutes les informations de la conception et à partir de lui que l'on va générer  la documentation et les tests. On doit veiller à sa capacité de communiquer avec toutes les briques de l'AGL.
Fondamentalement, cet outil doit apporter le confort attendu par les développeurs dans un IDE moderne.
En vrac, la complétion, le navigateur de sources, indentation automatique, coloration syntaxique, debuggeur, vérification syntaxique au cour de la frappe, intégration à un référentiel de source.
Plus d'information sur les environnements de développement en PHP

Référentiel de source

Le référentiel de source est un outil essentiel au travail collaboratif et aux évolutions parallèles de plusieurs version d'un logiciel.

Génération de documentation

Non, un logiciel ne peut pas écrire les spécifications et le dossier de conception à votre place. Un générateur de documentation a un intérêt indirecte. Il permet de vérifier que le code est correctement documenté. En php on a assez peut l'usage lire la documentation sans le code.
La documentation doit s'attacher à décrire 2 choses :
- ce que fait fonctionnellement le code (ex: cette fonction crée un utilisateur en base de donnée avec les ACL associées)
- comment il le fait, en décrivant l'implémentation (la fonction éclate la structure reçue en paramète et l'insère en base puis tant que ..)
La langue des mangas, c'est le japonais. La langue de l'informatique c'est l'anglais et les commentaires ne devrait être écris qu'en anglais.
Pour aller plus loin, lire l'article sur les outils de génération de documentation en PHP.

Bugtracker

Il n'est pas rare (en 2009) que des équipes projet gère les bugs avec des post-it sur un tableau.
La gestion des anomalies (ou des nouvelles / micros demandes du client) ne devrait pas se satisfaire d'une tel volatilité. Il est nécessaire qu'un outil :
  • conserve l'historique des interventions sur un point donné.
  • centralise l'ensemble des points, permettant d'identifier les liens entre eux.
Voir les outils de bugtracking

Tests automatisés

Les tests sont importants et ils doivent être préparés et structurés. Tester une application est pénible et l'attention d'un testeur humain décroit très vite. Il est donc nécessaire d'automatiser les tests. Il existe de nombreux types de tests : unitaire, d'intégrations, fonctionnelles, de performance et charge.
Jusqu'à présent (mais ça n'engage que moi) il apparait difficile de mettre en œuvre des tests unitaires pertinents dans des développements PHP MVC. Sur plusieurs projets audité, l'absence de tests unitaires n'a jamais été reproché. L'absence de test unitaire est compensée par des tests fonctionnelles automatisés. Un outil reproduit les actions de l'utilisateur. On définit des scénarios, des jeux de données et les vérifications automatiques à réaliser. Chaque nouveau bug vient enrichir les scénarios et les jeux de données. Ainsi on garanti la non-régression de l'application en rejouant la totalité des tests.

Test de charge, profiler, mesure de la performance

La capacité à monter en charges est une problématique propre (mais pas exclusif) d'un développement web.
Il est important d'être en capacité de mesurer et analyser :
  • la performance, c'est le temps de réponse à une requête mesuré par l'utilisateur
  • la tenue de la charge, le nombre de requête limite auquel le service est en capacité de répondre dans un temps raisonnable.
Contrairement à la charge, la performance est impacté par le comportement du navigateur. La vitesse de rendu d'une page fait partie de la perception des utilisateurs. Cette partie doit donc également être analysée.

L'aspect théorique des tests est abordé plus en détail dans un autre billet.



Cela fait 9 types d'outils. Cette liste n'est pas fermée, les suggestions sont ouvertes.
Pour chacun de ces types, on peut se demander quels sont les outils disponibles et lesquels choisir...
Réponse la semaine prochaine.