49
Propulsez votre architecture grâce au TDD et aux Mocks FÉLIX-ANTOINE BOURBONNAIS ING.JR, PSM, M.SC. Agile Montréal 12 mars 2014 nasa.gov

Propulsez votre architecture grâce au TDD et aux mocks · Propulsez votre architecture grâce au TDD et aux Mocks FÉLIX-ANTOINE BOURBONNAIS ING.JR, PSM, M.SC. Agile Montréal 12

  • Upload
    others

  • View
    5

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Propulsez votre architecture grâce au TDD et aux mocks · Propulsez votre architecture grâce au TDD et aux Mocks FÉLIX-ANTOINE BOURBONNAIS ING.JR, PSM, M.SC. Agile Montréal 12

Propulsez votre architecture grâce au TDD et aux Mocks

FÉLIX-ANTOINE BOURBONNAIS

ING.JR, PSM, M.SC.

Agile Montréal

12 mars 2014

nas

a.go

v

Page 2: Propulsez votre architecture grâce au TDD et aux mocks · Propulsez votre architecture grâce au TDD et aux Mocks FÉLIX-ANTOINE BOURBONNAIS ING.JR, PSM, M.SC. Agile Montréal 12

© 2

01

4 Elap

se Techn

olo

gies

Image de Eyesplashhttp://commons.wikimedia.org/wiki/File:Welkom_willkommen_Welcome_Bienvenue_Benvenuto.jpg

Page 3: Propulsez votre architecture grâce au TDD et aux mocks · Propulsez votre architecture grâce au TDD et aux Mocks FÉLIX-ANTOINE BOURBONNAIS ING.JR, PSM, M.SC. Agile Montréal 12

Félix-Antoine BourbonnaisIng. jr, PSM, M.Sc.

www.elapsetech.com

Formation – Accompagnement – Conseils

[email protected]

elapsetech.com/fab

@fbourbonnais

linkedin.com/in/fbourbonnais

Contact

Formateur et Coach Agile

Tests automatisés

TDDBDD et ATDD

Code propreQualité logicielle

Architecture AgileOrientation objet

Orientation aspect

Design testable et émergeant

ScrumAccompagnement d’équipesAgent de changement

Page 4: Propulsez votre architecture grâce au TDD et aux mocks · Propulsez votre architecture grâce au TDD et aux Mocks FÉLIX-ANTOINE BOURBONNAIS ING.JR, PSM, M.SC. Agile Montréal 12

© 2

01

4 Elap

se Techn

olo

gies

Avertissement

Cette présentation s’adresse principalement à un public ayant déjà

expérimenté le TDD mais aucune supervision n’est nécessaire pour en

profiter…

Page 5: Propulsez votre architecture grâce au TDD et aux mocks · Propulsez votre architecture grâce au TDD et aux Mocks FÉLIX-ANTOINE BOURBONNAIS ING.JR, PSM, M.SC. Agile Montréal 12

© 2

01

4 Elap

se Techn

olo

gies

Réchauffement…

Qui fait du TDD?

Qui utilise des Mocks?

Quelles sont vos attentes?

Images de Idea Go / freedigitalphotos.net et ameshng / Flickr.com

Page 6: Propulsez votre architecture grâce au TDD et aux mocks · Propulsez votre architecture grâce au TDD et aux Mocks FÉLIX-ANTOINE BOURBONNAIS ING.JR, PSM, M.SC. Agile Montréal 12

© 2

01

4 Elap

se Techn

olo

gies

DOUBLURES ET MOCKS

Rappel sur les

Page 7: Propulsez votre architecture grâce au TDD et aux mocks · Propulsez votre architecture grâce au TDD et aux Mocks FÉLIX-ANTOINE BOURBONNAIS ING.JR, PSM, M.SC. Agile Montréal 12

© 2

01

4 Elap

se Techn

olo

gies

Rappel: les tests unitaires

