49
© 2012 Elapse Technologies © 2013 Elapse Technologies © 2013 Elapse Technologies Propulsez votre architecture grâce au TDD et aux mocks Agile Québec 12 juin 2013 nasa.gov

Propulsez votre architecture grâce au TDD et aux mocks (Agile Québec 2013)

Embed Size (px)

DESCRIPTION

La communauté a découvert depuis un certain temps des pratiques permettant de maximiser l'émergence du design (architecture) via le TDD. Mais comment faire? Cette présentation explique comment tirer le maximum de vos tests unitaires et de vos «mocks» à l'aide de l'approche «Mockiste» (TDD de Londres). Nous verrons comment les mocks peuvent aider à concevoir une architecture ayant une meilleure conception orientée objet. La séance prendra la forme d'un tutoriel (démonstration) avancé en réalisant pas à pas un design simple parsemé de trucs et astuces. Code source: https://github.com/fbourbonnais/propulsez-architecture-tdd-mocks

Citation preview

Page 1: Propulsez votre architecture grâce au TDD et aux mocks (Agile Québec 2013)

© 2

01

2 Elap

se Techn

olo

gies

© 2013 Elapse Technologies© 2013 Elapse Technologies

Propulsez votre architecture grâce au

TDD et aux mocks

Agile Québec

12 juin 2013

nas

a.go

v

Page 2: Propulsez votre architecture grâce au TDD et aux mocks (Agile Québec 2013)

© 2

01

3 Elap

se Te

chn

olo

gies

© 2

01

3 Elap

se Te

chn

olo

gies

Avertissement

Cette présentation est de niveau « avancé »

Page 3: Propulsez votre architecture grâce au TDD et aux mocks (Agile Québec 2013)

© 2

01

3 Elap

se Te

chn

olo

gies

© 2

01

3 Elap

se Te

chn

olo

gies

Félix-Antoine Bourbonnais

Formateur & Coach Agile

o Tests automatisés: TDD, ATDD, BDD

o Orientation objet avancée

o Architecture agile

o Réusinage et qualité (Clean Code)

o Agile et Scrum

Concepteur de logiciels

o Pratiques de développement

o Java, Python, etc.

@fbourbonnais

linkedin.com/in/fbourbonnais/fr

elapsetech.com/fab

www.elapsetech.com

[email protected]

Page 4: Propulsez votre architecture grâce au TDD et aux mocks (Agile Québec 2013)

© 2

01

3 Elap

se Te

chn

olo

gies

© 2

01

3 Elap

se Te

chn

olo

gies

Réchauffement…

Qui fait du TDD?

Qui utilise des Mocks?

Quelles sont vos attentes?

Images de: Idea Go / freedigitalphotos.net

Rameshng / Flickr.com

Page 5: Propulsez votre architecture grâce au TDD et aux mocks (Agile Québec 2013)

© 2

01

3 Elap

se Te

chn

olo

gies

© 2

01

3 Elap

se Te

chn

olo

gies

Comment découvrir l’architecture?

TDD

Mocks

Page 6: Propulsez votre architecture grâce au TDD et aux mocks (Agile Québec 2013)

© 2

01

3 Elap

se Te

chn

olo

gies

© 2

01

3 Elap

se Te

chn

olo

gies

DOUBLURES ET MOCKSRappel sur les

Page 7: Propulsez votre architecture grâce au TDD et aux mocks (Agile Québec 2013)

© 2

01

3 Elap

se Te

chn

olo

gies

© 2

01

3 Elap

se Te

chn

olo

gies

Rappel: les tests unitairesBut: tester les modules en isolation.

Page 8: Propulsez votre architecture grâce au TDD et aux mocks (Agile Québec 2013)

© 2

01

3 Elap

se Te

chn

olo

gies

© 2

01

3 Elap

se Te

chn

olo

gies

Rappel: les mocks

CUTTest

CUT

A

