Agile-IT

Agilité et Lean-IT: penser l'informatique au plus juste

La gestion de projet agile avec Visual Studio 2011

avril 17
by Sebastien 17. avril 2012 08:18

J’ai assisté, il y a quelques semaines, aux Techdays 2012. La session sur “Les nouveautés de Visual Studio 2011” était vraiment excellente. Vous pouvez d’ailleurs visionner la vidéo ici et les slides .

Visual Studio 2011 apporte pas mal de nouveautés autour des outils de développement et l’Application Lifecycle Management (ALM). Cette nouvelle version invite de nouveaux acteurs dans le flux de travail Visual Studio; en plus des développeurs, des chefs de projets, des DBA et des testeurs, on compte désormais les fonctionnels (possibilité de prototypage d’application dans Powerpoint lié à Team Foundation Server par exemple).

 

La gestion de projet agile est efficace. Visual Studio offre une interface de manipulation des élements de travail (work items) sous la forme de tableau blanc avec la possibilité de glisser-déposer les tâches. Ce tableau, accessible à tous les utilisateurs, est automatiquement mise à jour à partir de la base de données de Team Foundation Server.


Durant un sprint, les développeurs mettent à jour les tâches sur lesquelles ils travaillent. D’autres personnes influencent le statut de ces élements de travail, c’est le cas des développeurs effectuant une revue de code ou bien des testeurs. L’évolution du nombre de tâches et de user stories terminées peut être facilement visualisée par tous à l’aide de graphiques (burndown chart, etc.).

 

Visual Studio 2011 est attractif sur de nombreux aspects. Concernant la gestion de projet agile, il simplifie la communication entre tous les acteurs et propose une vue de l’avancement du projet consolidée par chaque membre de l’équipe.

 

Certes, les outils ne font pas tout, mais cette nouvelle version nous fera sans doute gagner  beaucoup de temps.

Tags:

Pratiques | scrum

Donner un nom de version aux itérations scrum / scrumban?

février 21
by Sebastien 21. février 2012 18:10

Lorsque l’on parle de sprint, on fait souvent référence à un numéro pour les identifier. On commence avec le sprint zéro pour aller vers des sprints où la vélocité devient de plus en plus précise. En maintenance logicielle, le développement d’une application peut s’étaler sur plusieurs années et comprendre de multiples versions. Dans ce contexte, donner un nom de version à chaque itération du cycle de développement présente certains avantages.

Les règles de nommage d’une version (technique) d’un logiciel sont définies par la personne en charge de l’application. Il est possible de définir une version technique (par exemple, une suite de quatre nombres séparés par un point) et une version commerciale (pour faciliter la communication autour d’un lot de nouvelles fonctionnalités par exemple).

Pour la version technique, certaines équipes adoptent le format A.B.C.D où chaque membre correspond à:
- A: la version majeure
- B: la version mineure
- C: la version de maintenance
- D: le numéro de build ou autre indicateur.

Utiliser le membre D comme incrément de sprint permet de faire le lien entre numéro de version technique, éléments compilés et numéro d’itération à laquelle est raccrochée de nombreux développements. Le membre D est réinitialisé à chaque fois que l’un des trois autres membres change.

Les avantages à adopter cette règle sont nombreux en maintenance.
1) Cette règle de nommage des itérations rend les développements sur les versions assez étanches. Lors d’un sprint, la version cible est évidente (2.10.0.5) et l’itération associée ne doit pas porter des éléments de travail d’un correctif à réaliser sur une autre version (2.8.0.0). Ce correctif sera à aménager dans le sprint par le responsable du projet.
2) En branche principale, les itérations sont assez courtes. En branche de maintenance, elles n’ont plus la même signification et peuvent s’étaler sur plusieurs mois (une itération peut par exemple accumuler des correction de bugs mineurs jusqu’à ce qu’un déploiement soit décidé).
3) Lorsqu’un bug se produit sur une vielle version d’un logiciel, il est assez facile de retrouver tous les éléments de travail de l’itération associée.

Ce procédé de nommage s’utilise assez bien avec la solution T.F.S où on pourra donner le même nom de version aux éléments compilés, aux branches de développements associées ainsi qu’aux “iteration path”.

Tags: , , , ,

scrum

