Tag: agile

Agenda de novembre 2009

Posted by – November 10, 2009

Quelques rendez-vous qui me semblent intéressants :

  • Valtech days 2009 le 17 novembre (payant), cette fois-ci, je n’y serai pas : 1 jour de moins pour plus cher (300 € HT), dommage car le programme me semblait intéressant.

Agenda d’octobre 2009

Posted by – October 3, 2009

Quelques évènements :

  • les mercredis du développement reprennent, à l’exception près que celui-ci aura lieu un jeudi, le 1er octobre, la journée, sur WPF + SL,
  • After Work sur le thème de l’usine logicielle le 7 octobre à la Défense.
  • MS days 2009 rencontres techniques, le 6 & 7 octobre à Issy les Moulineaux, d’autres dates en octobre / novembre dans de grandes villes de France (Lille, Marseille, …)
  • côté Alt.NET FR, le 12 octobre sera une soirée dédiée à MonoTouch (by Novell) où comment développer des applis. pour l’iPhone en C# / .NET…et non Objective-C, les informations et l’inscription sur le site Alt.NET FR

Tests in progress

Posted by – October 19, 2008

Préambule

Nous sommes en train de reprendre un module pour préparer une bascule prochaine. Ce module concerne une gestion de listes de diffusion (de discussions, distributions, newsletters, …) qui contient des actions simples : création ou suppression d’une liste, ajout ou suppression d’un abonnement.

C’est l’occasion d’ implémenter des tests sur ce module. Pas tout à fait TDD dans le principe, mais cela aura au moins le mérite de commencer à prendre la main sur les frameworks et la méthode d’implémentation.

On va procéder par étapes, en commençant petit, il est toujours préférable d’être raisonnable dans ses objectifs, think big, start small disait mon grand-père agile.

Dans l’écriture de ces tests, il va s’agir de vérifier les entrées (chaînes de caractères) passées aux différentes méthodes, à savoir que le nom de la liste, et l’email de l’abonné soient bien formés (en gros que les regexp qui vérifient ces entrées fonctionnent).

On tentera (presque) de respecter le modèle du triptyque RED-GREEN-REFACTOR, sauf que dans notre cas, il existe du code :

  • écriture d’un test, le faire planter, le résultat du test runner doit être au rouge,
  • faire passer le test au vert,
  • réécrire le code le cas échéant

Outils

Le framework de tests utilisé est MbUnit, et le runner un add-in VStudio TestDriven.NET. Une version d’évaluation de ReSharper est également installée pour accélérer les ajustements de code.

Dès que je peux, je tenterai également ce projet qui me parait fort intéressant : mbunit-R#.

Mise en place

Un peu de théorie

Le module s’appelle ListManager, notre projet de tests se nommera donc selon la convention ListManager.Tests. Les noms des méthodes de tests sont écrites selon le format suivant : ”NomMethodManager_ResultatAttendu_ScenariodeTest’.

Les méthodes de notre Manager à tester sont de l’ordre de 4, on s’arrêtera à la 1ère pour notre exemple :

  • CreateList(list) : créer une liste
  • DeleteList(list) : supprimer une liste
  • Subscribe(list, email) : abonner à une liste un email
  • Unsubscribe(list, email) : désabonner d’une liste un email

Sur notre existant, chaque méthode ne renvoie que des exceptions, notamment sur la vérification de la validité des entrées, ici list et email. Des expressions régulières sont utilisées pour tester le format de ces 2 paramètres. En gros que les caractères du type [a-z0-9-_.] sont acceptés. Chaque méthode renvoie une exception ArgumentException s’il s’avère que le format des chaînes est erroné.

Le Manager peut être utilisé avec 2 fournisseurs possibles, qui représentent 2 moteurs de listes de diffusion (SYMPA ou LYRIS). L’un ou l’autre est sélectionné selon la stratégie adoptée. Les tests de différents cas d’entrées sont à dérouler bien entendu sur les 2 providers.

La base posée, passons à l’écriture de nos tests.

Passons à la pratique

Testons CreateList(). Le résultat attendu est une exception ArgumentException sur des chaînes qui ne respectent pas le format attendu. Le test doit être au vert si la méthode renvoie donc bien une exception sur une mauvaise entrée, par exemple :