Page 8: Propulsez votre architecture grâce au TDD et aux mocks · Propulsez votre architecture grâce au TDD et aux Mocks FÉLIX-ANTOINE BOURBONNAIS ING.JR, PSM, M.SC. Agile Montréal 12

© 2

01

4 Elap

se Techn

olo

gies

Rappel: les Mocks

CUTTest

CUT

A

B

X

N

Page 9: Propulsez votre architecture grâce au TDD et aux mocks · Propulsez votre architecture grâce au TDD et aux Mocks FÉLIX-ANTOINE BOURBONNAIS ING.JR, PSM, M.SC. Agile Montréal 12

© 2

01

4 Elap

se Techn

olo

gies

Rappel: les mocks

CTest

C

A

B

X

N

Page 10: Propulsez votre architecture grâce au TDD et aux mocks · Propulsez votre architecture grâce au TDD et aux Mocks FÉLIX-ANTOINE BOURBONNAIS ING.JR, PSM, M.SC. Agile Montréal 12

© 2

01

4 Elap

se Techn

olo

gies

Rappel: les mocks

CTest

C

A’

B’

A’’

LanceIOException

Retourne[1]

Page 11: Propulsez votre architecture grâce au TDD et aux mocks · Propulsez votre architecture grâce au TDD et aux Mocks FÉLIX-ANTOINE BOURBONNAIS ING.JR, PSM, M.SC. Agile Montréal 12

© 2

01

4 Elap

se Techn

olo

gies

TDD

Rappels des fondements du

Page 12: Propulsez votre architecture grâce au TDD et aux mocks · Propulsez votre architecture grâce au TDD et aux Mocks FÉLIX-ANTOINE BOURBONNAIS ING.JR, PSM, M.SC. Agile Montréal 12

© 2

01

4 Elap

se Techn

olo

gies

Technique ou discipline?

Le TDD est une discipline

Page 13: Propulsez votre architecture grâce au TDD et aux mocks · Propulsez votre architecture grâce au TDD et aux Mocks FÉLIX-ANTOINE BOURBONNAIS ING.JR, PSM, M.SC. Agile Montréal 12

© 2

01

4 Elap

se Techn

olo

gies

Rappel: Le cycle du TDD

Écrire un test qui échoue

Faire passer le

testRéusiner

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 14: Propulsez votre architecture grâce au TDD et aux mocks · Propulsez votre architecture grâce au TDD et aux Mocks FÉLIX-ANTOINE BOURBONNAIS ING.JR, PSM, M.SC. Agile Montréal 12

© 2

01

4 Elap

se Techn

olo

gies

Shu-Ha-Ri

L’élève suit l’enseignement

d’un maître

SHU

Il apprend de d’autres

maîtres(écoles)

HA

Il suit et a sa propre pratique…

RI

Power de Jardson Araújo du The Noun ProjectKeikogi de Tiago Dos Reis Rodrigues duThe Noun Project

Page 15: Propulsez votre architecture grâce au TDD et aux mocks · Propulsez votre architecture grâce au TDD et aux Mocks FÉLIX-ANTOINE BOURBONNAIS ING.JR, PSM, M.SC. Agile Montréal 12

© 2

01

4 Elap

se Techn

olo

gies

TDD « CLASSIQUE »Le design et le

Image: posterize / FreeDigitalPhotos.net

Page 16: Propulsez votre architecture grâce au TDD et aux mocks · Propulsez votre architecture grâce au TDD et aux Mocks FÉLIX-ANTOINE BOURBONNAIS ING.JR, PSM, M.SC. Agile Montréal 12

© 2

01

4 Elap

se Techn

olo

gies

TDD classique

Centré sur l’étatet le résultat final

Image: nuchylee / FreeDigitalPhotos.net

Page 17: Propulsez votre architecture grâce au TDD et aux mocks · Propulsez votre architecture grâce au TDD et aux Mocks FÉLIX-ANTOINE BOURBONNAIS ING.JR, PSM, M.SC. Agile Montréal 12

© 2

01

4 Elap

se Techn

olo

gies

TDD classique

Extraction des types

