Accueil > Blogue

Blogue

Une occasion en or de nous rencontrer

Pyxis sponsorise l'Agile Tour à Grenoble ! Pyxis sera présente à Grenoble (le 9 octobre) et à Lille (le 14 octobre) pour parler de Paper Prototyping et de Spécifications Exécutables avec GreenPepper. En plus des sessions animées par nos équipes, un stand pourra accueillir des candidats à la recherche d'une entreprise qui place les individus au centre de ses préoccupations et de ses décisions. Venez nombreux sur notre stand afin de faire plus ample connaissance avec nos équipes. Une surprise vous attend! A bientôt

Comment une équipe Agile fait-elle pour s'assurer que les composants logiciels développés par différents membres vont s'arrimer entre eux?

Lors d'une journée portes ouvertes organisée par Pyxis pour rencontrer des candidats potentiels, plusieurs d'entre eux ont manifesté leur intérêt pour les méthodes Agiles dont la popularité ne cesse de grandir. Toutefois, quand nous leur avons présenté les fondements des méthodes Agiles − à savoir qu'une équipe Agile valorise plus les personnes et les interactions que les processus et outils, un logiciel fonctionnel qu'une documentation exhaustive, une collaboration avec le client que la négociation d'un contrat, une adaptation au changement que le respect d'un plan préétabli −, nous avons semblé prendre à contre-pied les façons de faire élaborées pour contrer le manque de professionnalisme causant la déroute d'un bon nombre de projets informatiques qu'un scepticisme très sain les a poussés à poser quelques questions pertinentes. L'une d'entre elles était la suivante : comment, sans processus et documentation, peut-on espérer que les composants développés par différents membres d'une équipe s'arrimeront correctement entre eux?

Ce n'est certes pas la question la plus importante lorsque l'on pense au développement logiciel en mode Agile, toutefois s'y attarder quelques instants nous révèle certaines caractéristiques fondamentales de nos pratiques que nous avons tendance à négliger à force de les appliquer machinalement. Faire cet exercice est intéressant car, en prétendant faire table rase des façons de faire traditionnelles, nous devons par la même occasion indiquer comment les méthodes alternatives proposées abordent les problématiques auxquelles sont confronté les méthodes traditionnelles. Sans aucune prétention méthodologique, nous allons tout d'abord nous intéresser à la manière traditionnelle d'assurer la cohérence des différents composants d'un logiciel pour ensuite montrer comment, à partir des valeurs du manifeste Agile mentionné plus haut (c.-à-d. fondements des méthodes Agiles), une équipe Agile réussit à atteindre le même objectif. Nous laisserons au lecteur le soin de juger de l'efficacité de chacune des approches.

Méthodes traditionnelles

Dans le but d'assurer la cohérence du logiciel développé, les méthodes traditionnelles s'appuient sur un processus rigoureux dont chacune des étapes utilise les résultats fournis par l'étape précédente et complète entièrement toutes les activités prévues pour valider les résultats qui seront fournis à l'étape subséquente. C'est l'approche classique des méthodes dites en cascade. L'expérience ayant montré que les coûts associés à la détection et à la correction des erreurs grandissent avec le degré d'implantation du logiciel, ces méthodes tentent d'en minimiser les impacts en précisant dans le moindre détail le travail à réaliser avant de procéder à l'étape suivante. Ainsi, en début de projet, tous les éléments requis sont recueillis, analysés et documentés dans le but de circonscrire le système. Par la suite, un design élaboré est conçu et validé théoriquement par rapport à l'ensemble des éléments requis. C'est généralement à cette étape que l'équipe s'attaque à l'arrimage des différents composants du logiciel. Ce design est alors expliqué dans un document d'architecture qui servira de référence pour les prochaines étapes d'implémentation, de tests et de déploiement. Ainsi, l'étape de design élaboré joue un rôle clé dans ce type de processus car beaucoup d'efforts intellectuels sont déployés pour arriver à l'architecture la plus complète, la plus cohérente et la mieux documentée possible. Le document d'architecture joue également un rôle crucial en étant le principal outil sur lequel l'équipe s'appuie pour s'assurer de la cohérence du logiciel.

Voilà pour les méthodes traditionnelles. Maintenant, comment les méthodes Agiles font-elles pour s'assurer de la cohérence du logiciel? D'entrée de jeu, rappelons que le rejet de processus, d'outils et de documentation comme nous le percevons à la lecture du manifeste Agile semble être une recette pour une tour de Babel. Effectivement, sans ces moyens de contrôle, comment espérer garder la cohérence?

