SlideShare ist ein Scribd-Unternehmen logo
1 von 45
Downloaden Sie, um offline zu lesen
Propulsez	
  votre	
  architecture	
  
     grâce	
  aux	
  mocks	
  
             Confoo	
  2012	
  
     Montréal,	
  Québec,	
  Canada	
  


                2	
  mars	
  2012	
  
Félix-­‐Antoine	
  Bourbonnais	
  
	
  Ing.	
  jr,	
  PSM-­‐I	
  


!   Formateur	
  et	
  Coach	
  Agile	
  
!   Enseignement	
  et	
  formaKons	
  	
  
           o  TDD,	
  Réusinage,	
  OO	
  avancé,	
  	
  
              AOP,	
  tests,	
  Scrum	
  
!   Recherches	
  	
  
           o  AOP,	
  agilité,	
  tests	
  et	
  mocks	
  
!   Développeur	
  	
  
                                                             @Uourbonnais	
  
           o  Java	
  et	
  Python	
  (principalement)	
  


                                                             2
Réchauffement…	
  
               Quelles	
  sont	
  vos	
  
                 aXentes?	
  


               Qui	
  fait	
  du	
  TDD?	
  


           Qui	
  uKlise	
  des	
  Mocks?	
  

                                          3
Comment	
  découvrir	
  l’architecture?	
  



               Mocks	
  

                           TDD	
  
J’uKlise	
  déjà	
  des	
  mocks!	
  

              On	
  va	
  parler	
  des	
  mocks	
  pour	
  piloter	
  la	
  
                           découverte	
  du	
  design!	
  




Image: graur codrin / FreeDigitalPhotos.net
IntroducKon	
  aux	
  

TESTS	
  
Plusieurs	
  types	
  de	
  tests	
  

                                                                                  IntégraKon	
  

                         Bout-­‐en-­‐
                                                                 AcceptaKon	
  
                           bout	
  

                                              Système	
  


                          Unitaire	
                                                               …	
  




Images: Renjith Krishnan, Salvatore Vuono, Jscreationzs, Photostock, Posterize
        / FreeDigitalPhotos.net
Tests	
  unitaires	
  
But:	
  tester	
  les	
  modules	
  en	
  isola*on.	
  
IntroducKon	
  aux	
  

DOUBLURES	
  ET	
  MOCKS	
  
onctionnement
tème   FoncKonnement	
  




                           10
tionnement
  FoncKonnement	
  




                      11
ionnement

  FoncKonnement	
  




                      12
UKlisaKons	
  
  Piloter	
  (simuler	
  un	
  cas)	
  

  •  Simuler	
  un	
  cas	
  précis	
  dans	
  un	
  objet	
  uKlisé	
  par	
  l’objet	
  testé.	
  
     	
  
  •  Exemple:	
  	
  
     Simuler	
  une	
  excepKon	
  lancée.	
  



  Vérifier	
  un	
  comportement	
  

  •  Vérifier	
  que	
  l’objet	
  testé	
  a	
  eu	
  l’effet	
  désiré	
  sur	
  un	
  autre	
  objet.	
  
     	
  
  •  Exemple:	
  
     Vérifier	
  que	
  la	
  méthode	
  a	
  été	
  appelée	
  sur	
  un	
  autre	
  objet.	
  

                                                                                      13
IntroducKon	
  au	
  

TDD	
  
Cycle	
  du	
  TDD	
  

                            Écrire	
  un	
                1	
  
                                                                      On	
  passe	
  à	
  la	
  phase	
  
                             test	
  qui	
                            «	
  VERTE	
  »	
  dès	
  qu’on	
  a	
  un	
  
                             échoue	
                                 test	
  qui	
  échoue.	
  

                                                                              Erreur	
  de	
  compilateur	
  
                                                                              =	
  «	
  échec	
  ».	
  

                                                     Faire	
  
1	
     Réusiner	
                                 passer	
  le	
  
                                                     test	
  
                                                                      2	
  
         On	
  passe	
  à	
  la	
  phase	
  «	
  Réusinage	
  »	
  
         dès	
  que	
  le	
  test	
  passe.	
  
                                                                                             15
Pourquoi	
  faire	
  du	
  TDD	
  
La	
  peur	
  du	
  changement…	
  




                                                                           Peur	
  =	
  î	
  maintenabilité	
  




Image:	
  David	
  CasKllo	
  Dominici	
  /	
  FreeDigitalPhotos.net	
  
                                                                                     16
Focaliser	
  sur	
  le	
  «	
  QUOI	
  »	
  

             Se	
  placer	
  en	
  posiKon	
  d’uKlisateur	
  du	
  code	
  
                                      Se	
  concentrer	
  sur	
  le	
  «	
  QUOI	
  »	
  
     «	
  Instead	
  of	
  just	
  using	
  tesKng	
  to	
  verify	
  our	
  work	
  aker	
  it’s	
  done,	
  TDD	
  turns	
  
                                      tesKng	
  into	
  a	
  design	
  ac*vity.	
  [1]	
  »	
  
                   «	
  We	
  use	
  the	
  tests	
  to	
  clarify	
  our	
  ideas	
  about	
  what	
  we	
  want	
  the	
  
                                                             code	
  to	
  do.	
  [1]»	
  	
  
                                                                                                 	
  

[1]	
  Steve	
  Freeman	
  et	
  Nat	
  Pryce.	
  Growing	
  Object-­‐Oriented	
  So2ware,	
  Guided	
  by	
  Tests.	
  Addison-­‐
Wesley	
  Professional,	
  1	
  ediKon,	
  Octobre	
  2009.	
  	
                                                                    17
TDD	
  et	
  architecture	
  
!   Favorise	
  l’écriture	
  de	
  code	
  testable	
  
!   Offre	
  une	
  rétroacKon	
  concernant	
  la	
  facilité	
  
    d’uKlisaKon	
  du	
  «	
  design	
  »	
  
!   Favorise	
  l’écriture	
  de	
  code	
  faiblement	
  couplé	
  
