lundi 8 août 2011

Méthodologie Agile/Scrum - Partie 3

Dans le précédent article, nous avons introduit la méthologie Scrum. Dans cette troisème et dernière partie, nous allons détailler  les rôles et les activités Scrum ainsi que les documents utilisés dans cette démarche de gestion de projets.

Commençons par les rôles Scrum : "Product Owner", "Scrum Master" et "Scrum Team Member".

1) les Rôles SCRUM

Rôle Product Owner

Il est le responsable, chez le client, pour fournir un produit réussi en termes de :
  • Vision
  • Priorités
  • Image de marque minimum
  • Ensemble des Fonctionnalités
  • Dates des livraisons des incréments
  • Retour sur Investissement
  • Coût
Dans la méthodologie Scrum le Product Owner,
  • détermine la feuille de route de développement (planning global)
  • fixe les priorités du produit
  • maintient un minimum de spécifications pour chaque fonctionnalité, par anticipation sur le prochain sprint (itération). C'est lui qui maintient le Product Backlog.
  • est ouvert à la négociation qu'il peut y avoir avec l'équipe de développement
  • est orienté métier.
  • il valide la définition du "Done" (Terminé).
  • ce rôle peut être rempli par le "Directeur de Produit", le "Directeur Marketing", le "Chef de Projet Client" ou le "Vrai Client".
  • a accès aux dirigents de l'entreprise pour l'aider à
    • définir la feuille de route
    •   définir les priorités
    •   avoir le feedback et l'acceptation
Le Product Owner est le véritable capitaine à bord du navire du projet. Il est responsable de le mener à bon port, à temps et par le meilleur chemin.

Rôle du Scrum Master

  • Affecation des tâches
  • Suivre l'état d'avancement
  • Gestion des risques : garde un oeil sur le diagramme "burn chart". Explique tout écart, évalue l'impact sur le projet, etc.
  • Applanit les difficultés que l'équipe rencontre
  • Détecte les conflits entre membres de l'équipe et les résout
  • Garde un oeil sur l'état d'avancement des tâches : combien de temps reste-il, y a-t-il des surprises, de nouvelles compréhensions du domaine à partager

L'Equipe projet Scrum

  • L'équipe est colocataire du même local , voire tous les membres sont assis autour de la même table.
  • L'effectif optimum est 7.
  • Elle est pluridisciplinaire comprent un DBA, un architecture, des développeurs, etc.
  • Elle est auto-gérée et prend les décisions collectivement. Chacun connaît là où il est bon et chacun sait à qui s'adresser pour un problème particulier. Il n'y a pas de leadership. Chacun peut conduire toute l'équipe le bon moment.
  • Elle est responsable collectivement de la livraison en fin de Sprint. Si un membre ne remplit pas ses devoirs, toute l'équipe est responsable.
  • Tous les membres collaborent pour résoudre les problèmes collectivement et avancer dans le projet.
  • Les membres travaillent ensemble mais s'amusent ensemble également.
2) Les activités Scrum

Release Planning

Le Release Planning est en fait la planification globale  du projet où l'on planifit l'ensemble des sprints du projet.

 
Source : scrumusergroup.ca


Sprint Planning

A l'intérieur d'un sprint (itération), les "user stories" à réaliser (issues du product backlog) sont planifiées dans le temps/ C'est le Sprint Planning :




Source : scrumusergroup.ca

Les "User Stories" sont également groupées en trois colonnes, au fur et à mesure de l'avancement : "Sprint backlog", "En cours" et "Terminé".

Cas particulier : Sprint 0

Ce premier Sprint est un peu particulier. Il englobe les activités suivantes :
  • Si nécessaire, former l'équiepe sur les valeurs et pratiques Agile, le processus Scrum, les rôles, les activités et les documents.
  • Définition du "Terminé"
  • Commencer le travail avec le tableau des tâches et démarrage des scrums quotidiens (réunions quotidienne)
  • Préparer le Product Backlog avec le Product Owner.
  • Réunion d'estimation
  • Planifier le premier Sprint.