ClasseP Classe

R1

PTest

Division

R1Test

ClasseP

PTest

MockR1

Page 18: Propulsez votre architecture grâce au TDD et aux mocks · Propulsez votre architecture grâce au TDD et aux Mocks FÉLIX-ANTOINE BOURBONNAIS ING.JR, PSM, M.SC. Agile Montréal 12

© 2

01

4 Elap

se Techn

olo

gies

TDD classique

En résumé

TDD Classique

Évolution du « design »

•Par division

•Extraction

Problèmes algorithmiques

•Traitement de données

•Calculs

Valide l’état

Page 19: Propulsez votre architecture grâce au TDD et aux mocks · Propulsez votre architecture grâce au TDD et aux Mocks FÉLIX-ANTOINE BOURBONNAIS ING.JR, PSM, M.SC. Agile Montréal 12

© 2

01

4 Elap

se Techn

olo

gies

L’ORIENTATION OBJET

Rappel de

Page 20: Propulsez votre architecture grâce au TDD et aux mocks · Propulsez votre architecture grâce au TDD et aux Mocks FÉLIX-ANTOINE BOURBONNAIS ING.JR, PSM, M.SC. Agile Montréal 12

© 2

01

4 Elap

se Techn

olo

gies

InfrastructureDomaineUI

Messages et collaboration

ClasseACtrl

Collaboration des objets fonctionnalité

ClasseB

ClasseC

IfaceE

ClassePersist

ClasseD

Page 21: Propulsez votre architecture grâce au TDD et aux mocks · Propulsez votre architecture grâce au TDD et aux Mocks FÉLIX-ANTOINE BOURBONNAIS ING.JR, PSM, M.SC. Agile Montréal 12

© 2

01

4 Elap

se Techn

olo

gies

Le « Tell don’t Ask »

getAmi(joe)

.getCorps()

.getJambe(Orient.GAUCHE)

.setPosition(

sol + 5,

centre + 20)

Image: renjith krishnan et jscreationzs / FreeDigitalPhotos.net

Hein !?!

Page 22: Propulsez votre architecture grâce au TDD et aux mocks · Propulsez votre architecture grâce au TDD et aux Mocks FÉLIX-ANTOINE BOURBONNAIS ING.JR, PSM, M.SC. Agile Montréal 12

© 2

01

4 Elap

se Techn

olo

gies

Pourquoi le « Tell don’t ask »

Cacher le « comment »

Limiter l’effet des

modifications

Limiter l’effet d’avalanche

Réduire la duplication

Laisser les objets « s’occuper de leurs oignons »

Éviter les « domaines

anémiques »

Page 23: Propulsez votre architecture grâce au TDD et aux mocks · Propulsez votre architecture grâce au TDD et aux Mocks FÉLIX-ANTOINE BOURBONNAIS ING.JR, PSM, M.SC. Agile Montréal 12

© 2

01

4 Elap

se Techn

olo

gies

Stim

ulu

sUn 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 24: Propulsez votre architecture grâce au TDD et aux mocks · Propulsez votre architecture grâce au TDD et aux Mocks FÉLIX-ANTOINE BOURBONNAIS ING.JR, PSM, M.SC. Agile Montréal 12

© 2

01

4 Elap

se Techn

olo

gies

PILOTER SON DESIGN AVEC DES MOCKS?Comment

Image: jscreationzs / FreeDigitalPhotos.net

Page 25: Propulsez votre architecture grâce au TDD et aux mocks · Propulsez votre architecture grâce au TDD et aux Mocks FÉLIX-ANTOINE BOURBONNAIS ING.JR, PSM, M.SC. Agile Montréal 12

© 2

01

4 Elap

se Techn

olo

gies

Le TDD « Mockiste »

Centré sur les interactions et comportementsentre les objets considérant leur rôle

Page 26: Propulsez votre architecture grâce au TDD et aux mocks · Propulsez votre architecture grâce au TDD et aux Mocks FÉLIX-ANTOINE BOURBONNAIS ING.JR, PSM, M.SC. Agile Montréal 12

