La méthode Agile comme outil au service des équipes de développement logiciel
Agile est un processus qui aide les équipes à fournir des réponses rapides suite aux retours qu'elles reçoivent sur leur projet, et les aide également à analyser et à améliorer leur produit tout au long du développement.
Le processus Agile décompose un projet logiciel en plusieurs parties plus petites qui peuvent être développées par itérations. L’approche Agile réduit la taille du projet en créant plusieurs projets plus petits. Cette approche itérative distingue la gestion Agile des autres méthodes de gestion.
Contrairement à d’autres méthodes, la gestion Agile utilise des itérations pendant les phases de planification et de développement. Au cours de ces sessions, l’équipe projet et l’équipe client collaborent pour prioriser ce qui doit être ajouté à l’itération. De nombreuses versions sont réalisées tout au long du processus à mesure que des modifications sont apportées au programme. Les clients peuvent tester le programme tout au long de son élaboration et apporter des modifications si nécessaire. Le résultat final est alors un logiciel fonctionnel livré rapidement au client. Ce processus d’itération est répété jusqu’à la fin du projet.
Le quatre valeurs du manifeste Agile :
1. Les Individus et leurs interactions plus que les processus et les outils ;
2. Des logiciels opérationnels plus qu’une documentation exhaustive ;
3. La collaboration avec les clients plus que la négociation contractuelle ;
4. L’adaptation au changement plus que le suivi d’un plan.
Les douze principes de développement logiciel Agile :
1. La plus haute priorité est de satisfaire le client en livrant rapidement et régulièrement des fonctionnalités à grande valeur ajoutée ;
2. Accueillir positivement les changements de besoins, même tard dans le projet. Les processus Agiles exploitent le changement pour donner un avantage compétitif au client ;
3. Livrer fréquemment un logiciel opérationnel avec des cycles de quelques semaines à quelques mois et une préférence pour les plus courts ;
4. Les utilisateurs ou leurs représentants et les développeurs doivent travailler ensemble quotidiennement tout au long du projet ;
5. Réaliser les projets avec des personnes motivées. Leur fournir l’environnement et le soutien dont ils ont besoin et leur faire confiance pour atteindre les objectifs fixés ;
6. La méthode la plus simple et la plus efficace pour transmettre de l’information à l’équipe de développement et à l’intérieur de celle-ci est le dialogue en face à face ;
7. Un logiciel opérationnel est la principale mesure d’avancement ;
8. Les processus Agiles encouragent un rythme de développement soutenable. Ensemble, les commanditaires, les développeurs et les utilisateurs devraient être capables de maintenir indéfiniment un rythme constant ;
9. Une attention continue à l’excellence technique et à une bonne conception renforce l’Agilité ;
10. La simplicité est essentielle ;
11. Les meilleures architectures, spécifications et conceptions émergent d’équipes auto organisées ;
12. À intervalles réguliers, l’équipe réfléchit aux moyens de devenir plus efficace, puis règle et modifie son comportement en conséquence.
Les différentes méthodes Agiles :
Il existe plusieurs méthodes Agiles ; elles partagent des philosophies, des caractéristiques et des pratiques similaires. Certaines des principales méthodologies comprennent :
Scrum :
Le Scrum est un cadre de gestion doté de capacités étendues pour contrôler et gérer les itérations et les incréments dans tous les types de projets. Ce modèle a été identifié et défini par Ikujiro Nonaka et Takeuchi au début des années 1980, lors de l'analyse de la manière dont les principales entreprises de fabrication technologique développaient de nouveaux produits à l’époque.
Développement logiciel Lean :
Le développement de logiciels Lean est une méthode d’itération développée à l’origine par Mary et Tom Poppendieck. De nombreux principes et pratiques du développement de logiciels Lean sont issus du mouvement des entreprises Lean et ont d’abord été utilisés par de grandes entreprises. Cette méthode se concentre uniquement sur les domaines d'une entreprise qui ajoutent de la valeur à un produit ou un service.
La méthode Kanban :
Taiichi Ohno, ingénieur industriel chez Toyota, a développé cette méthode pour améliorer l'efficacité de fabrication. Le système tire son nom des cartes qui suivent la production dans une usine. Les organisations utilisent la méthode Kanban pour gérer la création du projet tout en mettant l’accent sur la livraison continue et sans surcharger l’équipe de développement. Comme Scrum, les processus Kanban sont conçus pour aider les équipes à travailler ensemble de manière plus efficace.
Programmation Extrême :
L’Extreme Programming (XP) a été initialement décrit par Kent Beck. C’est l’une des méthodes Agiles les plus populaires et les plus controversées. XP est une méthode hautement disciplinée permettant de fournir plus rapidement des logiciels de haute qualité. Le client est activement impliqué avec l’équipe pour effectuer une planification continue, et réaliser des tests et des retours rapides et ainsi fournir fréquemment des logiciels fonctionnels.
Crystal :
La méthode Crystal est l’une des approches les plus adaptables dans le développement de logiciels. Elle est composée de plusieurs processus Agiles chacun caractérisé de manière unique. Plusieurs facteurs animent ces processus, notamment la taille de l’équipe, la criticité du système et les priorités du projet.
La méthode Crystal se concentre sur le fait que chaque projet a des caractéristiques uniques et par conséquent, les politiques et les pratiques doivent être personnalisées pour s’adapter à ces fonctionnalités.
Elle favorise la livraison précoce et fréquente de logiciels de travail et encourage une forte implication des utilisateurs, l’adaptabilité et l’élimination des distractions et de la bureaucratie.
Dynamic Systems Development Method :
La méthode de développement de systèmes dynamiques (DSDM) a été conçue en 1994 pour fournir un cadre standard pour ce qui était alors connu sous le nom de développement rapide d’applications (RAD). Bien qu’elle ait été très populaire dans les années 1990, l’approche RAD s’est développée de manière non structurée.
DSDM utilise une approche d’adéquation à des fins commerciales pour les critères de livraison et d’acceptation. Elle se concentre sur la formule : 80% de déploiement du système en 20% du temps.
Développement basé sur les fonctionnalités :
Jeff De Luca, ainsi que les contributeurs A.m. Rajashima, Lim Bak Wee, Paul Szego, Jon Kern et Stephen Palmer ont créé le développement centré sur les fonctionnalités. Ce modèle se caractérise par être un processus de développement logiciel itératif et incrémentiel. Il est basé sur une perspective de réalisation de fonctionnalités valorisées par le client. Les fonctionnalités sont identifiées par le client en décomposant fonctionnellement les tâches en plusieurs domaines.
Les rôles dans l’Agile :
De toutes les méthodes agiles, Scrum est la méthodologie qui définit le mieux l’agilité dans la gestion de projet. Le Scrum comporte trois rôles : le Product Owner, le Scrum Master et les membres de l’équipe.
Le Product Owner supervise toutes les conditions commerciales du projet pour s’assurer que le bon produit est construit et dans le bon ordre. Un bon Product Owner équilibre les priorités dans le processus de développement, est disponible pour l’équipe et prend les décisions concernant le projet.
Le Scrum Master encadre l’équipe et veille à ce que le travail d’équipe soit réalisé de manière efficace. Les Scrum Masters servent l’équipe en éliminant les obstacles qui entravent le progrès, en facilitant les réunions et les groupes de discussion, en suivant les progrès, en résolvant les problèmes et en effectuant d’autres tâches de gestion de projet.
Dans les pratiques de gestion de projet Agile, le Scrum Master est la version du chef de projet. Cependant, contrairement aux chefs de projet traditionnels, le Scrum Master ne prend pas le crédit ou le blâme pour le succès ou l’échec du projet. Leur autorité ne s’étend qu’au processus.
L’expertise du Scrum Master dans le processus motive et guide l’équipe pour qu’elle fonctionne à son plus haut niveau. D’autres rôles de gestion traditionnels tels que la portée du projet, les coûts, le personnel et la gestion des risques restent la responsabilité du chef de projet.
L’équipe travaille ensemble pour déterminer la meilleure approche pour atteindre les objectifs du produit, lesquels sont définis par le Product Owner. L’équipe décide quels membres géreront des tâches spécifiques et décrira les pratiques techniques requises pour atteindre les objectifs souhaités.
L’organisation Agile :
Le processus Agile est organisé de manière hiérarchique. Cependant, la hiérarchie dans une organisation Agile est très différente de celle d’une organisation bureaucratique. Dans l’Agile elle est basée sur la compétence, et non sur l’autorité. Ainsi, la motivation et la performance de l'équipe est basée sur la valeur ajoutée pour le client. Ce type d’organisation utilise une approche de communication dynamique horizontale et verticale très interactive. Les idées peuvent provenir de toute personne dans n’importe quelle position, y compris le client.
Les pratiques Agiles :
Il existe de nombreuses pratiques Agiles différentes, beaucoup ne sont pas utilisées par les pratiquants de cette méthode. Les exemples suivants aident à illustrer comment les pratiques Agiles peuvent être appliquées.
Daily Standup (réunions debout) :
Les réunions quotidiennes debout sont également appelées réunions Daily Scrum. Les sessions Scrum sont organisées quotidiennement par l’équipe afin qu’elle puisse partager des informations pertinentes. Ces réunions sont également conçues pour tenir tous les membres de l’équipe informés et mis à jour sur l’état du projet. La clé de chaque réunion est la brièveté.
Lors des réunions, chaque membre doit répondre à ces trois questions :
Qu’est-ce que j’ai fait hier ?
Que vais-je faire aujourd’hui ?
Quels problèmes entravent ma progression ?
Les User Stories :
Une user story est une brève description de la fonctionnalité recherchée par l’utilisateur final. La user story comporte les trois éléments suivants :
Une description écrite de la story (généralement écrite sur une carte) ;
Une conversation sur la story (pour avoir une meilleure compréhension) ;
Une série de tests confirmant la story.
Les stories sont écrites du point de vue de l’utilisateur final et utilisent un langage qu’il comprend. Elles servent d’échange entre les développeurs et les clients ; les deux parties les comprennent clairement.
Tests automatisés :
La mise en œuvre de tests automatisés est une partie essentielle du processus Agile. Les tests détectent et éliminent les défauts à leur source pour ainsi garantir qu’un logiciel fonctionnel est livré au client. Les développeurs peuvent créer le code de test sous un filet de sécurité en utilisant une variété de cadres disponibles, tout en développant simultanément le code logiciel. Cette méthode est aussi un moyen plus rapide et plus efficace de trouver des bugs dans le logiciel.
Constructions automatisées :
Un principe clé pour les méthodes Agiles est d’avoir un logiciel en cours d’exécution à tout moment. Dans la pratique, la seule façon d’y parvenir est de s’assurer que tous les développements logiciels sont régulièrement et automatiquement compilés, construits, déployés et testés. Cela se fait généralement plusieurs fois par jour et au moins une fois à chaque fois qu’un développeur enregistre le code en tant que partie principale de la branche de développement.
La planification Agile :
Il y a trois niveaux de planification du développement Agile : La planification des versions, des itérations et des tâches. Aux premiers stades de planification les développeurs de projets et les clients se rencontrent pour discuter des user stories nécessaires au logiciel. L’objectif initial de cette réunion est de se centrer sur les fonctionnalités indispensables pour estimer et prioriser ce qui doit être fait.
La planification des versions est une session de planification axée sur le client. Les clients et les développeurs choisissent une date de sortie pour la première version du produit. Ils décident en collaboration quelles stories incorporer lors de chaque sortie. Les développeurs se concentrent sur les efforts d’estimation de la story, tandis que les clients se concentrent sur la sélection des stories.
La planification des itérations nécessite des efforts de collaboration entre les clients et les développeurs pour lancer une partie de la planification des versions. Pendant les itérations, le client définit et hiérarchise les user stories, tandis que les développeurs estiment combien d’efforts sont nécessaires pour développer chaque user story. Le temps pris pour la réalisation des itérations est très court, se mesurant généralement en semaines.
La planification des tâches a lieu après la planification des itérations. Les stories sont divisées en une série d’étapes réalisables par l’équipe de développement. Les listes de tâches sont élaborées et affichées dans la salle du projet afin qu’elles soient visibles par tous les membres du groupe. Chaque développeur se porte volontaire pour effectuer une tâche.
Programmation en binôme :
Dans la programmation en binôme, deux développeurs travaillent en équipe sur une tâche de programmation. Une personne est le Driver, la personne qui entre le code, tandis que la deuxième personne est le Navigator, celle qui planifie les prochaines étapes tout en intégrant le code dans l’ensemble du système.
La programmation en binôme nécessite 15% d’effort en plus mais produit 15% de défauts en moins. Bien que les résultats puissent varier d’un cas à l’autre, les développeurs estiment souvent que la réduction des erreurs vaut les ressources supplémentaires utilisées.
Un autre avantage est que la programmation en binôme n’est pas requise à plein temps. Les équipes peuvent établir leurs propres règles et horaires pour travailler à deux.
L’intégration continue :
Lors d’une intégration continue, les équipes de développement saisissent le code dans le système plusieurs fois dans la journée. Une série de tests est exécutée avant l’ajout du code pour s’assurer qu’il n’endommagera pas les autres tests ou fonctions préexistants du système. Le développeur doit d’abord exécuter tous les tests du système et résoudre les problèmes avant d’intégrer les autres codes. Plus le code est intégré au logiciel, plus il est rapide et facile de fusionner et de détecter les erreurs.
Les rétrospectives :
Les rétrospectives se réunissent à la fin d’un projet ou vers la fin de celui-ci. Ils donnent à toutes les parties impliquées l’opportunité de regarder en arrière et de réfléchir sur le travail accompli au cours du processus. Toute l’équipe examine ce qui s’est bien passé, ce qui n’a pas fonctionné, et surtout ce qui pourrait être amélioré.
En conclusion, la gestion Agile est une approche passionnante et fascinante du développement logiciel que lorsqu’elle est effectuée correctement, les organisations peuvent continuellement trouver des moyens d’augmenter la valeur pour leurs clients et donner plus de sens à ceux qui travaillent activement sur le projet.
Autres articles du blog de Natural Solutions