!   Favorise	
  l’écriture	
  de	
  code	
  réuKlisable	
  
!   Favorise	
  l’évoluKon	
  de	
  l’architecture	
  et	
  la	
  
    découverte	
  progressive	
  
    o  Colle	
  à	
  la	
  réalité	
  et	
  aux	
  besoins	
  présents	
  
Rappel	
  de	
  

L’ORIENTATION	
  OBJET	
  
Messages	
  et	
  collaboraKon	
  

                                        Classe	
  
                                          C	
  
                   Classe	
  
                     B	
  
                                                      Classe	
  
 Classe	
                                               D	
  
   A	
  
                                     Classe	
                                  Classe	
  
                                        E	
                                       F	
  



    UI	
                        Domaine	
                                Infrastructure	
  
              Collabora*on	
  des	
  objets	
  à	
  fonc*onnalité	
  	
  
Le	
  «	
  Tell	
  don’t	
  Ask	
  »	
  




Image: renjith krishnan et jscreationzs / FreeDigitalPhotos.net
Pourquoi	
  le	
  «	
  Tell	
  don’t	
  ask	
  »	
  
!   Cacher	
  le	
  «	
  comment	
  »	
  
!   Limiter	
  l’effet	
  des	
  modificaKons	
  à	
  la	
  logique	
  
    (algorithme)	
  
!   Éviter	
  les	
  «	
  trains	
  »	
  d’appels	
  
!   Réduire	
  la	
  duplicaKon	
  
!   Laisser	
  les	
  objets	
  «	
  s’occuper	
  de	
  leurs	
  oignons	
  »	
  
!   Éviter	
  les	
  «	
  domaines	
  anémiques	
  »	
  
Un	
  objet	
  est	
  une	
  boîte	
  noire	
  
SKmulus	
  




              RécepKon	
  d’un	
  message	
  

                                                               Envoi	
  d’un	
  message	
  à	
  
                                                                 un	
  collaborateur	
  




                                                                                                   Effet	
  
                                                  Classe	
  
                                                               Envoi	
  d’un	
  message	
  à	
  
                                                                 un	
  collaborateur	
  
Effet	
  




                 Retour	
  d’une	
  réponse	
  
Le	
  design	
  et	
  le	
  

    TDD	
  «	
  CLASSIQUE	
  »	
  

Image: posterize / FreeDigitalPhotos.net
TDD	
  classique	
  

                 Centré	
  sur	
  l’état	
  et	
  le	
  résultat	
  final.	
  




Image: nuchylee / FreeDigitalPhotos.net
TDD	
  classique	
  
ExtracKon	
  des	
  types	
  



              Classe	
          Division	
  
                 P	
                           Classe	
                Classe	
  
                                                  P	
                    R1	
  
                                                            Mock	
  
                                                             R1	
  




               PTest	
                          PTest	
                R1Test	
  
Comment	
  

    PILOTER	
  SON	
  DESIGN	
  AVEC	
  DES	
  
    MOCKS?	
  
Image: jscreationzs / FreeDigitalPhotos.net
TDD	
  piloté	
  par	
  les	
  Mocks	
  
Tirer	
  à	
  parKr	
  des	
  besoins	
  	
  

                                                                          B	
  


                                                                         Capacité	
  de	
  B	
  et	
  C	
  	
  
                           A	
                  Besoins	
  de	
  A	
  
                                                                         (services)	
  



                                                                          C	
  




  Tirer	
  les	
  types	
  à	
  parKr	
  de	
  la	
  demande	
  
TDD	
  piloté	
  par	
  les	
  Mocks	
  
IdenKfier	
  les	
  rôles	
  requis	
  (dépendances)	
  par	
  le	
  module	
  testé	
  


                Viewer                                             <<Interface>>	
             <<Interface>>	
  
                 Test	
                  Viewer	
                  ?	
  Loader	
               FileReader	
  


                                                                       Mock	
  
                                                                                                   Mock	
  
                                         PNGLoader                   Classe	
  
                                           Test	
                                      ?	
  
                                                                   PNGLoader	
  


  Découverte	
  pas	
  à	
  pas	
  



  Tirer	
  les	
  types	
  à	
  parKr	
  de	
  la	
  demande	
  
TDD	
  piloté	
  par	
  les	
  Mocks	
  
Arriver	
  à	
  desKnaKon…	
  


        Test	
                                          <<Interface>>	
                 <<Interface>>	
  
     acceptaKon	
              Viewer	
                   Loader	
                      FileReader	
  
                       UTest	
  




                                            Utest	
  
                                                          Classe	
                          Fake	
  
                                                                            Utest	
  
                                                        PNGLoader	
                     FileReader	
  



                                                                                 Terminé	
  
ÉvoluKon	
  du	
  design	
  




                            Réusinage	
  

                •  InteracKons	
  
                •  Signatures	
  
                •  …	
  
En	
  résumé	
  
1.  Établir	
  quelle	
  est	
  la	
  responsabilité	
  de	
  l’objet	
  testé	
  
2.  De	
  quoi	
  est-­‐ce	
  que	
  l’objet	
  a	
  besoin	
  pour	
  réaliser	
  son	
  travail	
  
    en	
  terme	
  de	
  rôles?	
  
3.  Quels	
  effets	
  aura	
  ce	
  comportement	
  sur	
  l’environnement	
  
    immédiat?	
  
banque.acheter(carte, marchand, montant)
    --> carte.crediter(montant)
    --> marchand.debiter(montant)
Avantages	
  
!   Favorise	
  le	
  respect	
  du	
  «	
  Tell	
  don’t	
  ask	
  »	
  
!   Permet	
  de	
  définir	
  les	
  interface	
  à	
  parKr	
  des	
  besoins	
  
     o  Force	
  à	
  se	
  concentrer	
  sur	
  le	
  «	
  Quoi	
  »	
  avant	
  le	
  
        «	
  Comment	
  »	
  
     o  On	
  définit	
  d’abord	
  le	
  «	
  Quoi	
  »	
  à	
  parKr	
  des	
  tests	
  des	
  autres	
  
