propulsez votre architecture grâce au tdd et aux mocks (agile tour québec 2012)

38
© 2012 Elapse Technologies Propulsez votre architecture grâce au TDD et aux mocks Agile Tour 2012 Québec, Canada 6 novembre 2012

Upload: elapse-technologies

Post on 27-Jun-2015

2.245 views

Category:

Technology


1 download

DESCRIPTION

Présentée à Agile Tour Québec 2012 (Agile Québec) le 6 novembre 2012. Nous savons depuis longtemps que les tests automatisés jouent un rôle important pour les équipes de développement Agile. Bien que la communauté ait découvert depuis un certain temps des pratiques permettant de maximiser l’émergence du design via le TDD, il est rare que l’on présente des astuces concrètes pour obtenir ce bénéfice. Cette présentation explique comment tirer le maximum de vos tests unitaires et des « mocks ». Nous présenterons, plus particulièrement, le style de TDD « mockiste ». Ainsi, nous verrons comment les mocks peuvent nous aider à concevoir une architecture ayant une meilleure conception orientée objet. La séance prendra la forme d'un tutoriel (démonstration). Niveau : Avancé Public cible : Développeurs et architectes

TRANSCRIPT

Page 1: Propulsez votre architecture grâce au TDD et aux Mocks  (Agile Tour Québec 2012)

© 2

01

2 Elap

se Techn

olo

gies

Propulsez votre architecture grâce au TDD et aux mocks

Agile Tour 2012 Québec, Canada

6 novembre 2012

Page 2: Propulsez votre architecture grâce au TDD et aux Mocks  (Agile Tour Québec 2012)

© 2

01

2 Elap

se Techn

olo

gies ©

20

12

Elapse Tech

no

logies

Félix-Antoine Bourbonnais Ing. jr, PSM-I

Formateur et Coach Agile

Spécialités

o Tests: TDD, ATDD, BDD, etc.

o Orientation objet avancée

o Réusinage et qualité (Clean Code)

o Agile Scrum

Développement

o Architecture logicielle agile

o Java, Python, etc.

2

@fbourbonnais

linkedin.com/in/fbourbonnais

http://bit.ly/Qut7Fm

Page 3: Propulsez votre architecture grâce au TDD et aux Mocks  (Agile Tour Québec 2012)

© 2

01

2 Elap

se Techn

olo

gies ©

20

12

Elapse Tech

no

logies

Réchauffement…

Quelles sont vos attentes?

Qui fait du TDD?

Qui utilise des Mocks?

3

Page 4: Propulsez votre architecture grâce au TDD et aux Mocks  (Agile Tour Québec 2012)

© 2

01

2 Elap

se Techn

olo

gies ©

20

12

Elapse Tech

no

logies

Comment découvrir l’architecture?

TDD

Mocks

Page 5: Propulsez votre architecture grâce au TDD et aux Mocks  (Agile Tour Québec 2012)

© 2

01

2 Elap

se Techn

olo

gies ©

20

12

Elapse Tech

no

logies DOUBLURES ET MOCKS

Introduction aux

Page 6: Propulsez votre architecture grâce au TDD et aux Mocks  (Agile Tour Québec 2012)

© 2

01

2 Elap

se Techn

olo

gies ©

20

12

Elapse Tech

no

logies

Tests unitaires But: tester les modules en isolation.

Page 7: Propulsez votre architecture grâce au TDD et aux Mocks  (Agile Tour Québec 2012)

© 2

01

2 Elap

se Techn

olo

gies ©

20

12

Elapse Tech

no

logies

Fonctionnement

7

CUTTest

CUT

A

B

X

N

Page 8: Propulsez votre architecture grâce au TDD et aux Mocks  (Agile Tour Québec 2012)

© 2

01

2 Elap

se Techn

olo

gies ©

20

12

Elapse Tech

no

logies

Fonctionnement

8

CUTTest

CUT

A

B

X

N

Page 9: Propulsez votre architecture grâce au TDD et aux Mocks  (Agile Tour Québec 2012)