Exemple de tableau des tâches

La notion de "Done"/"Terminé" est importante. Voici un exemple de définition de "Terminé" :
  • Le code modifié est documenté (inline, javadoc)
  • Le code modifié est testé unitairement (Junit)
  • L'utilitaire "FindBugs" ne détecte pas de problèmes sévères.
  • Le build local réussit
  • Les changements ont été mis dans le référentiel de code source (SVN, etc.)
  • Le build continu (Hudson CI) est réussi
  • le build a été déployé en environnement d'intégration
  • Tests Slenium exécuté pour une application Demo
  • La qualité a été vérifié par un membre de l'équipe

Réunion de Planification

Celle-ci, d'une durée globale de 4 heures, en général, est divisée en deux sessions de 2 heures, généralement tenues le vendredi avant le démarrage du Sprint. Cette réunion est annimée par le Scrum Master et se déroule de la manière suivante :

Session 1 :
  • Engagement global sur les User Stories à réaliser durant le Sprint
  • Estimation de la charge, par exemple avec le planning Poker (voire plus loin)
  • Tenir compte des priorités définies par le Product Owner.

Session 2 :
  • Diviser chaque User Story en tâches (les petits stickers collés sur le tableau des tâches).
  • Fixer la ligne rouge du prochain sprint et finaliser l'engagement de l'équipe.
  • Affectation des tâches aux membres de l'équipe par volontariat. Chacun dit "moi je prendrai cette tâche ou celle-là"
  • Toute tâche restant non affectée doit être affectée par l'équipe.
  • Créer le "Radiateur d'Information", la salle de travail de l'équipe devient le tableau de bord pour chacun.

Estimation des user Stories

Généralement, les User Stories que le Product Owner met dans le Product Backlog se voient affectées par l'équipe Scrum des "Points de User Story" correspondant à la charge estimée de réalisation. Si une tâche élémentaire se voit affecter un point, une tâche jugée nécessitant le double du temps pour la réaliser
aura 2 comme points. Au lieu des points, on peut également directement utiliser les heures ou les jours.

Les estimations ne sont pas la responsabilité d'une personne en particulier. Toute l'équipe Scrum s'engage dans les estimations. Il est important de chercher le consensus de toute l'équipe sur les estimations. On peut comparer une tâche à une autre déjà réalisée pour effectuer des estimations. Quant au consensus
de l'équipe, une méthode permettant de l'obtenir est la méthode dite de "Poker Planning", que l'on peut ainsi décrire :
  • Chacun note, seul et indépendamment des autres, sur un bout de papier l'estimation qu'il juge bonne pour réaliser la tâche.
  • Chacun révèle à tous les autres son estimation.
  • Celui ayant l'estimation la plus basse ou la plus haute doit défendre son point de vue.
  • Chacun réajuste alors son estimation et on refait un tour jusqu'au consensus.

On peut également utiliser la technique suivante (des 5 doigts) :
  • une estimation est déterminée d'une manière ou d'une autre
  • chacun doit voter sur cette estimation avec un nombre de 1 à 5 : 1 pour totalement en désaccord et 5 pour entièrement d'accord.
  • ceux qui sont en total désaccord ou entièrement d'accord doivent défendre leur point de vue.
  • on ajuste la valeur on refait un vote et ainsi de suite jusqu'à ce qu'on arrive à ce que chacun affiche au moins la valeur 3.

Notion de Vélocité

La vélocité est le nombre de Points de User Story que l'équipe peut réaliser en un Sprint. Si les points de user story sont simplement les heures ou les jours de travail, alors la vélocité correspond simplement aux heures effectives de travail de l'équipe lors d'un Sprint. Si on utilise des points autres que les heures, la vélocité est inconnue pour une nouvelle équipe, un nouveau projet ou à chaque fois qu'un membre rejoint ou quitte l'équipe. Dans ce cas, on doit l'estimer.

Attention, pour mesuser la vélocité effective réalisée par l'équipe, on ne doit tenir compte que des User Stories réellement terminées et non partiellement
terminées. Elles doivent vérifier le critère "Done"/"Terminé" pour être comptées dans la vélocité.