L’agile en maintenance ne fonctionne pas?

décembre 30
by Sebastien 30. décembre 2011 15:50

C’est le titre d’un excellent article (dont je m’inspire fortement), publié sur Agile Zone, qui montre que les pratiques agiles peuvent très bien s’appliquer dans un contexte de maintenance. Certes, la littérature abonde d’articles ou de retours d’expérience sur le lancement de projet Agile mais ces pratiques peuvent être déclinées à d’autres contextes, comme le support, le marketing et bien sûr la maintenance de logiciel.


Un logiciel, dés lors qu’il arrive en production, entre dans un cycle de maintenance dédié aux corrections de bogues et aux évolutions logicielles. Les méthodes agiles peuvent rentrer en jeu pour rythmer ce cycle, en lui donnant par exemple une dynamique de sprints et le faire avancer vite et sûrement grâce à des concepts comme l’intégration, la livraison et le déploiement continu.


Si le logiciel a été développé sur des bases agiles, la transition vers la maintenance logicielle agile se fait sans problème. En revanche, il est plus difficile d’introduire ces pratiques dans une équipe de maintenance rodée au cycle en V, qui s’est organisée pour produire une réponse rapide à un bug en production et minimiser le risque sur les évolutions. Dans ce dernier cas, on constate une évolution lente du logiciel car maintenir la stabilité du logiciel demande beaucoup d'énergie au détriment des évolutions. Basculer vers la maintenance agile apporterait beaucoup à cette équipe habituée au cycle en V: l’introduction de pratiques XP permettrait par exemple de minimiser les bugs en production, de redonner confiance à l’équipe et au management qui consacreraient plus de temps pour travailler sur les évolutions: la valeur ajoutée.


De manière générale, les méthodes agiles peuvent être appliquées à la maintenance logicielle mais chaque équipe devrait s’interroger sur la manière de les adapter à leur propre situation. Personnellement, j’apprécie l’approche ScrumBan; elle convient plutôt bien à la problématique de maintenance logicielle.

L’agile en maintenance logicielle

Le planning game

Cet exercice est un peu plus délicat pour une équipe de maintenance qui doit faire face à des perturbations plus importantes qu’une équipe dédiée au développement. Typiquement, on retrouvera des activités de corrections de bug plus ou moins urgentes, des mises en production, du support, etc. L’équipe de maintenance devra intégrer ces contraintes afin d’estimer au mieux le potentiel de valeur ajoutée qu’elle pourra produire durant la prochaine itération. Elle peut aussi agir sur son organisation en minimisant les perturbations unitaires, c’est à dire en réservant certains jours des personnes à du développement tandis que d’autres sont associées à du support et/ou de la correction de bug et vice-versa.


Les standups meeting

 

Ces petites réunions quotidiennes où chacun fait le point sur son avancement gardent leur intérêt en maintenance logicielle. L’équipe discute des activités de développement, de support, des correctifs de bugs et mesure la tendance de l’itération: un évènement peut avoir des conséquences importantes sur les objectifs fixés durant le planning game auquel cas, le product owner ou chef de projet devra définir de nouvelles priorités.

 

Des releases fréquentes de petites tailles


La gestion des versions logicielles est assez complexe en maintenance logicielle. L’équipe de maintenance peut être amenée à travailler sur plusieurs générations différentes du logiciel: la branche de développement courante (mainline) et les branches de maintenance des versions précédentes du logiciel.


Concernant la branche principale, elle héberge le code source de la prochaine release du logiciel. Les autres branches de développement servent aux mises à jour mineures des précédentes versions (correction de bug par exemple).


Durant le planning game, le focus est mis sur le contenu de la prochaine release tout en prenant en compte la charge de maintenance des précédentes versions. Fonctionner en itérations courtes permet à l’équipe et au client de s’organiser plus facilement, notamment sur les aspects tests. Le client accepte plus facilement la stabilité de l’itération puisque le “travail en cours” qu’il aurait re-priorisé immédiatement pourra être discuté dans quelques jours, lors de la prochaine itération.


Les itérations courtes permettent notamment d’éviter l’effet tunnel et de livrer fréquemment un logiciel de qualité à forte valeur ajoutée. Les défauts sont repérés et corrigés plus rapidement.