CreateList(“éléphant”) doit renvoyer une erreur. Le code pour tester que ces cas renverront bien un exception pour les 2 providers, l’attribut [ExpectedArgumentException] de MbUnit permet de tester l’exception attendue :

  1. using ListManagerConnector;
  2. using MbUnit.Framework;
  3.  
  4. namespace ListManager.Tests
  5. {
  6. [TestFixture]
  7. public class ListManagerTests
  8. {
  9. [Test]
  10. [ExpectedArgumentException]
  11. public void CreateList_onSympa_ShouldThrow_IfNameOfList_IsNotWellFormed()
  12. {
  13. var lm = AbstractFactory.Factory("SYMPA").ListManagerControler;
  14. lm.CreateList("éléphant");
  15. }
  16.  
  17. [Test]
  18. [ExpectedArgumentException]
  19. public void CreateList_onLyris_ShouldThrow_IfNameOfList_IsNotWellFormed()
  20. {
  21. var lm = AbstractFactory.Factory("LYRIS").ListManagerControler;
  22. lm.CreateList("éléphant");
  23. }
  24. }
  25. }

Ce premier est pas mal, mais rien que pour éléphant, il nous faut 2 méthodes de tests. Pour chaque motif à tester, 2 méthodes supplémentaires, ce qui devient vite rébarbatif et donc peu motivant. Pour améliorer cela, MbUnit fournit la possibilité d’injecter des jeux de tests dans les méthodes (dans le même principe que des tests fonctionnels, voir FitNesse). Pour cela, utilisons les attributs [RowTest] (qui remplace l’attribut de base [Test]) et [Row] pour dérouler les cas intéressants et ce, sur les 2 providers.

Testons les motifs éléphant, l’éléphant, et certains autres cas sur les providers nommés SYMPA et LYRIS. Le paramètre strategy permet de tester chaque méthode sur les 2 providers :

  1. using ListManagerConnector;
  2. using MbUnit.Framework;
  3.  
  4. namespace ListManager.Tests
  5. {
  6. [TestFixture]
  7. public class ListManagerTests
  8. {
  9. [RowTest]
  10. [Row("malist@cc", "SYMPA")]
  11. [Row("malist@dummy.fr", "SYMPA")]
  12. [Row("", "SYMPA")]
  13. [Row("éléphant", "SYMPA")]
  14. [Row("l'elephant", "SYMPA")]
  15.  
  16. [Row("malist@lyris.fr", "LYRIS")]
  17. [Row("malist@fr", "LYRIS")]
  18. [Row("", "LYRIS")]
  19. [Row("éléphant", "LYRIS")]
  20. [Row("l'elephant", "LYRIS")]
  21. [ExpectedArgumentException]
  22. public void CreateList_ShouldThrow_IfNameOfList_IsNotWellFormed(string listname, string strategy)
  23. {
  24. var lm = AbstractFactory.Factory(strategy).ListManagerControler;
  25. lm.CreateList(listname);
  26. }
  27. }
  28. }

et voilà, comment en une méthode implémenter un jeu de 10 tests. Jouons la méthode avec TestDriven sous VStudio 2008 et le runner de MbUnit. On voit que MbUnit déroule chaque cas (éléphant, l’éléphant, ..) sur la même méthode.

Sous Visual Studio :

MbUnit

En lançant le runner de MbUnit :

MbUnit

Si nous avions introduit une donnée correcte, un des tests aurait été dans l’état rouge ou FAILURE, par exemple le test suivant doit échouer :

  1. [Row("od", "SYMPA")]

MbUnit

à chaque nouvelle écriture d’une méthode de test, on commencera par la faire échouer de cette façon.

Rétrospective

Ces premiers tests répondent à tout ou partie à notre besoin : vérifier que les entrées de nos méthodes sont bien formées.

Quelques retours sur ces 1ers tests :

  • dans notre cas, il a fallu que les 2 serveurs de listes soient en fonction, sans compter la configuration ad-hoc nécessaire. Aussi, il aurait été bénéfique que les 2 providers soient injectés dans le manager, afin de pouvoir les simuler lors des tests, part des Stubs / Mocks par exemple. Ici, on part du principe que nos serveurs fonctionnent et rendent le service attendu. Bien sûr, si l’objectif était de les tester alors on déploierait les tests nécessaires, même si cela concerne plus de l’intégration que des tests unitaires,
  • on comprend mieux la nécessité d’une usine d’intégration continue. Je m’imagine mal exécuter des centaines de tests à chaque fois sur mon IDE. L’usine peut apporter une solution à cette question.
  • j’ai pu m’apercevoir que des cas passaient alors qu’ils sont interdits, des bugs donc éventuels, maintenant corrigés.
  • au niveau de la conception objet, on s’aperçoit vite que c’est perfectible, que le code doit être non seulement OO mais aussi testable, ce qui implique un compromis des deux.
  • bonne expérience, à répéter de toute urgence, passionnant !

