SlideShare une entreprise Scribd logo
1  sur  49
Télécharger pour lire hors ligne
©2012ElapseTechnologies
© 2013 Elapse Technologies© 2013 Elapse Technologies
Propulsez votre
architecture grâce au
TDD et aux mocks
Agile Québec
12 juin 2013
nasa.gov
©2013ElapseTechnologies©2013ElapseTechnologies
Avertissement
Cette présentation est de
niveau « avancé »
©2013ElapseTechnologies©2013ElapseTechnologies
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
fbourbonnais@elapsetech.com
©2013ElapseTechnologies©2013ElapseTechnologies
Réchauffement…
Qui fait du TDD?
Qui utilise des Mocks?
Quelles sont vos
attentes?
Images de: Idea Go / freedigitalphotos.net
Rameshng / Flickr.com
©2013ElapseTechnologies©2013ElapseTechnologies
Comment découvrir l’architecture?
TDD
Mocks
©2013ElapseTechnologies©2013ElapseTechnologies
DOUBLURES ET MOCKS
Rappel sur les
©2013ElapseTechnologies©2013ElapseTechnologies
Rappel: les tests unitaires
But: tester les modules en isolation.
©2013ElapseTechnologies©2013ElapseTechnologies
Rappel: les mocks
CUT
Test
CUT
A
B
X
N
©2013ElapseTechnologies©2013ElapseTechnologies
Rappel: les mocks
C
Test
C
A
B
X
N
©2013ElapseTechnologies©2013ElapseTechnologies
Rappel: les mocks
C
Test
C
A’
B’
A’’
Lance
IOException
Retourne
[1]
©2013ElapseTechnologies©2013ElapseTechnologies
TDD
Rappels des fondements du
©2013ElapseTechnologies©2013ElapseTechnologies
Technique ou discipline?
Le TDD est une discipline
©2013ElapseTechnologies©2013ElapseTechnologies
Cycle du TDD
Écrire un
test qui
échoue
Faire
passer le
test
Ré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
©2013ElapseTechnologies©2013ElapseTechnologies
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
©2013ElapseTechnologies©2013ElapseTechnologies
TDD « CLASSIQUE »
Le design et le
Image: posterize / FreeDigitalPhotos.net
©2013ElapseTechnologies©2013ElapseTechnologies
TDD classique
Image: nuchylee / FreeDigitalPhotos.net
Centré sur l’état et le résultat final
©2013ElapseTechnologies©2013ElapseTechnologies
TDD classique
Extraction des types
Classe
P Classe
R1
PTest
Division
R1Test
Classe
P
PTest
Mock
R1
©2013ElapseTechnologies©2013ElapseTechnologies
Le TDD classique
TDD
Classique
Évolution du
« design »
•Par division
•Extraction
Problèmes
algorithmiques
•Traitement de
données
•Calculs
Valide l’état
©2013ElapseTechnologies©2013ElapseTechnologies
L’ORIENTATION OBJET
Rappel de
©2013ElapseTechnologies©2013ElapseTechnologies
InfrastructureDomaineUI
Messages et collaboration
Classe
ACtrl
Collaboration des objets  fonctionnalité
Classe
B
Classe
C
Iface
E
Classe
Persist
Classe
D
©2013ElapseTechnologies©2013ElapseTechnologies
Le « Tell don’t Ask »
Image: renjith krishnan et jscreationzs / FreeDigitalPhotos.net
©2013ElapseTechnologies©2013ElapseTechnologies
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 »
©2013ElapseTechnologies©2013ElapseTechnologies
Stimulus
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
Effet
Effet
…
©2013ElapseTechnologies©2013ElapseTechnologies
PILOTER SON DESIGN AVEC DES
MOCKS?
Comment
Image: jscreationzs / FreeDigitalPhotos.net
©2013ElapseTechnologies©2013ElapseTechnologies
Le TDD « Mockiste »
Centré sur les interactions et comportements
entre les objets considérant leur rôle
Images: sheelamohan / freedigitalphotos.net
©2013ElapseTechnologies©2013ElapseTechnologies
Le TDD « Mockiste »
Utilise les Mocks comme pierre angulaire
Images: cooldesign/ freedigitalphotos.net
©2013ElapseTechnologies©2013ElapseTechnologies
É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 »
©2013ElapseTechnologies©2013ElapseTechnologies
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
PNGLoader
Test
<<Interface>>
FileReader
Mock
Mock
?
?
Tirer les types à partir de la demande
©2013ElapseTechnologies©2013ElapseTechnologies
TDD piloté par les Mocks
Arriver à destination…
Test
acceptation
Viewer
UTest
Terminé
<<Interface>>
Loader
Classe
PNGLoader
Utest
<<Interface>>
FileReader
Fake
FileReader
Utest
©2013ElapseTechnologies©2013ElapseTechnologies
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é
©2013ElapseTechnologies©2013ElapseTechnologies
Exemple
banque.acheter(carte, marchand, montant)
--> carte.crediter(montant)
--> marchand.debiter(montant)
©2013ElapseTechnologies©2013ElapseTechnologies
DÉMONSTRATION
Présentation de la
Image: Stuart Miles / freedigitalphotos.net
©2013ElapseTechnologies©2013ElapseTechnologies
Soumissions à une conférence
#1 Soumission d’une présentation
En tant que soumissionnaire
Je veux soumettre une présentation à une conférence
Afin 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
©2013ElapseTechnologies©2013ElapseTechnologies
Approche « outside-in »
Image: Simon Howden / FreeDigitalPhotos.net
UI
Domaine
Infrastructure
Duplication?
Réusinage
TDD
©2013ElapseTechnologies©2013ElapseTechnologies
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
LibraryRealTime
View
…Presenter
OnlineService
Moc
k
Moc
k
©2013ElapseTechnologies©2013ElapseTechnologies
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
©2013ElapseTechnologies©2013ElapseTechnologies
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 »
©2013ElapseTechnologies©2013ElapseTechnologies
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
©2013ElapseTechnologies©2013ElapseTechnologies
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.
©2013ElapseTechnologies©2013ElapseTechnologies
La Bonne question…
Que voulez-vous
maximiser ?
©2013ElapseTechnologies©2013ElapseTechnologies
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
©2013ElapseTechnologies©2013ElapseTechnologies
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?
…
©2013ElapseTechnologies©2013ElapseTechnologies
Rappel: TDD et architecture
+
Code testable
Rétroaction:
« design »
simple?
-
Code couplé
+ Code
réutilisable
+ Architecture
émergeante
Toutes approches
©2013ElapseTechnologies©2013ElapseTechnologies
Le mot de la fin…
Questions? Poursuivre la discussion?
Image de digitalart / FreeDigitalPhotos.net
@fbourbonnais
Félix-Antoine Bourbonnais
fbourbonnais@elapsetech.com
elapsetech.com/fab
©2013ElapseTechnologies©2013ElapseTechnologies
Téléchargement
Image de anamkkml/ FreeDigitalPhotos.net et github.com
Diapositives
http://developpementagile.com/
architecture-mocks-tdd
Code source
https://github.com/fbourbonnais/
propulsez-architecture-tdd-mocks
©2013ElapseTechnologies©2013ElapseTechnologies
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
©2013ElapseTechnologies©2013ElapseTechnologies
Références
©2013ElapseTechnologies©2013ElapseTechnologies
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
©2013ElapseTechnologies©2013ElapseTechnologies
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

