SlideShare ist ein Scribd-Unternehmen logo
1 von 20
Downloaden Sie, um offline zu lesen
Design + tests (TDD)
   Mockito inside.
TDD ; en général
  C’est quoi le TDD ?

     => Test Driven Development

  Quels avantage à cette pratique ?

     précise les spécifications du code

     permet d’utiliser le programme avant qu’il soit même
     écrit

     augmente la confiance pour le refactoring

     valide la conformité du code
TDD ; pour le design
  Quels avantages à plus long terme ?
    Moins de bugs techniques + plus de bugs
    métier, sur les specs.
    Évolutivité et maintenance moins
    couteuse.
    Confort du code
TDD ; une évolution de la pratique
      dans le temps
   Spécifications &      … specs / exigences /
    exigences              conformité
   Codage du test        Design du code
   Codage des            Design du test
    fonctionnalités       API
   Intéressé par la
    conformité




            Débutant           Expérimenté
TDD ; une évolution de la pratique
      dans le temps
   Spécifications &      … specs / exigences /
    exigences              conformité
   Codage du test        Design du code
   Codage des            Design du test
    fonctionnalités       API
   Intéressé par la
    conformité




            Débutant           Expérimenté
Un bon design
   Dans un langage objet

   Pour quelle audience ?

   Comment y arriver ?

   Avec quels outils ?
Dans un langage OO
   À quoi somme nous habitué ?

   À un graphe d’objet
     Construction hiérarchique de structure
     Très souvent une structure de données seules
     qui est baladé par d’autres objets sans état. =>
     Transaction Script


   Nous sommes habitués à une approche
    ontologique dans le design d’un système.
The big idea of object oriented
programming
   The big idea is "messaging"

   The key in making great and growable systems is much
    more to design how its modules communicate rather than
    what their internal properties and behaviors should be.


   Alan Kay
   Un des père de la programmation orientée objet, un des
    père de SmallTalk


   Mockito permet de se focaliser sur les interactions
Pour quelle audience ?
   Un bon design ok, mais qui est
    intéressé ?

   Est-ce que les intérêts sont les mêmes
    ?
     Pour les auteurs?
     Pour les utilisateurs ?
Pour quelle audience ?
   Un bon design ok, mais qui est intéressé,
    qui devrait être intéressé ?
     Dev, Archi, Manager, Client


   Est-ce que les intérêts sont les mêmes ?
     Pour les auteurs?
      ○ Dev de framework / lib :
        Favoriser l’extensibilité, la réutilisation, le confort,
        facile à corriger
     Pour les utilisateurs ?
      ○ Utiliser un code facile à comprendre, facilement
        extensible, corrigeable
Pour quelles audiences ?
   Pour un dev de lib / de framework
     En particulier pour le développement Open Source, problème
      du temps libre !
     On a les même problèmes qu’un manager sur le cycle de vie
      d’un projet : le temps c’est de l’argent

   Pour l’utilisateur, un bon design lui fait gagner en
    efficacité
     API lisible et expressive (!= verbeux) ; un développeur passe
      en général plus de temps à lire du code qu’a en écrire!
     API ouverte aux extensions, plus facile à developper, remplacer
      du code

   Le dev d’une lib ou d’un framework doit aussi être
    utilisateur de celle-ci.
     Le test aide très tôt dans le développement.
Avec quels outils ?
Avec quels outils ?
   Pourquoi Mockito plus que les autres ?
       Framework de mock avec une API simple et propre
       Rapport d’erreur de premier ordre
       Support de l’approche BDD
       Super javadoc
       Pleins de features

   Easymock
     API plus verbeuse, et un peu plus intrusive
     Moins de features

   Powermock
     Très bon framework, mais plus complexe à mettre en œuvre (pour
      l’auteur et pour les utilisateurs)
     Dangereux pour le design : tests boite blanche
     OK pour le legacy
     L’auteur lui-même recommande Mockito
Améliorer le design
   Le design est une approche pour
    contrôler la complexité d’un projet

   Ses outils : patterns et principes
      ○ GRASP
      ○ GoF
      ○ SOLID


   Aux anti-patterns et lois
      ○ Par ex : The Law of Leaky Abstractions
