SlideShare une entreprise Scribd logo
1  sur  39
Télécharger pour lire hors ligne
Une architecture agile
et testable
3 clés pour réussir
l’automatisation des tests à l'échelle
$ whoami
• Java, javascript, Clojure, C#, PHP
• Independant, joueur d'équipe
• Craftsmanship
• Passionné du code et design du soft
• Ouvert
!
martinsson.johan@gmail.com
@johan_alps
A retenir
1. Ecouter les tests - Modeler pour testabilité
2. Trois types de tests
• Unit, Adapter, Application
3. Prenez le contrôle du main()
Ecouter les tests
• “Sometimes we find it difficult to write a test …
this usually means that our design can be
improved” - S. Freeman, N. Pryce
• “The tests are a canary in coal mining revealing
by their distress the presence of evil design
vapors” - Kent Beck
Ecouter les tests
• Les tests nous disent 

“fais qq chose!”
• A nous de trouver
• Il y en a toujours
• Parfois nous ne connaissons pas encore
Dogfooding
http://goo.gl/E655Qm
Carte
• Problème!
• Pyramide des tests
• Adaptateurs + tests
• Tests d’application + Composition root
• Résultat flexible
http://freeimages.com/photo/road-map-paris-119
TDD était top!
• Nombre romains, FizzBuzz!
• jusqu’à ce qu’on le fasse avec du vrai code.
On visait le ciel
• Tester l'ensemble!
• Avec vraies dépendances!
• De façon rapide et fiable!
• Couvrir tout
… on atterit en enfer!
• Dommages collatéraux!
• Evolutions => faux négatifs!
• Dépendances volatiles !
• Instabilité => faux négatifs!
• Lenteurs => huile sur le feu
Dommages collatéraux
• Evolution données de test

• Nouvelle fonctionnalité

• Assertions trop strictes
expect(resultFile).to.equal(referenceFile)
Dépendances Volatiles
• Difficiles à initialiser, pas dispos
• Etat persistant
• Lents
• Erratic
• Debug-a-lot
Carte
• Problème
• Pyramide des tests!
• Adaptateurs + tests
• Tests d’application + Composition root
• Résultat flexible
Dommages collatéraux
• Solution
• Tester plus bas
• Assertions

précises
Coût de maintenance constante!
Carte
• Problème
• Pyramide des tests
• Adaptateurs + tests!
• Tests d’application + Composition root
• Résultat flexible
Tests d'adaptateur
• Encapsuler avec une interface minimaliste -
ADAPTER
• Tester à fond avec “la vraie"
Adapter
Interfaces
Adapters
Web!
Service X
Message!
queue
Adapter
Adapter!
test
Code simplifié
L'adaptateur
Tests de l'adapteur
C’est testé à fond!
Avantages
• Adapteurs sont (plus) faciles à tester en isolation
• le reste est facile à tester - stub et mock
Inconvénients
• A court d’excuses! :)
• Pas de tests qui traversent la frontière
Mais encore!
Changez de techno!
• Faites passer le test.
• Poussez en prod!
Sert d'avertissement
• Vous saurez pourquoi vos tests systèmes
plantent … 10 min avant qu’ils tournent!
• Debug
• Pas pollué par bugs d’autres équipes
• Donnez-vos tests
Adaptateurs résumé
• Faciles à tester en isolation
• Changement d’outil simple
• Code simplifié
• Moins de debug
Résumons
• Isolation des difficultées
• Bas niveau couvert
• Quid du
• branchement?
• des refactorings importants?
Carte
• Problème
• Pyramide des tests
• Adaptateurs + tests
• Tests d’application + Composition root!
• Résultat flexible
Tests d'application
• Sans dépendences volatiles
• L’ensemble de l'appli
• Facile, rapide et fiable
Tests d'application
• Composition Root / Main module
• 2 phases
1. Build hard-to-test objects
2. Use those to build the rest: 

new Application(fakeDB, fakeWSClient,
tmpDir)
Composition Root - Dependency Injection in .NET
Main module - Bob Martin
Carte
• Problème
• Pyramide des tests
• Adaptateurs + tests
• Tests d’application + Composition root
• Résultat flexible
Autre tests
• Tests système complêt