Les rétrospectives

 

Les rétrospectives sont importantes en maintenance logicielle pour discuter des problèmes rencontrés et motiver l’équipe à proposer des solutions, à aller dans le sens de l’amélioration continue.


Le binômage et la responsabilité de code

 

Le binômage n’est pas évident à installer dans une équipe qui s’est laissée aller à la spécialisation (les développeurs se sont entendus sur leur responsabilités vis-à-vis de certaines parties du code source). C’est pourtant un très bon exercice pour partager naturellement les connaissances et bénéficier d’un autre avis sur la solution à implémenter. Si le binômage est compliqué à mettre en place, une bonne alternative est la revue de code, où un développeur prend un peu de temps pour relire le code de son collègue.


Une conception simple et la refactorisation


Les équipes de maintenance sont tributaires de conceptions et d’architectures souvent complexes et anciennes. Il est alors risqué d’ajouter de nouvelles fonctionnalités dans de tels systèmes dont le périmètre n’est pas bien connu de l’équipe. Cette dernière aura tendance à minimiser le risque en évitant de toucher à l’existant et créera des traitements particuliers pour chaque nouveau développement. Malheureusement, cela éloignera encore plus l’équipe de la maîtrise du système.


Il est important que l’équipe connaisse l’architecture du logiciel car elle sera capable d’identifier si un nouveau besoin client remet en question la conception actuelle et proposera dans ce cas un scénario de transition. Cette transition se traduira par un ensemble de taches de refactorisation et l’adaptation des tests unitaires liés.


Le développement piloté par les tests

 

Disposer de tests unitaires est indispensable en maintenance logicielle: l’équipe intervient sur un système complexe qu’elle ne maîtrise pas forcement => risque important de régression.


Le développement piloté par les tests est une pratique qui incite à écrire des tests unitaires avant d’écrire le code source de la fonctionnalité. Une équipe de maintenance qui souhaite utiliser cette approche pourra commencer par écrire des tests unitaires pour les nouveaux développements et sur les bugs rapportés. Elle peut également s’interroger sur les composants critiques sur lesquels il est bon d'invertir quelques tests. L’équipe peut s’appuyer sur un outil de couverture de code afin mesurer les parties non testées du programme et se donner des objectifs de couverture au fil des itérations.

 

L’intégration continue

 

Cette technique est idéale pour une équipe de maintenance logicielle. Elle permet de détecter les régressions de l’application à chaque modification de code. Pour travailler en intégration continue, l’équipe devra se doter d’un serveur d’intégration (comme CruiseControl par exemple) et s’imposer d’intégrer quotidiennement les modifications (tests unitaires compris) sur la même branche de développement. Le serveur sera en charge de la compilation, du lancement des tests unitaires, de la création de rapports (qualité du code, couverture de test, etc.), de la création de la documentation et du test de l’application dans un environnement de production. Cette dernière tâche est associée aux tests de non régression automatisés qu’un autre serveur peut opérer afin de soulager le serveur de build.


L’avantage est de pouvoir confronter très rapidement le nouveau code source de l’application à l’environnement de production. Les problèmes sont visibles immédiatement et une version de l’application est toujours disponible pour démonstration ou distribution.

 

Pour résumer


Les méthodes agiles peuvent apporter beaucoup à une équipe de maintenance logicielle. Même si le contexte est diffèrent du modèle projet (itérations inégales, perturbations plus importantes), il y a de bonnes choses à aller piocher parmi les pratiques agiles.


L’équipe est amenée à travailler sur plusieurs branches de développement en même temps: la mainline qui héberge le code de la prochaine release, la ou les branche(s) de maintenance de précédentes versions de l’application et les branches d’exploration dédiées aux évolutions complexes qui s’étalent sur plusieurs itérations. Les itérations courtes permettent de rythmer les développements et livraisons des versions de release et de maintenance.


Travailler en intégration continue permet à l’équipe de maintenance de se concentrer sur le développement puisque les bugs de production se raréfient. Elle peut aussi s’accorder du temps pour peaufiner ses tests de non régression automatisés.

 

Pour conclure, une équipe de maintenance à tout à gagner à basculer vers l’agile, notamment sur les aspects organisation, qualité et livraison.

 

Tags: ,