!   Retarde	
  les	
  décisions	
  d’implémentaKons	
  
!   Favorise	
  un	
  design	
  testable	
  
!   L’isolaKon	
  favorise	
  le	
  réusinage	
  

                                                                                  33
Ce	
  que	
  l’on	
  obKent	
  généralement	
  
!   Hiérarchie	
  mince	
  
!   Design	
  basé	
  sur	
  les	
  rôles	
  
!   AbstracKon	
  (sous	
  la	
  forme	
  de	
  rôles)	
  
!   Nommage	
  en	
  posiKon	
  d’uKlisateur	
  
     o  Méthodes	
  et	
  types	
  
!   Meilleur	
  respect	
  du	
  «	
  Tell	
  don’t	
  ask	
  »	
  
!   Parfois	
  moins	
  de	
  temps	
  en	
  déverminage	
  pour	
  
    trouver	
  le	
  problème	
  lorsqu’un	
  test	
  ne	
  passe	
  plus	
  
Désavantages	
  
!   Ne	
  permet	
  pas	
  d’établir	
  le	
  «	
  comment	
  »	
  
!   Peut	
  résulter	
  en	
  une	
  trop	
  grande	
  séparaKon	
  
    o  Trop	
  de	
  classes/interfaces	
  
!   FoncKonne	
  moins	
  bien	
  sur	
  les	
  systèmes	
  basés	
  sur	
  les	
  
    données	
  




                                                                35
Approche	
  «	
  top-­‐down	
  »	
  

                       UI	
  


                                              Réusinage	
  


                  Domaine	
  



              Infrastructure	
                                TDD	
  

                DuplicaKon?	
  


Image: Simon Howden / FreeDigitalPhotos.net
Piloter	
  le	
  design	
  par	
  les	
  mocks	
  
    MyLibraryView	
  
                                       LibraryRealTime    !   Composer	
  à	
  parKr	
  des	
  
                                             View	
  

       …Presenter	
                      …Presenter	
  
                                                              interacKons	
  
                              UI	
  
                                                          !   PosiKon	
  «	
  uKlisateur	
  »	
  
Mock	
  
     OnlineLibrary	
                   Book	
             !   ExploraKons	
  successives	
  
                                                             (étape	
  par	
  étape)	
  
                            Mock	
  
      LibraryProvider	
  
                                                          !   Reporter	
  les	
  décisions	
  
                        Domaine	
  
                                                              d’implémentaKons	
  
       OnlineService	
  
                                                          !   Explorer	
  sans	
  trop	
  se	
  
                                                              compromeXre	
  
           Infrastructure	
  


Image: Simon Howden / FreeDigitalPhotos.net
Favoriser	
  la	
  détecKon	
  des	
  mauvaises	
  
odeurs...	
  
!   Beaucoup	
  de	
  Mocks	
  
     o  Couplage…	
  
!   Difficile	
  d’injecter	
  les	
  Mocks	
  
     o  Pourquoi	
  les	
  dépendances	
  ne	
  sont	
  pas	
  passées?	
  
     o  Patron	
  «	
  Factory	
  »?	
  
!   Paramètres	
  mulKples	
  (constructeurs	
  et	
  méthodes)	
  
     o  ExtracKon	
  d’un	
  concept?	
  
!   Incapable	
  de	
  trouver	
  un	
  nom	
  
!   Etc.	
  
PrésentaKon	
  de	
  la	
  

DÉMONSTRATION	
  
Complémentarité	
  
!   CeXe	
  technique	
  doit	
  
    être	
  combinée!	
  
!   Alterner	
  entre	
  les	
  
    techniques	
  apporte	
  
    généralement	
  de	
  bons	
  
    résultats.	
  
                                                	
          	
  
!   Choisir	
  selon	
  ce	
  que	
  l’on	
  
    veut	
  découvrir	
  (design	
  
    ou	
  algorithme)	
  

                                                       40
Téléchargement	
                              Évaluez	
  la	
  présentaKon	
  sur:	
  
                                              hXps://joind.in/6106	
  



        Téléchargez	
  les	
  diaposiKves	
  complètes	
  sur	
  
                developpementagile.com	
  




Image: rajcreationzs / FreeDigitalPhotos.ne                41
Période	
  de	
  

QUESTIONS	
  

                    42
Références	
  
Références	
  
!   Steve	
  Freeman,	
  Tim	
  Mackinnon,	
  Nat	
  Pryce,	
  et	
  Joe	
  Walnes.	
  	
  
    Mock	
  roles,	
  Not	
  objects.	
  p.	
  236–246.	
  OOPSLA	
  	
  ’04.	
  	
  
    Vancouver,	
  BC,	
  Canada,	
  ACM,	
  2004.	
  
!   Nat	
  Pryce,	
  et	
  Steve	
  Freeman,	
  InfoQ:	
  Mock	
  Roles	
  Not	
  Object	
  States	
  .	
  
    QCon	
  London	
  2007	
  
    hXp://www.infoq.com/presentaKons/Mock-­‐Objects-­‐Nat-­‐Pryce-­‐
    Steve-­‐Freeman	
  
!   MarKn	
  Fowler,	
  Mocks	
  Aren’t	
  Stubs,	
  2	
  janvier	
  2007.	
  	
  
    [Résumé	
  des	
  approches]	
  
    hXp://marKnfowler.com/arKcles/mocksArentStubs.html	
  
Références	
  
!   Steve	
  Freeman,	
  Sustainable	
  Test-­‐Driven	
  Development.	
  QCon	
  San	
  Francisco	
  
    2009.	
  	
  
    hXp://www.infoq.com/presentaKons/Sustainable-­‐Test-­‐Driven-­‐
    Development	
  
!   Codemanship	
  presents...	
  Classic	
  TDD	
  vs.	
  London	
  School,	
  2011.	
  	
  [CriKqué]	
  
    hXp://www.youtube.com/watch?v=AUE155LISV4	
  