(frontière manquante)
• UI
• Micro-services?
• Stress-, performance-tests => parametrer tests
existants
De quoi devons nous nous
isoler
• Services web
• Bases de données (habituellement)
• Processes tierces
• Serveurs d’application
• IHMs
• Lenteurs (frameworks injection, attentes, …)
Conclusions
• Tester bas niveau
• Unit & Adapter => stabilité, rapidité, isolation
• Moins besoin tests haut niveau
• Tester => pression code/architecture
• Application malléable
A retenir
1. Ecouter les tests - Modeler pour testabilité
2. Trois types de tests
• Unit, Adapter, Application
3. Prenez le contrôle du main()
Conclusions
• Tester bas niveau
• Unit & Adapter => stabilité, rapidité, isolation
• Moins besoin tests haut niveau
• Tester => pression code/architecture
• Application malléable

Contenu connexe

En vedette

Specification By Example
Specification By ExampleSpecification By Example
Specification By ExampleMathieu Cans
 
Soigner sa schizophrénie MOA/MOE - Voyage au pays des spécifications exécutables
Soigner sa schizophrénie MOA/MOE - Voyage au pays des spécifications exécutablesSoigner sa schizophrénie MOA/MOE - Voyage au pays des spécifications exécutables
Soigner sa schizophrénie MOA/MOE - Voyage au pays des spécifications exécutablesAgile Tour Genève
 
L'art du maniement des exigences agiles
L'art du maniement des exigences agilesL'art du maniement des exigences agiles
L'art du maniement des exigences agilesAlexandre Boutin
 
You code sucks, let's fix it
You code sucks, let's fix itYou code sucks, let's fix it
You code sucks, let's fix itRafael Dohms
 
Introdot Netc Sharp En
Introdot Netc Sharp EnIntrodot Netc Sharp En
Introdot Netc Sharp EnGregory Renard
 
Agile Tour Toulouse 2015 - Patch bonheur au travail
Agile Tour Toulouse 2015 - Patch bonheur au travailAgile Tour Toulouse 2015 - Patch bonheur au travail
Agile Tour Toulouse 2015 - Patch bonheur au travailAgile Toulouse
 
Fondation recherche médicale - schizophrénie
Fondation recherche médicale - schizophrénieFondation recherche médicale - schizophrénie
Fondation recherche médicale - schizophrénieschizophrenie
 

En vedette (7)

Specification By Example
Specification By ExampleSpecification By Example
Specification By Example
 
Soigner sa schizophrénie MOA/MOE - Voyage au pays des spécifications exécutables
Soigner sa schizophrénie MOA/MOE - Voyage au pays des spécifications exécutablesSoigner sa schizophrénie MOA/MOE - Voyage au pays des spécifications exécutables
Soigner sa schizophrénie MOA/MOE - Voyage au pays des spécifications exécutables
 
L'art du maniement des exigences agiles
L'art du maniement des exigences agilesL'art du maniement des exigences agiles
L'art du maniement des exigences agiles
 
You code sucks, let's fix it
You code sucks, let's fix itYou code sucks, let's fix it
You code sucks, let's fix it
 
Introdot Netc Sharp En
Introdot Netc Sharp EnIntrodot Netc Sharp En
Introdot Netc Sharp En
 
Agile Tour Toulouse 2015 - Patch bonheur au travail
Agile Tour Toulouse 2015 - Patch bonheur au travailAgile Tour Toulouse 2015 - Patch bonheur au travail
Agile Tour Toulouse 2015 - Patch bonheur au travail
 
Fondation recherche médicale - schizophrénie
Fondation recherche médicale - schizophrénieFondation recherche médicale - schizophrénie
Fondation recherche médicale - schizophrénie
 

Similaire à Une architecture agile et testable

PHPTour Lyon 2014 - Conférence - Tests unitaires Je veux mes 80% de couvertur...
PHPTour Lyon 2014 - Conférence - Tests unitaires Je veux mes 80% de couvertur...PHPTour Lyon 2014 - Conférence - Tests unitaires Je veux mes 80% de couvertur...
PHPTour Lyon 2014 - Conférence - Tests unitaires Je veux mes 80% de couvertur...Cyrille Grandval
 
Le rôle du testeur et le Blackbox testing
Le rôle du testeur et le Blackbox testingLe rôle du testeur et le Blackbox testing
Le rôle du testeur et le Blackbox testingGeeks Anonymes
 