Réunion Scrum quotidienne

Animée par le Scrum Master, elle ne doit pas durer plus de 10 à 15 minutes et se résume aux questions suivantes adressées à chaque membre de l'équipe :
  • quel est le travail réalisé hier ?
  • qu'est-ce qui est prévu dea réaliser ujourd'hui ?
  • y a-t-il des empêchements quelconques ?
Et le travail commence pour toute l'équipe dans la salle commune.

Réunions de revue du Sprint

Animées par le Scrum Master et à laquelle assiste le Product Owner, ces réunions ont lieu à la fin de chaque Sprint. L'équipe effectue une démonstration, de toutes les User Stories réalisées, au Product Owner pour validation. Toutes les User Stories ayant échoué reviennent au Product Backlog.

Réunion de rétrospective

Animée par le Scrum Master, on écrit sur un tableau les points positifs et négatifs du précédent Sprint. On utilise ce tableau pour améliorer le prochain sprint.

3) Documents Scrum (Scrum Artifacts)

Product Backlog

Elaboré par le Product Owner, ce document contient l'ensemble des fonctionnalités à réaliser pour le produit, exprimées généralement sous forme de "User Stories".
Exemple de Product Backlog

Les User Stories s'expriment généralement sous forme d'un triplet (Rôle, Résultat,Raison). Rôle : "En tant que X", Résultat : "je veux avoir ceci et cela...", Raison : "ainsi je pourrais vérifier ceci et cela". Les User Stories doivent vérifier les contraintes suivantes :
  • Être indépendantes les unes des autres
  • Négociables (entre l'équipe et le Product Owner)
  • Contenant de la valeur (apporte de la valeur ajoutée au produit)
  • Estimables en termes de charges de réalisation (points ou heures)
  • Petites
  • Testables
Si les "User Stories" se décomposent en "Tâches". Elles même se regroupent pour former des "Epic Stories" ou des "Features". Les User Stories se réalisent en 2 à 4 semaines contre 3 à 6 mois pour les Features et quelques heures/jours pour les tâches.

Liste des obstacles/empêchements

Cette liste maintenue par le Scrum Master et affiché dans la salle de travail à côté du tableau des tâches, regroupe l'ensemble des tâches bloquées et la nature des obstacles ou difficultés empêchant l'équipe de les réaliser. Le rôle du Scrum Master, avec l'aide du Product Owner est de résoudre tous les problèmes recensés dans cette liste. 

Diagramme "burn chart"


Ce diagramme montre le travail restant en cours du temps. La droite en bleu ci-dessus est tracée en fonction de la vélocité théorique de l'équipe. Si la courbe est en dessous de cette droite, l'équipe est en retard par rapport aux prévisions. Au-dessus, elle est en avance. Généralement, une courbe saine connaît des oscillations autour de la droite idéale. Une fois l'équipe est en retard, ensuite elle rattrape son retard, etc. la ligne d'en bas est la "ligne rouge" qui détermine la durée du Sprint. Si on rajoute des User Stories au sprint, cette ligne est décallée vers le bas d'autant de points rajoutées. La durée du Sprint est alors allongée si la vélocité n'a pas changé, c'est-à-dire si l'équipe n'est pas renforcée par exemple.

Source : Target Process Help

Conclusion

Durant ces trois articles nous avons d'abord souligné les insuffisances des méthodologies lourdes de gestion de projet. Ensuite nous avons introduit l'esprit Agile et comment il améliore la gestion des projets informatiques en en minimisant les risques et en augmentant leurs chances de réussite. Ensuite, nous avons fait un zoom sur la méthologie Scrum, une démarche Agile parmi les plus utilisées du marché.

mercredi 3 août 2011

Méthodologie Agile/Scrum - Partie 2

Dans la première partie de cet article nous avons présenté les problèmes posés par les méthologies lourdes. Nous avons esquissé une présentation des méthodologies Agile. Dans cette seconde partie nous allons commencer avec le "Agile Manifesto" avant d'introduire la méthologie Scrum.
 
1) Le Manifeste AGILE