Tips & Tricks

Sous Visual Studio, à l’aide de TestDriven, le fait de se placer sur une méthode de test et de lancer les tests ne déroule ces derniers que sur la méthode.

ReSharper ou R# est un très très bon add-in, c’est assez remarquable ce qu’il arrive à conseiller comme réécriture du code, il reste à convaincre d’investir 200 € (par licence).

TDD & intégration continue

Posted by – September 29, 2008

Nous avons eu la semaine dernière avec l’équipe une formation en intra de 4 jours sur 2 sujets très intéressants : le TDD et l’intégration continue. Cette formation avait pour objectif de nous mettre un pied à l’étrier sur la base du TDD et de l’intégration continue. Ces 2 modules demanderont certainement par la suite un investissement personnel non négligeable mais tellement positif et passionnant, en droite ligne avec les méthodes agiles (agile dans le sens XP).

More

Links #5 : POO et bonnes pratiques

Posted by – July 16, 2008

Valtech : petit déjeuner “Lean Software Development”

Posted by – July 9, 2008

J’ai assisté hier matin à un petit déjeuner sur le thème du Lean Software Development, ceci afin d’en connaître un peu plus sur le sujet.

Qu’est que le Lean ?

Le Lean est né dans les années 50, par Toyota (Taiichi Ohno), afin d’améliorer la production de ces lignes de production.

Le Lean met en œuvre 5 principes :

  • éviter le gaspillage en se posant la question sur ce qui crée de la valeur pour le client (customer to customer),
  • analyser les flux d’activités : voir si ceux-là sont tous nécessaires,
  • s’assurer qu’une activité puisse s’enchainer sans interruption,
  • être raisonnable sur la capacité de production des équipes : ne pas produire plus qu’il n’est possible,
  • rechercher constamment la qualité

Le Lean thinking démarre réellement en dehors de l’industrie automobile à partir des années 1990, par l’inpulsion de Womack et Jones.

Lean dans le développement logiciel

En 2003, Mary & Tom Poppendieck créent le Lean Software Developement, selon les principes fondateurs du Lean, en les ajustant au métier du logiciel, selon 7 principes fondateurs :

  • élimination des gaspillages,
  • favoriser la connaissance,
  • priorité à la qualité du produit,
  • livrer rapidement,
  • respect des personnes et favoriser l’intelligence collective,
  • reporter la décision (du design ou des interfaces),
  • optimiser le système dans son ensemble

Un zoom a été fait sur le 1er principe, sur l’élimination des gaspillages, lui-même constituant un ensemble de 7 principes sur les potentiels de gaspillage dans un projet :

  • fonctions développées mais non utilisées (65 % des fonctionnalités d’une application ne seront pas utilisées),
  • travail fait à moitié ou commencé puis repris des semaines plus tard,
  • relearning : documents écrits depuis plusieurs semaines voire mois puis repris / relus pour le développement,
  • processus inutiles,
  • passer d’une tâche à l’autre (ou d’un projet à l’autre),
  • attentes entre différentes phases (analyse, conception, etc, …),
  • défauts (bugs) découverts tard,

Le VSM (Value Stream Mapping) permet de réfléchir à l’ensemble du processus pour fournir un produit, c’est une vision produit, et non projet. Le VSM met en lumière les sources de gâchis, pour, ”in fine’,’ les réduire.

Le LSD (…) est une approche de plus haut niveau que les méthodes agiles. Cela s’intéresse principalement à l’amélioration des processus en cours, même si, bien souvent, les solutions viendront des méthodes agiles. Ces dernières étant axées uniquement sur la gestion de projet, on y retrouvera bien entendu certains principes de bon sens, qui en découlent les résultats attendus par Lean : itération courte et fixe, incrémentale, orientés fonctionnalités, TDD, intégration continue…

Pour entamer une approche Lean, le management doit soutenir la démarche, en répondant aux besoins en termes d’outils et d’organisation. La démarche pourra s’effectuer sur un projet pilote pour atténuer le risque.

Intéressante introduction au LSD, très complémentaire des méthodes agiles, les deux étant complémentaires dans leurs objectifs, et apportent des bonnes pratiques, souvent issues du bon sens.