Pratiques de développement pour équipes Agile
Pratiques de développement pour équipes AgilePratiques de développement pour équipes Agile
Pratiques de développement pour équipes AgileAgile Tour 2009 Québec
 
Tester du legacy code, mission impossible ?
Tester du legacy code, mission impossible ?Tester du legacy code, mission impossible ?
Tester du legacy code, mission impossible ?CGI Québec Formation
 
Automatisation des tests - objectifs et concepts - partie 2
Automatisation des tests  - objectifs et concepts - partie 2Automatisation des tests  - objectifs et concepts - partie 2
Automatisation des tests - objectifs et concepts - partie 2Christophe Rochefolle
 
TDD/BDD: ou comment j’ai appris à ne plus m’en faire avec les tests (et la doc)
TDD/BDD: ou comment j’ai appris à ne plus m’en faire avec les tests (et la doc)TDD/BDD: ou comment j’ai appris à ne plus m’en faire avec les tests (et la doc)
TDD/BDD: ou comment j’ai appris à ne plus m’en faire avec les tests (et la doc)French Scrum User Group
 
Mise En Place De Tests En Milieu Hostile (C++, CppUnit) - 25 mai 2012
Mise En Place De Tests En Milieu Hostile (C++, CppUnit) - 25 mai 2012Mise En Place De Tests En Milieu Hostile (C++, CppUnit) - 25 mai 2012
Mise En Place De Tests En Milieu Hostile (C++, CppUnit) - 25 mai 2012Agilbee (Patrice Petit)
 
Altran soirée du test logiciel - assez des c 05-10-17
Altran   soirée du test logiciel - assez des c 05-10-17Altran   soirée du test logiciel - assez des c 05-10-17
Altran soirée du test logiciel - assez des c 05-10-17Marc Hage Chahine
 
Soirée du Test Logiciel - Intégration, livraison et déploiement continu - A. ...
Soirée du Test Logiciel - Intégration, livraison et déploiement continu - A. ...Soirée du Test Logiciel - Intégration, livraison et déploiement continu - A. ...
Soirée du Test Logiciel - Intégration, livraison et déploiement continu - A. ...TelecomValley
 
Agile Tour Nantes 2014 - Tdd, le meilleur moyen d'écrire du code testable
Agile Tour Nantes 2014 - Tdd, le meilleur moyen d'écrire du code testableAgile Tour Nantes 2014 - Tdd, le meilleur moyen d'écrire du code testable
Agile Tour Nantes 2014 - Tdd, le meilleur moyen d'écrire du code testableAssociation Agile Nantes
 
20070925 04 - Panorama des outils Open Source / Qualité des développements
20070925 04 - Panorama des outils Open Source / Qualité des développements20070925 04 - Panorama des outils Open Source / Qualité des développements
20070925 04 - Panorama des outils Open Source / Qualité des développementsLeClubQualiteLogicielle
 
Retour d'expérience TAA - 2011/03/29
Retour d'expérience TAA - 2011/03/29Retour d'expérience TAA - 2011/03/29
Retour d'expérience TAA - 2011/03/29Elapse Technologies
 
Test Driven Development (aka TDD) for agile teams
Test Driven Development (aka TDD) for agile teamsTest Driven Development (aka TDD) for agile teams
Test Driven Development (aka TDD) for agile teamsThierry Gayet
 
TDD (Test Driven Developement) et refactoring
TDD (Test Driven Developement) et refactoringTDD (Test Driven Developement) et refactoring
TDD (Test Driven Developement) et refactoringneuros
 
20110519 cara tests_agiles_grenoble_all
20110519 cara tests_agiles_grenoble_all20110519 cara tests_agiles_grenoble_all
20110519 cara tests_agiles_grenoble_allCARA_Lyon
 
Essential skills for the agile developer
Essential skills for the agile developerEssential skills for the agile developer
Essential skills for the agile developerAlice Barralon
 
Deux ans de développement Agile, erreurs et succès
Deux ans de développement Agile, erreurs et succèsDeux ans de développement Agile, erreurs et succès
Deux ans de développement Agile, erreurs et succèsAgile Tour 2009 Québec
 
Strategie de test à agile tour bordeaux
Strategie de test à agile tour bordeauxStrategie de test à agile tour bordeaux
Strategie de test à agile tour bordeauxNicolas Fédou
 

Similaire à Une architecture agile et testable (20)