!   Michael	
  Feathers	
  et	
  Steve	
  Freeman.	
  Michael	
  Feathers	
  and	
  Steve	
  Freeman	
  
    on	
  Design,	
  InfoQ	
  at	
  QCon	
  San	
  Francisco	
  2009	
  
    hXp://www.infoq.com/interviews/feathers-­‐freeman-­‐design	
  
!   Discussion	
  –	
  «	
  Classic	
  TDD	
  or	
  «	
  London	
  School	
  »	
  -­‐	
  any	
  opinions/comments/
    elaboraPon	
  on	
  Jason	
  Gorman’s	
  post?	
  »	
  GOOS	
  Mailinglist,	
  2011.	
  	
  
    hXps://groups.google.com/d/topic/growing-­‐object-­‐oriented-­‐sokware/
    dOmOIafFDcI/discussion	
  

Weitere ähnliche Inhalte

Was ist angesagt?

Agilité, Tests Et Industrialisation
Agilité, Tests Et IndustrialisationAgilité, Tests Et Industrialisation
Agilité, Tests Et IndustrialisationPHPPRO
 
Innovations Techniques Au Service Du Test De Recette Automatisé
Innovations Techniques Au Service Du Test De Recette AutomatiséInnovations Techniques Au Service Du Test De Recette Automatisé
Innovations Techniques Au Service Du Test De Recette AutomatiséEmmanuel Hugonnet
 
Industrialisation des développements Java
Industrialisation des développements JavaIndustrialisation des développements Java
Industrialisation des développements JavaChristian Blavier
 
AT Marseille 2011 - Réduisons les gaspillages
AT Marseille 2011 - Réduisons les gaspillagesAT Marseille 2011 - Réduisons les gaspillages
AT Marseille 2011 - Réduisons les gaspillagesJérôme Avoustin
 
Les Tests : une évolution, pas une révolution
Les Tests : une évolution, pas une révolutionLes Tests : une évolution, pas une révolution
Les Tests : une évolution, pas une révolutionZeenat Nazaroudine
 
AgileTour Toulouse 2012 : clean code en pratique
AgileTour Toulouse 2012 : clean code en pratiqueAgileTour Toulouse 2012 : clean code en pratique
AgileTour Toulouse 2012 : clean code en pratiqueAgile Toulouse
 
Webinar dalisys externalisation_de_test_2012-09-20
Webinar dalisys externalisation_de_test_2012-09-20Webinar dalisys externalisation_de_test_2012-09-20
Webinar dalisys externalisation_de_test_2012-09-20DALISYS
 
Libre Semester of Code : Faire travailler les étudiants sur des logiciels lib...
Libre Semester of Code : Faire travailler les étudiants sur des logiciels lib...Libre Semester of Code : Faire travailler les étudiants sur des logiciels lib...
Libre Semester of Code : Faire travailler les étudiants sur des logiciels lib...here_and_there
 
Modélisation par Objets - Introduction - De Merise à UML
Modélisation par Objets - Introduction - De Merise à UMLModélisation par Objets - Introduction - De Merise à UML
Modélisation par Objets - Introduction - De Merise à UMLMireille Blay-Fornarino
 
Big Data Developers in Paris presentation : Social Data
Big Data Developers in Paris presentation : Social DataBig Data Developers in Paris presentation : Social Data
Big Data Developers in Paris presentation : Social DataAbdellah Lamrani Alaoui
 

Was ist angesagt? (20)

Le pilotage par les tests
Le pilotage par les testsLe pilotage par les tests
Le pilotage par les tests
 
Agilité, Tests Et Industrialisation
Agilité, Tests Et IndustrialisationAgilité, Tests Et Industrialisation
Agilité, Tests Et Industrialisation
 
Innovations Techniques Au Service Du Test De Recette Automatisé
Innovations Techniques Au Service Du Test De Recette AutomatiséInnovations Techniques Au Service Du Test De Recette Automatisé
Innovations Techniques Au Service Du Test De Recette Automatisé
 
Soigner Sa Schizophrénie
Soigner Sa SchizophrénieSoigner Sa Schizophrénie
Soigner Sa Schizophrénie
 
Initiation à l&rsquo;AOP
Initiation à l&rsquo;AOPInitiation à l&rsquo;AOP
Initiation à l&rsquo;AOP
 
Industrialisation des développements Java
Industrialisation des développements JavaIndustrialisation des développements Java
Industrialisation des développements Java
 
AT Marseille 2011 - Réduisons les gaspillages
AT Marseille 2011 - Réduisons les gaspillagesAT Marseille 2011 - Réduisons les gaspillages
AT Marseille 2011 - Réduisons les gaspillages
 
Les Tests : une évolution, pas une révolution
Les Tests : une évolution, pas une révolutionLes Tests : une évolution, pas une révolution
Les Tests : une évolution, pas une révolution
 
CM patterns
CM patternsCM patterns
CM patterns
 
Initiation à l'agile
Initiation à l'agileInitiation à l'agile
Initiation à l'agile
 
AgileTour Toulouse 2012 : clean code en pratique
AgileTour Toulouse 2012 : clean code en pratiqueAgileTour Toulouse 2012 : clean code en pratique
AgileTour Toulouse 2012 : clean code en pratique
 
Webinar dalisys externalisation_de_test_2012-09-20
Webinar dalisys externalisation_de_test_2012-09-20Webinar dalisys externalisation_de_test_2012-09-20
Webinar dalisys externalisation_de_test_2012-09-20
 
Introduction à Uml
Introduction à UmlIntroduction à Uml
Introduction à Uml
 
CM processus agile
CM processus agileCM processus agile
CM processus agile
 
Libre Semester of Code : Faire travailler les étudiants sur des logiciels lib...
Libre Semester of Code : Faire travailler les étudiants sur des logiciels lib...Libre Semester of Code : Faire travailler les étudiants sur des logiciels lib...
Libre Semester of Code : Faire travailler les étudiants sur des logiciels lib...
 
Wicket - JUG Lausanne
Wicket - JUG LausanneWicket - JUG Lausanne
Wicket - JUG Lausanne
 
Modélisation par Objets - Introduction - De Merise à UML
Modélisation par Objets - Introduction - De Merise à UMLModélisation par Objets - Introduction - De Merise à UML
Modélisation par Objets - Introduction - De Merise à UML
 
Clean code en pratique
Clean code en pratiqueClean code en pratique
Clean code en pratique
 
Big Data Developers in Paris presentation : Social Data
Big Data Developers in Paris presentation : Social DataBig Data Developers in Paris presentation : Social Data
Big Data Developers in Paris presentation : Social Data
 
Cours de Génie Logiciel / ESIEA 2013-2014
Cours de Génie Logiciel / ESIEA 2013-2014 Cours de Génie Logiciel / ESIEA 2013-2014
Cours de Génie Logiciel / ESIEA 2013-2014
 

Andere mochten auch

Les tests et la qualité: moteur de productivité (v.2016-07)
Les tests et la qualité: moteur de productivité (v.2016-07)Les tests et la qualité: moteur de productivité (v.2016-07)
Les tests et la qualité: moteur de productivité (v.2016-07)Elapse Technologies
 
How to think like a startup
How to think like a startupHow to think like a startup
How to think like a startupLoic Le Meur
 
Teaching Students with Emojis, Emoticons, & Textspeak
Teaching Students with Emojis, Emoticons, & TextspeakTeaching Students with Emojis, Emoticons, & Textspeak
Teaching Students with Emojis, Emoticons, & TextspeakShelly Sanchez Terrell
 
32 Ways a Digital Marketing Consultant Can Help Grow Your Business
32 Ways a Digital Marketing Consultant Can Help Grow Your Business32 Ways a Digital Marketing Consultant Can Help Grow Your Business
32 Ways a Digital Marketing Consultant Can Help Grow Your BusinessBarry Feldman
 
Study: The Future of VR, AR and Self-Driving Cars
Study: The Future of VR, AR and Self-Driving CarsStudy: The Future of VR, AR and Self-Driving Cars
Study: The Future of VR, AR and Self-Driving CarsLinkedIn
 
Hype vs. Reality: The AI Explainer
Hype vs. Reality: The AI ExplainerHype vs. Reality: The AI Explainer
Hype vs. Reality: The AI ExplainerLuminary Labs
 

Andere mochten auch (7)

Les tests et la qualité: moteur de productivité (v.2016-07)
Les tests et la qualité: moteur de productivité (v.2016-07)Les tests et la qualité: moteur de productivité (v.2016-07)
Les tests et la qualité: moteur de productivité (v.2016-07)
 
Inaugural Addresses
Inaugural AddressesInaugural Addresses
Inaugural Addresses
 
How to think like a startup
How to think like a startupHow to think like a startup
How to think like a startup
 
Teaching Students with Emojis, Emoticons, & Textspeak
Teaching Students with Emojis, Emoticons, & TextspeakTeaching Students with Emojis, Emoticons, & Textspeak
Teaching Students with Emojis, Emoticons, & Textspeak
 
32 Ways a Digital Marketing Consultant Can Help Grow Your Business
32 Ways a Digital Marketing Consultant Can Help Grow Your Business32 Ways a Digital Marketing Consultant Can Help Grow Your Business
32 Ways a Digital Marketing Consultant Can Help Grow Your Business
 
Study: The Future of VR, AR and Self-Driving Cars
Study: The Future of VR, AR and Self-Driving CarsStudy: The Future of VR, AR and Self-Driving Cars
Study: The Future of VR, AR and Self-Driving Cars
 
Hype vs. Reality: The AI Explainer
Hype vs. Reality: The AI ExplainerHype vs. Reality: The AI Explainer
Hype vs. Reality: The AI Explainer
 

Ähnlich wie Propulser votre architecture grâce aux mocks

eXtreme Programming [fr]
eXtreme Programming [fr]eXtreme Programming [fr]
eXtreme Programming [fr]Rémy Coutable
 
Agile Tour Nantes 2014 - Tdd, le meilleur moyen d'écrire du code testable
Agile Tour Nantes 2014 - Tdd, le meilleur moyen d'écrire du code testableAgile Tour Nantes 2014 - Tdd, le meilleur moyen d'écrire du code testable
Agile Tour Nantes 2014 - Tdd, le meilleur moyen d'écrire du code testableAssociation Agile Nantes
 
Tester du legacy code, mission impossible ?
Tester du legacy code, mission impossible ?Tester du legacy code, mission impossible ?
Tester du legacy code, mission impossible ?CGI Québec Formation
 
Retour d'expérience TAA - 2011/03/29
Retour d'expérience TAA - 2011/03/29Retour d'expérience TAA - 2011/03/29
Retour d'expérience TAA - 2011/03/29Elapse Technologies
 
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 - TDDXavier NOPRE
 
TDD/BDD: ou comment j’ai appris à ne plus m’en faire avec les tests (et la doc)
TDD/BDD: ou comment j’ai appris à ne plus m’en faire avec les tests (et la doc)TDD/BDD: ou comment j’ai appris à ne plus m’en faire avec les tests (et la doc)
TDD/BDD: ou comment j’ai appris à ne plus m’en faire avec les tests (et la doc)French Scrum User Group
 
Bbd dans le flow nov.2012
Bbd dans le flow nov.2012Bbd dans le flow nov.2012
Bbd dans le flow nov.2012guillaumeagilr
 
Introduction a l_agilite_iut_lyon_1_decembre2011
Introduction a l_agilite_iut_lyon_1_decembre2011Introduction a l_agilite_iut_lyon_1_decembre2011
Introduction a l_agilite_iut_lyon_1_decembre2011agnes_crepet
 
Présentation Alt.net - Tests unitaires automatisés
Présentation Alt.net - Tests unitaires automatisésPrésentation Alt.net - Tests unitaires automatisés
Présentation Alt.net - Tests unitaires automatisésDjamel Zouaoui
 
TDD avec ou sans mock
TDD avec ou sans mockTDD avec ou sans mock
TDD avec ou sans mockYannick Ameur
 
Cocoaheads Paris Nombembre Test unitaires
Cocoaheads Paris Nombembre Test unitairesCocoaheads Paris Nombembre Test unitaires
Cocoaheads Paris Nombembre Test unitairesCocoaHeads France
 
CocoaHeads Rennes #4 : Tests automatisés sur iOS
CocoaHeads Rennes #4 : Tests automatisés sur iOSCocoaHeads Rennes #4 : Tests automatisés sur iOS
CocoaHeads Rennes #4 : Tests automatisés sur iOSCocoaHeadsRNS
 
Automatisation des tests - objectifs et concepts - partie 2
Automatisation des tests  - objectifs et concepts - partie 2Automatisation des tests  - objectifs et concepts - partie 2
Automatisation des tests - objectifs et concepts - partie 2Christophe Rochefolle
 
Mockito - Design + tests par Brice Duteil
Mockito - Design + tests par Brice DuteilMockito - Design + tests par Brice Duteil
Mockito - Design + tests par Brice DuteilNormandy JUG
 
Les Code Reviews : le guide de survie
Les Code Reviews : le guide de survieLes Code Reviews : le guide de survie
Les Code Reviews : le guide de survieNicolas VERINAUD
 
Tout ce que vous avez voulu savoir sur les Doublures sans jamais oser le dema...
Tout ce que vous avez voulu savoir sur les Doublures sans jamais oser le dema...Tout ce que vous avez voulu savoir sur les Doublures sans jamais oser le dema...
Tout ce que vous avez voulu savoir sur les Doublures sans jamais oser le dema...Guillaume Saint Etienne
 
Qualité logicielle
Qualité logicielleQualité logicielle
Qualité logiciellecyrilgandon
 
Pratiques de développement pour équipes Agile
Pratiques de développement pour équipes AgilePratiques de développement pour équipes Agile
Pratiques de développement pour équipes AgileAgile Tour 2009 Québec
 

Ähnlich wie Propulser votre architecture grâce aux mocks (20)

Tour d'horizon des tests
Tour d'horizon des testsTour d'horizon des tests
Tour d'horizon des tests
 
eXtreme Programming [fr]
eXtreme Programming [fr]eXtreme Programming [fr]
eXtreme Programming [fr]
 
Agile Tour Nantes 2014 - Tdd, le meilleur moyen d'écrire du code testable
Agile Tour Nantes 2014 - Tdd, le meilleur moyen d'écrire du code testableAgile Tour Nantes 2014 - Tdd, le meilleur moyen d'écrire du code testable
Agile Tour Nantes 2014 - Tdd, le meilleur moyen d'écrire du code testable
 
Tester du legacy code, mission impossible ?
Tester du legacy code, mission impossible ?Tester du legacy code, mission impossible ?
Tester du legacy code, mission impossible ?
 
Retour d'expérience TAA - 2011/03/29
Retour d'expérience TAA - 2011/03/29Retour d'expérience TAA - 2011/03/29
Retour d'expérience TAA - 2011/03/29
 
Mockito Chti JUG
Mockito Chti JUGMockito Chti JUG
Mockito Chti JUG
 
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
 
TDD/BDD: ou comment j’ai appris à ne plus m’en faire avec les tests (et la doc)
TDD/BDD: ou comment j’ai appris à ne plus m’en faire avec les tests (et la doc)TDD/BDD: ou comment j’ai appris à ne plus m’en faire avec les tests (et la doc)
TDD/BDD: ou comment j’ai appris à ne plus m’en faire avec les tests (et la doc)
 
Bbd dans le flow nov.2012
Bbd dans le flow nov.2012Bbd dans le flow nov.2012
Bbd dans le flow nov.2012
 
Introduction a l_agilite_iut_lyon_1_decembre2011
Introduction a l_agilite_iut_lyon_1_decembre2011Introduction a l_agilite_iut_lyon_1_decembre2011
Introduction a l_agilite_iut_lyon_1_decembre2011
 
Présentation Alt.net - Tests unitaires automatisés
Présentation Alt.net - Tests unitaires automatisésPrésentation Alt.net - Tests unitaires automatisés
Présentation Alt.net - Tests unitaires automatisés
 
TDD avec ou sans mock
TDD avec ou sans mockTDD avec ou sans mock
TDD avec ou sans mock
 
Cocoaheads Paris Nombembre Test unitaires
Cocoaheads Paris Nombembre Test unitairesCocoaheads Paris Nombembre Test unitaires
Cocoaheads Paris Nombembre Test unitaires
 
CocoaHeads Rennes #4 : Tests automatisés sur iOS
CocoaHeads Rennes #4 : Tests automatisés sur iOSCocoaHeads Rennes #4 : Tests automatisés sur iOS
CocoaHeads Rennes #4 : Tests automatisés sur iOS
 
Automatisation des tests - objectifs et concepts - partie 2
Automatisation des tests  - objectifs et concepts - partie 2Automatisation des tests  - objectifs et concepts - partie 2
Automatisation des tests - objectifs et concepts - partie 2
 
Mockito - Design + tests par Brice Duteil
Mockito - Design + tests par Brice DuteilMockito - Design + tests par Brice Duteil
Mockito - Design + tests par Brice Duteil
 
Les Code Reviews : le guide de survie
Les Code Reviews : le guide de survieLes Code Reviews : le guide de survie
Les Code Reviews : le guide de survie
 
Tout ce que vous avez voulu savoir sur les Doublures sans jamais oser le dema...
Tout ce que vous avez voulu savoir sur les Doublures sans jamais oser le dema...Tout ce que vous avez voulu savoir sur les Doublures sans jamais oser le dema...
Tout ce que vous avez voulu savoir sur les Doublures sans jamais oser le dema...
 
Qualité logicielle
Qualité logicielleQualité logicielle
Qualité logicielle
 
Pratiques de développement pour équipes Agile
Pratiques de développement pour équipes AgilePratiques de développement pour équipes Agile
Pratiques de développement pour équipes Agile
 

Propulser votre architecture grâce aux mocks

  • 1. Propulsez  votre  architecture   grâce  aux  mocks   Confoo  2012   Montréal,  Québec,  Canada   2  mars  2012  
  • 2. Félix-­‐Antoine  Bourbonnais    Ing.  jr,  PSM-­‐I   !   Formateur  et  Coach  Agile   !   Enseignement  et  formaKons     o  TDD,  Réusinage,  OO  avancé,     AOP,  tests,  Scrum   !   Recherches     o  AOP,  agilité,  tests  et  mocks   !   Développeur     @Uourbonnais   o  Java  et  Python  (principalement)   2
  • 3. Réchauffement…   Quelles  sont  vos   aXentes?   Qui  fait  du  TDD?   Qui  uKlise  des  Mocks?   3
  • 5. J’uKlise  déjà  des  mocks!   On  va  parler  des  mocks  pour  piloter  la   découverte  du  design!   Image: graur codrin / FreeDigitalPhotos.net
  • 7. Plusieurs  types  de  tests   IntégraKon   Bout-­‐en-­‐ AcceptaKon   bout   Système   Unitaire   …   Images: Renjith Krishnan, Salvatore Vuono, Jscreationzs, Photostock, Posterize / FreeDigitalPhotos.net
  • 8. Tests  unitaires   But:  tester  les  modules  en  isola*on.  
  • 10. onctionnement tème FoncKonnement   10
  • 13. UKlisaKons   Piloter  (simuler  un  cas)   •  Simuler  un  cas  précis  dans  un  objet  uKlisé  par  l’objet  testé.     •  Exemple:     Simuler  une  excepKon  lancée.   Vérifier  un  comportement   •  Vérifier  que  l’objet  testé  a  eu  l’effet  désiré  sur  un  autre  objet.     •  Exemple:   Vérifier  que  la  méthode  a  été  appelée  sur  un  autre  objet.   13
  • 15. Cycle  du  TDD   Écrire  un   1   On  passe  à  la  phase   test  qui   «  VERTE  »  dès  qu’on  a  un   échoue   test  qui  échoue.   Erreur  de  compilateur   =  «  échec  ».   Faire   1   Réusiner   passer  le   test   2   On  passe  à  la  phase  «  Réusinage  »   dès  que  le  test  passe.   15
  • 16. Pourquoi  faire  du  TDD   La  peur  du  changement…   Peur  =  î  maintenabilité   Image:  David  CasKllo  Dominici  /  FreeDigitalPhotos.net   16
  • 17. Focaliser  sur  le  «  QUOI  »   Se  placer  en  posiKon  d’uKlisateur  du  code   Se  concentrer  sur  le  «  QUOI  »   «  Instead  of  just  using  tesKng  to  verify  our  work  aker  it’s  done,  TDD  turns   tesKng  into  a  design  ac*vity.  [1]  »   «  We  use  the  tests  to  clarify  our  ideas  about  what  we  want  the   code  to  do.  [1]»       [1]  Steve  Freeman  et  Nat  Pryce.  Growing  Object-­‐Oriented  So2ware,  Guided  by  Tests.  Addison-­‐ Wesley  Professional,  1  ediKon,  Octobre  2009.     17
  • 18. TDD  et  architecture   !   Favorise  l’écriture  de  code  testable   !   Offre  une  rétroacKon  concernant  la  facilité   d’uKlisaKon  du  «  design  »   !   Favorise  l’écriture  de  code  faiblement  couplé   !   Favorise  l’écriture  de  code  réuKlisable   !   Favorise  l’évoluKon  de  l’architecture  et  la   découverte  progressive   o  Colle  à  la  réalité  et  aux  besoins  présents  
  • 20. Messages  et  collaboraKon   Classe   C   Classe   B   Classe   Classe   D   A   Classe   Classe   E   F   UI   Domaine   Infrastructure   Collabora*on  des  objets  à  fonc*onnalité    
  • 21. Le  «  Tell  don’t  Ask  »   Image: renjith krishnan et jscreationzs / FreeDigitalPhotos.net
  • 22. Pourquoi  le  «  Tell  don’t  ask  »   !   Cacher  le  «  comment  »   !   Limiter  l’effet  des  modificaKons  à  la  logique   (algorithme)   !   Éviter  les  «  trains  »  d’appels   !   Réduire  la  duplicaKon   !   Laisser  les  objets  «  s’occuper  de  leurs  oignons  »   !   Éviter  les  «  domaines  anémiques  »  
  • 23. Un  objet  est  une  boîte  noire   SKmulus   RécepKon  d’un  message   Envoi  d’un  message  à   un  collaborateur   Effet   Classe   Envoi  d’un  message  à   un  collaborateur   Effet   Retour  d’une  réponse  
  • 24. Le  design  et  le   TDD  «  CLASSIQUE  »   Image: posterize / FreeDigitalPhotos.net
  • 25. TDD  classique   Centré  sur  l’état  et  le  résultat  final.   Image: nuchylee / FreeDigitalPhotos.net
  • 26. TDD  classique   ExtracKon  des  types   Classe   Division   P   Classe   Classe   P   R1   Mock   R1   PTest   PTest   R1Test  
  • 27. Comment   PILOTER  SON  DESIGN  AVEC  DES   MOCKS?   Image: jscreationzs / FreeDigitalPhotos.net
  • 28. TDD  piloté  par  les  Mocks   Tirer  à  parKr  des  besoins     B   Capacité  de  B  et  C     A   Besoins  de  A   (services)   C   Tirer  les  types  à  parKr  de  la  demande  
  • 29. TDD  piloté  par  les  Mocks   IdenKfier  les  rôles  requis  (dépendances)  par  le  module  testé   Viewer <<Interface>>   <<Interface>>   Test   Viewer   ?  Loader   FileReader   Mock   Mock   PNGLoader Classe   Test   ?   PNGLoader   Découverte  pas  à  pas   Tirer  les  types  à  parKr  de  la  demande  
  • 30. TDD  piloté  par  les  Mocks   Arriver  à  desKnaKon…   Test   <<Interface>>   <<Interface>>   acceptaKon   Viewer   Loader   FileReader   UTest   Utest   Classe   Fake   Utest   PNGLoader   FileReader   Terminé  
  • 31. ÉvoluKon  du  design   Réusinage   •  InteracKons   •  Signatures   •  …  
  • 32. En  résumé   1.  Établir  quelle  est  la  responsabilité  de  l’objet  testé   2.  De  quoi  est-­‐ce  que  l’objet  a  besoin  pour  réaliser  son  travail   en  terme  de  rôles?   3.  Quels  effets  aura  ce  comportement  sur  l’environnement   immédiat?   banque.acheter(carte, marchand, montant) --> carte.crediter(montant) --> marchand.debiter(montant)
  • 33. Avantages   !   Favorise  le  respect  du  «  Tell  don’t  ask  »   !   Permet  de  définir  les  interface  à  parKr  des  besoins   o  Force  à  se  concentrer  sur  le  «  Quoi  »  avant  le   «  Comment  »   o  On  définit  d’abord  le  «  Quoi  »  à  parKr  des  tests  des  autres   !   Retarde  les  décisions  d’implémentaKons   !   Favorise  un  design  testable   !   L’isolaKon  favorise  le  réusinage   33
  • 34. Ce  que  l’on  obKent  généralement   !   Hiérarchie  mince   !   Design  basé  sur  les  rôles   !   AbstracKon  (sous  la  forme  de  rôles)   !   Nommage  en  posiKon  d’uKlisateur   o  Méthodes  et  types   !   Meilleur  respect  du  «  Tell  don’t  ask  »   !   Parfois  moins  de  temps  en  déverminage  pour   trouver  le  problème  lorsqu’un  test  ne  passe  plus  
  • 35. Désavantages   !   Ne  permet  pas  d’établir  le  «  comment  »   !   Peut  résulter  en  une  trop  grande  séparaKon   o  Trop  de  classes/interfaces   !   FoncKonne  moins  bien  sur  les  systèmes  basés  sur  les   données   35
  • 36. Approche  «  top-­‐down  »   UI   Réusinage   Domaine   Infrastructure   TDD   DuplicaKon?   Image: Simon Howden / FreeDigitalPhotos.net
  • 37. Piloter  le  design  par  les  mocks   MyLibraryView   LibraryRealTime !   Composer  à  parKr  des   View   …Presenter   …Presenter   interacKons   UI   !   PosiKon  «  uKlisateur  »   Mock   OnlineLibrary   Book   !   ExploraKons  successives   (étape  par  étape)   Mock   LibraryProvider   !   Reporter  les  décisions   Domaine   d’implémentaKons   OnlineService   !   Explorer  sans  trop  se   compromeXre   Infrastructure   Image: Simon Howden / FreeDigitalPhotos.net
  • 38. Favoriser  la  détecKon  des  mauvaises   odeurs...   !   Beaucoup  de  Mocks   o  Couplage…   !   Difficile  d’injecter  les  Mocks   o  Pourquoi  les  dépendances  ne  sont  pas  passées?   o  Patron  «  Factory  »?   !   Paramètres  mulKples  (constructeurs  et  méthodes)   o  ExtracKon  d’un  concept?   !   Incapable  de  trouver  un  nom   !   Etc.  
  • 39. PrésentaKon  de  la   DÉMONSTRATION  
  • 40. Complémentarité   !   CeXe  technique  doit   être  combinée!   !   Alterner  entre  les   techniques  apporte   généralement  de  bons   résultats.       !   Choisir  selon  ce  que  l’on   veut  découvrir  (design   ou  algorithme)   40
  • 41. Téléchargement   Évaluez  la  présentaKon  sur:   hXps://joind.in/6106   Téléchargez  les  diaposiKves  complètes  sur   developpementagile.com   Image: rajcreationzs / FreeDigitalPhotos.ne 41
  • 44. Références   !   Steve  Freeman,  Tim  Mackinnon,  Nat  Pryce,  et  Joe  Walnes.     Mock  roles,  Not  objects.  p.  236–246.  OOPSLA    ’04.     Vancouver,  BC,  Canada,  ACM,  2004.   !   Nat  Pryce,  et  Steve  Freeman,  InfoQ:  Mock  Roles  Not  Object  States  .   QCon  London  2007   hXp://www.infoq.com/presentaKons/Mock-­‐Objects-­‐Nat-­‐Pryce-­‐ Steve-­‐Freeman   !   MarKn  Fowler,  Mocks  Aren’t  Stubs,  2  janvier  2007.     [Résumé  des  approches]   hXp://marKnfowler.com/arKcles/mocksArentStubs.html  
  • 45. Références   !   Steve  Freeman,  Sustainable  Test-­‐Driven  Development.  QCon  San  Francisco   2009.     hXp://www.infoq.com/presentaKons/Sustainable-­‐Test-­‐Driven-­‐ Development   ! Codemanship  presents...  Classic  TDD  vs.  London  School,  2011.    [CriKqué]   hXp://www.youtube.com/watch?v=AUE155LISV4   !   Michael  Feathers  et  Steve  Freeman.  Michael  Feathers  and  Steve  Freeman   on  Design,  InfoQ  at  QCon  San  Francisco  2009   hXp://www.infoq.com/interviews/feathers-­‐freeman-­‐design   !   Discussion  –  «  Classic  TDD  or  «  London  School  »  -­‐  any  opinions/comments/ elaboraPon  on  Jason  Gorman’s  post?  »  GOOS  Mailinglist,  2011.     hXps://groups.google.com/d/topic/growing-­‐object-­‐oriented-­‐sokware/ dOmOIafFDcI/discussion