© 2

01

2 Elap

se Techn

olo

gies ©

20

12

Elapse Tech

no

logies

Fonctionnement

9

CUTTest

CUT

A’

D’

A’’ A’’’

Retourne [1, 2, 3]

Lance IOException

Retourne [1]

Page 10: Propulsez votre architecture grâce au TDD et aux Mocks  (Agile Tour Québec 2012)

© 2

01

2 Elap

se Techn

olo

gies ©

20

12

Elapse Tech

no

logies TDD

Rappels des fondements du

Page 11: Propulsez votre architecture grâce au TDD et aux Mocks  (Agile Tour Québec 2012)

© 2

01

2 Elap

se Techn

olo

gies ©

20

12

Elapse Tech

no

logies

Cycle du TDD

Écrire un test qui échoue

Faire passer le

test Réusiner

11

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

3

Page 12: Propulsez votre architecture grâce au TDD et aux Mocks  (Agile Tour Québec 2012)

© 2

01

2 Elap

se Techn

olo

gies ©

20

12

Elapse Tech

no

logies

TDD « CLASSIQUE » Le design et le

Image: posterize / FreeDigitalPhotos.net

Page 13: Propulsez votre architecture grâce au TDD et aux Mocks  (Agile Tour Québec 2012)

© 2

01

2 Elap

se Techn

olo

gies ©

20

12

Elapse Tech

no

logies

TDD classique

Image: nuchylee / FreeDigitalPhotos.net

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

Page 14: Propulsez votre architecture grâce au TDD et aux Mocks  (Agile Tour Québec 2012)

© 2

01

2 Elap

se Techn

olo

gies ©

20

12

Elapse Tech

no

logies

TDD classique Extraction des types

Classe P Classe

R1

PTest

Division

R1Test

Classe P

PTest

Mock R1

Page 15: Propulsez votre architecture grâce au TDD et aux Mocks  (Agile Tour Québec 2012)

© 2

01

2 Elap

se Techn

olo

gies ©

20

12

Elapse Tech

no

logies

Le TDD classique

Centré sur la logique

Évolution du « design »

o Par division

o Découverte des types par extraction

Avantages – « Détails et logique»

o Construit des composants très modulaires et faiblement couplés

o Facilite la réutilisation

15

Page 16: Propulsez votre architecture grâce au TDD et aux Mocks  (Agile Tour Québec 2012)

© 2

01

2 Elap

se Techn

olo

gies ©

20

12

Elapse Tech

no

logies L’ORIENTATION OBJET

Rappel de

Page 17: Propulsez votre architecture grâce au TDD et aux Mocks  (Agile Tour Québec 2012)

© 2

01

2 Elap

se Techn

olo

gies ©

20

12

Elapse Tech

no

logies

Infrastructure Domaine UI

Messages et collaboration

Classe A

Collaboration des objets fonctionnalité

Classe B

Classe C

Classe E

Classe F

Classe D

Page 18: Propulsez votre architecture grâce au TDD et aux Mocks  (Agile Tour Québec 2012)

© 2

01

2 Elap

se Techn

olo

gies ©

20

12

Elapse Tech

no

logies

Le « Tell don’t Ask »

Image: renjith krishnan et jscreationzs / FreeDigitalPhotos.net

Page 19: Propulsez votre architecture grâce au TDD et aux Mocks  (Agile Tour Québec 2012)

© 2

01

2 Elap

se Techn

olo

gies ©

20

12

Elapse Tech

no

logies

Stim

ulu

s Un objet est une boîte noire

Classe

Réception d’un message

Envoi d’un message à un collaborateur

Envoi d’un message à un collaborateur

Retour d’une réponse

Effe

t

Effe

t

Page 20: Propulsez votre architecture grâce au TDD et aux Mocks  (Agile Tour Québec 2012)

© 2

01

2 Elap

se Techn

olo

gies ©

20

12

Elapse Tech

no

logies

PILOTER SON DESIGN AVEC DES MOCKS?

Comment

