vendredi 17 décembre 2010

GWT : premiers contacts

Introduction

Depuis pas mal de temps, et notamment depuis la présentation de Didier GIRARD à Grenoble (voir cet article), je voulais tester GWT (Google Web Toolkit) avec un petit développement. C'est chose faite et je vais donc partager ici mes premières impressions et remarques.

N'hésitez pas à réagir et à commenter pour que nous puissions échanger sur le sujet !

GWT, c'est quoi ?


Extrait Wikipédia :
Google Web Toolkit (GWT) est un ensemble d'outils logiciels développé par Google, permettant de créer et maintenir des applications web dynamiques mettant en oeuvre JavaScript, en utilisant le langage et les outils Java. C'est un logiciel libre distribué selon les termes de la licence Apache 2.0.

GWT met l'accent sur des solutions efficaces et réutilisables aux problèmes rencontrés habituellement par le développement AJAX : difficulté du débogage JavaScript, gestion des appels asynchrones, problèmes de compatibilité entre navigateurs, gestion de l'historique et des favoris, etc.
Source et détails : http://fr.wikipedia.org/wiki/Google_Web_Toolkit

Contexte et objectif

Pour expérimenter la techno, j'ai profité d'un besoin simple pour l'association de parents d'élèves dont je fais partie. Il s'agit de permettre aux parents d'élèves lambda de remonter facilement des incidents, et de stocker ces données pour mémoire et pour d'éventuelles statistiques d'ici quelques mois.

J'ai donc développé un formulaire simple composé de textes, de champs de saisie libres, de liste de choix, et d'un bouton "Envoyer" :


J'ai également ajouté un "mode avancé", activable par un paramètre dans l'URL, me permettant de visualiser les données saisies sous forme de tableau.

Google App Engine

J'en ai profité pour utiliser GAE (Google App Engine) que j'avais déjà testé par ailleurs. Le besoin étant d'avoir un formulaire "en ligne" et provisoire (quelque mois), le cloud computing (PaaS) est tout à fait adapté, et notamment GAE bien intégré avec GWT.

Installation de l'environnement de développement et démarrage

Comme bon nombre de plug-ins pour Eclipse, les informations sont faciles à trouver sur internet et l'installation est rapide.

Pour le démarrage du projet, les outils intégrés à Eclipse permettent de créer très rapidement un squelette d'application basique mais contenant l'essentiel, et prêt à l'emploi.

Création de l'IHM et gestion des événements

C'est évidemment le point fort de GWT puisqu'on écrit du code Java très proche de AWT et Swing. J'ai donc très rapidement créé une première version du formulaire avec des libellés et des champs de saisie. Extrait :

  FlexTable table = new FlexTable();

  int row = 0;
  table.setText(row, 0, "Prénom et Nom :");
  field = new TextBox();
  table.setWidget(row++, 1, field); 
  ...
  name = field.getText();
  ...

Une liste de choix permet de choisir un type d'incident. Si l'utilisateur choisit "Autre", un champ de saisie est activé pour permettre à l'utilisateur de préciser. Extrait :

  typeList.addChangeHandler(new ChangeHandler() {
      @Override
      public void onChange(ChangeEvent event) {
          otherTypeField.setEnabled(isOtherTypeSelected());
      }
  });

Par rapport à une solution Javascript manuelle, la gestion des événements de l'IHM est vraiment plus simple, instinctif, agréable, rapide, ... Bref, le pied !

Tests de l'IHM

Pour tester son développement, il y a essentiellement 2 possibilités :
  • en tant que GWT application : je n'ai pas réussit à utiliser ce mode, NoSuchMethodError dans org.mortbay.*, je n'ai pas voulu perdre trop de temps sur ce problème ... mais je suis preneur d'une solution !
  • en tant que WEB application : j'ai donc utilisé ce mode, extrêmement pratique, les modifications d'IHM sont immédiatement visibles avec un rafraichissement dans le navigateur, un système de base de données est en place (et permet le stockage et la visualisation des données), etc ...
La partie mise au point du rendu est donc rapide et efficace : encore un bon point !

Extension de l'IHM (modules)

Mon formulaire devait permettre à l'utilisateur de saisir la date de l'incident. Ahh ... les dates et leurs formats : toujours un problème ... J'ai donc cherché un DatePicker, et j'ai trouvé gwt-datepicker développé par Zenika.