Contenu connexe

Tendances

Industrialisation des développements Java
Industrialisation des développements JavaIndustrialisation des développements Java
Industrialisation des développements JavaChristian Blavier
 
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
 
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
 
Agilite Puissance3 chez W4
Agilite Puissance3 chez W4Agilite Puissance3 chez W4
Agilite Puissance3 chez W4Jean-Luc MAZE
 

Tendances (10)

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
 
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
 
CM patterns
CM patternsCM patterns
CM patterns
 
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...
 
CM processus agile
CM processus agileCM processus agile
CM processus agile
 
Présentation1
Présentation1Présentation1
Présentation1
 
Agilite Puissance3 chez W4
Agilite Puissance3 chez W4Agilite Puissance3 chez W4
Agilite Puissance3 chez W4
 
Initiation à l'agile
Initiation à l'agileInitiation à l'agile
Initiation à l'agile
 

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

Innover sans contrainte, intégrer sans rupture
Innover sans contrainte, intégrer sans ruptureInnover sans contrainte, intégrer sans rupture
Innover sans contrainte, intégrer sans ruptureGuillaume Laforge
 
Comment prototyper quand on monte sa startup ?
Comment prototyper quand on monte sa startup ? Comment prototyper quand on monte sa startup ?
Comment prototyper quand on monte sa startup ? Carole Stromboni
 