Améliorer le design
   Petit focus sur ‘High Cohesion’
     C’est avoir des méthodes qui ont en commun un ou quelques
      concepts seulement

     Cette mesure s’appelle LCOM
      ○ Si elle est trop haute => refactoring (découpage des
        fonctionnalités, introduction de collaborateur, …)

   Low Coupling
     Couplage : C’est d’avoir trop de dépendances
      ○ Imports, Paramètres
     Mais pas que :
      ○ Héritage, Temporel, Flow


     Impact fort sur les tests
      ○ En TDD le couplage rajoute très vite de la pénibilité => refactoring
Améliorer le design
   Les closures
     Petits objets facilement externalisables


     Facilement testables


   Sur les clients de ces closures.
     Moins de chose à tester parce que
      ○ le reste du code est testé
      ○ surtout ce n’est plus sa responsabilité (SRP)
Améliorer le design
   Donnez un peu d’amour aux tests

   Si vous refactorez, pensez à
     alléger vos test
     relaxer le test
     se focaliser sur le scénario du test ET la responsabilité
      du code testé

   Pour vos objets de données
     Pattern des Value Object en DDD (instanciable avec un
      constructeur)
     Factory Method
      accountWith("bob", "lee", 100023348.23D)
     Builder à la Joshua Bloch
Améliorer le design
   Les tests aussi ont leurs anti-patterns aka
    Test Smell
     James Carr en a fait une liste
      ○ Excessive Setup
      ○ The Liar
      ○ The Free Ride
      ○ …


     Pour les mocks
      ○ The Mockery
      ○ Don’t mock value object
      ○ Don’t mock types you don’t own
Publicité
À lire + sources
   Anti-patterns de test par James Carr
    http://blog.james-carr.org/2006/11/03/tdd-anti-patterns/
   Growing Object Oriented Software Guiged by Tests
    http://www.amazon.fr/Growing-Object-Oriented-Software-Guided-
    Tests/dp/0321503627
   Échanges sur Hotspot en 98 avec Alan Kay
    http://lists.squeakfoundation.org/pipermail/squeak-dev/1998-
    October/017019.html
   Étude de productivité de logiciel OO
    http://www.csm.ornl.gov/~v8q/Homepage/Papers%20Old/spetep-
    %20printable.pdf
   Étude sur la productivité et l’efficacité avec les
    langages objet
    http://www.sciweavers.org/publications/study-productivity-and-
    efficiency-object-oriented-methods-and-languages
   Don’t mock types you don’t own
    http://davesquared.net/2011/04/dont-mock-types-you-dont-
    own.html

Weitere ähnliche Inhalte

Andere mochten auch

12.audit et controle interne
12.audit et controle interne12.audit et controle interne
12.audit et controle interne
OULAAJEB YOUSSEF
 