B

X

N

Page 9: Propulsez votre architecture grâce au TDD et aux mocks (Agile Québec 2013)

© 2

01

3 Elap

se Te

chn

olo

gies

© 2

01

3 Elap

se Te

chn

olo

gies

Rappel: les mocks

CTest

C

A

B

X

N

Page 10: Propulsez votre architecture grâce au TDD et aux mocks (Agile Québec 2013)

© 2

01

3 Elap

se Te

chn

olo

gies

© 2

01

3 Elap

se Te

chn

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 (Agile Québec 2013)

© 2

01

3 Elap

se Te

chn

olo

gies

© 2

01

3 Elap

se Te

chn

olo

gies

TDDRappels des fondements du

Page 12: Propulsez votre architecture grâce au TDD et aux mocks (Agile Québec 2013)

© 2

01

3 Elap

se Te

chn

olo

gies

© 2

01

3 Elap

se Te

chn

olo

gies

Technique ou discipline?

Le TDD est une discipline

Page 13: Propulsez votre architecture grâce au TDD et aux mocks (Agile Québec 2013)

© 2

01

3 Elap

se Te

chn

olo

gies

© 2

01

3 Elap

se Te

chn

olo

gies

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

3

Page 14: Propulsez votre architecture grâce au TDD et aux mocks (Agile Québec 2013)

© 2

01

3 Elap

se Te

chn

olo

gies

© 2

01

3 Elap

se Te

chn

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 Project

Keikogi de Tiago Dos Reis Rodrigues duThe Noun Project

Page 15: Propulsez votre architecture grâce au TDD et aux mocks (Agile Québec 2013)

© 2

01

3 Elap

se Te

chn

olo

gies

© 2

01

3 Elap

se Te

chn

olo

gies

TDD « CLASSIQUE »Le design et le

Image: posterize / FreeDigitalPhotos.net

Page 16: Propulsez votre architecture grâce au TDD et aux mocks (Agile Québec 2013)

© 2

01

3 Elap

se Te

chn

olo

gies

© 2

01

3 Elap

se Te

chn

olo

gies

TDD classique

Image: nuchylee / FreeDigitalPhotos.net

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

Page 17: Propulsez votre architecture grâce au TDD et aux mocks (Agile Québec 2013)

© 2

01

3 Elap

se Te

chn

olo

gies

© 2

01

3 Elap

se Te

chn

olo

gies

TDD classiqueExtraction des types

ClasseP Classe

R1

PTest

Division

R1Test

ClasseP

PTest

MockR1

Page 18: Propulsez votre architecture grâce au TDD et aux mocks (Agile Québec 2013)

© 2

01

3 Elap

se Te

chn

olo

gies

© 2

01

3 Elap

se Te

chn

olo

gies

Le TDD classique

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 (Agile Québec 2013)

© 2

01

3 Elap

se Te

chn

olo

gies

© 2

01

3 Elap

se Te

chn

olo

gies

L’ORIENTATION OBJETRappel de

Page 20: Propulsez votre architecture grâce au TDD et aux mocks (Agile Québec 2013)

© 2

01

3 Elap

se Te

chn

olo

gies

© 2

01

3 Elap

se Te

chn

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 (Agile Québec 2013)

© 2

01

3 Elap

se Te

chn

olo

gies

© 2

01

3 Elap

se Te

chn

olo

gies

Le « Tell don’t Ask »

Image: renjith krishnan et jscreationzs / FreeDigitalPhotos.net

Page 22: Propulsez votre architecture grâce au TDD et aux mocks (Agile Québec 2013)

© 2

01

3 Elap

se Te

chn

olo

gies

© 2

01

3 Elap

se Te

chn

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 (Agile Québec 2013)

© 2

01

3 Elap

se Te

chn

olo

gies

© 2

01

3 Elap

se Te

chn

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 (Agile Québec 2013)

© 2

01

3 Elap