Eloge de la User Story - Agile Tour Bordeaux -
Eloge de la User Story - Agile Tour Bordeaux - Eloge de la User Story - Agile Tour Bordeaux -
Eloge de la User Story - Agile Tour Bordeaux - Cecil Dijoux
 
Mieux rediger-les-user-stories-bonnes-pratiques-oeildecoach 2019
Mieux rediger-les-user-stories-bonnes-pratiques-oeildecoach 2019Mieux rediger-les-user-stories-bonnes-pratiques-oeildecoach 2019
Mieux rediger-les-user-stories-bonnes-pratiques-oeildecoach 2019Oeil de Coach
 
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
 
Meetup DevOps / WebOps Nîmes 20161020
Meetup DevOps / WebOps Nîmes 20161020Meetup DevOps / WebOps Nîmes 20161020
Meetup DevOps / WebOps Nîmes 20161020NimeOps
 
DevOps et ALM : Application Lifecycle Management: Continuous Delivery avec Vi...
DevOps et ALM : Application Lifecycle Management: Continuous Delivery avec Vi...DevOps et ALM : Application Lifecycle Management: Continuous Delivery avec Vi...
DevOps et ALM : Application Lifecycle Management: Continuous Delivery avec Vi...Adrien Clerbois
 
Les technologies numériques au service des apprentissages, un vaste champ d’o...
Les technologies numériques au service des apprentissages, un vaste champ d’o...Les technologies numériques au service des apprentissages, un vaste champ d’o...
Les technologies numériques au service des apprentissages, un vaste champ d’o...LIEGE CREATIVE
 
DevOps à l'échelle: ce que l'on a fait, ce que l'on a appris chez Societe Gen...
DevOps à l'échelle: ce que l'on a fait, ce que l'on a appris chez Societe Gen...DevOps à l'échelle: ce que l'on a fait, ce que l'on a appris chez Societe Gen...
DevOps à l'échelle: ce que l'on a fait, ce que l'on a appris chez Societe Gen...Adrien Blind
 
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
 
Agile Tour Nantes 2011 - Jean philippe gouigoux - architecture et agilité, ré...
Agile Tour Nantes 2011 - Jean philippe gouigoux - architecture et agilité, ré...Agile Tour Nantes 2011 - Jean philippe gouigoux - architecture et agilité, ré...
Agile Tour Nantes 2011 - Jean philippe gouigoux - architecture et agilité, ré...Association Agile Nantes
 
Storyboarding for the web : Methodology and Tools
Storyboarding for the web : Methodology and ToolsStoryboarding for the web : Methodology and Tools
Storyboarding for the web : Methodology and ToolsEric DI POL
 
La mobilité dans Drupal
La mobilité dans DrupalLa mobilité dans Drupal
La mobilité dans DrupalAdyax
 
Pgapj formation-phonegap-et-jquery-mobile
Pgapj formation-phonegap-et-jquery-mobilePgapj formation-phonegap-et-jquery-mobile
Pgapj formation-phonegap-et-jquery-mobileCERTyou Formation
 
Tech days 2012 mvvm de a à z
Tech days 2012   mvvm de a à zTech days 2012   mvvm de a à z
Tech days 2012 mvvm de a à zArnaud Auroux
 
Expresso Rennes Atalante - Html5 / Css3D - 17 sept. 2013
Expresso Rennes Atalante - Html5 / Css3D - 17 sept. 2013Expresso Rennes Atalante - Html5 / Css3D - 17 sept. 2013
Expresso Rennes Atalante - Html5 / Css3D - 17 sept. 2013MBA Multimedia
 
Iut lyon 1 introduction à l'agilité - 20 juin 2012
Iut lyon 1   introduction à l'agilité - 20 juin 2012Iut lyon 1   introduction à l'agilité - 20 juin 2012
Iut lyon 1 introduction à l'agilité - 20 juin 2012agnes_crepet
 

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