Méthodes Agiles

Lorsqu'on leur pose cette question, les experts Agiles nuancent presque systématiquement leurs propos en disant que les méthodes Agiles n'excluent pas tout processus et toute documentation mais plutôt privilégient d'autres moyens tels l'interaction entre les différents partis et un logiciel fonctionnel. À mon sens, cette réponse, quoique juste, laisse beaucoup à désirer car elle ne fait qu'éviter la question. Nous ne savons toujours pas comment ces interactions assurent l'arrimage des différents modules qui composent le logiciel sur lequel les équipes Agiles mettent tant l'accent. Et si les méthodes Agiles s'en remettent de toute façon à des processus et à de la documentation lorsque le besoin se fait sentir, alors pourquoi tout cet engouement pour ces soi-disant nouvelles approches? Devant l'insistance des sceptiques, les experts fournissent souvent en guise de réponse la réplique suivante : les équipes Agiles misent beaucoup sur la communication face à face.

Communication face à face

En général, les membres d'une équipe Agile se rencontrent fréquemment pour faire le point sur l'avancement du projet. Dans le cadre de SCRUM par exemple, la mêlée quotidienne fournie l'occasion idéale pour que les problèmes d'incohérence soient exposés et les personnes concernées avisées. Ces dernières pourront par la suite s'attaquer à la résolution du problème de la manière qui convient. De plus, les fins d'itération fournissent une autre occasion à l'équipe de démontrer ce qui à été accompli et de réorienter les activités de développement en se basant sur ce qui a été appris. Précisons que ces occasions utilisent l'un des canaux de communication les plus riches, à savoir l'échange face à face qui, contrairement à la documentation écrite, favorise la participation de tous les membres de l'équipe. Par ailleurs, les développeurs d'une équipe agile improvisent fréquemment des séances de modélisation autour d'un tableau qui enrichit d'avantage la communication en permettant la visualisation des modèles évoqués. Cette communication est constante tout au long du projet et garde une certaine cohésion au sein de l'équipe.

Modélisation Agile

Pourtant, il y a un hic. Si l'échange face à face est le canal de communication le plus riche, il est aussi le plus volatile. Ce qui est convenu lors de ces rencontres, s'il n'est pas pérennisé dans un document quelconque, risque de ne pas survivre au-delà de la mémoire ou du départ des participants qui y étaient présents. De plus, en absence totale de documentation, l'arrivée de nouveaux membres dans l'équipe exige la reprise de ces conversations qui à la longue deviennent ennuyeuses. À cet égard, les principes de la modélisation Agile fournissent des pistes de solution quant à la production, à la conservation et à la mise à jour des modèles élaborés lors de ces rencontres. Et là, il faut tout de même faire attention de ne pas retomber dans les mêmes pièges des méthodes traditionnelles à savoir que le document est roi et unique détenteur de vérité.

Mais ne sommes-nous pas retournés à la case départ? Si nous faisons abstraction des autres avantages des méthodes Agiles et que nous nous concentrons uniquement sur la façon d'assurer la cohérence du logiciel, nous retrouvons-nous seulement avec plus de communication face à face et une manière plus légère de documenter? Est-ce suffisant pour garder le tout cohérent? À mon avis, c'est loin d'être certain et, heureusement, c'est là que les pratiques d'ingénierie Agiles viennent à la rescousse.

Pratiques d'ingénierie Agiles

En valorisant plus un logiciel fonctionnel qu'une documentation exhaustive, les équipes Agiles déploient beaucoup d'efforts pour s'assurer que tel est bien le cas en adoptant les pratiques d'ingénierie ci-dessous.

Tests automatisés

Habituellement écrits par les développeurs, ces tests vérifient que le code se comporte tel qu'il était prévu. On parle de la stratégie « tester en premier » lorsque les tests sont écrits avant le code qu'ils sont supposés valider. Cette stratégie est privilégiée pour les tests unitaires, qui vérifient le bon fonctionnement du code en isolation des systèmes externes tels qu'un serveur d'applications ou une base de données. Lorsque les tests sont écrits après le code, on parle de la stratégie « tester en dernier » qui est plus appropriée pour les tests fonctionnels ou d'intégration. Dans les deux cas, le fait que ces tests soient automatisés donne la possibilité à l'équipe de s'assurer de l'intégrité du logiciel à n'importe quel moment, et ce, à faible coût. De plus, cette batterie de tests constitue un filet de sécurité protégeant contre d'éventuelles défectuosités qui risquent d'être introduites par des modifications insouciantes apportées pour implémenter de nouvelles fonctionnalités requises. Par ailleurs, les tests automatisés, surtout lorsqu'ils sont écrits en premier, constituent une documentation toujours à jour du logiciel puisqu'en quelque sorte ils en spécifient le comportement. Finalement, on encourage chaque développeur à fournir avec ses modifications l'ensemble des tests validant leur comportement.