se Te

chn

olo

gies

© 2

01

3 Elap

se Te

chn

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 (Agile Québec 2013)

© 2

01

3 Elap

se Te

chn

olo

gies

© 2

01

3 Elap

se Te

chn

olo

gies

Le TDD « Mockiste »

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

Images: sheelamohan / freedigitalphotos.net

Page 26: Propulsez votre architecture grâce au TDD et aux mocks (Agile Québec 2013)

© 2

01

3 Elap

se Te

chn

olo

gies

© 2

01

3 Elap

se Te

chn

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 (Agile Québec 2013)

© 2

01

3 Elap

se Te

chn

olo

gies

© 2

01

3 Elap

se Te

chn

olo

gies

Évolution du « design »

Par le raffinement

Découverte des types par les Mocks

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

TDD « Mockiste »

Page 28: Propulsez votre architecture grâce au TDD et aux mocks (Agile Québec 2013)

© 2

01

3 Elap

se Te

chn

olo

gies

© 2

01

3 Elap

se Te

chn

olo

gies

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

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 (Agile Québec 2013)

© 2

01

3 Elap

se Te

chn

olo

gies

© 2

01

3 Elap

se Te

chn

olo

gies

TDD piloté par les MocksArriver à 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 (Agile Québec 2013)

© 2

01

3 Elap

se Te

chn

olo

gies

© 2

01

3 Elap

se Te

chn

olo

gies

En résumé

Quels effets aura ce comportement sur l’environnement immédiat?

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

rôles ?

Quelle est la responsabilité de l’objet testé ?

Classe testée(CUT)

A

Besoin de(rôle)

B

Effet sur

Responsabilité

Page 31: Propulsez votre architecture grâce au TDD et aux mocks (Agile Québec 2013)

© 2

01

3 Elap

se Te

chn

olo

gies

© 2

01

3 Elap

se Te

chn

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 (Agile Québec 2013)

© 2

01

3 Elap

se Te

chn

olo

gies

© 2

01

3 Elap

se Te

chn

olo

gies

DÉMONSTRATIONPrésentation de la

Image: Stuart Miles / freedigitalphotos.net

Page 33: Propulsez votre architecture grâce au TDD et aux mocks (Agile Québec 2013)

© 2

01

3 Elap

se Te

chn

olo

gies

© 2

01

3 Elap

se Te

chn

olo

gies

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

Démonstration

Page 34: Propulsez votre architecture grâce au TDD et aux mocks (Agile Québec 2013)

© 2

01

3 Elap

se Te

chn

olo

gies

© 2

01

3 Elap

se Te

chn

olo

gies

Approche « outside-in »

Image: Simon Howden / FreeDigitalPhotos.net

UI

Domaine

Infrastructure

Duplication?

Réusinage

TDD

Page 35: Propulsez votre architecture grâce au TDD et aux mocks (Agile Québec 2013)

© 2

01

3 Elap

se Te

chn

olo

gies

© 2

01

3 Elap

se Te

chn

olo

gies

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 36: Propulsez votre architecture grâce au TDD et aux mocks (Agile Québec 2013)

© 2

01

3 Elap

se Te

chn

olo

gies

© 2

01

3 Elap

se Te

chn

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 37: Propulsez votre architecture grâce au TDD et aux mocks (Agile Québec 2013)

© 2

01

3 Elap

se Te

chn

olo

gies

© 2

01

3 Elap

se Te

chn

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 38: Propulsez votre architecture grâce au TDD et aux mocks (Agile Québec 2013)

© 2

01

3 Elap

se Te

chn

olo

gies

© 2

01

3 Elap

se Te

chn

olo

gies

Ce que l’on obtient généralement

Hiérarchie mince

Design basé sur les rôles

Abstraction(rôles)

Nommage clair pour l’appelant

Meilleur respect des

principes OO

Page 39: Propulsez votre architecture grâce au TDD et aux mocks (Agile Québec 2013)