© 2

01

4 Elap

se Techn

olo

gies

Le TDD « Mockiste »

Utilise les Mocks comme pierre angulaire

Images: cooldesign/ freedigitalphotos.net

Page 27: Propulsez votre architecture grâce au TDD et aux mocks · Propulsez votre architecture grâce au TDD et aux Mocks FÉLIX-ANTOINE BOURBONNAIS ING.JR, PSM, M.SC. Agile Montréal 12

© 2

01

4 Elap

se Techn

olo

gies

TDD « Mockiste »

Extraction des types

Découverte des types par les MocksDéfinition de l’interface à partir des besoins établis dans les autres tests

Page 28: Propulsez votre architecture grâce au TDD et aux mocks · Propulsez votre architecture grâce au TDD et aux Mocks FÉLIX-ANTOINE BOURBONNAIS ING.JR, PSM, M.SC. Agile Montréal 12

© 2

01

4 Elap

se Techn

olo

gies

TDD piloté par les Mocks

Identifier les rôles

Viewer<<Interface>>

LoaderViewer

Test

Découverte pas à pas

ClassePNGLoader

PNGLoaderTest

<<Interface>>

FileReader

MockMock

?

?

Tirer les types à partir de la demande

Page 29: Propulsez votre architecture grâce au TDD et aux mocks · Propulsez votre architecture grâce au TDD et aux Mocks FÉLIX-ANTOINE BOURBONNAIS ING.JR, PSM, M.SC. Agile Montréal 12

© 2

01

4 Elap

se Techn

olo

gies

TDD piloté par les Mocks

Arriver à destination…

Testacceptation

Viewer

UTest

Terminé

<<Interface>>

Loader

ClassePNGLoader

Utest

<<Interface>>

FileReader

FakeFileReader

Utest

Page 30: Propulsez votre architecture grâce au TDD et aux mocks · Propulsez votre architecture grâce au TDD et aux Mocks FÉLIX-ANTOINE BOURBONNAIS ING.JR, PSM, M.SC. Agile Montréal 12

© 2

01

4 Elap

se Techn

olo

gies

En résumé

Quelle est la responsabilité de

l’objet testé ?

De quoi est-ce que l’objet a besoinpour réaliser son travail en terme de

rôles ?

Quels effets externes aura ce

comportement sur l’environnement immédiat?

Classe testée(CUT)

Responsabilité

A

Besoin de A (rôle)

B

Effet sur B

Page 31: Propulsez votre architecture grâce au TDD et aux mocks · Propulsez votre architecture grâce au TDD et aux Mocks FÉLIX-ANTOINE BOURBONNAIS ING.JR, PSM, M.SC. Agile Montréal 12

© 2

01

4 Elap

se Techn

olo

gies

Exemple

banque.acheter(carte, marchand, montant)

--> carte.crediter(montant)

--> marchand.debiter(montant)

Page 32: Propulsez votre architecture grâce au TDD et aux mocks · Propulsez votre architecture grâce au TDD et aux Mocks FÉLIX-ANTOINE BOURBONNAIS ING.JR, PSM, M.SC. Agile Montréal 12

© 2

01

4 Elap

se Techn

olo

gies

DÉMONSTRATIONPrésentation de la

Image: Stuart Miles / freedigitalphotos.net

Page 33: Propulsez votre architecture grâce au TDD et aux mocks · Propulsez votre architecture grâce au TDD et aux Mocks FÉLIX-ANTOINE BOURBONNAIS ING.JR, PSM, M.SC. Agile Montréal 12

© 2

01

4 Elap

se Techn

olo

gies

Démonstration

Soumissions à une conférence

#1 Soumission d’une présentation

En tant que soumissionnaireJe veux soumettre une présentation à une conférenceAfin qu’elle soit évaluée par le comité de sélection

Critères d’acceptation• Il est possible de soumettre une présentation• La présentation est accumulée en attendant d’être évaluée par le comité• Le comité est avisé qu’une nouvelle présentation doit être évaluée

