Contrôler le workflow des tickets Trac depuis vos commits Git

Comme mentionné dans un précédent billet, chez SRMvision, nous utilisons intensivement les features branches pour isoler nos développements et nous permettre de basculer facilement une fonctionnalité en production avec un historique clair des modifications.

Une des pratiques que nous avions mis en place depuis le début (à l’époque ou nous utilisions subversion) est l’interaction avec notre gestionnaire d’incidents (Trac) depuis nos commits. Ainsi, nous utilisons les commandes suivantes dans nos messages de commits (des synonymes existent, mais nous les utilisons peu) :

  • see #NUM pour référencer un ticket
  • fix #NUM pour clore un ticket

Les références vers les commits concernés sont donc intégrées automatiquement dans l’historique des tickets sur Trac.

Pour s’assurer de la qualité de nos développements, nous avons mis en place un workflow personnalisé dans Trac. Une fois un développement / bugfix terminé, nous passons le ticket le concernant en statut “Testing”. Le résultat est simple, soit le test est concluant et le ticket est clos, soit il ne l’est pas et il retourne donc au développeur. Ainsi, aux commandes décrites précédemment, nous avons ajouté la possibilité de passer un ticket en test en mettant la commande “test” dans nos commits.

Le fait d’avoir maintenant beaucoup de branches nous a conduit à repenser notre façon de fonctionner pour avoir un contrôle plus efficace des tickets. En effet, contrôler le workflow des tickets pour les passer en test alors qu’ils ne sont pas encore sur la branche “recettable” a commencé à introduire plus de bruit sur Trac que de bénéfices réels. Nous avons donc rajouté un statut “Fixed on branch” nous permettant de différencier les tickets réellement testables de ceux qui ne sont pas encore prêts.

Après quelques hésitations, nous avons fini par obtenir le mécanisme suivant, tout en gardant les mêmes trois verbes principaux (see, fix, test) :

  • Lors d’un commit incluant le verbe “test” sur une branche autre que le master, le statut du ticket est passé à “Fixed on branch” et le ticket est clos.
  • Lors du merge de la branche sur le master, les tickets “Fixed on branch” sont automatiquement repassés en “Testing”
  • Le comportement sur la branche master reste identique

Sur un développement de fonctionnalité classique, nous pouvons avoir 50 tickets “Fixed on branch” qui se réouvrent automatiquement en “Testing” lors du passage de la fonctionnalité sur le master. Cette technique nous permet de suivre facilement le développement d’une fonctionnalité de sa réalisation à sa livraison.

Si vous désirez mettre en place un mécanisme similaire dans votre environnement, les fichiers que nous utilisons sont disponibles à l’adresse suivante : https://github.com/CedricGatay/sandbox/tree/master/trac-git-hook

Vous trouverez les trois fichiers suivants:

  • post-receive : hook git à proprement parler, à placer dans le dossier hooks/ de votre dépôt central, déclenche le lancement différé (1 minute plus tard) du script suivant (pour éviter de bloquer le commit),
  • trac-post-commit-hook : hook trac effectuant le traitement des messages de commit pour intéragir avec les tickets
  • trac.options.ini : extrait du fichier de configuration Trac permettant de personnaliser le workflow des tickets

Notez qu’il sera certainement nécessaire de modifier les variables des scripts python permettant de référencer le dépôt git dans Trac (dans notre cas il est nommé git-clone), ainsi que les chemins utilisés dans votre environnement.

Mise en place de tests unitaire

A qui est destiné ce document

Ce document est à l’attention des développeurs ayant de bonnes connaissances techniques. En revanche il est intéressant pour un chef de projet de connaître les généralités énoncées dans la première partie du document.

Généralité

Qu’est ce qu’un test unitaire

D’après Wikipédia :

En programmation informatique, le test unitaire est un procédé permettant de s’assurer du fonctionnement correct d’une partie déterminée d’un logiciel ou d’une portion d’un programme (appelée « unité » ou « module »).
On écrit un test pour confronter une réalisation à sa spécification.

Ils consistent en liste de tests à valider afin d’être conforme à la documentation fonctionnelle. Ces tests doivent être exécutés le plus souvent possible au cours de la réalisation, en effet ils permettent en autre de mettre en évidence toutes régression dans le processus de développement. Continue reading