Intégration continue

Afin de minimiser les coûts d'assemblage du logiciel, les équipes Agiles ont l'habitude d'en automatiser complètement le processus. Pour profiter au maximum de cette automatisation, les tests de développeurs mentionnés plus haut sont également inclus dans ce processus de telle sorte qu'avec une ligne de commande il est possible de s'assurer de l'intégrité du logiciel avant de soumettre les modifications au dépôt central de code source. Toutefois, cela ne s'arrête pas là. Ce processus est exécuté sur un serveur d'intégration à chaque fois que des modifications sont soumises au dépôt de code source afin de valider l'intégrité du logiciel dans un environnement qui se rapproche de celui dans lequel il sera déployé. Par la suite, un indicateur de réussite est transmis aux membres de l'équipe qui sont ainsi informés en permanence de l'état de santé du logiciel. L'équipe a alors les outils en place pour s'engager à toujours maintenir le système en bonne santé en vérifiant le résultat du processus d'assemblage avant de soumettre les modifications au dépôt central et en corrigeant immédiatement les problèmes d'intégration qui sont révélés sur le serveur d'intégration. L'ensemble de ces pratiques constituent le mode d'intégration continue.

Propriété collective du code

Dans une équipe qui met en oeuvre les tests automatisés de développeurs et l'intégration continue, il arrive souvent qu'un développeur fasse échouer un test qu'il n'a pas écrit. Une modification est donc requise soit au test, soit au code associé à ce test car l'un ou l'autre ne correspond plus aux nouvelles règles d'affaires codifiées par les modifications. Ce test qui échoue a un impact sur l'échéance du projet car le développeur ne peut pas intégrer ces modifications au dépôt central étant donné qu'elles vont faire échouer le processus d'assemblage automatisé. Pour minimiser l'impact, les équipes Agiles pratiquent la propriété collective du code, qui permet à un développeur de modifier n'importe quelle partie du code même s'il n'en est pas l'auteur. Bien sûr, la batterie de tests existante rend possible cette appropriation du code d'autrui, et le développeur est encouragé à rajouter autant de tests qu'il faut pour préciser et valider sa compréhension du code en question.

La programmation en binôme

Une pratique Agile qui aide beaucoup à la propriété collective du code est la programmation en binôme. Cette pratique veut qu'il y ait toujours deux développeurs à travailler sur une partie du code. Par exemple, le développeur ayant fait échouer un test qu'il n'a pas écrit peut se faire accompagner par l'auteur original du code pour s'assurer que la logique initiale ne soit pas complètement dénaturée si ce n'est pas nécessaire. Cette pratique favorise également la dissémination de la connaissance du logiciel puisque les paires formées ne sont pas statiques. Chaque développeur a donc la possibilité d'apprendre plusieurs parties du code en compagnie de ceux qui les ont conçues tout en enrichissant les fonctionnalités du logiciel.

Conclusion

La synergie existant entre ces pratiques décuple leurs effets sur la production de code de qualité et, exception faite de la programmation en binôme, il est rare de voir une équipe Agile adopter l'une d'elles sans les autres. La raison en est fort simple : l'ensemble de ces pratiques permet de livrer de nouvelles fonctionnalités itération après itération tout en s'assurant de la bonne santé du logiciel. Dans le cas qui nous intéresse, une équipe Agile investirait sans doute dans l'écriture de plusieurs tests d'intégration qui démontreraient le bon comportement des différents modules. Ces tests seraient inclus dans un processus d'assemblage automatisé de façon à révéler toute anomalie au niveau de l'intégration des modules. Ce processus d'assemblage serait exécuté en mode d'intégration continue réduisant ainsi au minimum le temps de réaction de l'équipe qui s'engagerait à toujours maintenir le logiciel en bonne santé. Chaque membre de l'équipe aurait le droit de corriger toute partie défectueuse du logiciel et pourrait compter sur l'aide d'un coéquipier pour le faire. Alors, la prochaine fois qu'on vous demandera comment une équipe Agile, sans documentation et ni processus lourd, s'assure de la cohérence des modules développés par différents membres de l'équipe, vous pourrez répondre : tout simplement en s'assurant en permanence que les modules fonctionnent bien entre eux.

