| Les fondements du développement agile par Laurent Desmons (ldesmonsmcsd@hotmail.com) | ||
Dans mon article précédent, "Mettre en place son environnement de développement .NET", je présentais une démarche pour mettre en oeuvre un atelier logiciel à la disposition du développeur .NET, afin qu'il puisse utiliser au quotidien des outils destinés à faciliter ses développements, le tout dans un esprit volontairement très "XP", ou "eXtreme Programming".
Cet article propose maintenant de démystifier ce terme en présentant une petite synthèse des fondements du "développement agile".
Le développement agile, aussi appelé "développement adaptatif", peut être considéré comme "un style de développement logiciel itératif centré sur les personnes et qui met l'accent sur la satisfaction du client à travers l'intégration continue d'un logiciel entièrement fonctionnel".
Afin de clarifier cette notion somme toute encore un peu vague (mais pleine de bon sens), on peut énoncer les principes et les fondements suivants (voir http://agilemanifesto.org/):
Il s'agit donc avant tout d'efficacité et d'adaptation, l'objectif étant comme toujours de répondre aux demandes tout en respectant les délais et les coûts. On privilégie d'abord les individus et les interactions. Plus facile à dire qu'à faire, et voilà pourquoi des méthodes ont été mises au point afin de mettre en action ces principes. Au cours de cet article je vais tenter de faire la synthèse de quelques unes des méthodes de développement agile les plus connues, puis de fournir une comparaison sur leurs spécificités.
Je vais donc m'attarder sur les méthodes suivantes :
Proposée par Kent Beck, c'est la méthode la plus connue, et la plus en vogue. A vrai dire il s'agit plus d'un ensemble de pratiques à dimension humaine, plutôt qu'une véritable méthode. Il faut bien reconnaître qu'elle a de gros côtés positifs et qu'elle est assez facile à mettre en oeuvre, au prix parfois d'un changement de mentalité et d'une acceptation par l'ensemble des équipes impliquées. Il s'agit ici d'appliquer "à l'extrême" les principes du développement agile, en se focalisant sur les besoins du client, les individualités, le développement itératif et l'intégration continue. Le développeur et ses relations avec le client sont au coeur de XP. Cette méthode convient à des équipes petites voire moyennes, soit jusqu'à une vingtaine de personnes environ.
Le plus surprenant dans cette méthode est qu'elle peut sembler naturelle, mais qu'elle n'est concrètement pas évidente à appliquer et à maîtriser car elle réclame beaucoup de discipline et de communication (contrairement à la première impression qui peut faire penser à une ébullition de cerveaux individuels). Il s'agit d'aller vite, sans perdre de vue la rigueur du codage et les fonctions finales de l'application. La grande force de XP (et le plus grand risque de le faire échouer) est précisément sa simplicité et le fait qu'on va droit à l'essentiel, selon un rythme qui doit rester constant.
On peut énoncer ainsi les 13 principes fondamentaux de XP :
Élaboré par les membres de Rational Software (maintenant IBM) dont Philippe Kruchten, RUP est une véritable méthode qui couvre l'ensemble du cycle de développement. Son étendue, son coût et sa lourdeur apparente la réserve pour les projets de moyenne voire de grande importance. Bien que ses auteurs affirment qu'il est possible d'adapter RUP pour de petits projets, la tâche semble ardue, car RUP propose un processus complet dont la rigueur et le formalisme (documentation exhaustive) peuvent rebuter. Une formation préalable est indispensable si on ne veut pas se perdre dans les centaines de pages HTML qui forment le processus et les nombreux "artefacts" (documents et logiciels) que RUP propose de produire.
RUP a un coût d'investissement très important et, en un sens, il peut être considéré comme pas tellement "agile" car trop rigide. Il s'agit ici cependant d'un véritable outil complet de gestion de projets. RUP fournit un cadre générique qu'il faut adapter à chaque application. Il est centré sur une architecture incrémentale et itérative, le développement s'articule autour du modèle objet et des cas d'utilisation, et favorise UML en tant que langage de modélisation. RUP affecte à chacun un rôle très clair. RUP est formé d'un découpage en 4 phases : inception (objectifs et cas d'utilisation), élaboration (architecture logicielle), construction (développement), transition (déploiement). Chaque phase se découpe en itérations. Chaque itération dure entre deux semaines et six mois et fournit une version de l'application.
Moins "extrémiste" que XP, RUP donne en même temps une apparence de plus grande rigueur, ce qui peut rassurer certains clients habitués aux documentations exhaustives.
Les principales pratiques liées à RUP sont :
Le terme "Scrum" (qui provient d'une stratégie de rugby) se rapproche plus d'une gestion de ressources humaines plutôt que d'une réelle méthode de développement. Il s'agit ici de ne pas oublier le côté humain du développement. Cette approche a été mise au point par Ken Schwaber.
Théoriquement, Scrum peut se marier d'ailleurs très bien avec XP, en fournissant aux développeurs "agiles" un cadre de prise en compte du facteur humain. On peut alors envisager des projets plus importants qu'avec le simple XP. Comme RUP, il s'agit d'un processus incrémental, mais bien moins formalisé : Scrum ne propose aucune pratique de développement, juste des pratiques de management. Il s'agit en fait d'un cadre de gestion de projets bien adapté aux méthodes de développement agile, comme XP.
Les principales caractéristiques de Scrum sont :
Cette méthode, élaborée par Jeff de Luca et Peter Code, est plus formalisée que XP. On peut presque considérer que FDD est une application très "light" de RUP, car sa particularité est de ne se concentrer que sur les phases de design et de réalisation, ce qui consiste à :
élaborer le modèle objet du domaine avec des diagrammes UML
découvrir la liste des fonctions de l'application
implémenter chacune de ces fonctions, l'une après l'autre. Pour cela on forme de petites équipes responsables d'une ou deux fonctions.
l'implémentation est découpée en itérations (de 1 à 3 semaines environ). Chaque itération consiste à implémenter une fonction que le client peut tester, depuis l'analyse jusqu'à la mise en service, et les builds sont réguliers
le projet est suivi de près et l'accent est mis sur le résultat obtenu, la qualité étant primordiale dans cette approche
des outils permettent de suivre précisément le déroulement du projet
les rôles de chaque intervenant sont bien clarifiés
Le tableau suivant (inspiré de "Agile Software Development Methods" par Pekka Abrahamsonn et Outi Salo, VTT Publications 478) peut servir à comparer sommairement les méthodes présentées dans cet article
Méthode |
Points clés |
Désavantages |
XP |
Développement guidé par les besoins du client. Equipes réduites, centrées sur les développeurs. Binômes. Builds journaliers. Amélioration constante, adaptativité aux modifications. |
On se focalise sur l'aspect individuel du développement, au détriment d'une vue globale et des pratiques de management ou de formalisation. On risque ainsi de manquer de contrôle et de structuration en laissant les développeurs trop libres de dériver par rapport aux fonctions de l'application. |
| RUP |
Processus complet assisté par des
outils. Exhaustif. Rôles bien définis, modélisation. |
Lourd, largement étendu, il peut être difficile à mettre en oeuvre de façon spécifique. Convient pour les gros projets qui génèrent beaucoup de documentation. |
| Scrum | Petites équipes, itérations de 30 jours, réunions journalières. |
La mise en oeuvre du développement
n'est pas précisée, seule compte la gestion des ressources humaines. |
| FDD |
Procédé bien défini et simple,
orienté objet et basé sur le développement. Itérations très courtes. |
Uniquement centré sur le développement. |
Le développement agile repose sur des principes simples et naturels. Il est soutenu par des méthodes qui partagent beaucoup de points communs :
Les méthodes présentées ici se distinguent toutefois par leur portée et leur domaine d'application, ainsi que par l'environnement de travail dans lequel elles peuvent être mises en oeuvre : cela devrait vous aider à faire un choix "agile" le jour où vous déciderez peut-être d'adopter l'une d'entre elles...
Auteur : Laurent Desmons
Copyright © 2004