Image: jscreationzs / FreeDigitalPhotos.net

Page 21: Propulsez votre architecture grâce au TDD et aux Mocks  (Agile Tour Québec 2012)

© 2

01

2 Elap

se Techn

olo

gies ©

20

12

Elapse Tech

no

logies

Le TDD « Mockiste »

Centré sur les

o Interactions entre les objets

o Rôles et responsabilités

Utilise les Mocks comme pierre angulaire

Évolution du « design »

o Par le raffinement

o Découverte des types par les Mocks

o Définition de l’interface à partir des besoins établis dans les autres tests grâce aux mocks.

22

Page 22: Propulsez votre architecture grâce au TDD et aux Mocks  (Agile Tour Québec 2012)

© 2

01

2 Elap

se Techn

olo

gies ©

20

12

Elapse Tech

no

logies

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

Viewer <<Interface>>

Loader Viewer

Test

Découverte pas à pas

Classe PNGLoader

PNGLoaderTest

<<Interface>>

FileReader

Mock Mock

?

?

Tirer les types à partir de la demande

Page 23: Propulsez votre architecture grâce au TDD et aux Mocks  (Agile Tour Québec 2012)

© 2

01

2 Elap

se Techn

olo

gies ©

20

12

Elapse Tech

no

logies

TDD piloté par les Mocks Arriver à destination…

Test acceptation

Viewer

UTest

Terminé

<<Interface>>

Loader

Classe PNGLoader

Utest

<<Interface>>

FileReader

Fake FileReader

Utest

Page 24: Propulsez votre architecture grâce au TDD et aux Mocks  (Agile Tour Québec 2012)

© 2

01

2 Elap

se Techn

olo

gies ©

20

12

Elapse Tech

no

logies

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 25: Propulsez votre architecture grâce au TDD et aux Mocks  (Agile Tour Québec 2012)

© 2

01

2 Elap

se Techn

olo

gies ©

20

12

Elapse Tech

no

logies DÉMONSTRATION

Présentation de la

Page 26: Propulsez votre architecture grâce au TDD et aux Mocks  (Agile Tour Québec 2012)

© 2

01

2 Elap

se Techn

olo

gies ©

20

12

Elapse Tech

no

logies

Soumissions à une conférence

Système pour gérer les propositions soumises à une conférence

Story #1:

o Permettre la soumission d’une présentation

o Les présentations doivent être accumulées en attendant d’être évaluées par le comité

o Notifier le comité à la réception

Page 27: Propulsez votre architecture grâce au TDD et aux Mocks  (Agile Tour Québec 2012)

© 2

01

2 Elap

se Techn

olo

gies ©

20

12

Elapse Tech

no

logies

Approche « top-down »

Image: Simon Howden / FreeDigitalPhotos.net

UI

Domaine

Infrastructure

Duplication?

Réusinage

TDD

Page 28: Propulsez votre architecture grâce au TDD et aux Mocks  (Agile Tour Québec 2012)

© 2

01

2 Elap

se Techn

olo

gies ©

20

12

Elapse Tech

no

logies

Piloter le design par les mocks

Composer à partir des interactions

Position « utilisateur »

Explorations successives (étape par étape)

Reporter les décisions d’implémentations

Explorer sans trop se compromettre

Image: Simon Howden / FreeDigitalPhotos.net

UI

Domaine

Infrastructure

MyLibraryView

…Presenter

OnlineLibrary Book

LibraryProvider

LibraryRealTimeView

…Presenter

OnlineService

Mock

Mock

Page 29: Propulsez votre architecture grâce au TDD et aux Mocks  (Agile Tour Québec 2012)

© 2

01

2 Elap

se Techn

olo

gies ©

20

12

Elapse Tech

no

logies

Avantages

Favorise le respect du « Tell don’t ask »

Permet de définir les interfaces à partir des besoins

o Force à se concentrer sur le « Quoi » avant le « Comment »

o On définit d’abord le « Quoi » à partir des tests des autres

Retarde les décisions d’implémentations

Favorise un design testable