Après le téléchargement et une petite recherche internet, l'intégration du module dans le projet est rapide et facile. Finalement, pour l'utilisation, on a juste à écrire ce genre de lignes pour créer l'objet et récupérer la date :

  datePicker = new DatePicker();
  ...
  Date selectedDate = datePicker.getSelectedDate();
  ...

J'ai regardé rapidement le contenu du module téléchargé : essentiellement du Java, un peu de CSS et bien sûr l'XML GWT pour le module lui-même. Le tout multi-langue, une utilisation facile, un résultat efficace. Cette solution de modules semble donc très puissante !

Échanges avec le serveur

L'assistant de création de projet met en place le mécanisme de communication avec le serveur grâce à un système de service à base d'interfaces et une implémentation. Pour chaque service, il y a effectivement 2 interfaces :
  • la première est "classique" et décrit le service et ses méthodes
  @RemoteServiceRelativePath("recordissue")
  public interface RecordIssueService extends RemoteService {
      IssueResponse recordIssue(Issue issue) throws IllegalArgumentException;
    
      Issue[] retrieveIssues() throws IllegalArgumentException;
  }
  • la seconde est un peu surprenante au départ (mais on s'y fait), elle est voisine de la 1ère, doit avoir le même nom avec l'extension Asynch, elle doit contenir les mêmes méthodes ou presque (void pour le retour, et un paramètre de callback), le tout pour permettre une utilisation asynchrone du service (ajax) depuis la page HTML (le tout toujours écrit en Java !)
  public interface RecordIssueServiceAsync {
      void recordIssue(Issue issue, AsyncCallback<IssueResponse> callback)
              throws IllegalArgumentException;

      void retrieveIssues(AsyncCallback<Issue[]> callback) throws IllegalArgumentException;
  }

J'ai renommé le service initialement généré. J'y ai ajouté quelques méthodes (recordIssue, retrieveIssues, ...). J'ai créé un bean Java IsSerializable pour encapsuler les données. Et voilà, en quelques minutes, mon serveur me traçait les données reçues du formulaire ! Là encore : simple, rapide, pratique !

Stockage des données

L'étape suivante était donc de stocker ces données sur le serveur. J'ai rendu le bean de données persistant grâce aux annotations JDO. Extrait :

  @PersistenceCapable(identityType = IdentityType.APPLICATION)
  public class Issue implements IsSerializable {

      @PrimaryKey
      @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
      private Long id;

      @Persistent
      public String name;

      @Persistent
      public Date date;

      @Persistent
      public String type;

      ...
  }

Côté serveur, j'ai complété le service avec un DAO pour stocker les nouveaux incidents dans la base Bigtable de Google App Engine :

  public class IssueDao {

      private static final PersistenceManagerFactory PMF = JDOHelper
              .getPersistenceManagerFactory("transactions-optional");

      public static void store(Issue issue) {
          PersistenceManager pm = getPersistenceManager();
          try {
              pm.makePersistent(issue);
          } finally {
              pm.close();
          }
      }

      private static PersistenceManager getPersistenceManager() {
          return PMF.getPersistenceManager();
      } 

      ... 
  }

C'est pas plus long que ça, et encore une fois .... (vous aurez compris !)

Déploiement

Le plug-in Google App Engine ajoute 3 boutons dans Eclipse dont un pour le déploiement. Avec avoir renseigné l'ID de l'application (préalablement créée sur le cloud de GAE) et le N° de version, on saisie les identifiants de compte et le déploiement se déroule : compilation, envoi des fichiers, activation, vérification.

Une fois l'application en ligne, elle est accessible par une URL assez simple, et la console Google App Engine permet de contrôler plein de paramètres, ainsi que la consultation des données en base. Très pratique !

Bilan

Vous l'avez vu, plein de points positifs, et en très peu de temps, j'avais un formulaire opérationnel, hébergé sur internet, avec stockage des données dans une base.

Néanmoins, je dois mentionner quelques problèmes ou difficultés rencontrés.

Mise en page de l'IHM
Une fois la première version du formulaire réalisée, j'ai voulu aller un peu plus loin : mise en page, onglets, alignements, etc ... J'ai alors un peu plus galéré. Comme pour AWT et Swing, et notamment le puissant mais délicat GridBagLayout, il faut pratiquer un peu pour comprendre la logique de GWT légèrement différente des layouts de AWT. Il faut également faire attention aux mélanges avec CSS. J'ai donc l'impression qu'il faut découper son IHM en panels, encore plus qu'en AWT.

(Trop) Grand nombre de permutations
La force de GWT est sa compatibilité entre les navigateurs. Pour cela (et pour le multi-langue), le compilateur démultiplie les fichiers Javascript générés : c'est ce qu'on appelle les permutations. Je ne sais pas pourquoi, mais je me suis retrouvé avec ... 90 permutations ! J'ai essayé d'en diminuer le nombre en spécifiant mon navigateur dans mon fichier *.gwt.xml :
<set-property name="user.agent" value="gecko" />

Je n'avais alors plus que 15 permutations, mais le gwt-datepicker ne fonctionnait plus ... Je n'ai pas voulu perdre de temps pour l'instant sur ce point, mais je suis preneur d'idées et suggestions ...

Boite noire
Pour le problème ci-dessus, autre inconvénient de GWT, difficile de trouver la piste pour debugger, voir le code JavaScript, y mettre des points d'arrêt, etc ... C'est forcément l'inconvénient d'une telle technologie qui fonctionne un peu en "boite noire", pas facile ensuite de mettre les mains dans le canboui. Néanmoins, il me semble qu'il doit y avoir des moyens pour mettre des points d'arrêt dans le code Java, à creuser ...

Module ("Entry Point")
Pour visualiser mes données, j'étais initialement parti sur la création d'une autre page HTML. Mais apparemment, qui dit autre page, dit autre module. Le résultat attendu n'a pas été immédiat (ou aussi rapide que les étapes précédentes). En plus, ma seconde page ne comportait qu'une table, mais à l'affichage, sous la table, je me retrouvais avec le formulaire de la première page sans vraiment comprendre pourquoi. Je n'ai vraiment pas passé trop de temps sur cette piste, je suis vite revenu à un module unique, et une page avec des onglets "cachés". Il est vrai que je suis allé vite, sans trop lire de littérature sur GWT et ses concepts (c'était un peu mon but, tenter une entrée rapide dans le vif du sujet), il faudra donc que je creuse un peu plus de ce côté !

Conclusion

Sans hésiter, GWT est une solution extrêmement intéressante, surtout me semble-t-il pour du RIA (Rich Internet Application) en "single page interface". Par contre, je ne sais pas si GWT est approprié pour des applications comportant de nombreuses pages HTML simples, type formulaires de saisies et tables de consultations. Certains frameworks WEB, en MVC, sont vraiment pratiques, rapides et productifs (promis, bientôt un article sur Play! framework). Je n'ai pas non plus exploré la génération de pages avec des données, comme en MVC : la table de ma seconde page est remplie par une requête asynchrone à chaque fois que l'onglet est affiché.

L'intégration avec Google App Engine est vraiment impressionnante par sa simplicité et sa rapidité, notamment pour mon cas d'un besoin simple, en ligne, provisoire, gratuit, ...

Pour la suite, il me faudra jeter un coup d'oeil aux difficultés évoquées ci-dessus pour mieux comprendre le fonctionnement et rentrer plus en détails dans cette techno.

Il faudra également que je me penche sur la conception par UIBinder permettant la description du contenu des pages dans un XML, mais avec mon expérience et ma pratique de AWT et Swing, je ne suis pas sûr d'être convaincu par cette approche de description de l'IHM par XML ... A moins que GWT Designer soit la bonne alternative. A creuser également ...

Donc, une techno très intéressante et puissante, à creuser. Pas forcément la meilleure pour tous les besoins, mais à utiliser à bon escient ...

Et vous ? Que pensez-vous de GWT ? Quelles sont vos expériences ? Selon vous, quelques sont les points forts et les points faibles de GWT, et quelles sont les alternatives ? ...

mercredi 1 décembre 2010

Retour Agile Grenoble 2010

Mardi 23 novembre 2010, j'ai assisté à Agile Grenoble 2010 organisé par le CARA. La journée s'est déroulée à guichet fermé avec 450 participants ! En voici un petit retour avec les points forts que j'ai noté et mes réactions.

Après un accueil efficace et sympa autour d'un café et de viennoiseries, la journée a débuté dans l'amphi par une keynote de Claude Aubry, suivie par 2 créneaux de 1h pour des sessions 7 sessions en parallèle. Après le déjeuner, une keynote de Aslak Hellesoy, suivie de 3 créneaux de sessions.

Mon programme de la journée a donc été le suivant :
  • Matin :
    • Keynote : Claude Aubry : Le petit Scrum illustré
    • Adoption d’Extreme Programming à Kelkoo
    • Atelier Story Map, là où tout commence...
  • Après-midi :
    • Keynote : Aslak Hellesoy : Les nouvelles tendances de l'agilité 
    • TDD et Legacy
    • Kata Robozzle en Haskell
    • Exigences Exécutables Efficaces : "Doing the Right Software"
Ami lecteur, n'hésite pas à me contacter ou laisser un commentaire (remarque, question, correction, etc ...), je souhaite réellement pouvoir échanger sur ces sujets !

Keynote : Claude Aubry : Le petit Scrum illustré

Après une introduction et une présentation, Claude a articulé son intervention sur 9 pratiques de Scrum. J'ai bien aimé cette organisation qui permet de résumer l'agilité et Scrum, ce qui n'est pas toujours facile lorsqu'on veut présenter ces concepts à un novice. De plus, cette approche permet de couvrir de nombreux aspects drainés par l'agilité. Voici ces 9 pratiques :
  • Itératif et incrémental
    Des sprints de 2-3 semaines, un rythme soutenable, une implication de toutes les activités, la notion d'incrément, sans oublier de céléber !
  • Un représentant du client dans l'équipe
    Point souvent négligé. Un Product Owner par produit, et qui soit disponible et réactif
  • Une équipe auto-organisée
    Le Scrum Master ne dirige pas mais facilite, les post-its améliorent la communication et augmentent la gestion collective, éviter les doublons d'outils (ex : post-its + logiciel de suivi)
  • Une liste unique de choses à faire
    C'est évidemment le backlog, qui doit impérativement être priorisé, les items étant décomposés au fur et à mesure que leurs priorités augmentent (i.e. qu'ils "montent" dans le backlog)
  • Un planification à 2 niveaux
    • Le Plan de Release :
      Le Planning Pocker permet de mieux comprendre et communiquer, les estimations doivent être collectives, en points relatifs, elles sont souvent difficiles, ce n'est pas une science exact
    • Le Plan de Sprint :
      Les histoires sont découpées en tâches, l'équipe s'engage, il faut "garder du mou" pour pouvoir réagir aux changements
  • Un point quotidien
    Également appelé Daily Standup Meeting, doit être rapide et efficace, le burndown chart permet de suivre le "reste à faire" et donc la tendance du projet
  • Une démo pour la revue
    Permet un feedback rapide et l'estimation de la vélocité. Cette dernière n'est pas une mesure individuelle de productivité, elle n'est pas censée augmenter tout le temps, et sert à planifier (la suite)
  • Une amélioration continue
    Grâce notamment aux rétrospectives
  • Finir les choses avec qualité
    Bien définir les critères de fin (Done), notion de dette technique
En marge, Claude a évoqué l' "Esprit rock" pour imager la capacité à dire "non".

Il a également précisé un point intéressant qui est que le backlog d'un produit n'est jamais vide. Il en découle un point fort : c'est la date de fin du projet qui est fixe ! Cette approche me semble très importante !!

Claude conclue sur le fait que Scrum est un cadre, que cette approche ne garantie pas le succès d'un projet, et qu'il faut compléter notamment par de l'ingénierie agile.

Une phrase retenue : L'agilité est un voyage, un apprentissage permanent...

Adoption d’Extreme Programming à Kelkoo

Par : Johan Martinsson, Kevin Creix et Jonathan Bonzy

Pourquoi cette session ? : parce que j'avais rencontré des personnes travaillant à Kelkoo, j'avais donc entendu parler de leur approche de l'agilité et de XP, et que j'étais intéressé pour avoir un retour de mise en œuvre pour compléter mes expériences personnelles.

Les présentateurs ont fait un rapide rappel sur XP et quelques pratiques, notamment le TDD et le BDD (composé de plusieurs cycles de TDD). Ils ont expliqué les raisons ayant motivé le passage à XP (remettre de la confiance dans les équipes de développements, diminuer le cout des bugs, et profiter d'un CEO convaincu), et ont présenté la stratégie (proof of concept sur 1 projet + formations + recrutements de personnes expérimentées).

Ensuite, la présentation a été axées sur l'évolution chronologique au sein de l'entreprise. J'ai noté les points intéressants suivants :
  • Début par un état des lieux. Peu de TDD, un peu de tests unitaires sur les parties faciles
  • Ce qui aide : présence d'un évangéliste, TDD en sa présence, pair-programming
  • Le BDD a donné de meilleurs résultats malgré un cout d'entrée important
  • Ne pas brader la qualité pour rattraper le retard (ça ne marche pas !)
  • "Lottery learning" : un nouveau concept pour moi, a l'air très intéressant, à creuser !!
  • Être attentif pour repérer les maillons faibles dans la chaine de production (ex : les scripts)
  • Difficultés "classiques" : PO distant (Londres), réunion trop longues, etc ...
  • Amélioration des revues avec une démo faite par le PO : intéressant ...
  • Observations actuelles : trop de BDD et tests trop longs, et pas assez de tests unitaires "bas niveaux" : image de la pyramide avec beaucoup de TU à la base et moins de TF vers le haut (et non l'inverse)
  • Constat : seulement 50% de TDD et 50% de "tests after" : solution : pair "ying-yang" (complémentaires et niveaux différents)
Pour conclure, les présentateurs nous ont donné les différents points de vues des managers, des équipiers, et des présentateurs eux-même. Points retenus :
  • Les managers sont rassurés : code testé, documenté, plus de compétences dans l'équipe, motivation, time to market
  • Grand intérêt pour le pair-programming qui coute mais présente de nombreux aspects positifs : moins de blocages des développeurs, formations, échanges de compétences, ...
  • Les freins avancés par les développeurs : manque de pratique, code legacy, pression de livrer
  • Néanmoins, 2/3 des développeurs rapportent que ces approches sont efficaces en ~ 2 mois
Je retiens qu'une telle migration est favorisée par :
  • Un message clair (et expliqué)
  • Le soutien du business, des managers, des PO
  • La présence de personnes expérimentées, capable d'évangéliser et d'aider au quotidien, notamment par le pair-programming
La session s'est terminée par la proposition par les présentateurs de faire des petits groupes pour échanger autour de questions/réponses avec des membres de Kelkoo. Cette initiative est intéressante, mais sa mise en place pratique, dans une petite salle pleine de 50 personnes, n'a pas été facile ...

Pour conclure, une présentation bien préparée, très intéressante, vivante notamment par l'alternance entre 3 présentateurs, et un contenu avec de nombreux points à retenir !

Atelier Story Map, là où tout commence...

Par : Olivier Pizzato et Emmanuel Etasse

Pourquoi cette session ? : J'avais eu un aperçu de Story Map lors de ma formation de Scrum Master, ça m'avait interpellé et semblé efficace pour le démarrage d'un projet qui est cruciale et doit être réussit !

La session a débuté par une présentation rapide de la Story Map :
  • Objectif : avec tous les acteurs, définir les fonctionnalités essentielles
  • Principales étapes :
    • Partager la vision du produit
    • Lister les acteurs et leurs besoins
    • Lister les activités
    • Lister les cas d'utilisation, les fonctionnalités
    • Répartition sur un "graphe" temps/confort
    • Grouper par lots
    • Vérifier l'ensemble et trouver le chemin critique (le + difficile)
  • Format interactif géré par des boites de temps
La suite de la session s'est déroulée par une mise en pratique, les présentateurs ont proposé de faire 4 groupes de 4 personnes, les autres participants pouvant observer. J'ai été un peu déçu par cette partie, car là encore, nous étions environ 50 personnes dans une petite salle. La proposition d'une mise en pratique est certainement excellente pour bien comprendre le principe, le tester et l'éprouver, mais peut-être pas adaptée à un tel effectif et à ce contexte.

Néanmoins, les présentateurs étaient disponibles pour échanger et répondre aux questions. J'ai noté chez les participants la difficulté pour faire la distinction entre activités et cas d'utilisation, ainsi que pour établir et maintenir les liens avec les acteurs. L'approche présentée ici était finalement assez différente de celle que j'avais expérimenté 1 an auparavant, comme quoi les outils peuvent et doivent être adaptés à ses besoins.

Keynote : Aslak Hellesoy : Les nouvelles tendances de l'agilité

Aslak est sympa, attachant, et, norvégien d'origine, parle très bien le Français ! Son intervention sur les nouvelles tendances de l'agilité était très intéressante, mais très difficile à retranscrire ici ...

J'ai noté ses remarques sur le business qui est fait autour et avec l'agilité, notamment les certifications et certains organismes dont le but, maintenant, semble être de gagner de l'argent ...

Plus concrètement, Aslak a évoqué le découpage d'un produit en histoire et l'importance de toujours préciser le pourquoi, ainsi que la définition du "fini" (Done, encore une fois) ! Également, l'importance des critères d'acceptation, et les tests d'acceptation (Cucumber par exemple, dont Aslak est à l'origine).

Il a également évoqué l'approche Outside in qu'il traduit par Verlan (je vous passe les détails ;-) ....) avec l'idée de partir de l'IHM.

Aslak a prôné l'abandon des métriques absurdes.

Pour les délais, il nous a présenté la loi de Little, imagée par les graphes CFD (Cumulative Flow Diagram) qui permettent de bien visualiser l'avancement pour chaque étape. Un tel graphe met en évidence que le délai pour la réalisation d'une histoire est en lien direct avec le nombre d'histoires en attente et en cours, d'où l'idée de travail à flux plus tendu et l'approche Kanban.

Aslak a terminé son intervention avec quelques références au mouvement DevOps ...

TDD et Legacy

Par : Bernard Huguet, Luc Jeanniard, Cyrille Roy et Johan Martinsson

Pourquoi cette session ? : Le TDD est évident et relativement facile sur du code neuf, mais reprendre du vieux code est toujours une affaire compliquée, j'étais intéressé pour avoir de nouveaux points de vue sur ce sujet, et les confronter à mes expériences dans ce domaine.

Après de rapides rappels sur le TDD, les présentateurs ont montré par l'exemple comment reprendre du code Legacy pour :
  • Corriger un bug
  • Ajouter une fonctionnalité
Cette session m'a semblé évidente, même si le code à reprendre (développé spécifiquement pour la présentation) n'était pas si "horrible" que ça : j'ai vraiment connu pire et beaucoup plus compliqué à reprendre.

Les présentateurs ont bien montré l'intérêt du TDD, que ce soit pour l'ajout d'une nouvelle fonctionnalité ou la correction d'un bug (que j'appelle TDC, Test Driven Correction, Correction Pilotée par les Tests). Ils ont également bien insisté sur la phase Refactoring, la phase bleu, dans le cycle TDD, phase très importante et souvent négligée.

La présentation était bien ficelée, vivante (notamment grâce à l'alternance entre les présentateurs, et l'alternance entre diaporama et code), et assez didactique. Les niveaux des participants étant extrêmement différents, il n'est évidemment pas facile de faire une présentation pour tous, et celle-ci en aura certainement interpellé plus d'un, et peut-être convaincu quelques-uns, pourquoi pas ? Moi, je l'étais déjà ... ;-) ... TDD sur du code legacy, c'est toujours possible !

Kata Robozzle en Haskell

Par : Emmanuel Gaillot

Pourquoi cette session ? : ces dernières semaines, lors de différentes rencontres, j'ai entendu parler de Haskell à 2 reprises. J'avais déjà regardé un peu sur internet cette notion totalement inconnue pour moi de "langages fonctionnels". Je voulais donc en savoir plus, et une approche par la pratique me tentait bien !

Haskel, c'est quoi ? C'est un langage de programmation fonctionnelle. Ça ne vous avance pas ? Voici ce que nous précise Wikipedia :
Les fonctionnalités les plus intéressantes de Haskell sont le support des fonctions récursives, l'inférence de types, les listes en compréhension et l'évaluation paresseuse. Ces fonctionnalités, surtout si on les combine, facilitent l'écriture des fonctions.
Et oui, c'est un autre monde !

Pour sa présentation, Emmanuel est parti du jeu Robozzle, qui consiste, en résumé, à définir une suite d'actions de déplacements pour un vaisseau sur une grille (avancer, tourner à gaucher, tourner à droite) pour passer, en un minimum de coups, par des points précis (étoiles). Emmanuel a proposé de s'intéresser plus particulièrement au moteur du jeu, permettant de vérifier si le joueur a gagné, à partir de la position des étoiles et de la séquence d'actions proposées, représentées par des lettres ("a" pour avancer, "d" pour tourner à droite, etc ...).

Emmanuel a été assez pédagogue, en expliquant bien l'enchainement de ses approches, de ses raisonnements, de ses étapes, du code écrit puis ré-écrit, puis simplifié, etc ... Globalement, j'ai réussit à suivre, mais j'avoue avoir frôlé le mal de tête ... Je trouve que le code final est assez illisible. Ça va peut-être mieux avec une meilleure maitrise des concepts et du langage, ça semble très puissant, mais ..... Wouf !

Je crois ne pas être assez mathématicien et logicien ... mais j'en connais qui seront intéressés ... ;-)

Conclusion : une présentation intéressante, bien organisée (la forme Kata s'y prête bien), et qui me permet d'avancer (un peu) sur le sujet (dommage que Emmanuel ait manqué de quelques minutes pour finir sa dernière fonction et donc l'algorithme entier).

Exigences Exécutables Efficaces : "Doing the Right Software"

Par : Bruno Orsier et Remy Sanlaville

Pourquoi cette session ? : les exigences ou spécifications exécutables est un sujet qui m'intéresse parmi tous les outils de l'ingénierie agile, et c'est encore une partie que je ne maitrise pas au mieux. Une présentation concrète et axée surtout sur la méthode me semblait donc intéressante.

La session a débuté par quelques rappels, et notamment l'opposition intéressante entre contractualisation (méthodes classiques) et collaboration (méthodes agiles).

Ensuite, Bruno et Rémy nous ont fait une présentation alternant explications et petites scène théâtrales, scènes jouées 2 fois, pour l'approche classique puis l'approche agile. Trois scènes pour 3 thèmes différents :
  • L'incompréhension, notamment fonctionnelle, entre ce que le client veut et ce qui est réalisé
  • Dans l'arène du code, pour obtenir un code propre et compréhensible, avec un développement piloté par les exigences, le tout en évitant les régressions
  • L'effet tunnel ou les alternatives permettant à tous un meilleur suivi de l'avancement
Pour chaque scène, Bruno et Rémy ont mis en avant les avantages des méthodes agiles, et plus précisément l'approche basée sur les exigences exécutables.

Je m'attendais à une session plus orientée pratique avec l'utilisation d'un ou plusieurs outils. Mais finalement, le choix de mettre en avant les méthodes est très intéressant. Je n'avais pas besoin d'être convaincu, mais ça fait toujours de bien de voir et revoir les avantages des approches agiles et de leurs différents outils. De plus, je vois un peu mieux comment "vendre" ces approches au client ou à l'utilisateur, les arguments à mettre en avant, etc ...

La présentation était extrêmement vivante, avec une alternance entre diaporama, simulation de séance de travail, et surtout, des petites scènes théâtrales très bien jouées et pleines d'humour, de quoi bien faire passer le message. J'ai passé un très bon moment, idéal pour une fin de journée : Bravo !!!

Conclusion


Une journée bien remplie, très enrichissante, un beau programme, des sessions intéressantes et bien préparées, des intervenants de qualité, des rencontres et discussions à poursuivre, .... bref, un ROTI positif !

Mais comme pour l'Agile Tour à Marseille,je reviens un peu déçu de ne pas en avoir appris plus. Mais le côté positif, c'est que je dois commencer à bien intégrer l'approche agile, ses valeurs, ses concepts, etc ...

Je retiens tout de même que l'agilité est en mouvement, en mutation, qu'elle s'adapte (le propre de l'agilité), qu'elle a encore du chemin à faire, mais que son infiltration au sein des mœurs, des pratiques et des organismes est en bonne voie, et que son extension est favorisée par des moyens simples : un minimum de personnes convaincues, des acteurs expérimentés et capables d'évangéliser, des pratiques au quotidien permettant les échanges, l'auto-formation, l'expérimentation, etc ...

Merci aux organisateurs et aux présentateurs pour cette bonne journée.
Merci à Xavier pour le covoiturage.