Innover sans contrainte, intégrer sans rupture
Innover sans contrainte, intégrer sans ruptureInnover sans contrainte, intégrer sans rupture
Innover sans contrainte, intégrer sans rupture
 
Comment prototyper quand on monte sa startup ?
Comment prototyper quand on monte sa startup ? Comment prototyper quand on monte sa startup ?
Comment prototyper quand on monte sa startup ?
 
Eloge de la User Story - Agile Tour Bordeaux -
Eloge de la User Story - Agile Tour Bordeaux - Eloge de la User Story - Agile Tour Bordeaux -
Eloge de la User Story - Agile Tour Bordeaux -
 
Mieux rediger-les-user-stories-bonnes-pratiques-oeildecoach 2019
Mieux rediger-les-user-stories-bonnes-pratiques-oeildecoach 2019Mieux rediger-les-user-stories-bonnes-pratiques-oeildecoach 2019
Mieux rediger-les-user-stories-bonnes-pratiques-oeildecoach 2019
 
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
 
Meetup DevOps / WebOps Nîmes 20161020
Meetup DevOps / WebOps Nîmes 20161020Meetup DevOps / WebOps Nîmes 20161020
Meetup DevOps / WebOps Nîmes 20161020
 
DevOps et ALM : Application Lifecycle Management: Continuous Delivery avec Vi...
DevOps et ALM : Application Lifecycle Management: Continuous Delivery avec Vi...DevOps et ALM : Application Lifecycle Management: Continuous Delivery avec Vi...
DevOps et ALM : Application Lifecycle Management: Continuous Delivery avec Vi...
 
Les technologies numériques au service des apprentissages, un vaste champ d’o...
Les technologies numériques au service des apprentissages, un vaste champ d’o...Les technologies numériques au service des apprentissages, un vaste champ d’o...
Les technologies numériques au service des apprentissages, un vaste champ d’o...
 
DevOps à l'échelle: ce que l'on a fait, ce que l'on a appris chez Societe Gen...
DevOps à l'échelle: ce que l'on a fait, ce que l'on a appris chez Societe Gen...DevOps à l'échelle: ce que l'on a fait, ce que l'on a appris chez Societe Gen...
DevOps à l'échelle: ce que l'on a fait, ce que l'on a appris chez Societe Gen...
 
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
 
Digital way - Innovation - @Objectif
Digital way  - Innovation - @ObjectifDigital way  - Innovation - @Objectif
Digital way - Innovation - @Objectif
 
Agile Tour Nantes 2011 - Jean philippe gouigoux - architecture et agilité, ré...
Agile Tour Nantes 2011 - Jean philippe gouigoux - architecture et agilité, ré...Agile Tour Nantes 2011 - Jean philippe gouigoux - architecture et agilité, ré...
Agile Tour Nantes 2011 - Jean philippe gouigoux - architecture et agilité, ré...
 
test
testtest
test
 
Storyboarding for the web : Methodology and Tools
Storyboarding for the web : Methodology and ToolsStoryboarding for the web : Methodology and Tools
Storyboarding for the web : Methodology and Tools
 
La mobilité dans Drupal
La mobilité dans DrupalLa mobilité dans Drupal
La mobilité dans Drupal
 
Pgapj formation-phonegap-et-jquery-mobile
Pgapj formation-phonegap-et-jquery-mobilePgapj formation-phonegap-et-jquery-mobile
Pgapj formation-phonegap-et-jquery-mobile
 
Tech days 2012 mvvm de a à z
Tech days 2012   mvvm de a à zTech days 2012   mvvm de a à z
Tech days 2012 mvvm de a à z
 
Expresso Rennes Atalante - Html5 / Css3D - 17 sept. 2013
Expresso Rennes Atalante - Html5 / Css3D - 17 sept. 2013Expresso Rennes Atalante - Html5 / Css3D - 17 sept. 2013
Expresso Rennes Atalante - Html5 / Css3D - 17 sept. 2013
 
Iut lyon 1 introduction à l'agilité - 20 juin 2012
Iut lyon 1   introduction à l'agilité - 20 juin 2012Iut lyon 1   introduction à l'agilité - 20 juin 2012
Iut lyon 1 introduction à l'agilité - 20 juin 2012
 
LES INDEPENDANTS
LES INDEPENDANTSLES INDEPENDANTS
LES INDEPENDANTS
 

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