PHPTour Lyon 2014 - Conférence - Tests unitaires Je veux mes 80% de couvertur...
PHPTour Lyon 2014 - Conférence - Tests unitaires Je veux mes 80% de couvertur...PHPTour Lyon 2014 - Conférence - Tests unitaires Je veux mes 80% de couvertur...
PHPTour Lyon 2014 - Conférence - Tests unitaires Je veux mes 80% de couvertur...
 
Le rôle du testeur et le Blackbox testing
Le rôle du testeur et le Blackbox testingLe rôle du testeur et le Blackbox testing
Le rôle du testeur et le Blackbox testing
 
Pratiques de développement pour équipes Agile
Pratiques de développement pour équipes AgilePratiques de développement pour équipes Agile
Pratiques de développement pour équipes Agile
 
Tester du legacy code, mission impossible ?
Tester du legacy code, mission impossible ?Tester du legacy code, mission impossible ?
Tester du legacy code, mission impossible ?
 
Automatisation des tests - objectifs et concepts - partie 2
Automatisation des tests  - objectifs et concepts - partie 2Automatisation des tests  - objectifs et concepts - partie 2
Automatisation des tests - objectifs et concepts - partie 2
 
TDD/BDD: ou comment j’ai appris à ne plus m’en faire avec les tests (et la doc)
TDD/BDD: ou comment j’ai appris à ne plus m’en faire avec les tests (et la doc)TDD/BDD: ou comment j’ai appris à ne plus m’en faire avec les tests (et la doc)
TDD/BDD: ou comment j’ai appris à ne plus m’en faire avec les tests (et la doc)
 
Usine Logicielle 2013
Usine Logicielle 2013Usine Logicielle 2013
Usine Logicielle 2013
 
Mise En Place De Tests En Milieu Hostile (C++, CppUnit) - 25 mai 2012
Mise En Place De Tests En Milieu Hostile (C++, CppUnit) - 25 mai 2012Mise En Place De Tests En Milieu Hostile (C++, CppUnit) - 25 mai 2012
Mise En Place De Tests En Milieu Hostile (C++, CppUnit) - 25 mai 2012
 
Altran soirée du test logiciel - assez des c 05-10-17
Altran   soirée du test logiciel - assez des c 05-10-17Altran   soirée du test logiciel - assez des c 05-10-17
Altran soirée du test logiciel - assez des c 05-10-17
 
Soirée du Test Logiciel - Intégration, livraison et déploiement continu - A. ...
Soirée du Test Logiciel - Intégration, livraison et déploiement continu - A. ...Soirée du Test Logiciel - Intégration, livraison et déploiement continu - A. ...
Soirée du Test Logiciel - Intégration, livraison et déploiement continu - A. ...
 
Agile Tour Nantes 2014 - Tdd, le meilleur moyen d'écrire du code testable
Agile Tour Nantes 2014 - Tdd, le meilleur moyen d'écrire du code testableAgile Tour Nantes 2014 - Tdd, le meilleur moyen d'écrire du code testable
Agile Tour Nantes 2014 - Tdd, le meilleur moyen d'écrire du code testable
 
20070925 04 - Panorama des outils Open Source / Qualité des développements
20070925 04 - Panorama des outils Open Source / Qualité des développements20070925 04 - Panorama des outils Open Source / Qualité des développements
20070925 04 - Panorama des outils Open Source / Qualité des développements
 
Retour d'expérience TAA - 2011/03/29
Retour d'expérience TAA - 2011/03/29Retour d'expérience TAA - 2011/03/29
Retour d'expérience TAA - 2011/03/29
 
Test Driven Development (aka TDD) for agile teams
Test Driven Development (aka TDD) for agile teamsTest Driven Development (aka TDD) for agile teams
Test Driven Development (aka TDD) for agile teams
 
TDD (Test Driven Developement) et refactoring
TDD (Test Driven Developement) et refactoringTDD (Test Driven Developement) et refactoring
TDD (Test Driven Developement) et refactoring
 
20110519 cara tests_agiles_grenoble_all
20110519 cara tests_agiles_grenoble_all20110519 cara tests_agiles_grenoble_all
20110519 cara tests_agiles_grenoble_all
 
Essential skills for the agile developer
Essential skills for the agile developerEssential skills for the agile developer
Essential skills for the agile developer
 
Valider par des tests - Blend
Valider par des tests - BlendValider par des tests - Blend
Valider par des tests - Blend
 