1307 18 etude rb opérateurs et culture - vf [lecture seule] [mode de compat...
1307 18   etude rb opérateurs et culture - vf [lecture seule] [mode de compat...1307 18   etude rb opérateurs et culture - vf [lecture seule] [mode de compat...
1307 18 etude rb opérateurs et culture - vf [lecture seule] [mode de compat...
Fédération Française des Télécoms
 
1014_kopia - aurkezpena1.pps
1014_kopia - aurkezpena1.pps1014_kopia - aurkezpena1.pps
1014_kopia - aurkezpena1.pps
ElhuyarOlinpiada
 
Auw An Der Kyll Family History Book 1657 1854
Auw  An Der Kyll Family History Book 1657 1854Auw  An Der Kyll Family History Book 1657 1854
Auw An Der Kyll Family History Book 1657 1854
guestfb5551
 
Best of mensuel bowers & wilkins - mars
Best of mensuel   bowers & wilkins - marsBest of mensuel   bowers & wilkins - mars
Best of mensuel bowers & wilkins - mars
B&W Group France
 
Le ganoderma ++
Le ganoderma ++Le ganoderma ++
Le ganoderma ++
lesummum
 
Renforcez l'engagement de vos employés un atout pour votre entreprise
Renforcez l'engagement de vos employés un atout pour votre entrepriseRenforcez l'engagement de vos employés un atout pour votre entreprise
Renforcez l'engagement de vos employés un atout pour votre entreprise
Drake International
 
Ugc debrief-bandeaux-ctabas-010812
Ugc debrief-bandeaux-ctabas-010812Ugc debrief-bandeaux-ctabas-010812
Ugc debrief-bandeaux-ctabas-010812
SNCF Intercités
 
Ma ville .meknes
Ma ville   .meknesMa ville   .meknes
Ma ville .meknes
merico2
 

Andere mochten auch (20)

12.audit et controle interne
12.audit et controle interne12.audit et controle interne
12.audit et controle interne
 
[Gestion des risques et conformite] optimiser le dispositif de controle interne
[Gestion des risques et conformite] optimiser le dispositif de controle interne[Gestion des risques et conformite] optimiser le dispositif de controle interne
[Gestion des risques et conformite] optimiser le dispositif de controle interne
 
Menjaga Kesehatan Sepanjang Masa
Menjaga Kesehatan Sepanjang MasaMenjaga Kesehatan Sepanjang Masa
Menjaga Kesehatan Sepanjang Masa
 
L'accessibilité : un truc réservé aux riches ?
L'accessibilité : un truc réservé aux riches ?L'accessibilité : un truc réservé aux riches ?
L'accessibilité : un truc réservé aux riches ?
 
Présentation open coffee 2011
Présentation open coffee 2011Présentation open coffee 2011
Présentation open coffee 2011
 
1307 18 etude rb opérateurs et culture - vf [lecture seule] [mode de compat...
1307 18   etude rb opérateurs et culture - vf [lecture seule] [mode de compat...1307 18   etude rb opérateurs et culture - vf [lecture seule] [mode de compat...
1307 18 etude rb opérateurs et culture - vf [lecture seule] [mode de compat...
 
Zukunftsszenarien läs 111214
Zukunftsszenarien läs 111214Zukunftsszenarien läs 111214
Zukunftsszenarien läs 111214
 
2011 10 05 10-45 david lauchenauer
2011 10 05 10-45 david lauchenauer2011 10 05 10-45 david lauchenauer
2011 10 05 10-45 david lauchenauer
 
1014_kopia - aurkezpena1.pps
1014_kopia - aurkezpena1.pps1014_kopia - aurkezpena1.pps
1014_kopia - aurkezpena1.pps
 
Mediadaten der GFM Nachrichten
Mediadaten der GFM NachrichtenMediadaten der GFM Nachrichten
Mediadaten der GFM Nachrichten
 
Auw An Der Kyll Family History Book 1657 1854
Auw  An Der Kyll Family History Book 1657 1854Auw  An Der Kyll Family History Book 1657 1854
Auw An Der Kyll Family History Book 1657 1854
 
Sommeruni 2008 - Podcasting
Sommeruni 2008 - PodcastingSommeruni 2008 - Podcasting
Sommeruni 2008 - Podcasting
 
Best of mensuel bowers & wilkins - mars
Best of mensuel   bowers & wilkins - marsBest of mensuel   bowers & wilkins - mars
Best of mensuel bowers & wilkins - mars
 
Le ganoderma ++
Le ganoderma ++Le ganoderma ++
Le ganoderma ++
 
[Tutoriel] Studio de développement RPG SilverDev Designer
[Tutoriel] Studio de développement RPG SilverDev Designer[Tutoriel] Studio de développement RPG SilverDev Designer
[Tutoriel] Studio de développement RPG SilverDev Designer
 
Edelman goodpurpose 2012
Edelman goodpurpose 2012Edelman goodpurpose 2012
Edelman goodpurpose 2012
 
Renforcez l'engagement de vos employés un atout pour votre entreprise
Renforcez l'engagement de vos employés un atout pour votre entrepriseRenforcez l'engagement de vos employés un atout pour votre entreprise
Renforcez l'engagement de vos employés un atout pour votre entreprise
 
Infographies
InfographiesInfographies
Infographies
 
Ugc debrief-bandeaux-ctabas-010812
Ugc debrief-bandeaux-ctabas-010812Ugc debrief-bandeaux-ctabas-010812
Ugc debrief-bandeaux-ctabas-010812
 
Ma ville .meknes
Ma ville   .meknesMa ville   .meknes
Ma ville .meknes
 

Ähnlich wie Mockito - Design + tests par Brice Duteil

20131024 qualité de code et sonar - mug lyon
20131024   qualité de code et sonar - mug lyon20131024   qualité de code et sonar - mug lyon
20131024 qualité de code et sonar - mug lyon
Clement Bouillier
 
AgileTour Toulouse 2012 : TFS
AgileTour Toulouse 2012 : TFSAgileTour Toulouse 2012 : TFS
AgileTour Toulouse 2012 : TFS
Agile Toulouse
 
Des bancs de l’école à la réalité en entreprise, retour d’expérience sur...
Des bancs de l’école à la réalité en entreprise, retour d’expérience sur...Des bancs de l’école à la réalité en entreprise, retour d’expérience sur...
Des bancs de l’école à la réalité en entreprise, retour d’expérience sur...
Scaleway
 
Ged Open Source - Documation 2010
Ged Open Source - Documation 2010Ged Open Source - Documation 2010
Ged Open Source - Documation 2010
Thomas Choppy
 
Agile Tour Paris 2014 : Ma stack d'outils Agiles, tout un programme !, Cedric...
Agile Tour Paris 2014 : Ma stack d'outils Agiles, tout un programme !, Cedric...Agile Tour Paris 2014 : Ma stack d'outils Agiles, tout un programme !, Cedric...
Agile Tour Paris 2014 : Ma stack d'outils Agiles, tout un programme !, Cedric...
ENSIBS
 

Ähnlich wie Mockito - Design + tests par Brice Duteil (20)

Human Talks Grenoble - 11/12/2012 - TDD
Human Talks Grenoble - 11/12/2012 - TDDHuman Talks Grenoble - 11/12/2012 - TDD
Human Talks Grenoble - 11/12/2012 - TDD
 
devops.pdf
devops.pdfdevops.pdf
devops.pdf
 
Test driven development v0.2 20121221
Test driven development v0.2 20121221Test driven development v0.2 20121221
Test driven development v0.2 20121221
 
Introduction aux spécifications exécutables (dit aussi atdd, bdd)
Introduction aux spécifications exécutables (dit aussi atdd, bdd)Introduction aux spécifications exécutables (dit aussi atdd, bdd)
Introduction aux spécifications exécutables (dit aussi atdd, bdd)
 
Webinar TDD / BDD : Comment mieux délivrer et s'entendre pour le Product Owne...
Webinar TDD / BDD : Comment mieux délivrer et s'entendre pour le Product Owne...Webinar TDD / BDD : Comment mieux délivrer et s'entendre pour le Product Owne...
Webinar TDD / BDD : Comment mieux délivrer et s'entendre pour le Product Owne...
 
Webinar - Mieux s'entendre entre Dev / PO / Testeur avec TDD et BDD
Webinar - Mieux s'entendre entre Dev / PO / Testeur avec TDD et BDDWebinar - Mieux s'entendre entre Dev / PO / Testeur avec TDD et BDD
Webinar - Mieux s'entendre entre Dev / PO / Testeur avec TDD et BDD
 
Introduction à DevOps
Introduction à DevOpsIntroduction à DevOps
Introduction à DevOps
 
20131024 qualité de code et sonar - mug lyon
20131024   qualité de code et sonar - mug lyon20131024   qualité de code et sonar - mug lyon
20131024 qualité de code et sonar - mug lyon
 
AgileTour Toulouse 2012 : TFS
AgileTour Toulouse 2012 : TFSAgileTour Toulouse 2012 : TFS
AgileTour Toulouse 2012 : TFS
 
Des bancs de l’école à la réalité en entreprise, retour d’expérience sur...
Des bancs de l’école à la réalité en entreprise, retour d’expérience sur...Des bancs de l’école à la réalité en entreprise, retour d’expérience sur...
Des bancs de l’école à la réalité en entreprise, retour d’expérience sur...
 
Cleancode / Tocea / Introduction
Cleancode / Tocea / IntroductionCleancode / Tocea / Introduction
Cleancode / Tocea / Introduction
 
Ged Open Source - Documation 2010
Ged Open Source - Documation 2010Ged Open Source - Documation 2010
Ged Open Source - Documation 2010
 
TFS 2012 : un pas vers l'agilité... en avant ou en arrière ?
TFS 2012 : un pas vers l'agilité... en avant ou en arrière ? TFS 2012 : un pas vers l'agilité... en avant ou en arrière ?
TFS 2012 : un pas vers l'agilité... en avant ou en arrière ?
 
La Meta-programmation
La Meta-programmation La Meta-programmation
La Meta-programmation
 
Lmo02.ppt
Lmo02.pptLmo02.ppt
Lmo02.ppt
 
Agile Tour Paris 2014 : Ma stack d'outils Agiles, tout un programme !, Cedric...
Agile Tour Paris 2014 : Ma stack d'outils Agiles, tout un programme !, Cedric...Agile Tour Paris 2014 : Ma stack d'outils Agiles, tout un programme !, Cedric...
Agile Tour Paris 2014 : Ma stack d'outils Agiles, tout un programme !, Cedric...
 
Lunch learn 5 sep2013
Lunch learn 5 sep2013Lunch learn 5 sep2013
Lunch learn 5 sep2013
 
Method XP
Method XP Method XP
Method XP
 
CdP QA - QA hackathon - Intelligence artificielle - Meetup du 9 mars
CdP QA - QA hackathon - Intelligence artificielle - Meetup du 9 marsCdP QA - QA hackathon - Intelligence artificielle - Meetup du 9 mars
CdP QA - QA hackathon - Intelligence artificielle - Meetup du 9 mars
 
Comment récupérer un projet Web pourri ... et réussir à travailler dessus.
Comment récupérer un projet Web pourri ... et réussir à travailler dessus.Comment récupérer un projet Web pourri ... et réussir à travailler dessus.
Comment récupérer un projet Web pourri ... et réussir à travailler dessus.
 

Mehr von Normandy JUG

Couche Base par Tugdual Grall
Couche Base par Tugdual GrallCouche Base par Tugdual Grall
Couche Base par Tugdual Grall
Normandy JUG
 
Hibernate vs le_cloud_computing
Hibernate vs le_cloud_computingHibernate vs le_cloud_computing
Hibernate vs le_cloud_computing
Normandy JUG
 

Mehr von Normandy JUG (20)

Découvrez les bases de l’ergonomie web : donnez à vos utilisateurs le meilleu...
Découvrez les bases de l’ergonomie web : donnez à vos utilisateurs le meilleu...Découvrez les bases de l’ergonomie web : donnez à vos utilisateurs le meilleu...
Découvrez les bases de l’ergonomie web : donnez à vos utilisateurs le meilleu...
 
Codeurs En Seine - Lean startup - Matthieu Garde-Lebreton
Codeurs En Seine - Lean startup - Matthieu Garde-LebretonCodeurs En Seine - Lean startup - Matthieu Garde-Lebreton
Codeurs En Seine - Lean startup - Matthieu Garde-Lebreton
 
What makes groovy groovy codeurs en seine - 2013 - light size
What makes groovy groovy   codeurs en seine - 2013 - light sizeWhat makes groovy groovy   codeurs en seine - 2013 - light size
What makes groovy groovy codeurs en seine - 2013 - light size
 
[Codeurs en seine] management & monitoring cloud
[Codeurs en seine] management & monitoring cloud[Codeurs en seine] management & monitoring cloud
[Codeurs en seine] management & monitoring cloud
 
Fork / Join, Parallel Arrays, Lambdas : la programmation parallèle (trop ?) f...
Fork / Join, Parallel Arrays, Lambdas : la programmation parallèle (trop ?) f...Fork / Join, Parallel Arrays, Lambdas : la programmation parallèle (trop ?) f...
Fork / Join, Parallel Arrays, Lambdas : la programmation parallèle (trop ?) f...
 
Capacity Planning : Pratiques et outils pour regarder la foudre tomber sans p...
Capacity Planning : Pratiques et outils pour regarder la foudre tomber sans p...Capacity Planning : Pratiques et outils pour regarder la foudre tomber sans p...
Capacity Planning : Pratiques et outils pour regarder la foudre tomber sans p...
 
Gatling : Faites tomber la foudre sur votre serveur ! (Stéphane Landelle)
Gatling : Faites tomber la foudre sur votre serveur ! (Stéphane Landelle)Gatling : Faites tomber la foudre sur votre serveur ! (Stéphane Landelle)
Gatling : Faites tomber la foudre sur votre serveur ! (Stéphane Landelle)
 
Soirée Ceylon avec Stéphane Epardaud
Soirée Ceylon avec Stéphane EpardaudSoirée Ceylon avec Stéphane Epardaud
Soirée Ceylon avec Stéphane Epardaud
 
Soirée Guava et Lombok avec Thierry Leriche
Soirée Guava et Lombok avec Thierry LericheSoirée Guava et Lombok avec Thierry Leriche
Soirée Guava et Lombok avec Thierry Leriche
 
Couche Base par Tugdual Grall
Couche Base par Tugdual GrallCouche Base par Tugdual Grall
Couche Base par Tugdual Grall
 
Java7 normandyjug
Java7 normandyjugJava7 normandyjug
Java7 normandyjug
 
Apache, osgi and karaf par Guillaume Nodet
Apache, osgi and karaf par Guillaume NodetApache, osgi and karaf par Guillaume Nodet
Apache, osgi and karaf par Guillaume Nodet
 
Annotations Java par Olivier Croisier
Annotations Java par Olivier CroisierAnnotations Java par Olivier Croisier
Annotations Java par Olivier Croisier
 
Spring Batch 17-05-2011
Spring Batch 17-05-2011Spring Batch 17-05-2011
Spring Batch 17-05-2011
 
ATR2011 - Planning poker
ATR2011 - Planning pokerATR2011 - Planning poker
ATR2011 - Planning poker
 
ATR2011 - Scrum dans les tranchées Normandes
ATR2011 - Scrum dans les tranchées NormandesATR2011 - Scrum dans les tranchées Normandes
ATR2011 - Scrum dans les tranchées Normandes
 
Hibernate vs le_cloud_computing
Hibernate vs le_cloud_computingHibernate vs le_cloud_computing
Hibernate vs le_cloud_computing
 
HTML5 en projet
HTML5 en projetHTML5 en projet
HTML5 en projet
 
Git
GitGit
Git
 
Soirée BPM - Introduction Logica
Soirée BPM - Introduction LogicaSoirée BPM - Introduction Logica
Soirée BPM - Introduction Logica
 

Mockito - Design + tests par Brice Duteil

  • 1. Design + tests (TDD)  Mockito inside.
  • 2. TDD ; en général C’est quoi le TDD ? => Test Driven Development Quels avantage à cette pratique ? précise les spécifications du code permet d’utiliser le programme avant qu’il soit même écrit augmente la confiance pour le refactoring valide la conformité du code
  • 3. TDD ; pour le design Quels avantages à plus long terme ? Moins de bugs techniques + plus de bugs métier, sur les specs. Évolutivité et maintenance moins couteuse. Confort du code
  • 4. TDD ; une évolution de la pratique dans le temps  Spécifications &  … specs / exigences / exigences conformité  Codage du test  Design du code  Codage des  Design du test fonctionnalités  API  Intéressé par la conformité Débutant Expérimenté
  • 5. TDD ; une évolution de la pratique dans le temps  Spécifications &  … specs / exigences / exigences conformité  Codage du test  Design du code  Codage des  Design du test fonctionnalités  API  Intéressé par la conformité Débutant Expérimenté
  • 6. Un bon design  Dans un langage objet  Pour quelle audience ?  Comment y arriver ?  Avec quels outils ?
  • 7. Dans un langage OO  À quoi somme nous habitué ?  À un graphe d’objet  Construction hiérarchique de structure  Très souvent une structure de données seules qui est baladé par d’autres objets sans état. => Transaction Script  Nous sommes habitués à une approche ontologique dans le design d’un système.
  • 8. The big idea of object oriented programming  The big idea is "messaging"  The key in making great and growable systems is much more to design how its modules communicate rather than what their internal properties and behaviors should be.  Alan Kay  Un des père de la programmation orientée objet, un des père de SmallTalk  Mockito permet de se focaliser sur les interactions
  • 9. Pour quelle audience ?  Un bon design ok, mais qui est intéressé ?  Est-ce que les intérêts sont les mêmes ?  Pour les auteurs?  Pour les utilisateurs ?
  • 10. Pour quelle audience ?  Un bon design ok, mais qui est intéressé, qui devrait être intéressé ?  Dev, Archi, Manager, Client  Est-ce que les intérêts sont les mêmes ?  Pour les auteurs? ○ Dev de framework / lib : Favoriser l’extensibilité, la réutilisation, le confort, facile à corriger  Pour les utilisateurs ? ○ Utiliser un code facile à comprendre, facilement extensible, corrigeable
  • 11. Pour quelles audiences ?  Pour un dev de lib / de framework  En particulier pour le développement Open Source, problème du temps libre !  On a les même problèmes qu’un manager sur le cycle de vie d’un projet : le temps c’est de l’argent  Pour l’utilisateur, un bon design lui fait gagner en efficacité  API lisible et expressive (!= verbeux) ; un développeur passe en général plus de temps à lire du code qu’a en écrire!  API ouverte aux extensions, plus facile à developper, remplacer du code  Le dev d’une lib ou d’un framework doit aussi être utilisateur de celle-ci.  Le test aide très tôt dans le développement.
  • 13. Avec quels outils ?  Pourquoi Mockito plus que les autres ?  Framework de mock avec une API simple et propre  Rapport d’erreur de premier ordre  Support de l’approche BDD  Super javadoc  Pleins de features  Easymock  API plus verbeuse, et un peu plus intrusive  Moins de features  Powermock  Très bon framework, mais plus complexe à mettre en œuvre (pour l’auteur et pour les utilisateurs)  Dangereux pour le design : tests boite blanche  OK pour le legacy  L’auteur lui-même recommande Mockito
  • 14. Améliorer le design  Le design est une approche pour contrôler la complexité d’un projet  Ses outils : patterns et principes ○ GRASP ○ GoF ○ SOLID  Aux anti-patterns et lois ○ Par ex : The Law of Leaky Abstractions
  • 15. Améliorer le design  Petit focus sur ‘High Cohesion’  C’est avoir des méthodes qui ont en commun un ou quelques concepts seulement  Cette mesure s’appelle LCOM ○ Si elle est trop haute => refactoring (découpage des fonctionnalités, introduction de collaborateur, …)  Low Coupling  Couplage : C’est d’avoir trop de dépendances ○ Imports, Paramètres  Mais pas que : ○ Héritage, Temporel, Flow  Impact fort sur les tests ○ En TDD le couplage rajoute très vite de la pénibilité => refactoring
  • 16. Améliorer le design  Les closures  Petits objets facilement externalisables  Facilement testables  Sur les clients de ces closures.  Moins de chose à tester parce que ○ le reste du code est testé ○ surtout ce n’est plus sa responsabilité (SRP)
  • 17. Améliorer le design  Donnez un peu d’amour aux tests  Si vous refactorez, pensez à  alléger vos test  relaxer le test  se focaliser sur le scénario du test ET la responsabilité du code testé  Pour vos objets de données  Pattern des Value Object en DDD (instanciable avec un constructeur)  Factory Method accountWith("bob", "lee", 100023348.23D)  Builder à la Joshua Bloch
  • 18. Améliorer le design  Les tests aussi ont leurs anti-patterns aka Test Smell  James Carr en a fait une liste ○ Excessive Setup ○ The Liar ○ The Free Ride ○ …  Pour les mocks ○ The Mockery ○ Don’t mock value object ○ Don’t mock types you don’t own
  • 20. À lire + sources  Anti-patterns de test par James Carr http://blog.james-carr.org/2006/11/03/tdd-anti-patterns/  Growing Object Oriented Software Guiged by Tests http://www.amazon.fr/Growing-Object-Oriented-Software-Guided- Tests/dp/0321503627  Échanges sur Hotspot en 98 avec Alan Kay http://lists.squeakfoundation.org/pipermail/squeak-dev/1998- October/017019.html  Étude de productivité de logiciel OO http://www.csm.ornl.gov/~v8q/Homepage/Papers%20Old/spetep- %20printable.pdf  Étude sur la productivité et l’efficacité avec les langages objet http://www.sciweavers.org/publications/study-productivity-and- efficiency-object-oriented-methods-and-languages  Don’t mock types you don’t own http://davesquared.net/2011/04/dont-mock-types-you-dont- own.html