En 2001 plusieurs représentants de méthologies dites AGILE (XP, Scrum, DSM, etc.) se sont réunis pour discuter des méthologies de développement de logiciels. Ces personnes qui se sont données le nom de "Alliance Agile" ont alors produit puis cosigné le manifeste suivant, qui résumé les idées derrière les méthologies Agile :

« Nous découvrons comment mieux développer des logiciels  par la pratique et en aidant les autres à le faire. Ces expériences nous ont amenés à valoriser :
  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
    Nous reconnaissons la valeur des seconds éléments mais privilégions les premiers. »

    Traduction de l'anglais par le club Agile Rhones Alpes

    Des quatres principes édictés ci-dessus découle les 12 principes suivants :


    1. Notre 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 spécifications, 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 tout en préférant les cycles 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. Leur faire confiance 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 soutenu. 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é – c’est-à-dire l’art de minimiser la quantité de travail inutile – est essentielle. 
    11. Les meilleures architectures, spécifications et conceptions émergent d'équipes autoorganisé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.
    2) Quelques méthologies AGILE

    Le tableau suivant donne une liste des principales méthologies AGILE avec les noms des "guru" de ces méthodes, qui sont par ailleurs sigantaires du Manifeste Agile.


    MéthologieGuru
    XP (eXtreme Programming)Kent Beck
    DSM (Dynamic System Developement Method)Dane Faulkner
    FDD (Feature Driven Developement)Jeff Deluca
    ScrumKen Shwaber
    CrystalAlistair Cockburn
    Adaptive Software DevelopementJim Highsmith
    Lean software DevelopementMary Poppendieck

    Le graphe suivant donne une idée sur  le pourcentage des méthologies utilisées de part le monde, selon un rapport de Forester en 2008 :

    Les bénéfices des méthodologies AGILE peuvent ainsi se résumer :
    • Fournir l'aide pour effectuer les changements de spécifications et de priorités.
    • Minimiser le coût du changement
    • Fournir une meilleure visibilité sur la progression du projet
    • Minimiser les risques
    • Maximimser le Retour sur Investissement
    • Encourager un code plus simple et de meilleure qualité
    • Livrer de la valeur ajouté métier tôt et souvent
    Si les bénéfices des méthodes AGILE peuvent séduire, il y a cependant quelques conditions nécessaires à leur réussite :
    • Implication constante des responsables métier
    • Besoin de plus de discipline
    • Accent mis sur les tests
    • Equipe de développement compétente
    • Equipe de développement multi-disciplinaire
    3) Introduction à SCRUM

    SCRUM comporte 3 rôles, 3+1 activités et 3+1 documents.

    Les rôles SCRUM :
    1. Product Owner
    2. Scrum Master
    3. Scrum Team Member
    Les activités SCRUM :
    1. Planification du Sprint 
    2. Scrum quotidien
    3. Revue du sprint
    4. Rétrospective du sprint
    Les documents SCRUM :
    1. Product Backlog
    2. Sprint Backlog
    3. Diagramme Burn down
    4. Liste des obstacles
    Dans le text ci-dessus, le mot  "Sprint" correspond à une itération au sens SCRUM.

    Tous les éléments ci-dessus seront détaillés dans la troisième partie de cet article. Terminons celui-ci par une description globale du processus SCRUM :
    Source : Paul J. Pazderski, Manifesto for Agile Software Developement

    La liste des fonctionnalités se trouve dans le "product Backlog". On extrait les fonctionnalités à réaliser dans un Sprint et on les rajoute dans le "Sprint Backlog". Après réalisation, ces fonctionnalités viennent enrichir  les versions successives et opérationnelles du logiciel.

    lundi 1 août 2011

    Méthodologie Agile/Scrum - Partie 1

    Dans cette série d'articles, on va faire connaissance des méthodologies Agile de manière générale et on va faire un "zoom" sur la méthodologie Scrum en particulier.

    1- Inconvénients des méthodologies lourdes

     Les méthodologies traditionnelles "En cascade", "RUP Rationale Unified Process" ou CMMI sont assez lourdes et souffrent de certains inconvénients que nous allons illuster sur la méthodologie "En Cascade" :


    Les méthodologies traditionnelles mettent l'accent sur l'élaboration de spécifications les plus détaillées possibles. Spécifications qui seront consignées dans des documents d'analyses détaillées. Or, on a beau aller dans le maximum de détails, il y a des spécifications que l'on découvre tardivement. Les utilisateurs peuvent ne pas se rendre compte au départ de tous leurs besoins, ce n'est qu'après les premières utilisations du système qu'ils se rendent compte qu'il manque des fonctionnalités importantes. Donc des retours en arrière sont souvent obligatoires, mais pas toujours possibles dans le modèle en cascade.

    Puisque les spécifications fonctionnelles changent souvent, la conception sous-jacente change obligatoirement. Or souvent il est difficile de changer une conception surtout quand il s'agit de modifier le modèle de données. Cette difficulté à modifier la conception a posteriori conduit assez souvent à une "usine à gaz" et à des architectures non optimisées.

    Etant donné que les spécifications changent et la conception reste figée, la réalisation risque de rentrer dans un cycle de développpement très long dépassant toutes les prévisions. Et c'est la phase de test qui fait les frais de ce rallongement du cycle de réalisation. Les tests sont effectués à la va-vite ou ne sont pas du tout effectués. C'est le client qui teste en cours d'utilisation.

    Quant au déploiement, il est souvent redouté car synonymes de mauvaises surprises. En effet, le client ne voit aucune version du logiciel avant ce déploiement qui peut avoir lieu plusieurs mois après les premières spécifications. Donc, il y a un grand risque que le logiciel déployé ne correspondent plus aux besoins du moment.

    De manière générale, les méthodologies lourdes souffrent des problèmes suivants :
    • Quand les spécifications ne sont pas claires ou ont changé
      • Peur de passer à la phase suivante
      • Les changements coûtent de plus en plus cher
      • L'utilisateur n'obtient pas ce qu'il souhaite
    • Le contrôle qualité souffre
      • Temps insuffisant pour tester
      • Intégration tardive signifie bugs de dernière minute
    • La perte de temps
      • 52% des exigences ne sont jamais implémentées
      • 64% des fonctionnalités rarement utilisées
    • Statistiquement les projets dépassent le temps initial prévu
      • Seuls 32% des projets réussissent
      • Très mauvaise visibilité sur la progression
      • Retard de livraison signifie retard de paiement
    Source : scrumusergroup.ca


    Source : The Standish Group XP 2002



    Source : The Standish Group, Chaos Report 2009


    2- Ebauche de solution : méthodes itératives

    Pour pallier à tous ces inconvénients, les méthodes dites "Agile" ont adopté une approche itérative que l'on peut illuster comme suit :

    On procède à une inversion du temps qui s'écoule désormais horizontalement et non pas verticalement. Chaque itération comprend tout le processus de développement de l'analyse jusqu'au test et déploiement. Avec les méthodes itératives, à n'importe quel moment, on peut mesurer la progression du projet. Tandis qu'avec la cascade traditionnelle, il faudra attendre la fin du développement pour voir le résultat (big bang).

    Le tableau suivant résume les différences entre les méthodologies classiques et les méthodes Agile :

    Approche en CascadeApproche Agile
    Par phaseItérative et incrémentale
    Logiciel opérationnel en phase finaleLogiciel opérationnel après chaque itération
    Des personnes différentes impliquées en diverses phases. Le contexte est perdu. Les mêmes personnes sont impliquées durant toutes les phases.
    Vérification effectuée en phase finale Développement dirigé par la vérification
    Planning prédictif Planning adaptatif
    Peu de visibilité. Dirigé par les documents. Plus de visibilité. Dirigé par le développement.
    Modifications acceptées à certaines phases seulement. Modifications acceptées tout au long du processus.

    A suivre ...