Deux ans de développement Agile, erreurs et succès
Deux ans de développement Agile, erreurs et succèsDeux ans de développement Agile, erreurs et succès
Deux ans de développement Agile, erreurs et succès
 
Strategie de test à agile tour bordeaux
Strategie de test à agile tour bordeauxStrategie de test à agile tour bordeaux
Strategie de test à agile tour bordeaux
 

Plus de martinsson

Split my monolith - Workshop
Split my monolith - WorkshopSplit my monolith - Workshop
Split my monolith - Workshopmartinsson
 
TDD de la vraie vie - AlpesCraft 2022
TDD de la vraie vie - AlpesCraft 2022TDD de la vraie vie - AlpesCraft 2022
TDD de la vraie vie - AlpesCraft 2022martinsson
 
Testing strategies
Testing strategiesTesting strategies
Testing strategiesmartinsson
 
Testing strategies visualized
Testing strategies visualizedTesting strategies visualized
Testing strategies visualizedmartinsson
 
Split my monolith! Workshop
Split my monolith! Workshop Split my monolith! Workshop
Split my monolith! Workshop martinsson
 
No Agility without Continuous Delivery
No Agility without Continuous DeliveryNo Agility without Continuous Delivery
No Agility without Continuous Deliverymartinsson
 
No agility without continuous delivery frugagile
No agility without continuous delivery   frugagileNo agility without continuous delivery   frugagile
No agility without continuous delivery frugagilemartinsson
 
De legacy au tdd agilegrenoble
De legacy au tdd   agilegrenobleDe legacy au tdd   agilegrenoble
De legacy au tdd agilegrenoblemartinsson
 
De legacy au tdd - Agile pays basque
De legacy au tdd  - Agile pays basqueDe legacy au tdd  - Agile pays basque
De legacy au tdd - Agile pays basquemartinsson
 
Usable software design ncraft
Usable software design ncraftUsable software design ncraft
Usable software design ncraftmartinsson
 
Usable software design - code utilisable
Usable software design - code utilisableUsable software design - code utilisable
Usable software design - code utilisablemartinsson
 
Pyramide des tests
Pyramide des testsPyramide des tests
Pyramide des testsmartinsson
 
Changer Pour Mieux Coder
Changer Pour Mieux CoderChanger Pour Mieux Coder
Changer Pour Mieux Codermartinsson
 

Plus de martinsson (15)

Split my monolith - Workshop
Split my monolith - WorkshopSplit my monolith - Workshop
Split my monolith - Workshop
 
TDD de la vraie vie - AlpesCraft 2022
TDD de la vraie vie - AlpesCraft 2022TDD de la vraie vie - AlpesCraft 2022
TDD de la vraie vie - AlpesCraft 2022
 
Testing strategies
Testing strategiesTesting strategies
Testing strategies
 
Testing strategies visualized
Testing strategies visualizedTesting strategies visualized
Testing strategies visualized
 
Split my monolith! Workshop
Split my monolith! Workshop Split my monolith! Workshop
Split my monolith! Workshop
 
No Agility without Continuous Delivery
No Agility without Continuous DeliveryNo Agility without Continuous Delivery
No Agility without Continuous Delivery
 
No agility without continuous delivery frugagile
No agility without continuous delivery   frugagileNo agility without continuous delivery   frugagile
No agility without continuous delivery frugagile
 
De legacy au tdd agilegrenoble
De legacy au tdd   agilegrenobleDe legacy au tdd   agilegrenoble
De legacy au tdd agilegrenoble
 
De legacy au tdd - Agile pays basque
De legacy au tdd  - Agile pays basqueDe legacy au tdd  - Agile pays basque
De legacy au tdd - Agile pays basque
 
Usable software design ncraft
Usable software design ncraftUsable software design ncraft
Usable software design ncraft
 
Usable software design - code utilisable
Usable software design - code utilisableUsable software design - code utilisable
Usable software design - code utilisable
 
Pyramide des tests
Pyramide des testsPyramide des tests
Pyramide des tests
 
Changer Pour Mieux Coder
Changer Pour Mieux CoderChanger Pour Mieux Coder
Changer Pour Mieux Coder
 
Mikado
MikadoMikado
Mikado
 
Mikado
MikadoMikado
Mikado
 

Une architecture agile et testable