IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Tests et Performance Java Discussion :

Le Développement Piloté par les Tests par la pratique et en trois temps (3T en action) [Tutoriel]


Sujet :

Tests et Performance Java

  1. #1
    Rédacteur
    Avatar de thierryler
    Homme Profil pro
    Inscrit en
    Octobre 2007
    Messages
    4 078
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 078
    Points : 12 815
    Points
    12 815
    Par défaut Le Développement Piloté par les Tests par la pratique et en trois temps (3T en action)
    Bonjour à tous,

    Je vous propose un nouvel article sur les Tests en Trois Temps (3T), illustré par un cas pratique.

    Synopsis : "3T" est une version simplifiée des incontournables TDD (Test Driven Development), une méthode dans laquelle on commence par écrire des tests pour aider (guider) le développement des fonctionnalités. Ce second article sur le sujet propose une illustration de "3T" en action sous forme d'un miniroman.

    L'article est disponible à l'adresse suivante :
    http://thierry-leriche-dessirier.dev...t-en-pratique/

    A noter que cet article fait suite à un premier article dans lequel j'avais présenté 3T et qui est disponible à l'adresse suivante :
    http://thierry-leriche-dessirier.dev...va/methode-3t/

    Bonne lecture.
    Th.
    Thierry Leriche-Dessirier
    Consultant Java JEE Web Agile freelance
    Rédacteur pour Developpez
    Professeur de Génie Logiciel à l'ESIEA

    Site : http://www.icauda.com / Linked'in : http://www.linkedin.com/in/thierryler / Twitter : @ThierryLeriche

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    657
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2010
    Messages : 657
    Points : 1 240
    Points
    1 240
    Par défaut
    Je ne fait pas du tout java , mais je trouve l'article très clair et bien "romancé". Il n'y a plus qu'a se mettre aux tests unitaires en premier lieux

  3. #3
    Membre émérite
    Inscrit en
    Janvier 2011
    Messages
    805
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Janvier 2011
    Messages : 805
    Points : 2 917
    Points
    2 917
    Par défaut
    Excellent article, très pratique, très clair, beaucoup d'humour et plaisant à lire. La méthode semble intéressante et appliquée avec succès.

    J'ai quand même 3 grosses réserves après l'avoir lu :

    • Les reproches faits à TDD sont discutables

      Citation Envoyé par Sébastien le développeur
      c'est mieux que des vrais erreurs qui prennent du temps et que, de toutes manières, tu vas effacer dans dix minutes.
      J'imagine qu'on fait là allusion à la première étape après l'écriture d'un test en TDD qui est de constater que celui-ci ne compile pas (car le code "réel" n'a pas encore été écrit). Je ne vois pas la perte de temps qu'il y a à réaliser cette étape. Tout au plus cela va prendre 1 ou 2 secondes, le temps de compiler juste le module de test car normalement seul lui a changé. Au contraire, ça peut faire gagner du temps avec les outils modernes de refactoring permettant de générer les classes encore inexistantes mentionnées dans le test.

      Quant au fait que ces erreurs auront disparu dans 10 minutes, ben oui, comme dans la méthode des 3T d'ailleurs où les tests rouges apparus lors du 2è T vont disparaitre au 3è. Cela ne veut pas dire que ces erreurs étaient inutiles.

      Là où je vois une perte de temps, par contre, c'est dans la mise à jour et la circulation des post-it dans la méthode des 3T. L'overhead lié au workflow T1/T2/T3 entre les développeurs me parait plus coûteux que juste compiler un test. D'ailleurs que se passe-t-il si un développeur a fini un des 2 premiers T avant les autres ? Doit-il perdre son temps à les attendre ?

    • 3T ne s'attaque pas à plusieurs enjeux couverts par TDD

      Je veux parler du design incrémental et du refactoring.

      Le principe de "3T", c'est que tout est déjà écrit et qu'il suffit de recopier
      Je pense qu'il est illusoire de croire qu'on peut prévoir tous les tests à l'avance. Certains vont forcément apparaitre en codant. C'est toute la force de TDD qui permet de faire émerger non seulement le design du code mais aussi bien souvent de nouvelles spécifications qu'on n'avait pas recensées jusque là.

      "3T" conduit naturellement à écrire du code propre, à proscrire les duplications
      Je ne suis pas d'accord à partir du moment ou il n'y a pas d'étape "refactor" dans 3T. TDD à l'inverse implémente de façon explicite et forte la règle du boy scout (laisser le code plus propre qu'il ne l'était avant) puisqu'il y a une étape de refactor obligatoire permettant comme tu le mentionnes de réduire la duplication, parmi d'autres bonnes pratiques améliorant la qualité interne du code.

      En réalité, lorsque "3T" est appliqué sur un projet, son principe premier veut que les développements soient réalisés en partant des tests, eux-mêmes écrits à partir du cahier des charges. Or il est probable que les tests écrits par l'équipe de développement soient très proches de ceux de Bernard.
      Là encore, je suis moyennement d'accord. OK, on a besoin de tests très métier qui collent à ce que tu appelles le "cahier des charges". Mais tout aussi utiles sont les tests plus techniques, sur des classes assurant la "plomberie" générale de l'application, sur la collaboration entre classes, sur des couches applicatives situées plus dans les "intestins du système". Dans les tests de Bernard, y en-a-t-il qui vérifient si le Contrôleur communique bien avec le Modèle ? Si le DAO ou le Repository situés dans la couche persistance font bien leur boulot ? Peu de chances... Alors que TDD permet d'adresser aussi ces tests.

      A cet égard, l'exemple de génération de mot de passe est très trompeur car c'est une classe à la fois technique et métier et donne l'impression qu'en la testant on a fait tout le boulot. Pourtant, dire que "Ce n'est qu'une recopie des spécifications" ne répond pas à la totalité du problème.

    • Le Scrum évoqué dans l'article est un Scrum tronqué

      Ce qui m'a mis la puce à l'oreille, c'est que l'article mentionne souvent le "cahier des charges". Or dans Scrum, il n'existe pas de tel document monolithique. Les besoins sont découpés en parties plus ou moins grandes (user stories ou autres techniques), dont la priorité change au fil des sprints, qui s'affinent, etc.

      Claire (la cliente) envoie le cahier des charges de "la boutique du Chien-Copain", qu'elle vient d'écrire, à Michel (le chef de projet)
      Dans Scrum, le Product Owner fait partie de l'équipe. Il ne se contente pas de balancer un cahier des charges à cette dernière et de revenir au moment de la release pour récolter les fruits. Il est en étroite collaboration quotidienne avec les développeurs et le Scrum Master pour raffiner son besoin, répondre aux questions fonctionnelles, écouter les propositions, arbitrer... Idéalement, le Product Owner est co-localisé avec l'équipe.

      Arrivant en bout de chaine, lors de la phase de qualification, Bernard s'assure que le logiciel livré est conforme au cahier des charges
      Dans Scrum, le testeur est plutôt intégré à l'équipe et teste pendant les sprints. Cette dernière doit contenir toutes les personnes nécessaires à la production d'un incrément logiciel complet.

      Où est-ce que je veux en venir par rapport aux points précédents ? J'ai l'impression que le projet décrit dans l'article tombe dans cette facilité qui consiste à ne pas changer d'un iota la façon dont on travaille avec le client pour ne pas lui faire peur, et à faire porter à la seule équipe de développement le poids du "changement agile".
      Effectivement, appliquer une méthode telle que les 3T dans ce contexte peut paraitre hyper facile puisqu'on reprend le postulat de départ du cycle en V qui est que le plan d'origine (les tests dérivés du CdC) est parfait et qu'il suffit de l'appliquer.

      Mais gare à l'illusion de prédictibilité. Je ne dis pas que la méthode ne marche pas, elle a l'air de produire des résultats et c'est tant mieux pour les projets en question. Je suis juste dubitatif quant à sa capacité à répondre à un des enjeux majeurs soulevées par l'agilité : répondre au changement plutôt que suivre un plan.

  4. #4
    Rédacteur
    Avatar de thierryler
    Homme Profil pro
    Inscrit en
    Octobre 2007
    Messages
    4 078
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 078
    Points : 12 815
    Points
    12 815
    Par défaut
    Bonjour et merci pour ces remarques.

    Dans cet article, j'ai volontairement fait l'impasse sur certains éléments et simplifié d'autres. En effet, cet article est déjà très gros et je ne voulais pas entrer plus que ça dans les détails au risque de perdre les lecteurs, qui n'ont pas tous les mêmes attentes.

    J'imagine qu'on fait là allusion à la première étape après l'écriture d'un test en TDD qui est de constater que celui-ci ne compile pas
    Pas du tout :-p Je parle de faire échouer un test qui compile.

    D'ailleurs que se passe-t-il si un développeur a fini un des 2 premiers T avant les autres ? Doit-il perdre son temps à les attendre ?
    Ca ne m'est jamais arrivé de n'avoir rien à faire sur un projet. Dans le cas que tu cites, le développeur va aller piocher dans les post-it disponibles. S'il n'y a plus de post-it, c'est surement qu'on est en fin de sprint et il peut s'occuper à ce qu'il veut d'intéressant.

    3T ne s'attaque pas à plusieurs enjeux couverts par TDD
    C'est tout à fait exact, et assumé.

    3T est une version très simplifiée des TDD. Si les équipes en ont les moyens, elles peuvent commencer par 3T puis évoluer vers un TDD complet.

    Je pense qu'il est illusoire de croire qu'on peut prévoir tous les tests à l'avance. Certains vont forcément apparaitre en codant. C'est toute la force de TDD qui permet de faire émerger non seulement le design du code mais aussi bien souvent de nouvelles spécifications qu'on n'avait pas recensées jusque là.
    Dans ce genre de cas, 3T dit qu'il faut faire évoluer le cahier des charges (les specs) en conséquence. Si on travaille avec des post-it, comme dans ce second article, on ajoute des nouveaux post-it qui servent de point de départ. De cette manière, tout besoin découvert en "live" est automatiquement couvert par 3T. Bon c'est un peu le chien qui se mord la queue ; j'avoue.

    Le Scrum évoqué dans l'article est un Scrum tronqué
    Je voudrais répondre deux choses. D'abord je ne suis pas un expert de Scrum et ce dont je parle correspond seulement à ce que j'ai constaté dans différentes équipes. Ensuite ce n'est pas un article sur Scrum donc j'ai volontairement fait hyper light. Et c'est vrai que je vais parfois un peu loin dans l'élagage.

    Je suis juste dubitatif quant à sa capacité à répondre à un des enjeux majeurs soulevées par l'agilité : répondre au changement plutôt que suivre un plan.
    Malheureusement, je crains que peu d'équipes savent répondre à ce genre de question. Au final, et c'est ce que j'ai pu constater chez différents clients, le chef ré intègre du V classique à la papa. Et c'est la même chose pour les TDD (encore une fois cet article n'est pas à propos de scrum).

    Là je viens de faire trois missions de suite durant lesquelles le client ne savait même pas ce qu'il voulait et encore moins ce dont il avait besoin. Quant à le convier à des réunions, laissez-moi rigoler. Encore aurait-il fallu que les membres de l'équipe ne jouent pas aux fonctionnaires le matin (comme le soir) ou soient présents tout simplement. Et puis, faut bien avouer que, des fois, on préfère que le client soit absent ;-) oups...

    Et en fait, ça fait des années que je me demande comment essayer de réconcilier un peu tout ça. Comment faire assez light pour laisser passer la pilule mais sans faire si light que ça ne sert à rien ?...
    Thierry Leriche-Dessirier
    Consultant Java JEE Web Agile freelance
    Rédacteur pour Developpez
    Professeur de Génie Logiciel à l'ESIEA

    Site : http://www.icauda.com / Linked'in : http://www.linkedin.com/in/thierryler / Twitter : @ThierryLeriche

  5. #5
    Membre émérite
    Inscrit en
    Janvier 2011
    Messages
    805
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Janvier 2011
    Messages : 805
    Points : 2 917
    Points
    2 917
    Par défaut
    Citation Envoyé par thierryler Voir le message
    Pas du tout :-p Je parle de faire échouer un test qui compile.
    Je ne comprends pas les raisonnements du genre "les équipes trouvent ça trop complexe, en particulier pour faire échouer les tests".

    Faire échouer un test n'est pas une action réfléchie et ne demande pas de développement supplémentaire. Par définition, lorsqu'on a fini d'écrire un test pour lequel la fonctionnalité n'a pas encore été implémentée, le test échoue ! C'est aussi simple que ça. En TDD, on ne réfléchit pas à comment faire échouer son test puisqu'il échoue tout seul. On réfléchit à comment le faire passer le plus simplement possible.

    Je pense que beaucoup de gens s'imaginent que TDD est très compliqué car ils ne l'ont jamais vu pratiquer et une simple description de la technique leur parait trop abstraite.
    Pourtant, des katas existent où on peut voir en vidéo des développeurs pratiquer TDD. Ex : http://osherove.com/tdd-kata-1/ Et ça n'a rien de sorcier.

    Citation Envoyé par thierryler Voir le message
    Là je viens de faire trois missions de suite durant lesquelles le client ne savait même pas ce qu'il voulait et encore moins ce dont il avait besoin. Quant à le convier à des réunions, laissez-moi rigoler. Encore aurait-il fallu que les membres de l'équipe ne jouent pas aux fonctionnaires le matin (comme le soir) ou soient présents tout simplement. Et puis, faut bien avouer que, des fois, on préfère que le client soit absent ;-) oups...

    Et en fait, ça fait des années que je me demande comment essayer de réconcilier un peu tout ça. Comment faire assez light pour laisser passer la pilule mais sans faire si light que ça ne sert à rien ?...
    Deux remarques :

    - C'est sûr que s'il n'y aucune volonté de s'améliorer (que ça soit côté client ou équipe de dev), on ne s'améliorera pas. Cela passe par une prise de conscience de ce qui ne tourne pas rond dans les projets. Un client chez qui on a appuyé là où ça fait mal est un client d'autant plus volontaire pour s'impliquer dans le remède.

    - Arrêtons de considérer le client comme quelqu'un qui devrait avoir la science infuse. Il ne connait pas tous ses besoins, c'est normal. Ils vont émerger au fur et à mesure et on va l'y aider. Il va changer de besoin, c'est normal. On va s'y adapter. Croire qu'il peut exister un plan initial parfait est une impasse.

  6. #6
    Rédacteur
    Avatar de thierryler
    Homme Profil pro
    Inscrit en
    Octobre 2007
    Messages
    4 078
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 078
    Points : 12 815
    Points
    12 815
    Par défaut
    Bonjour.

    Merci pour ces précisions.

    Par définition, lorsqu'on a fini d'écrire un test pour lequel la fonctionnalité n'a pas encore été implémentée, le test échoue ! C'est aussi simple que [..]
    Si pour toi, c'est ce que veut dire "faire échouer un test" alors tu n'auras aucun mal à faire du "3T" puisque c'est la manière simplifiée de le faire que je propose.

    C'est sûr que s'il n'y aucune volonté de s'améliorer [..]
    Je préfère ne pas entrer dans ce genre de considérations sur ce forum.

    Arrêtons de considérer le client comme quelqu'un qui devrait avoir la science infuse. Il ne connait pas tous ses besoins, c'est normal. Ils vont émerger au fur et à mesure et on va l'y aider. Il va changer de besoin, c'est normal. On va s'y adapter. Croire qu'il peut exister un plan initial parfait est une impasse.
    Dans 3T, si un besoin est ainsi identifié en cours de route, il peut faire l'objet d'un nouveau post-it. Par contre, il doit absolument être inclus dans les spécifications, comme cela devrait être le cas de manière générale d'ailleurs.

    A propos, pensez à lire l’excellent tutoriel d'introduction aux TDD de Bruno : http://bruno-orsier.developpez.com/t...TDD/pentaminos
    Thierry Leriche-Dessirier
    Consultant Java JEE Web Agile freelance
    Rédacteur pour Developpez
    Professeur de Génie Logiciel à l'ESIEA

    Site : http://www.icauda.com / Linked'in : http://www.linkedin.com/in/thierryler / Twitter : @ThierryLeriche

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 16
    Points : 12
    Points
    12
    Par défaut
    Bonjour,

    Je vous remercie pour cet article que je trouve de grande qualité.

    En tant que prof d'info, je vais tenter de le transcrire dans un contexte pédagogique pour faire découvrir le TDD aux étudiants. Je précise qu'avant d'enseigner, j'ai été responsable technique dans une SSII et j'ai eu l'occasion de me frotter aux joies des tests unitaires, avec plus ou moins de bonheur. Je vais pouvoir mesurer le chemin parcouru depuis.

    Vanessa ne joue pas un rôle important dans l'histoire. Elle ne fait même pas partie du projet. Elle incarne l'élément perturbateur : ses passages dans le bureau font chuter dramatiquement le niveau général de concentration et la productivité de l'équipe. Il faut préciser que Vanessa est charmante.
    C'est mon passage préféré. On sent une connaissance pointue du fonctionnement d'une équipe de développeurs

  8. #8
    Rédacteur
    Avatar de thierryler
    Homme Profil pro
    Inscrit en
    Octobre 2007
    Messages
    4 078
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 078
    Points : 12 815
    Points
    12 815
    Par défaut
    Merci pour ces compliments.

    Vous enseignez dans quelle école ? N'hésitez pas à donner l'URL de l'article à vos étudiants.

    Le cas de Vanessa n'est pas si trivial qu'il en a l'air. Dans la plupart des méthodologies, on oublie à quel point certains éléments perturbateurs peuvent changer la donne. Scrum, par exemple, introduit le concept de "productivité réelle" qui suppose que les développeurs ne peuvent pas rester concentrés et/ou productif pendant 8 heures. On tient compte de la productivité constatée dans les plannings.

    Sur certains projets j'ai constaté que la productivité ne dépasse pas 2-3 heures par jour. Et certaines équipes l'ont vraiment compris. C'est par exemple de cas de Github qui autorise ses membres à travailler sur des projets "perso" pour se changer les idées.
    Thierry Leriche-Dessirier
    Consultant Java JEE Web Agile freelance
    Rédacteur pour Developpez
    Professeur de Génie Logiciel à l'ESIEA

    Site : http://www.icauda.com / Linked'in : http://www.linkedin.com/in/thierryler / Twitter : @ThierryLeriche

  9. #9
    Nouveau Candidat au Club
    Homme Profil pro
    Développeur Java
    Inscrit en
    Décembre 2011
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2011
    Messages : 1
    Points : 1
    Points
    1
    Par défaut
    Merci Thierry

  10. #10
    Membre à l'essai
    Homme Profil pro
    Responsable technique
    Inscrit en
    Septembre 2008
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Responsable technique

    Informations forums :
    Inscription : Septembre 2008
    Messages : 13
    Points : 21
    Points
    21
    Par défaut
    J'ai dévoré vos 2 articles à propos de 3T et je me posais une question :
    Comment peut-on gérer la création de l'interface graphique ?

    Je vois une approche du style :
    • Un dessin de la fenêtre sur le "post-it jaune" au lieu de la petite phrase de description
    • "dessin" (wysiwyg ou bien codé à la main, peut importe) dans le premier temps, à la place du code des interface
    • un test d'IHM pour le second temps au lieu du test d'IHM (un outils à me conseiller pour Java/SWING ?)
    • faire le lien entre la partie métier et l'IHM dans le 3ème temps, en guise de "vrai code"

    Cela vous semble-t-il correct ou avez-vous une autre approche à suggérer ?

    Merci pour vos articles de qualité et merci d'avance pour vos réponses

Discussions similaires

  1. Réponses: 26
    Dernier message: 04/01/2016, 13h19
  2. [PHPUnit] Développement piloté par les tests
    Par Invité dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 12/11/2013, 14h19
  3. développement piloté par les tests pour un jeu vidéo
    Par Mindiell dans le forum Méthodes Agiles
    Réponses: 1
    Dernier message: 06/08/2009, 11h28
  4. Développement piloté par les tests avec PHPUnit
    Par Invité dans le forum Bibliothèques et frameworks
    Réponses: 0
    Dernier message: 18/11/2008, 20h53

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo