propulser votre architecture grâce aux mocks

45
Propulsez votre architecture grâce aux mocks Confoo 2012 Montréal, Québec, Canada 2 mars 2012

Upload: elapse-technologies

Post on 26-May-2015

2.245 views

Category:

Technology


0 download

DESCRIPTION

Présentation de Félix-Antoine Bourbonnais expliquant comment les mocks peuvent piloter votre design.

TRANSCRIPT

Page 1: Propulser votre architecture grâce aux mocks

Propulsez  votre  architecture  grâce  aux  mocks  

Confoo  2012  

Montréal,  Québec,  Canada  

2  mars  2012  

Page 2: Propulser votre architecture grâce aux mocks

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    o  Java  et  Python  (principalement)  

2

@Uourbonnais  

Page 3: Propulser votre architecture grâce aux mocks

Réchauffement…  

Quelles  sont  vos  aXentes?  

Qui  fait  du  TDD?  

Qui  uKlise  des  Mocks?  

3

Page 4: Propulser votre architecture grâce aux mocks

Comment  découvrir  l’architecture?  

TDD  

Mocks  

Page 5: Propulser votre architecture grâce aux mocks

J’uKlise  déjà  des  mocks!  

Image: graur codrin / FreeDigitalPhotos.net

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

Page 6: Propulser votre architecture grâce aux mocks

TESTS  IntroducKon  aux  

Page 7: Propulser votre architecture grâce aux mocks

Plusieurs  types  de  tests  

Unitaire  

Système  

Bout-­‐en-­‐bout   AcceptaKon  

IntégraKon  

…  

Images: Renjith Krishnan, Salvatore Vuono, Jscreationzs, Photostock, Posterize / FreeDigitalPhotos.net

Page 8: Propulser votre architecture grâce aux mocks

Tests  unitaires  But:  tester  les  modules  en  isola*on.  

Page 9: Propulser votre architecture grâce aux mocks

DOUBLURES  ET  MOCKS  IntroducKon  aux  

Page 10: Propulser votre architecture grâce aux mocks

FoncKonnement  

Module 3 : Tests unitaires Techniques et outils ! Mocks

FonctionnementSystème

(c) 2008-2009 F.-A. Bourbonnais et G.-E. Legendre, (c) 2010 F.-A. Bourbonnais. Contrôle de la qualité et métriques du logiciel GLO-4002 Automne 2010 39 / 60

10

Page 11: Propulser votre architecture grâce aux mocks

FoncKonnement  

Module 3 : Tests unitaires Techniques et outils ! Mocks

FonctionnementIsoler

(c) 2008-2009 F.-A. Bourbonnais et G.-E. Legendre, (c) 2010 F.-A. Bourbonnais. Contrôle de la qualité et métriques du logiciel GLO-4002 Automne 2010 40 / 60

11

Page 12: Propulser votre architecture grâce aux mocks

FoncKonnement  

Module 3 : Tests unitaires Techniques et outils ! Mocks

FonctionnementMocks

(c) 2008-2009 F.-A. Bourbonnais et G.-E. Legendre, (c) 2010 F.-A. Bourbonnais. Contrôle de la qualité et métriques du logiciel GLO-4002 Automne 2010 41 / 60

12

Page 13: Propulser votre architecture grâce aux mocks

UKlisaKons  

•  Simuler  un  cas  précis  dans  un  objet  uKlisé  par  l’objet  testé.    

•  Exemple:    Simuler  une  excepKon  lancée.  

Piloter  (simuler  un  cas)  

•  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.  

Vérifier  un  comportement  

13

Page 14: Propulser votre architecture grâce aux mocks

TDD  IntroducKon  au  

Page 15: Propulser votre architecture grâce aux mocks

Cycle  du  TDD  

Écrire  un  test  qui  échoue  

Faire  passer  le  

test  Réusiner  

15

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

Erreur  de  compilateur  =  «  échec  ».  

1  

On  passe  à  la  phase  «  Réusinage  »  dès  que  le  test  passe.  

2  

1  

Page 16: Propulser votre architecture grâce aux mocks

Pourquoi  faire  du  TDD  

16

La  peur  du  changement…  

Image:  David  CasKllo  Dominici  /  FreeDigitalPhotos.net  

Peur  =  î  maintenabilité  

Page 17: Propulser votre architecture grâce aux mocks

Focaliser  sur  le  «  QUOI  »  

17

«  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]»    

 

Se  placer  en  posiKon  d’uKlisateur  du  code  

Se  concentrer  sur  le  «  QUOI  »  

[1]  Steve  Freeman  et  Nat  Pryce.  Growing  Object-­‐Oriented  So2ware,  Guided  by  Tests.  Addison-­‐Wesley  Professional,  1  ediKon,  Octobre  2009.    

Page 18: Propulser votre architecture grâce aux mocks

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  

Page 19: Propulser votre architecture grâce aux mocks

L’ORIENTATION  OBJET  Rappel  de  

Page 20: Propulser votre architecture grâce aux mocks

Infrastructure  Domaine  UI  

Messages  et  collaboraKon  

Classe  A  

Collabora*on  des  objets  à  fonc*onnalité    

Classe  B  

Classe  C  

Classe  E  

Classe  F  

Classe  D  

Page 21: Propulser votre architecture grâce aux mocks

Le  «  Tell  don’t  Ask  »  

Image: renjith krishnan et jscreationzs / FreeDigitalPhotos.net

Page 22: Propulser votre architecture grâce aux mocks

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  »  

Page 23: Propulser votre architecture grâce aux mocks

SKmulus  

Un  objet  est  une  boîte  noire  

Classe  

RécepKon  d’un  message  

Envoi  d’un  message  à  un  collaborateur  

Envoi  d’un  message  à  un  collaborateur  

Retour  d’une  réponse  

Effet  

Effet  

Page 24: Propulser votre architecture grâce aux mocks

TDD  «  CLASSIQUE  »  Le  design  et  le  

Image: posterize / FreeDigitalPhotos.net

Page 25: Propulser votre architecture grâce aux mocks

TDD  classique  

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

Image: nuchylee / FreeDigitalPhotos.net

Page 26: Propulser votre architecture grâce aux mocks

TDD  classique  ExtracKon  des  types  

Classe  P   Classe  

R1  

PTest  

Division  

R1Test  

Classe  P  

PTest  

Mock  R1  

Page 27: Propulser votre architecture grâce aux mocks

PILOTER  SON  DESIGN  AVEC  DES  MOCKS?  

Comment  

Image: jscreationzs / FreeDigitalPhotos.net

Page 28: Propulser votre architecture grâce aux mocks

TDD  piloté  par  les  Mocks  Tirer  à  parKr  des  besoins    

A  

Tirer  les  types  à  parKr  de  la  demande  

B  

C  

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

Page 29: Propulser votre architecture grâce aux mocks

TDD  piloté  par  les  Mocks  IdenKfier  les  rôles  requis  (dépendances)  par  le  module  testé  

Viewer  <<Interface>>  Loader  

ViewerTest  

Découverte  pas  à  pas  

Classe  PNGLoader  

PNGLoaderTest  

<<Interface>>  FileReader  

Mock   Mock  

?  

?  

Tirer  les  types  à  parKr  de  la  demande  

Page 30: Propulser votre architecture grâce aux mocks

TDD  piloté  par  les  Mocks  Arriver  à  desKnaKon…  

Test  acceptaKon   Viewer  

UTest  

Terminé  

<<Interface>>  Loader  

Classe  PNGLoader  

Utest  

<<Interface>>  FileReader  

Fake  FileReader  Utest  

Page 31: Propulser votre architecture grâce aux mocks

ÉvoluKon  du  design  

Réusinage  

•  InteracKons  •  Signatures  • …  

Page 32: Propulser votre architecture grâce aux mocks

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)

Page 33: Propulser votre architecture grâce aux mocks

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

Page 34: Propulser votre architecture grâce aux mocks

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  

Page 35: Propulser votre architecture grâce aux mocks

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

Page 36: Propulser votre architecture grâce aux mocks

Approche  «  top-­‐down  »  

UI  

Domaine  

Infrastructure  

Image: Simon Howden / FreeDigitalPhotos.net

DuplicaKon?  

Réusinage  

TDD  

Page 37: Propulser votre architecture grâce aux mocks

Piloter  le  design  par  les  mocks  

UI  

Domaine  

Infrastructure  

Image: Simon Howden / FreeDigitalPhotos.net

MyLibraryView  

…Presenter  

OnlineLibrary   Book  

LibraryProvider  

LibraryRealTimeView  

…Presenter  

OnlineService  

Mock  

Mock  

!   Composer  à  parKr  des  interacKons  

!   PosiKon  «  uKlisateur  »  !   ExploraKons  successives  

(étape  par  étape)  

!   Reporter  les  décisions  d’implémentaKons  

!   Explorer  sans  trop  se  compromeXre  

Page 38: Propulser votre architecture grâce aux mocks

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.  

Page 39: Propulser votre architecture grâce aux mocks

DÉMONSTRATION  PrésentaKon  de  la  

Page 40: Propulser votre architecture grâce aux mocks

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

Page 41: Propulser votre architecture grâce aux mocks

Téléchargement  

Image: rajcreationzs / FreeDigitalPhotos.ne 41

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

Évaluez  la  présentaKon  sur:  hXps://joind.in/6106  

Page 42: Propulser votre architecture grâce aux mocks

QUESTIONS  Période  de  

42

Page 43: Propulser votre architecture grâce aux mocks

Références  

Page 44: Propulser votre architecture grâce aux mocks

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  

Page 45: Propulser votre architecture grâce aux mocks

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