Inspect and adapt

Scrum nous propose une démarche empirique d'amélioration de notre processus de développement logiciel. Ce qui est exprimé par la célèbre formule, devenu le slogan de Scrum : inspect and adapt. Mais cette adaptation ne concerne pas Scrum lui-même. Cette nuance mérite souvent d'être explicitée.

Cette notion de rétroaction est en place à plusieurs niveaux dans la séquence d'évènements qui rythment un Scrum.

  1. La mêlée quotidienne implémente le cycle le plus court d'inspection et d'adaptation et se concentre sur le travail quotidien. Où en sommes-nous dans nos tâches en cours? Avons-nous à relever des défis imprévus qui nécessitent de nous adapter? Quels sont nos prochains objectifs pour la journée? À la lumière de ce que nous avons réussi à accomplir, devons-nous réviser nos objectifs du jour?
  2. La démonstration de fin de sprint implémente un cycle d'inspection et d'adaptation qui concerne le produit lui-même. En inspectant le travail réalisé pendant le sprint, le product owner et l'équipe explorent les pistes qui s'ouvrent pour la poursuite du projet. Devrions-nous explorer des éléments ergonomiques? Élargir la couverture fonctionnelle? Qu'est-ce qui nous a posé problème pendant ce sprint que nous souhaiterions creuser pour augmenter nos compétences dans ce domaine?
  3. La rétrospective de fin de sprint implémente l'inspection et l'adaptation au niveau du travail d'équipe. Avons-nous collaboré de façon satisfaisante au cours de ce sprint? Ce niveau de collaboration augmente-t-il ou au contraire diminue-t-il au cours des sprints? Avons-nous du plaisir à travailler ensemble? Que pouvons-nous faire collectivement pour augmenter notre efficacité à titre d'équipe? Que peut faire chacun d'entre nous pour augmenter la puissance de frappe de l'équipe?
  4. La planification du sprint implémente quant à lui un cycle d'inspection et d'adaptation qui concerne la relation que l'équipe Scrum entretient avec le produit. À la lumière du travail accompli, quelles sont maintenant les priorités? Devons-nous revoir nos estimations? Quel peut être notre niveau d'engagement, fort de l'expérience des sprints précédents? Comment allons-nous nous répartir le travail pour relever ce nouveau défi?

L'inspect & adapt de Scrum est au service du projet. Ce n'est pas qu'une philosophie qui serait latente dans un projet Scrum et portée par le ScrumMaster. Les réunions de Scrum donnent vie à cette amélioration continue; avec pour chacun des réflexions spécifiques tournées vers le même objectif de réussite du projet. Toutes se concentrent sur l'analyse des faits et l'adaptation des pratiques liées à ces faits.

Certains pourraient être tentés de faire un grand tableau pour présenter cela et nous pourrions débattre de notre compréhension de chaque case. Il faut résister à la tentation car nous ne sommes pas des machines, et l'esprit humain ne tient pas dans des cases. Petit à petit, l'industrie du développement logiciel prend conscience qu'elle est une science humaine.

Bonnes pratiques pour la mêlée quotidienne

Un article intéressant paru sur l'alliance Scrum. Je voulais souligner notamment la notion de préparation personnelle avant une mêlée quotidienne et les bonnes pratiques pour communiquer son avancement.

Notez la différence entre dire :

Yesterday I worked on the flux capacitor; today I will finish work on the flux capacitor; I have no obstacles.

et :

I worked on the flux capacitor yesterday and realized that one of the design decisions we made as a team last week simply doesn't work. John, we need to take a look at our architecture sketch and make sure that it still makes sense, especially when considering the upcoming scalability enhancements. Mary, the way I coded the FC will certainly change the way some of the tests should be executed. Why don't you pair with me after the meeting and I'll walk you through this? ScrumMaster, I've had a difficult time finding the product owner; could you find him for us and brief him on the situation. We need his help.

La première forme a-t-elle une quelconque valeur? Aucune à mon humble avis.

La deuxième forme prend à peine plus de temps. Elle demande cependant une certaine préparation.

