L`Extreme Programming
Transcription
L`Extreme Programming
Processus de développement L’Extreme Programming Régis Medina 01/2003 L’Extreme Programming TABLE DES MATIÈRES Introduction _____________________________________________________________________ 3 Pourquoi une nouvelle méthode ? ____________________________________________________ 5 Les valeurs d'XP __________________________________________________________________ 6 Les pratiques XP __________________________________________________________________ 7 Gestion des livraisons ___________________________________________________________ 8 L'équipe fournit des livraisons fréquentes ___________________________________________ 8 Les développeurs estiment, le client choisit _________________________________________ 8 Gestion des itérations __________________________________________________________ Le logiciel est réalisé en une suite de petites itérations ________________________________ L'équipe détermine et se répartit les tâches à réaliser _________________________________ A la fin de l'itération, on recommence !____________________________________________ 10 10 10 11 Suivi du projet ________________________________________________________________ 12 Qualité du design et du code _____________________________________________________ La conception reste la plus simple possible_________________________________________ Le code est remanié en permanence ______________________________________________ Chaque classe est écrite avec les tests unitaires associés_______________________________ 12 13 13 13 Travail en équipe ______________________________________________________________ Le code est partagé par toute l'équipe _____________________________________________ Les développeurs travaillent en binômes___________________________________________ Les développeurs respectent les règles de codage de l'équipe___________________________ L'intégration se fait de manière quasi-continue ______________________________________ L'équipe adopte un rythme durable _______________________________________________ 14 14 15 15 16 16 Conditions d'utilisation d’XP _______________________________________________________ 17 Le client doit être intégré au projet _______________________________________________ 17 Le logiciel doit rester toujours simple, facilement modifiable et largement testé __________ 17 L'équipe doit travailler... en équipe _______________________________________________ 17 Tous les participants doivent être prêts au changement ______________________________ 18 Conclusion _____________________________________________________________________ 19 http://www.design-up.com © 2000 Regis Medina 2/19 L’Extreme Programming INTRODUCTION L'Extreme Programming (XP) est une méthode de développement dédiée à de petites équipes confrontées à un environnement changeant ou des besoins mal connus. Cette méthode est née sur le terrain, à partir des observations et recherches de développeurs expérimentés soucieux de se concentrer sur les nécessités élémentaires du développement : • Développer vite : s'assurer que les changements restent toujours faciles pour conserver une vitesse de développement soutenue tout au long du projet. • Développer juste : éliminer tout travail inutile en se focalisant sur les besoins réels du client. La mise au point de XP dure depuis quelques années, mais XP a réellement démarré en octobre 1999 avec la parution du livre : Extreme Programming Explained : Embrace Change, Kent Beck, Addison-Wesley, 1999. D'autres livres consacrés à XP sont parus depuis, dont un en Français cette année : L’Extreme Programming (avec deux études de cas), Jean-Louis Bénard, Laurent Bossavit, Régis Medina, Dominic Williams, Eyrolles, 2002. Par ailleurs, le phénomène continue à prendre de l'ampleur : • Créée en janvier 2000, la mailing list spécialisée compte en janvier 2003 près de 3800 abonnés. • XP est défendu par de grands noms du développement objet, en particulier Kent Beck, Martin Fowler et Robert C. Martin. • XP est déjà mis en oeuvre dans des domaines aussi variés que la banque (Bayerische Landesbank, Credit Swiss Life, First Union National Bank), l'industrie automobile (DaimlerChrysler, Ford Motor Company), le transport (CSEE Transport), les télécoms (Nortel), le commerce électronique (Evant). http://www.design-up.com © 2000 Regis Medina 3/19 L’Extreme Programming Nous vous invitons ici à découvrir XP à travers : • Une brève introduction : Pourquoi XP ? • Une description des principes XP, • Une description plus complète des pratiques XP, • Une discussion des conditions de succès de XP dans un projet. Bien sûr, la présentation qui suit reste reste extrêmement synthétique. Il va de soi que la lecture de quelques ouvrages et l'exploration des sites listés dans notre rubrique Ressources demeure indispensable pour qui souhaite réellement comprendre XP et le mettre en oeuvre. http://www.design-up.com © 2000 Regis Medina 4/19 L’Extreme Programming POURQUOI UNE NOUVELLE MÉTHODE ? Les approches classiques de développement type "waterfall", basées sur la fameuse séquence spécification / conception / réalisation / validation, souffrent de problèmes chroniques : • Les spécifications sont définies au début du projet, alors qu'on en sait encore peu sur le sujet, • Les spécifications différencient rarement ce qui est important de ce qui ne l'est pas, • L'application se rigidifie progressivement en un produit "final" souvent difficile à faire évoluer et à maintenir, • Les activités sont compartimentées en fonction des spécialités des développeurs, ce qui pose des problèmes de répartition des tâches et limite la circulation des connaissances dans l'équipe. Ces approches sont fondées sur l'idée que le coût de modification du logiciel augmente de manière exponentielle dans le temps. Dans une telle logique, il est d'ailleurs normal de chercher à définir complètement le produit avant de procéder à sa réalisation. Or, ce qu'ont découvert les créateurs de XP, c'est que certaines pratiques de développement permettent de réduire de manière significative le coût de changement du logiciel, à tel point qu'il devient plus rentable de prendre les décisions le plus tard possible, en s'appuyant sur l'expérience acquise au cours du développement lui-même. Il en résulte une approche radicalement différente du développement, fondée sur une ouverture permanente au changement : • Les spécifications sont définies au début du projet, puis revues, affinées et complétées tout au long du développement, • Le client arbitre en permanence les priorités pour que l'équipe se focalise d'abord sur les tâches les plus importantes, • L'application est maintenue simple et évolutive à travers un ensemble de pratiques de programmation strictes, • Les développeurs travaillent toujours ensemble, ce qui favorise le transfert de connaissances, améliore la qualité du produit et rend le travail nettement plus motivant. http://www.design-up.com © 2000 Regis Medina 5/19 L’Extreme Programming LES VALEURS D'XP XP défend une approche humaniste et dynamique du développement, fondée sur les valeurs suivantes : • • • • Communication o XP intègre réellement le client au projet pour qu'il définisse mieux ses besoins, arbitre les priorités et apporte ses connaissances métier à l'équipe. o XP fait travailler tous les développeurs ensemble et les fait participer à toutes les activités du développement, créant ainsi une réelle dynamique d'équipe. o XP rend accessible à tous les intervenants l'ensemble des indicateurs d'avancement du projet. Feedback o XP fournit des livraisons régulières au client pour lui permettre d'affiner et de compléter la définition de ses besoins à partir de données concrètes. o XP met en place des batteries de tests d'acceptation qui mesurent concrètement l'avancement des développements. o XP met en place des batteries de tests unitaires qui indiquent rapidement si le code fonctionne et qui détectent instantanément toute régression. Simplicité o XP s'assure que seules les fonctionnalités demandées par le client sont implémentées. o XP maintient un design et un code toujours aussi simples que possible pour rester ouvert au changement et conserver une grande vitesse de développement tout au long du projet. Courage o XP donne au jour le jour une transparence maximale sur l'état d'avancement réel du projet. o XP s'attaque aux problèmes dès qu'ils se présentent, en autorisant des retours en arrière s'ils sont nécessaires. Les pages suivantes montrent comment XP supporte ces valeurs à travers un ensemble de pratiques précises et concrètes. http://www.design-up.com © 2000 Regis Medina 6/19 L’Extreme Programming LES PRATIQUES XP Les pratiques XP sont pour la plupart des pratiques de "bon sens" utilisées par des développeurs et des chefs de projets expérimentés. On retrouve par exemple les tests unitaires, les relectures de code, les livraisons fréquentes, une communication accrue avec le client, les "nettoyages" fréquents du code, etc. La première nouveauté d'XP consiste à pousser ces pratiques à l'extrême, ou comme le disent ses auteurs "tourner tous les boutons jusqu'à 10 !" : des tests unitaires sont écrits pour chaque classe, la relecture du code est faite au moment même de son écriture par un travail en binôme permanent, l'intégration est faite chaque jour, etc. La seconde nouveauté de XP consiste à organiser ces pratiques en un tout cohérent, de sorte que chaque pratique renforce les autres. Il en résulte une méthode complète qui couvre tous les aspects du développement, de la relation avec le client jusqu'à l'écriture du code en passant par les plannings et l'organisation de l'équipe. Voici les principaux éléments du fonctionnement de XP : • Gestion des livraisons : L'équipe fournit des livraisons fréquentes au client. Le contenu de ces livraisons est décidé par le client lui-même, à partir des estimations fournies par les développeurs. • Gestion des itérations : Les livraisons sont réalisées en une suite d'itérations de 2 semaines environ, au sein desquelles le projet est géré à un niveau de détail plus fin. • Suivi du projet : L'avancement du projet est mesuré de manière concrète par une batterie de tests de recette automatiques. Le rythme de progression est réévalué à chaque itération, et le plan de développement lui-même est revu fréquemment pour tirer parti de l'expérience acquise au cours du projet. • Qualité du design et du code : Des pratiques strictes permettent de garder une vitesse de développement élevée tout au long du projet, tout en gardant une ouverture maximale au changement. La conception reste toujours le plus simple possible, le code est nettoyé en permanence et des tests unitaires de non-régression sont écrits pour chaque classe. • Travail en équipe : L'équipe travaille réellement... en équipe. Le code est partagé par tous, les développeurs travaillent systématiquement en binômes, et l'intégration est quasiment continue. Les pages qui suivent décrivent ces pratiques plus en détail. Il va de soi cependant que cette description reste synthétique, donc superficielle, et que l'étude des ressources citées dans notre section Liens est indispensable pour qui souhaite mettre la méthode en pratique. http://www.design-up.com © 2000 Regis Medina 7/19 L’Extreme Programming Gestion des livraisons L'équipe fournit des livraisons fréquentes Au début du projet, le client et le chef de projet se mettent d'accord sur un rythme de livraison régulier (typiquement tous les 1 ou 2 mois, pour un projet qui s'étale sur plus de 6 mois). Pourquoi des dates fixes ? XP définit quatre variables à partir desquelles il est possible de gérer un projet : les dates, les ressources, la qualité et le contenu. Or de ces quatre variables, XP considère que le chef de projet ne peut réellement gérer que la dernière puisque : • les dates de livraison sont souvent dictées par des contraintes ou des opportunités externes au projet, • les ressources sont souvent évaluées par la direction et décidées avant le démarrage du projet, • la qualité doit toujours être maximale. XP axe donc les efforts de pilotage du projet sur la gestion du contenu, le but étant bien sûr d'apporter la plus grande valeur ajoutée possible au client à chaque livraison. Les développeurs estiment, le client choisit Chaque livraison suit le cycle suivant : Les trois premières étapes de ce cycle prennent place au cours de "séances de planification de livraisons", dont le but est de déterminer le contenu des livraisons à venir. Ces séances réunissent le client et les développeurs, l'ensemble étant coordonné et arbitré par le chef de projet (ou coach, dans le vocabulaire XP). 1. Le client décrit ses besoins sous forme de "scénarios client" Le client définit ses besoins sous la forme de "scénarios client" simples, décrivant en quelques mots chaque fonctionnalité souhaitée du logiciel. Par exemple, pour un logiciel de gestion de carnet d'adresses on pourrait écrire les scénarios suivants : http://www.design-up.com © 2000 Regis Medina 8/19 L’Extreme Programming • "Je rentre un nom ou prénom, et le logiciel affiche la liste de toutes les personnes qui possèdent ce nom ou ce prénom", • "Je peux enregistrer mon carnet d'adresses au format HTML.", • etc. Les scénarios sont écrits dans le langage du client, et décrivent des fonctionnalités dont l'implémentation paraît suffisamment courte (une ou deux semaines maximum). Les scénarios sont notés sur des fiches cartonnées, pour être facilement manipulés (partagés, échangés, déchirés, triés...). Si un scénario paraît trop vague ou trop complexe, il est décomposé en scénarios plus simples. Un projet complet peut compter une centaine de scénarios ou davantage. 2. Les développeurs estiment le coût d'implémentation de chaque scénario Les estimations ne se font pas en jours réels mais en unités abstraites, dont la définition exacte a finalement peu d'importance. Certaines équipes préfèreront parler de temps idéal (journées de 8 heures de programmation sans interruption), d'autres parleront de points, de "XP units" ou encore de "Gummy Bears"... L'important à ce stade est de disposer d'une unité qui permette d'évaluer les durées relatives d'implémentation des scénarios sans donner aux développeurs le sentiment de s'engager sur des durées réelles. Les estimations sont faites par l'ensemble de l'équipe, le client étant présent pour répondre questions que les développeurs peuvent se poser sur chaque scénario. Au besoin, développeurs peuvent procéder à quelques expérimentations sur machine pour se faire meilleure idée des difficultés techniques rencontrées. XP nomme ces expérimentations "spike solutions". aux les une des Au terme de cette phase, chaque fiche de scénario client possède une indication de coût. 3. Le client sélectionne les scénarios à implémenter pour la livraison suivante Tous les scénarios étant décrits et évalués, le client procède au choix des scénarios à implémenter pour la prochaine livraison. Cependant, du fait que le coût de chaque scénario n'est connu qu'en nombre de "points" abstraits, il faut un moyen pour calculer combien l'équipe pourra traiter de scénarios. Comme nous allons le voir, chaque livraison est préparée en une suite d'itérations, qui durent chacune 2 semaines environ. XP définit la notion de vélocité, qui correspond au nombre de points que l'équipe peut traiter en une itération. Cette vélocité est tout d'abord estimée par le chef de projet, puis recalculée à chaque itération en faisant simplement la somme des points des scénarios qui ont été complétés à l'itération précédente. Remarque: Cette vélocité ne représente en aucun cas le niveau de "performance" de l'équipe, dans la mesure où elle dépend en grande partie de la façon dont les développeurs font leurs estimations. Cependant, ses variations peuvent indiquer des problèmes passagers : si la vélocité baisse brutalement, c'est peut-être que l'équipe a été ralentie pour une raison ou une autre, et il ne faut pas ignorer cette information. Connaissant le nombre d'itérations jusqu'à la prochaine livraison, on est donc capables de déterminer combien l'équipe peut traiter de "points" pour cette livraison. Le client dispose de ce nombre de points pour "acheter" les scénarios à implémenter pour cette livraison, et http://www.design-up.com © 2000 Regis Medina 9/19 L’Extreme Programming éventuellement les livraisons suivantes. A lui donc de répartir les scénarios comme il le souhaite dans les livraisons à venir pour obtenir la plus grande valeur ajoutée au plus tôt. 4. Les développeurs implémentent les scénarios choisis L'implémentation proprement dite se fait en une suite d'itérations, décrites plus en détail dans la section suivante. Une fois la livraison effectuée, on passe à la suivante en répétant le même cycle : • Le client reprend les scénarios restants. Il peut en ajouter, en retirer ou en modifier à son gré. • Les développeurs réestiment les durées de tous les scénarios en se basant sur une meilleure connaissance du contexte technique et fonctionnel, • Le client sélectionne les scénarios à implémenter, • Les développeurs implémentent les scénarios, • etc. Ce cycle continue tant que le client souhaite investir dans le projet ! Gestion des itérations Le logiciel est réalisé en une suite de petites itérations Ces itérations durent 2 semaines environ. Si la gestion des livraisons est axée sur la détermination des estimations et du contenu, celle des itérations est axée sur la détermination des tâches à accomplir, la répartition de ces tâches parmi les développeurs et le suivi de la réalisation. L'équipe détermine et se répartit les tâches à réaliser Les premiers jours de chaque itération sont dédiées à la détermination et l'attribution des tâches, sous la forme d'une séance collective de planification d'itération qui réunit le client et les développeurs. Le client commence par déterminer les scénarios qu'il souhaite voir réalisés au cours de cette itération. Ensuite, les développeurs étudient ces scénarios un par un pour en déduire les tâches à réaliser et se les répartir entre eux : http://www.design-up.com © 2000 Regis Medina 10/19 L’Extreme Programming 1. Les développeurs déterminent la liste des tâches à réaliser Les développeurs prennent un à un les scénarios à réaliser pour cette itération, et déterminent les tâches concrètes qui serviront à leur implémentation. Cette activité est menée en groupe, et le client est présent pour décrire plus précisément les scénarios et répondre à toutes les questions d'ordre fonctionnel. Cette activité fait déjà intervenir des éléments de conception, puisque les tâches concernent l'implémentation proprement dite. S'ils le souhaitent, les développeurs peuvent expérimenter quelques "spike solutions" pour se faire une meilleure idée de la difficulté de certaines tâches. Comme les scénarios, les tâches sont notées sur des fiches cartonnées pour être facilement manipulées. A la fin de cette phase, les développeurs disposent d'une liste de tâches à réaliser pour l'itération en cours. Il reste à les répartir entre eux. 2. Les développeurs choisissent les tâches qu'ils vont implémenter et évaluent leur durée L'équipe reprend la liste des tâches à réaliser, et les développeurs se les répartissent progressivement. Chaque fois qu'un développeur s'approprie une tâche, il en évalue lui-même la durée (en jours cette fois) et s'assure qu'il ne prend pas plus de tâches qu'il ne pourra en réaliser au cours de l'itération. D'une manière générale, les tâches d'un même scénario sont prises en charge par un même développeur, de sorte que le suivi du scénario soit correctement assuré. Les tâches ne sont pas affectées arbitrairement par spécialité technique : un développeur peut prendre en charge une tâche correspondant à une technique qu'il connaît peu, sachant que les implémentations se font toujours en binôme et qu'il pourra donc s'associer à un spécialiste de la technique en question au moment voulu (voir la section "Travail en équipe"). A la fin de cette phase, chaque développeur connaît la liste des tâches qu'il doit réaliser au cours de cette itération. A la fin de l'itération, on recommence ! Une fois l'ensemble des tâches réalisé, on passe à l'itération suivante en reprenant le même cycle : http://www.design-up.com © 2000 Regis Medina 11/19 L’Extreme Programming • Le client choisit les scénarios à réaliser, • L'équipe détermine la liste des tâches à accomplir pour l'itération, • Les développeurs se répartissent les tâches et évaluent leurs coûts, • Les développeurs réalisent les tâches, • etc. Suivi du projet Pour chaque scénario planifié, un ensemble de tests de recette est écrit. Ces tests ont pour but de vérifier de manière automatique chacune des fonctionnalités demandées par le client. Le client (ou l'un de ses représentants) définit ces tests et participe éventuellement à leur implémentation, aidé de testeurs. L'évolution de ces tests forme un indicateur concret de l'avancement des développements : • Le nombre de tests écrits indique l'avancement des spécifications, • Le nombre de tests validés indique l'avancement des développements, • Le nombre de tests en échec indique le degré de qualité du logiciel. Le chef de projet peut ainsi représenter de manière très synthétique l'évolution du projet : Les tests de recette sont lancés fréquemment, et tous les participants du projet (client, direction, développeurs) sont informés en permanence de leurs résultats. Qualité du design et du code Rappelons ici que XP repose sur une réduction significative du coût du changement du logiciel. Cette réduction n'est pas le fruit du hasard, elle est le résultat de l'application à l'extrême des pratiques suivantes : http://www.design-up.com © 2000 Regis Medina 12/19 L’Extreme Programming La conception reste la plus simple possible "You ain't gonna need it!" : on ne fait de conception que pour les fonctionnalités existantes, pas pour les fonctionnalités futures. En corollaire : • on ne fait de généralisations dans le design que lorsque les exemples concrets se présentent. • on n'introduit pas d'optimisations si elles ne sont pas demandées par le client. En somme, plutôt que de préparer le logiciel pour le futur, XP s'assure que le travail actuel soit toujours bien fait (lisibilité du code, simplicité, tests) pour que les changements restent faciles et rapides. Le code est remanié en permanence L'application est toujours maintenue aussi malléable que possible grâce à une activité permanente de remaniement (refactoring). Les remaniements consistent par exemple à renommer les variables, les méthodes, les classes, déplacer des attributs ou des méthodes vers d'autres classes, décomposer les grosses méthodes en des méthodes plus petites, factoriser des parties de code, etc. L'une des motivations principales de remaniement est l'absence de duplications dans le code (tout doit apparaître "Once and Only Once"). Lorsqu'un développeur doit utiliser une partie de code qui se trouve déjà quelque part dans l'application, il remanie l'application de manière à pouvoir utiliser le code existant. De la sorte les modifications de l'application n'impactent généralement que peu d'endroits dans le code, ce qui est primordial pour que celui-ci reste malléable. Le remaniement est également utilisé pour rendre le code plus clair : lorsqu'un développeur doit comprendre une nouvelle partie du code, il la modifie afin de la rendre plus claire pour ceux qui passeront après lui. Une phase de remaniement précède généralement l'ajout de toute nouvelle fonctionnalité, de manière à ce que le nouveau code s'insère aussi naturellement que possible dans l'application. Le remaniement est plus qu'un moyen de dépoussiérer le code : c'est un moyen de faire émerger un design aussi adapté que possible aux besoins de l'application, en supprimant au fur et à mesure tout ce qui nuit à sa simplicité. Chaque classe est écrite avec les tests unitaires associés En plus des tests de recette, qui servent à prouver que le logiciel remplit ses objectifs, XP utilise intensivement les tests unitaires de non-régression. Ces tests sont écrits par les développeurs en même temps que le code lui-même, pour valider chaque portion de code susceptible de comporter des erreurs. Les tests doivent s'exécuter sans aucune interprétation de la part du développeur : ils comportent des assertions qui vérifient automatiquement si le code testé fonctionne ou non. Quasiment chaque classe de l'application possède une classe "jumelle" de test. Lorsque des développeurs doivent ajouter une nouvelle méthode à la classe applicative, ils commencent par ajouter à la classe de test un ensemble d'assertions qui décrivent le comportement de la méthode à ajouter. La méthode n'est implémentée qu'ensuite, pour que ces tests passent. Bien sûr, on ne http://www.design-up.com © 2000 Regis Medina 13/19 L’Extreme Programming teste pas toutes les méthodes de l'application. Avec un peu de pratique, il devient facile de savoir ce qui mérite d'être testé, la règle de base étant qu'on ne teste que ce qui peut casser ("Test everything that could possibly break"). Les classes de tests ne sont bien sûr pas jetées après usage : elles sont gérées par un framework dédié, qui permet de les exécuter en groupe ou de manière globale. La batterie de tests de l'application ne cesse donc de s'enrichir, et forme avec le temps un filet de sécurité qui permet aux développeurs de garder une grande vitesse de développement sans crainte de régressions. Ces tests sont ainsi lancés en permanence par les développeurs - en fait, à chaque compilation. Tous les tests unitaires doivent passer à 100% avant tout report de modifications dans la version d'intégration du logiciel. Cette pratique constitue l'une des pratiques centrales de XP. Ses avantages sont tels que chaque projet, XP ou non, se doit de s'y pencher avec la plus grande attention : • Les erreurs sont très vite détectées et très vite localisées. • Les tests donnent une vision précise de la tâche à réaliser et aident les développeurs à aller droit au but. • Les tests placent les développeurs dans un contexte réduit qui leur permet de s'abstraire de la complexité du reste de l'application. • Il est possible de s'assurer du fonctionnement global du système très rapidement, après toute modification du code, avant ou après toute intégration dans la version officielle du système. Ce que l'on constate au final, c'est que les développeurs qui utilisent les tests unitaires passent plus de temps à ecrire du nouveau code, et moins de temps à chercher des "bugs" dans du code existant. Travail en équipe Lorsque le client a sélectionné les scénarios à implémenter, les développeurs décident en groupe de l'affectation des scénarios. Le code est partagé par toute l'équipe L'application n'est pas découpée en zones réservées à chaque développeur : chacun est susceptible de travailler sur toutes les parties de l'application. Chacun a donc la responsabilité d'écrire un code aussi clair que possible, sachant que d'autres y travailleront peu après. D'autre part le fait qu'une même portion de code soit visitée par plusieurs développeurs diminue les risques d'erreur et augmente sa qualité. Cette pratique va à l'encontre du découpage classique du travail en domaines techniques (IHM, bases de données, etc.). XP exploite les spécialistes, mais en tant que consultants internes et non comme travailleurs spécialisés. http://www.design-up.com © 2000 Regis Medina 14/19 L’Extreme Programming Les développeurs travaillent en binômes Chaque développeur est responsable d'une tâche qui lui est propre, mais il doit systématiquement demander l'aide d'autres développeurs pour la réaliser. Le développeur va s'associer à : • Un développeur ayant des connaissances spécifiques pour la tâche en cours. • Un développeur plus jeune, pour lui transmettre ses connaissances. • Plus généralement, un développeur intéressé par la tâche. Le binôme travaille sur une seule machine : le développeur qui est aux commandes se concentre plutôt sur l'écriture du code, l'autre travaille davantage au niveau de la conception ou de la fonctionnalité en cours. En termes militaires, celui qui est au clavier travaille au niveau tactique, et l'autre au niveau stratégique - mais cette répartition n'a rien de strict : les développeurs s'organisent comme ils le souhaitent pour mener à bien la tâche en cours. Les binômes changent fréquemment, de sorte que chacun est amené à travailler avec tous les autres membres de l'équipe. Cette approche peut paraître coûteuse au premier abord, mais elle s'avère parfaitement rentable en pratique grâce à : • Une plus grande qualité du design et du code qui limite les retours en arrière et les longues phases de debug. • Une concentration accrue des développeurs. • Une plus grande vitesse de développement (après tout l'écriture du code ne représente en soi qu'une petite fraction du travail). • Une meilleure diffusion de la connaissance dans l'équipe, avec notamment une formation accélérée des débutants. Les développeurs respectent les règles de codage de l'équipe Ces règles sont définies par l'ensemble des développeurs. Elles donnent au code un aspect uniforme sur toute l'application, ce qui facilite le partage du code et le travail en binômes. L'homogénéisation du code ne se limite pas seulement à sa présentation et au respect de règles de programmation. L'équipe s'appuie en effet sur un système de métaphores commun, c'est à dire un ensemble d'expressions décrivant les acteurs du système et leurs interactions. Ce système de métaphores constitue : • Un vocabulaire commun qui va permettre à toute l'équipe de parler des mêmes choses avec les mêmes mots. Par exemple, dans le monde des télécom, il faut définir ce qu'est un "noeud" d'un réseau et se servir de ce mot dans le cadre de la définition établie. • Une métaphore de fonctionnement, par exemple : "le logiciel de contrôle de cette machine-outil fonctionne comme une machine à café". Il faut bien sûr veiller à ce que la métaphore ne devienne pas une simplification abusive du concept initial ! • Une source d'inspiration pour la conception d'autres éléments fondamentaux d'un projet tels que: o Les structures de données utiles au logiciel, http://www.design-up.com © 2000 Regis Medina 15/19 L’Extreme Programming o Les méthodes d'accès efficaces à ces données. L'intégration se fait de manière quasi-continue L'intégration est faite tous les jours. Dès qu'un développeur finit une tâche, il met à jour la version d'intégration en s'assurant que tous les tests de non-régression de l'application passent à 100%. La version "livrable" du logiciel évolue donc chaque jour, en reflétant fidèlement l'état d'avancement des développements. L'équipe adopte un rythme durable D'une part, une équipe fatiguée ne fait pas du bon travail. D'autre part, s'il y a trop de retard, c'est qu'il y a un problème de fond et il est illusoire de chercher à le camoufler par davantage de travail. Pour ces raisons, l'équipe adopte la règle suivante : pas d'heures supplémentaires deux semaines de suite. http://www.design-up.com © 2000 Regis Medina 16/19 L’Extreme Programming CONDITIONS D'UTILISATION D’XP XP a fait ses preuves pour des équipes de moins de 10 développeurs réalisant un produit sur mesure pour un client suffisamment accessible. Cependant, du fait que la méthode se montre efficace dans les situations où il est difficile d'établir des spécifications claires et stables au début du projet, diverses entreprises étudient la possibilité d'appliquer XP à des contextes différents. Les deux points suivants font en particulier l'objet de beaucoup de questions : • Comment appliquer XP lorsque le client n'est pas accessible ? Le client peut être remplacé par un représentant spécialiste du domaine fonctionnel, mais il est important que celui-ci ait des contacts fréquents avec le client final pour s'assurer de l'adéquation réelle du produit à ses besoins. • Comment appliquer XP dans des projets de taille importante ? Dans la plupart des cas, ces projets seront décomposés en équipes de taille adaptée. Il reste cependant à déterminer comment organiser ces équipes entre elles, mais XP ne propose aujourd'hui rien de précis dans ce sens. Dans tous les cas, la méthode doit être adaptée par chaque équipe à son contexte particulier. Il est important cependant de respecter un certain nombre de conditions pour bénéficier réellement des apports de la méthode et mériter le "label XP" ;-) Le client doit être intégré au projet Le client (ou au moins un représentant du domaine fonctionnel) doit être disponible pour participer à la définition des scénarios, arbitrer les priorités, apporter ses connaissances métier et définir les tests de recette. Le client doit faire suffisamment confiance à l'équipe de développement pour ne pas lui imposer un résultat à priori (il obtient en retour l'opportunité de contrôler le produit de manière beaucoup plus fine que par le passé). Le logiciel doit rester toujours simple, facilement modifiable et largement testé Les développeurs doivent avoir la compétence nécessaire pour réaliser des applications réellement simples et évolutives. Ils ne doivent également pas être trop limités par des problèmes de compatibilité ascendante qui limiteraient trop fortement les possibilités de remaniement. Les tests unitaires sont également un facteur important du succès de la méthode. Ils doivent être écrits en même temps que le code lui-même, et l'ensemble de ces tests doit passer à 100% en permanence sur la version d'intégration du produit. L'équipe doit travailler... en équipe XP exige une forte cohésion au sein de l'équipe. Cette cohésion ne peut être imposée, elle doit être le résultat des choix faits lors de la constitution de l'équipe. Ce point est suffisamment important pour pouvoir nécessiter le remplacement d'un membre de l'équipe en cours de projet. http://www.design-up.com © 2000 Regis Medina 17/19 L’Extreme Programming D'autre part , les développeurs doivent avoir la capacité et la volonté de participer à toutes les activités du développement : contact avec le client, évaluation des coûts, design et codage, test, etc. Dans un tel contexte, il est important que le chef de projet soit prêt à laisser une autonomie assez importante à l'équipe elle-même, pour se concentrer sur la coordination de l'ensemble. Tous les participants doivent être prêts au changement Finalement, le plus gros obstacle à la réussite de XP reste la résistance au changement, qu'elle vienne des développeurs ou du client. XP apporte un profond changement dans l'approche des projets de développement, et le changement de méthodes de travail (quelles qu'elles soient) reste toujours une entreprise difficile. http://www.design-up.com © 2000 Regis Medina 18/19 L’Extreme Programming CONCLUSION Au final, on peut se demander si la méthode porte bien son nom. Le terme "extrême" évoque des prises de risques insensées, alors qu'en pratique XP vise une suppression systématique du risque. En effet, une équipe XP : • s'assure en permanence qu'elle se concentre sur les besoins réels du client, • développe le plus important en premier, ce qui limite au maximum l'impact d'un retard eventuel, • fournit une grande visibilité sur l'avancement concret des développements, • utilise un filet (tests unitaires) pour tous ses developpements, • pratique une relecture de code immédiate et continue, • etc. Malgré cela, de nombreuses équipes trouveront la méthode extrême dans la mesure où elle implique un changement profond des mentalités et des habitudes de travail. Mais si le changement est radical, rien ne dit qu'il doit être brutal. Les auteurs de XP préconisent au contraire une adoption progressive de la méthode, en partant des pratiques de base telles que les tests unitaires ou le travail en binômes. Après avoir pris connaissance des grandes lignes de la méthode, une équipe souhaitant passer à XP devra commencer par expérimenter progressivement ces pratiques, tout en approfondissant en parallèle sa compréhension de la méthode. Notre section Ressources fournit à cet effet les références des principaux livres et sites web disponibles. Cependant, comme rien ne vaut le contact n'hésitez pas à nous écrire, soit à [email protected] soit sur notre mailing list [email protected], nous serons ravis de parler XP avec vous ! http://www.design-up.com © 2000 Regis Medina 19/19