© 2

01

3 Elap

se Te

chn

olo

gies

© 2

01

3 Elap

se Te

chn

olo

gies

Désavantages de l’approche mockiste

Couplage du test avec la signature

des collaborateurs

Fonctionne mal avec des

problèmes algorithmiques

Génère beaucoup de mocks et d’interfaces

Danger: Trop focaliser sur le UI

(outside-in)

Tests unitaires =>

aucun test intégré de bas niveau.

Page 40: Propulsez votre architecture grâce au TDD et aux mocks (Agile Québec 2013)

© 2

01

3 Elap

se Te

chn

olo

gies

© 2

01

3 Elap

se Te

chn

olo

gies

La Bonne question…

Que voulez-vous maximiser ?

Page 41: Propulsez votre architecture grâce au TDD et aux mocks (Agile Québec 2013)

© 2

01

3 Elap

se Te

chn

olo

gies

© 2

01

3 Elap

se Te

chn

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 42: Propulsez votre architecture grâce au TDD et aux mocks (Agile Québec 2013)

© 2

01

3 Elap

se Te

chn

olo

gies

© 2

01

3 Elap

se Te

chn

olo

gies

Mauvaises odeurs détectables

Mauvaise odeurs avec les mocks

Beaucoup de Mocks

Couplage…

Difficile de les injecter

OCP ?Patron

« Factory »?

Beaucoup de

paramètres

Extraction d’un

concept?

Page 43: Propulsez votre architecture grâce au TDD et aux mocks (Agile Québec 2013)

© 2

01

3 Elap

se Te

chn

olo

gies

© 2

01

3 Elap

se Te

chn

olo

gies

Rappel: TDD et architecture

+ Code testable

Rétroaction:« design »

simple?

-Code couplé

+ Code réutilisable

+ Architecture émergeante

Toutes approches

Page 44: Propulsez votre architecture grâce au TDD et aux mocks (Agile Québec 2013)

© 2

01

3 Elap

se Te

chn

olo

gies

© 2

01

3 Elap

se Te

chn

olo

gies

Le mot de la fin…Questions? Poursuivre la discussion?

Image de digitalart / FreeDigitalPhotos.net

@fbourbonnais

Félix-Antoine Bourbonnais

[email protected]

elapsetech.com/fab

Page 45: Propulsez votre architecture grâce au TDD et aux mocks (Agile Québec 2013)

© 2

01

3 Elap

se Te

chn

olo

gies

© 2

01

3 Elap

se Te

chn

olo

gies

Téléchargement

Image de anamkkml/ FreeDigitalPhotos.net et github.com

Diapositiveshttp://developpementagile.com/

architecture-mocks-tdd

Code sourcehttps://github.com/fbourbonnais/

propulsez-architecture-tdd-mocks

Page 46: Propulsez votre architecture grâce au TDD et aux mocks (Agile Québec 2013)

© 2

01

3 Elap

se Te

chn

olo

gies

© 2

01

3 Elap

se Te

chn

olo

gies

Elapse Technologies

Formation

Accompagnement (coaching)

Conseils et diagnostiques

Votre allié en développement logiciel Agile

Agilité (Scrum, Lean, XP)

Qualité et tests automatisés

Architecture Agile

Pratiques de développement

Page 47: Propulsez votre architecture grâce au TDD et aux mocks (Agile Québec 2013)

© 2

01

3 Elap

se Te

chn

olo

gies

© 2

01

3 Elap

se Te

chn

olo

gies

Références

Page 48: Propulsez votre architecture grâce au TDD et aux mocks (Agile Québec 2013)

© 2

01

3 Elap

se Te

chn

olo

gies

© 2

01

3 Elap

se Te

chn

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 (Agile Québec 2013)

© 2

01

3 Elap

se Te

chn

olo

gies

© 2

01

3 Elap

se Te

chn

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