Page 34: Propulsez votre architecture grâce au TDD et aux mocks · Propulsez votre architecture grâce au TDD et aux Mocks FÉLIX-ANTOINE BOURBONNAIS ING.JR, PSM, M.SC. Agile Montréal 12

© 2

01

4 Elap

se Techn

olo

gies

CONCLUSION et RÉSUMÉ

Page 35: Propulsez votre architecture grâce au TDD et aux mocks · Propulsez votre architecture grâce au TDD et aux Mocks FÉLIX-ANTOINE BOURBONNAIS ING.JR, PSM, M.SC. Agile Montréal 12

© 2

01

4 Elap

se Techn

olo

gies

Approche « outside-in »

Image: Simon Howden / FreeDigitalPhotos.net

UI

Domaine

Infrastructure

Duplication?

Réusinage

TDD

Page 36: Propulsez votre architecture grâce au TDD et aux mocks · Propulsez votre architecture grâce au TDD et aux Mocks FÉLIX-ANTOINE BOURBONNAIS ING.JR, PSM, M.SC. Agile Montréal 12

© 2

01

4 Elap

se Techn

olo

gies

Piloter le design par les mocks

Image: Simon Howden / FreeDigitalPhotos.net

UI

Domaine

Infrastructure

MyLibraryView

…Presenter

OnlineLibrary Book

LibraryProvider

LibraryRealTimeView

…Presenter

OnlineService

Mock

Mock

Composer à partir des interactions

Position « utilisateur »

Explorations successives(étape par étape)

Reporter les décisionsd’implémentations

Explorer sans trop se compromettre

Page 37: Propulsez votre architecture grâce au TDD et aux mocks · Propulsez votre architecture grâce au TDD et aux Mocks FÉLIX-ANTOINE BOURBONNAIS ING.JR, PSM, M.SC. Agile Montréal 12

© 2

01

4 Elap

se Techn

olo

gies

Avantages de l’approche mockiste

Favorise le« Tell don’t ask »

Moins de « trains d’appels »

(Demeter)

Retarde les décisions d’implémentations

Favorise un design testable

Requiert moins d’objets

implémentés pour avoir une rétroaction

Classe fautive ciblée en cas d’échec

Page 38: Propulsez votre architecture grâce au TDD et aux mocks · Propulsez votre architecture grâce au TDD et aux Mocks FÉLIX-ANTOINE BOURBONNAIS ING.JR, PSM, M.SC. Agile Montréal 12

© 2

01

4 Elap

se Techn

olo

gies

Avantages de l’approche mockiste

Développement piloté par les besoins (need-driven)

Définir les interfaces à partir des appelants

Focalise sur le « Quoi » avant le « Comment »

Page 39: Propulsez votre architecture grâce au TDD et aux mocks · Propulsez votre architecture grâce au TDD et aux Mocks FÉLIX-ANTOINE BOURBONNAIS ING.JR, PSM, M.SC. Agile Montréal 12

© 2

01

4 Elap

se Techn

olo

gies

Ce que l’on obtient généralement

Hiérarchie minceDesign basé sur

les rôlesAbstraction

(rôles)

Nommage clair pour l’appelant

Possible meilleur respect des

principes OO

Page 40: Propulsez votre architecture grâce au TDD et aux mocks · Propulsez votre architecture grâce au TDD et aux Mocks FÉLIX-ANTOINE BOURBONNAIS ING.JR, PSM, M.SC. Agile Montréal 12

© 2

01

4 Elap

se Techn

olo

gies

Désavantages de l’approche mockiste

Couplage du test avec la signature

des collaborateursFragiliser les tests

Fonctionne mal avec des

problèmes algorithmiques

Peut générer beaucoup de

Mocks et d’interfaces

Manquer de tests intégrés

(pyramide)

Page 41: Propulsez votre architecture grâce au TDD et aux mocks · Propulsez votre architecture grâce au TDD et aux Mocks FÉLIX-ANTOINE BOURBONNAIS ING.JR, PSM, M.SC. Agile Montréal 12