Orange Online Multimedia

Orange a lancé le 15 octobre 2007 un nouveau projet de site Internet avec l'ambition de le mettre en ligne avant la fin de l'année... avec, bien sûr, un ensemble de fonctionnalités assez ambitieux. Grâce à Scrum, le client a pu se concentrer sur les éléments prioritaires et modifier ses choix à mesure que le logiciel se construisait. L'objectif de mise en ligne a été tenu avec un passage en production le 13 décembre, après 5 sprints.

Vu les délais très serrés, nous n'avons consacré qu'une semaine au sprint 0 pour à la fois évaluer le besoin fonctionnel et déterminer les technologies. En tant que ScrumMaster, je souhaitais faire vivre au directeur de produit (Product Owner) l'expérience de l'émergence des fonctionnalités au cours du projet. C'est pourquoi nous avons 'oublié' le travail considérable fourni en avance par le client sur l'analyse de son besoin et la conception de son futur service. Cette démarche n'a pas été bien accueillie au début mais lorsqu'il a fallu définir sur quoi l'équipe de développement allait commencer à travailler, il a bien fallu considérer que les 100 pages d'analyse du besoin n'avaient pas toutes la même priorité. Scrum, et de manière plus générale la démarche Agile, était nouvelle pour la plupart des personnes impliquées dans le projet côté client. Pour cela, il a fallu expliquer que l'engagement de l'équipe de développement se faisait sprint par sprint et qu'elle ne s'engagerait pas lors du démarrage du projet à couvrir l'ensemble des fonctionnalités souhaitées en production à la mi-décembre. Le directeur de produit n'en était pas à son premier projet Scrum, et il a su rassurer les inquiets... où assumer seul le risque fonctionnel, selon le point de vue.

Nous sommes alors partis sur un rythme de sprints de 2 semaines pour permettre au directeur de produit de modifier la direction suivie plusieurs fois avant son échéance marketing de mise en production. Un sprint de deux semaines est, en fait, d'une bonne durée pour l'équipe de développement qui parvient assez bien à déterminer les items du carnet du produit (product backlog) qu'elle peut convertir en fonctionnalités pendant le sprint. Plus long, cela devient plus difficile car le potentiel d'incertitudes augmente. Plus court, l'ensemble des items choisis ne permettait pas de livrer un ensemble cohérent de fonctionnalités ni de définir un but à l'itération. De plus, cette capacité d'appréhender sur deux semaines nous a permis de démarrer le premier sprint sans connaître la vélocité de l'équipe. Nous avons par la suite constaté une vélocité moyenne d'environ 50 points, ce qui permettait de faire tinter la sonnette d'alarme lorsque nous étions trop loin de cette valeur lors d'une rencontre de planification.

Vous avez sans doute songé qu'entre le 22 octobre et le 13 décembre, il n'y a pas la place pour 5 sprints de 2 semaines. Effectivement! Nous avons terminé anormalement le sprint 3 et dédié le sprint 5 à la mise en production en ramenant sa taille à une seule semaine.

Côté outils, nous avons utilisé JIRA pour gérer notre carnet du produit et notre carnet du sprint. De plus, le plugiciel GreenHopper nous a permis de générer simplement notre graphique d'avancement du sprint. Cet outil offre une visualisation du travail en cours sous forme de tableau des tâches.

Mon meilleur souvenir (pour l'instant)? La personne du marketing qui, pendant le sprint 0, avait voulu qu'on s'engage à livrer tout ce qui était dans leur dossier d'analyse. Cette personne découvrait les méthodes Agiles, et Scrum a fortiori. Lors de la démonstration du sprint 1, en ayant sous les yeux une application qui tourne, elle a eu une nouvelle idée à laquelle personne n'avait pensé et qui devenait évidente avec l'application sous les yeux. Je crois qu'elle a réalisé ce jour-là l'intérêt des méthodes Agiles et l'absurdité d'un monde dans lequel on essaie de tout prévoir à l'avance.

Le client est très satisfait de cette expérience. La preuve? On continue! Nous sommes repartis pour une série de sprints et une future livraison (livraison 2) du produit au début de l'année prochaine. À suivre...

réf: Orange Business Services - Online Multimedia

Calendrier

« septembre 2008
lunmarmerjeuvensamdim
1234567
891011121314
15161718192021
22232425262728
2930

Catégories

Archives

haut de la page

Contactez-nous | Plan du site