L’isolation favorise le réusinage

30

Page 30: Propulsez votre architecture grâce au TDD et aux Mocks  (Agile Tour Québec 2012)

© 2

01

2 Elap

se Techn

olo

gies ©

20

12

Elapse Tech

no

logies

Ce que l’on obtient généralement

Hiérarchie mince

Design basé sur les rôles

Abstraction (sous la forme de rôles)

Nommage en position d’utilisateur

o Méthodes et types

Meilleur respect du « Tell don’t ask »

Page 31: Propulsez votre architecture grâce au TDD et aux Mocks  (Agile Tour Québec 2012)

© 2

01

2 Elap

se Techn

olo

gies ©

20

12

Elapse Tech

no

logies

Désavantages

Moins adapté pour découvrir les détails (le « comment »)

Peut résulter en une trop grande séparation

o Trop de classes/interfaces

Fonctionne moins bien sur les systèmes basés sur les données et fortement algorithmiques

32

Page 32: Propulsez votre architecture grâce au TDD et aux Mocks  (Agile Tour Québec 2012)

© 2

01

2 Elap

se Techn

olo

gies ©

20

12

Elapse Tech

no

logies

Complémentarité

Cette 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)

33

Page 33: Propulsez votre architecture grâce au TDD et aux Mocks  (Agile Tour Québec 2012)

© 2

01

2 Elap

se Techn

olo

gies ©

20

12

Elapse Tech

no

logies

TDD et architecture

Favorise l’écriture de code testable

Offre une rétroaction concernant la facilité d’utilisation du « design »

Favorise l’écriture de code faiblement couplé

Favorise l’écriture de code réutilisable

Favorise l’évolution de l’architecture et la découverte progressive

o Colle à la réalité et aux besoins présents

Page 34: Propulsez votre architecture grâce au TDD et aux Mocks  (Agile Tour Québec 2012)

© 2

01

2 Elap

se Techn

olo

gies ©

20

12

Elapse Tech

no

logies

QUESTIONS Période de

35

Page 35: Propulsez votre architecture grâce au TDD et aux Mocks  (Agile Tour Québec 2012)

© 2

01

2 Elap

se Techn

olo

gies ©

20

12

Elapse Tech

no

logies

Téléchargement

Image: rajcreationzs / FreeDigitalPhotos.ne 36

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

Page 36: Propulsez votre architecture grâce au TDD et aux Mocks  (Agile Tour Québec 2012)

© 2

01

2 Elap

se Techn

olo

gies ©

20

12

Elapse Tech

no

logies

Références

Page 37: Propulsez votre architecture grâce au TDD et aux Mocks  (Agile Tour Québec 2012)

© 2

01

2 Elap

se Techn

olo

gies ©

20

12

Elapse Tech

no

logies

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 http://www.infoq.com/presentations/Mock-Objects-Nat-Pryce-Steve-Freeman

Martin Fowler, Mocks Aren’t Stubs, 2 janvier 2007. [Résumé des approches] http://martinfowler.com/articles/mocksArentStubs.html

Page 38: Propulsez votre architecture grâce au TDD et aux Mocks  (Agile Tour Québec 2012)

© 2

01

2 Elap

se Techn

olo

gies ©

20

12

Elapse Tech

no

logies

Références

Steve Freeman, Sustainable Test-Driven Development. QCon San Francisco 2009. http://www.infoq.com/presentations/Sustainable-Test-Driven-Development

Codemanship presents... Classic TDD vs. London School, 2011. [Critiqué] http://www.youtube.com/watch?v=AUE155LISV4

Michael Feathers et Steve Freeman. Michael Feathers and Steve Freeman on Design, InfoQ at QCon San Francisco 2009 http://www.infoq.com/interviews/feathers-freeman-design

Discussion – « Classic TDD or « London School » - any opinions/comments/elaboration on Jason Gorman’s post? » GOOS Mailinglist, 2011. https://groups.google.com/d/topic/growing-object-oriented-software/dOmOIafFDcI/discussion