La prochaine fois, on parlera multi-threading en environnement ASP.NET, de jolies filles et de sexe…non faut pas exagérer quand même, nous ne sommes que des geeks après tout , si ça, ce n’est pas du teasing…

EDIT 17-07-2008 : présentation mise en ligne

Livre : “Gestion de projet : vers les méthodes agiles”

Posted by – July 4, 2008

Lecture de cet intéressant livre.

C’est une assez bonne synthèse et approche, qui explique au fur et à mesure l’apport des méthodes agiles (pragmatiques et empiriques) par rapport aux méthodes dites traditionnelles waterfall (ie : en V, cascade, …), appelées aussi méthodes prédictives (ie : penser [à tord] qu’un développement logiciel est linéaire et prévisible).

On retrouvera des comparaisons entre les différentes méthodes (Scrum, XP, …UP même si cette dernière n’est pas toujours considérée comme agile), les bonnes pratiques à mettre en œuvre, que cela soit du point de vue technique (outils) ou humain (organisationnel).

Également, ce qui est plaisant c’est l’existence de beaucoup de témoignages de spécialistes qui apportent des réponses à des cas pratiques ou des questions concrètes que l’on peut se poser pour leur mise en œuvre ou tout simplement sur des zones de flou. 

Je relis aussi actuellement un livre passionnant que j’avais avalé il y a 2 ans : Une politique pour le système d’information : Descartes, Wittgenstein, (XML), critique à venir.

J’ai toujours une liste Amazon, si cela peut donner des idées.

Séminaire Valtech “Les méthodes Agiles dans les Projets IT”

Posted by – June 29, 2008

J’ai assisté jeudi dernier matin à un séminaire proposé par Valtech sur les méthodes agiles. Les 2 premières sessions auxquelles j’ai assisté étaient dispensées par David Gageot sur une introduction aux méthodes Agiles et Hubert Gillon sur le thème des projets offshore.

Séminaire riche d’enseignements,étant un convaincu de ces méthodes.

More

Todo : Test de Basecamp

Posted by – June 19, 2008

Tout bon CP ou développeur (cela n’engage que moi…) se doit de gérer une todolist (j’utilise parfois TadaList mais non adapté pour un travail en mode collaboratif), soit sous forme d’un fichier ou sous forme de post-it, cela permet d’avoir une vision assez globale de ce qu’il reste à faire sur un projet, comme ça, on diminue le risque d’oublis. Le seul problème de cette méthode (post-it, excel, …), c’est que lorsqu’on travaille à plusieurs sur un même sujet, tous les membres n’ont pas la même vision de ce qu’il reste à réaliser, au pire, il reste le risque de faire la même chose plusieurs fois, sans compter qu’un post-it s’égare ou se jette.

Je suis en train de tester basecamp (rendu célébre par la fameuse entreprise Web2 37signals, vous savez Ruby On Rails…), qui permet gratuitement d’ouvrir un compte pour une entreprise, lui associer au moins un projet et permet ainsi de profiter de liste de tâches et milestones (jalons ou versions en français). Basecamp propose divers liens, de type http://entreprise.updatelog.com, avec une gestion de comptes (membres d’une équipe par exemple), ainsi qu’un projet, et les todolists par chantier dans ce dernier.

Premières impressions de basecamp :

  • ergonomique et prise en main très rapide, va à l’essentiel, et sait intelligemment tirer parti d’Ajax
  • implémente OpenId
  • la version gratuite répond à mes besoins nominaux : gérer des tâches et les barrer au fur et à mesure de la réalisation

Pour la todolist, même si on peut affecter un membre à une tâche (même si ça peut en démanger parfois certains), il reste préférable que chacun s’affecte quelque chose après discussion, l’implication sera d’autant plus grande qu’une tâche imposée.

Quelques images écran de basecamp

Accueil tableau de bord :

accueil Basecamp

Todolist d’un projet :

Basecamp project todolist

Les milestones :

Basecamp milestones

Personnalisation de son compte :

Basecamp myinfo

Petit défaut : lors d’une échéance programmée pour une version (milestones), le nombre de jours restants est en jours ouvrables, donc à moins de travailler le week-end, c’est un peu gênant.

Intéressant en tout cas, et assez adapté également, expérience à poursuivre.

Valtech : 3 évènements sur les méthodes agiles

Posted by – June 13, 2008

J’irai y faire un tour, cela se passe aux adresses suivantes :

EDIT : pour ceux, comme moi, qui ne pourront assister à celui des TDR pour cause de manque de places, il y aura une session le 11 septembre 2008.

gratuits bien entendu.