© 2

01

4 Elap

se Techn

olo

gies

La bonne question…

Que voulez-vous maximiser ?

Page 42: Propulsez votre architecture grâce au TDD et aux mocks · Propulsez votre architecture grâce au TDD et aux Mocks FÉLIX-ANTOINE BOURBONNAIS ING.JR, PSM, M.SC. Agile Montréal 12

© 2

01

4 Elap

se Techn

olo

gies

Complémentarité

Cette école 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

Page 43: Propulsez votre architecture grâce au TDD et aux mocks · Propulsez votre architecture grâce au TDD et aux Mocks FÉLIX-ANTOINE BOURBONNAIS ING.JR, PSM, M.SC. Agile Montréal 12

© 2

01

4 Elap

se Techn

olo

gies

Rappel: TDD et architecture

+ Code testable

+ de « design »

simple?

- de code couplé

+ de code réutilisable

+ d’architecture émergeante

Page 44: Propulsez votre architecture grâce au TDD et aux mocks · Propulsez votre architecture grâce au TDD et aux Mocks FÉLIX-ANTOINE BOURBONNAIS ING.JR, PSM, M.SC. Agile Montréal 12

© 2

01

4 Elap

se Techn

olo

gies

Pour aller plus loin…

Image de anamkkml/ FreeDigitalPhotos.net et github.com

Code sourcehttps://github.com/fbourbonnais/propulsez-architecture-tdd-mocks

Diapositiveshttp://developpementagile.com/architecture-mocks-tdd

Les tests en agilités

TDD pour gestionnaires

Introduction à l’ATDD et BDD

TDD avancé

TDD

Concepts OO avancés

Nos formations sur le sujet

www.elapsetech.com/formation

Page 45: Propulsez votre architecture grâce au TDD et aux mocks · Propulsez votre architecture grâce au TDD et aux Mocks FÉLIX-ANTOINE BOURBONNAIS ING.JR, PSM, M.SC. Agile Montréal 12

© 2

01

4 Elap

se Techn

olo

gies

Mer

ciMon nom

Félix-Antoine Bourbonnais

Notre bloguedeveloppementagile.com

Notre siteelapsetech.com

Mon Twitter@fbourbonnais

Mon LinkedInlinkedin.com/in/fbourbonnais/fr

Page 46: Propulsez votre architecture grâce au TDD et aux mocks · Propulsez votre architecture grâce au TDD et aux Mocks FÉLIX-ANTOINE BOURBONNAIS ING.JR, PSM, M.SC. Agile Montréal 12

© 2

01

4 Elap

se Techn

olo

gies

Elapse Technologies

Formation

Accompagnement (coaching)

Mentorat virtuel

Conseils et diagnostics

Agilité (Scrum, Lean, XP)

Qualité et tests automatisés

Architecture Agile

Pratiques de développement

Votre allié en développement logiciel Agile

Page 47: Propulsez votre architecture grâce au TDD et aux mocks · Propulsez votre architecture grâce au TDD et aux Mocks FÉLIX-ANTOINE BOURBONNAIS ING.JR, PSM, M.SC. Agile Montréal 12

© 2

01

4 Elap

se Techn

olo

gies

Références

Page 48: Propulsez votre architecture grâce au TDD et aux mocks · Propulsez votre architecture grâce au TDD et aux Mocks FÉLIX-ANTOINE BOURBONNAIS ING.JR, PSM, M.SC. Agile Montréal 12

© 2

01

4 Elap

se Techn

olo

gies

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 2007http://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 49: Propulsez votre architecture grâce au TDD et aux mocks · Propulsez votre architecture grâce au TDD et aux Mocks FÉLIX-ANTOINE BOURBONNAIS ING.JR, PSM, M.SC. Agile Montréal 12

© 2

01

4 Elap

se Techn

olo

gies

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 2009http://www.infoq.com/interviews/feathers-freeman-design

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