SlideShare une entreprise Scribd logo
#DevoxxFR
Devoxx France 2021
Tour d’horizon des tests logiciels
Maxime Gellé @maxime_gelle
Yannick Grenzinger @ygrenzinger
1
2
Tour d’horizon
des tests logiciels
Bonjour !
Maxime Gellé
@Maxime_gelle
4
Yannick Grenzinger
@ygrenzinger
5
Sommaire
1. Tester le coeur du métier
1.1. TDD et tests dʼacceptance unitaires
1.2. Sacraliser le domaine métier
1.3. Mutation testing
1.4. BDD et documentation vivante
2. Tester les frontières
2.2. Integration tests
2.3. Contract testing
2.4. UI testing
3. Vers lʼinfini et au delà
3.1. Exploration testing
3.2. Property Based Testing
3.3. Testing in production
Retour aux bases - 1ère moitié
Allons plus loin - 2nd moitié
Cette conférence est:
- Un avis basé sur nos
expériences
- Basée sur nos définitions
- Limité par lʼétat de nos
connaissances
- Limité par le temps
6
“Standing on the shoulder of giants”
7
Merci à
Kent Beck
Martin Fowler
Ian Cooper
Seb Rose
Thomas Pierrain
Et beaucoup dʼautres :)
Notre exemple pratique : fruit shop kata
8
Une caisse enregistreuse
Un panier de fruits
Des réductions
- 1 offert pour X fruits achetés
- 200c de réduction si plus de 10 fruits
Notre exemple pratique : l’architecture
9
Présentation
Métier
Repository + Model
1. Tester le cœur du métier 10
11
1.1 TDD et tests d’acceptance unitaires
Pourquoi tester ?
- Aligner le code avec le besoin
- Éliminer la peur du changement
- Créer un filet de sécurité qui rend le déploiement en
production plus sûr.
- Avoir un premier utilisateur du code (feedback court)
12
Tester pour couvrir des lignes de code
13
Qu’est-ce qu’un bon test ? (FIRST)
- Rapide
- (Isolé) Indépendant
- Répétable
- Auto-vérifiable
- Au bon moment (TDD ?)
14
Un test d’acceptance
unitaire
est rapide, en mémoire, cohérent, automatisé et reproductible
et permet de valider un comportement / règle métier en isolation
des autres et des effets de bords
15
“
Un test unitaire est un test rapide, en mémoire, cohérent, automatisé et reproductible
d'une unité de travail fonctionnelle du système.
Une unité de travail est un scénario fonctionnel du système. Elle peut être aussi courte
qu'une fonction, ou couvrir plusieurs classes et fonctions, et elle fournit une valeur
interne ou commerciale au système testé.
-- Roy Osherove “The Art of unit testing”
16
Zen
Les tests ne prouvent pas
lʼabsence dʼerreurs.
Mais la présence
dʼune correction à une erreur
(aka fonctionnel attendu)
17
Ce qui nous
amène à TDD
Test Driven Development
18
Traduire une exigence
en un test falsifiable.
Le test représente un
besoin métier.
Le code compile.
Ecrire le code le plus
simple pour faire
passer le test.
Nʼhésitez pas à tricher
!
“do it sinfully”
Vous pouvez ré-écrire (refactor) et
généraliser le code en y mettant
design, pattern, beauté.
TDD similaire à la méthode scientifique
La méthode scientifique TDD
Question Besoin
Prediction Sortie attendue
Expérimentation Lancer le test
Sujet de l’expérimentation Code de l’implémentation
On est lʼopposée du test de non régression
Le TDD c’est dur !
- Discipline
- Désapprendre
- Comprendre le besoin
- Petit pas
○ Test && Commit || Revert
Plus de détails avec lʼarticle de Dorra Bartaguiz
https://www.arolla.fr/blog/2020/03/comment-
reussir-son-regime-tdd/
20
Mais cela a de gros avantages
- Une meilleur compréhension du besoin
- De meilleurs tests (aka documentation)
- Du meilleur code
- Moins de complexité accidentelle
- Du design émergent
21
22
L’isolation, l’incompréhension du test unitaire
Lʼisolation ce nʼest pas :
une classe == une classe de test.
Ce qui mène à la sur-utilisation
des mocks.
Ce qui mène à la colère.
(TDD is dead)
23
D’autres raisons de cette colère
- Si changer lʼimplémentation casse régulièrement
beaucoup de tests
- Si lʼintention des tests est difficile à comprendre
- Sʼil y a un déséquilibre entre les tests et
lʼimplémentation (ou le System Under Test)
24
25
Live coding
Exemple pratique
26
Ajouter une réduction :
100c de réduction si plus de 4 fruits différents
27
1.2 Sacraliser le domaine métier
Quoi tester ?
28
Présentation
Métier
Persistence
SOLID
Dependency Inversion
“Les modules de haut niveau ne
doivent pas dépendre de modules de
bas niveau.”
Quoi tester ?
29
Présentation
Métier
Persistence
Architecture
- Architecture hexagonale
- Clean Architecture
- Imperative Shell, Functional Core
- ...
30
31
noClasses().that().resideInAPackage("..source..")
.should().dependOnClassesThat().resideInAPackage("..foo..")
Tester l’Architecture
32
Présentation de code
33
1.3 Mutation Testing
34
La couverture de code traditionnelle
ne mesure que le code exécuté par vos tests.
35
36
37
Fonctionnent-ils ?
Mes tests
“Gold
standard”
Imaginée dans en 1971 avec une 1ère implémentation en 1980,
le mutation testing détecte si chaque ligne est testée de
manière significative.
38
Mutants
Les mutations sont automatiquement introduites
dans le code, puis les tests sont exécutés.
Si les tests échouent <> la mutation est tuée
Si vos tests réussissent <> la mutation est vivante 39
40
Exemples de mutations et de résultat possible
- Opérateurs (Math,
Comparaison …)
- Inverser les
conditions
- Changer les
valeurs de retours
- Ne pas appeler les
méthodes n’ayant
pas de retours
https://pitest.org/qui
ckstart/mutators
41
Présentation de code
42
1.4 BDD et documentation vivante
43
“Nos devs et le métier ne se comprennent pas !
Comment faire ?”
“Ok, on va imposer
Cucumber !”
44
Un exemple de Guerkin
Feature: Pet store queries
Scenario: Get mammals
Given a logged in user :
| email | type |
| a.user@mail.com | Buyer |
And the pets :
| name | race | category | color | sex |
| Bobby | Dog | mammal | black | male |
| Nemo | Goldfish | fish | red | male |
| Milo | Cat | mammal | gold | female |
When I send a 'GET' request to '{base}/pets'
And I add the query string parameters:
| sort | filter |
| desc | mammal |
Then I should receive a response with the status 200
And the response body json path at "$.[0].type" should equal "Cat"
And the response body json path at "$.[1].type" should equal "Dog"
BDD
- Dan North
- Spécification par lʼexemple
- Not only Gherkin
45
BDD n’est pas
- Des tests E2E
- Des tests écrits par les QA / PO
- Des tests par les devs en solo
- Not (only) tests
46
47
BDD c’est
https://www.axance.fr/2021/04/20/non-le-behavior-driver-developm
ent-n-est-pas-une-pratique-de-test/
Découverte
- Objectif : formaliser lʼespace du
problème
- Avec : 3 amigos (Dev + QA +
Métier/PO)
- Atelier : example mapping
48
7 bonnes pratiques
49
- Exprimer lʼintention
- Utiliser le langage du métier
- Cacher les détails
- Utiliser des personas (utilisateur et objets)
- Expliciter le “background”
- Un seul “when”
- F.I.R.S.T
http://www.thinkcode.se/blog/2016/06/22/cucumber-antipatterns
Documenter
50
Feature: Pet store queries
Scenario: Get mammals
Given a logged in user :
| email | type |
| a.user@mail.com | customer |
And the pets :
| name | race | category | color | sex |
| Bobby | Dog | mammal | black | male |
| Nemo | Goldfish | fish | red | male |
| Milo | Cat | mammal | gold | female |
When I send a 'GET' request to '{base}/pets'
And I add the query string parameters:
| sort | filter |
| desc | mammal |
Then I should receive a response with the status 200
And the response body json path at "$.[0].type" should equal "Cat"
And the response body json path at "$.[1].type" should equal "Dog"
51
Feature: Pet store queries
Customers wants to filter and sort animals to quickly find the one
that will suit them.
Filtering should be possible by group, species and/or breed.
Background:
Given 'customer' is logged in
And the pets :
| race | category |
| Dog | mammal |
| Cat | mammal |
| Goldfish | fish |
Scenario: Sort and filter pet types
Given 'ascending' sort has been selected
And 'mammal' filter has been selected
When retrieving list of pets
Then results are naturally ordered by name:
| Cat |
| Dog |
52
Créer de la documentation vivante
Par exemple Cukedoctor permet de créer un site statique
pro-tips
Si le métier ne lit pas votre
Gherkin, nʼen écrivez pas.
Écrivez des tests
dʼacceptances unitaires
proprement
53
54
Books
http://bddbooks.com/
55
Live coding
Exemple pratique
56
Le métier ne comprend pas la
réduction sur les fruits locaux.
Celle-ci ne semble pas fixe.
Le jira parle dʼune réduction de 200c.
2. Tester les frontières 57
58
2.1 Tests d’intégrations
Tests d’intégrations (tout ensemble)
59
Présentation
Métier
Persistence
60
Oui mais
- Tests compliqués
- Lent
- Peu explicite
- ...
L’application et son éco-système
Quoi tester ?
62
DB
Présentation
Métier Repositories
HTTP Client
Message
Broker
Message
listener
Métier
Bases de données
63
DB
Présentation
Repositories
HTTP Client
Message
Broker
Message
listener
Services HTTP
64
DB
Présentation
Métier Repositories
HTTP Client
Message
Broker
Message
listener
Mock service
HTTP
Messages brokers
65
DB
Présentation
Métier Repositories
HTTP Client
Message
Broker
Message
listener
Mock Message
queue
Quelques outils
66
Testcontainer
2. Tests dʼintégration
1. Tests fonctionnels (BDD)
2. Tests dʼintégration
Résumé des tests
67
Présentation
Métier
Persistence
Interface
Interface
TU
TU
TU
Article de Thomas Pierrain
http://tpierrain.blogspot.com/2021/03/outside-in-diamond-tdd-1-style-made.html
68
69
2.2 Contract Testing
Micro-Services ...
Micro-Services ...
Un contrat
Interaction :
Requête
HTTP GET /products/1
Réponse :
HTTP 200
{
id: 1,
Name: “Shoes”
}
73
Test du consumer
Contract
Expected
Request
Expected
Response
Actual
Request
Actual
Response
Provider Mock
Consumer
Send request
Compare
Compare
74
Test du provider
Expected
Request
Actual
Response
Consumer Mock Provider
Send request
Compare
Contract
Expected
Request
Expected
Response
75
Un “standard”
76
Présentation de code
77
2.3 User Interface Testing
78
“Il faudrait tout tester du point de vue de l’utilisateur
! ”
“Ok, on va lancer
la plateforme sur
un env de test et
on va utiliser un
framework de
test E2E ! ”
79
Web : CypressJS, Puppeeter/Playwright/Webdriver, Codecept
- Android : Expresso - iOS: XCTest - Multi : Browserstack
80
- Coûteux
- Lents (réseau)
- Non répétable
- Imprécis
- Difficile à analyser
Malheureusement, les tests UI sont (souvent)
Le graal
Avoir un framework qui puisse se
synchroniser avec lʼUI (composée de
tâche asynchrone).
Même dans ce cas, lʼE2E reste
déconseillé.
81
82
1ère possibilité
Tester uniquement le front en mockant le back-end
Cela permet de :
- Maîtriser les données
- Avoir peu ou pas de lenteur due au réseau
Les fronts ont leur propre pyramide de tests (Unit + UI)
83
2ème possibilité
Tester quelques scénarios typiques dʼutilisation en E2E
- loi des 20/80
Par exemple:
Smoke tests en prod
Feature: Pizza purchase journey
@journey
Scenario: Pay-on-collection journey
* Reggie visits our website
* he adds a pizza to his basket
* he enters valid contact details
* he chooses pay-on-collection
* he receives an order confirmation
84
Indispensable ! Le pattern Page Object
Attention à la duplication !
Représentez les pages par
des “objets” avec lesquels
les scénarios vont interagir.
Ces objets fournissent une
API plus métier et encapsule
lʼaccès / interaction lié au
DOM
Autres : app action (cypress), Screenplay pattern
3. Vers l’infini et au delà 85
86
3.1 Exploration Testing
QA
On parle des tests depuis le début
sans parler du rôle de QA.
Étonnant non ?
87
Nos QAs vérifient que les devs ont bien
fait leur travail
88
https://dannorth.net/2021/07/26/we-need-to-talk-about-testing/
Pourquoi faire des tests exploratoires ?
- Progresser dans la compréhension profonde du
produit / métier
- Améliorer lʼutilisabilité et la stabilité
- Pousser le produit dans ses retranchements
89
90
Trouver les mines avant l’utilisateur - Maaret Pyhäjärvi
“
A QA engineer walks into a bar.
Orders a beer. Orders 0 beers. Orders
999999999 beers. Orders a lizard. Orders
-1 beers. Orders a sfdeljknesv.
91
Exploration
testing
Une approche structurée
nécessitant une préparation
rigoureuse et nécessitant
beaucoup de créativité.
Cʼest le talent des bons QAs.
92
Pourquoi faire des tests exploratoires ?
- Progresser dans la compréhension profonde du
produit / métier
- Améliorer lʼutilisabilité et la stabilité
- Pousser le produit dans ses retranchements
Une très bonne façon de trouver des anomalies sur le
besoin et lʼimplémentation qui seraient difficilement
découverts par des tests formels
93
94
Structure,Function,Data,Plateform,Operations
Ateliers
Example Mapping
Exemple pratique
95
Quand jʼajoute 11 fraises au prix
dʼ25c avec une offre dʼune fraise
offerte pour 4 achetées et les offres
du panier :
- Plus de 4 pommes
- Plus de 10 fruits
- Fruits locaux
Le total affiche -20c
96
3.2 Property Based Testing
Automatiser
Faire écrire des cas dʼexemples à un robot.
97
Une propriété
Vérifiée pour tous les cas générés.
98
Un générateur
Génère des cas de test
99
Exécution
100
Generate
Inputs
Property
(Input) ?
False
True
System
under
test
Result
String.concat(s1, s2)
“abc” “def” result.size = s1.size +
s2.size
101
Trouver des propriétés
102
Trouver des propriétés
- Généraliser à partir dʼun exemple
- Trouver des invariants (propriété toujours vraie)
- Trouver des symétries
- Comparer à un modèle
103
Des outils ?
Tools
Jqwik, QuickTheories, QuickCheck, ScalaCheck
104
105
Attention /!
PBT vs TDD
Le property based testing
ne remplace pas TDD
Mais ça complète
106
Prod vs Test
Ne pas recréer le code
métier dans les tests
107
108
Présentation de code
109
3.3 Testing (in) production
Il n‘est pas
possible de
prévoir toutes
les conditions
d’échec en
dehors de la
prod
110
“
111
Lorsque les systèmes tombent en panne, ils le font
toujours de manière surprenante et imprévisible.
-- Cindy Sridharan
@copyconstruct
Que se passe-t-il quand un incident arrive sur votre prod ?
“ Les systèmes doivent
continuer à fonctionner
même si ʻla maison est en
feuʼ. ”
-- Werner Vogels
CTO Amazon
112
Que se passe-t-il quand un incident arrive sur votre prod ?
“if it hurts, do it more
often, and bring the pain
forward.”
-- Continuous Delivery
113
“
114
Nous devions construire des systèmes qui acceptent
l'échec comme une occurrence naturelle, même si
nous ne savons pas ce quel pouvait être cet échec.
Les systèmes doivent continuer à fonctionner même
si "la maison est en feu".
-- Werner Vogels
CTO Amazon
115
Cindy Sridharan - https://copyconstruct.medium.com/testing-in-production-the-safe-way-18ca102d0ef1
116
Quelques pratiques
Changer une
seule chose à
la fois
117
Vers des applications anti-fragile ?
Fragile
118
Robuste
Résilient
Anti
fragile
Tests
pre-production
Peu de tests
Tests en
production
Amélioration de
la chaîne de tests
et de la qualité
du service
119
Et la sécurité ? Vaste sujet !
- De bonnes pratiques
vérifiables pré-prod
(OWASP)
- Voir les trés bonne confs de notre ami Julien
Topçu comme “Comment se faire hacker
bien comme il faut!”
- Des pratiques vérifiables en
prod (bug bounty)
120
121
En
résumé
122
Une bonne stratégie de tests vous permet ...
- Dʼavoir la sérénité de changer lʼexistant
- Dʼavoir un cycle de feedback court
- De documenter votre code métier
- Dʼavoir le bon retour sur investissement
- De livrer régulièrement en production
- De créer une résilience opérationnelle
123
Une bonne stratégie de tests est basée sur:
- Un maximum de tests orientés métier ultra rapide
- Un design permettant de les faciliter
- Lʼutilisation efficiente de tests dʼintégration, UI ou E2E
- La capacité dʼutiliser des outils de tests avancées
- Contract testing
- Fuzzing / Property based testing
- Mutation testing
- Lʼutilisation de lʼexpertise des QAs
- Le fait de ne jamais oublier que la production est la
seule vérité
Diviser pour
mieux
régner
124
2. Tests dʼintégration
1. Tests fonctionnels (BDD)
2. Tests dʼintégration
Une application...
125
Présentation
Métier
Persistence
Interface
Interface
TU
TU
TU
...ça se découpe
126
Présentation
Métier
Persistence
Métier Métier
Persistence Persistence Persistence
Présentation Présentation
L’art des
compromis
127
128
Eviter les tests trop fins
129
UI tests
E2E test
Tests bas niveau
(Test dʼune classe) Rend le design rigide
Couteux, lent, ...
Tests dʼintégration
Tests dʼacceptances
Tests Guerkin
“Pyramide” des tests
Le bon compromis
Selon la
criticité
130
131
Comment commencer
- Tests dʼacceptances unitaires
- Test dʼintégrations
- BDD
- Mutation Testing
- Property Based testing
- Testing in production
#DevoxxFR
Merci à vous et aux orgas !
Vous trouverez les slides ici :
http://shorturl.at/efIZ0
Et le code ici:
https://github.com/ygrenzinger/testing-overview-university
Presentation template by SlidesCarnival
Photographs by Unsplash
13
2
133
“
Quotations are commonly printed
as a means of inspiration and to
invoke philosophical thoughts
from the reader.
134
This is a slide title
◎ Here you have a list of items
◎ And some text
◎ But remember not to overload your slides with
content
Your audience will listen to you or read the content, but
wonʼt do both.
135
Big concept
Bring the attention of your
audience over a key concept
using icons or illustrations
136
White
Is the color of milk and fresh
snow, the color produced by the
combination of all the colors of
the visible spectrum.
You can also split your content
Black
Is the color of coal, ebony, and of
outer space. It is the darkest
color, the result of the absence of
or complete absorption of light.
137
In two or three columns
Yellow
Is the color of gold,
butter and ripe lemons.
In the spectrum of
visible light, yellow is
found between green
and orange.
Blue
Is the colour of the
clear sky and the deep
sea. It is located
between violet and
green on the optical
spectrum.
Red
Is the color of blood,
and because of this it
has historically been
associated with
sacrifice, danger and
courage.
138
A picture is worth a thousand words
A complex idea can be
conveyed with just a single
still image, namely making
it possible to absorb large
amounts of data quickly.
139
Want big
impact?
Use big image.
140
Use charts to explain your ideas
Gray
White Black
141
Or diagrams to explain complex ideas
Example text.
Lorem ipsum dolor sit amet,
consectetur adipiscing elit.
Nam venenatis nisi at nisl
tempor, et luctus diam
lobortis. Nulla sit amet metus
consequat velit iaculis
tempor.
Example text.
Lorem ipsum dolor sit amet,
consectetur adipiscing elit.
Nam venenatis nisi at nisl
tempor, et luctus diam
lobortis. Nulla sit amet metus
consequat velit iaculis
tempor.
142
And tables to compare data
A B C
Yellow 10 20 7
Blue 30 15 10
Orange 5 24 16
143
Maps
our office
144
89,526,124
Whoa! Thatʼs a big number, arenʼt you proud?
145
89,526,124$
Thatʼs a lot of money
100%
Total success!
185,244 users
And a lot of users
146
Our process is easy
first
second
last
147
Let’s review some concepts
Yellow
Is the color of gold, butter and ripe
lemons. In the spectrum of visible
light, yellow is found between
green and orange.
Blue
Is the colour of the clear sky and
the deep sea. It is located between
violet and green on the optical
spectrum.
Red
Is the color of blood, and because
of this it has historically been
associated with sacrifice, danger
and courage.
Yellow
Is the color of gold, butter and ripe
lemons. In the spectrum of visible
light, yellow is found between
green and orange.
Blue
Is the colour of the clear sky and
the deep sea. It is located between
violet and green on the optical
spectrum.
Red
Is the color of blood, and because
of this it has historically been
associated with sacrifice, danger
and courage.
148
You can copy&paste graphs from Google Sheets
149
Mobile project
Show and explain your web,
app or software projects using
these gadget templates.
150
Place your screenshot here
Tablet project
Show and explain your web,
app or software projects using
these gadget templates.
151
Place your screenshot here
Place your screenshot here
Desktop project
Show and explain your web, app or software projects using these gadget templates.
152
Thanks!
Any questions?
You can find me at:
@username & user@mail.me
153
Credits
Special thanks to all the people who made and released
these awesome resources for free:
◎ Presentation template by SlidesCarnival
◎ Photographs by Unsplash
154
Presentation design
This presentations uses the following typographies and colors:
◎ Titles: Roboto Slab
◎ Body copy: Source Sans Pro
You can download the fonts on these pages:
https://www.fontsquirrel.com/fonts/roboto-slab
https://www.fontsquirrel.com/fonts/source-sans-pro
◎ Blue #0091ea
◎ Dark gray #263238
◎ Medium gray #607d8b
◎ Light gray #cfd8dc
You donʼt need to keep this slide in your presentation. Itʼs only here to serve you
as a design guide if you need to create new slides or download the fonts to edit
the presentation in PowerPoint®
155
156
SlidesCarnival icons are editable shapes.
This means that you can:
● Resize them without losing quality.
● Change line color, width and style.
Isnʼt that nice? :)
Examples:
Diagrams and infographics
157
Now you can use any emoji as an icon!
And of course it resizes without losing quality and you can change the color.
How? Follow Google instructions
https://twitter.com/googledocs/status/730087240156643328
✋👆👉👍👤👦👧👨👩👪💃🏃
💑❤😂😉😋😒😭👶😸🐟🍒🍔
💣📌📖🔨🎃🎈🎨🏈🏰🌏🔌🔑
and many more...
��
158
Free templates for all your presentation needs
Ready to use,
professional and
customizable
100% free for personal
or commercial use
Blow your audience
away with attractive
visuals
For PowerPoint and
Google Slides

Contenu connexe

Similaire à Tour d'horizon des tests

Qualité logicielle
Qualité logicielleQualité logicielle
Qualité logiciellecyrilgandon
 
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
Agile Tour 2009 Québec
 
AgileTour Strasbourg 2011 BDD with jBehave
AgileTour Strasbourg 2011 BDD with jBehaveAgileTour Strasbourg 2011 BDD with jBehave
AgileTour Strasbourg 2011 BDD with jBehave
Cedric Vidal
 
Valider par des tests - Blend
Valider par des tests - BlendValider par des tests - Blend
Valider par des tests - Blend
Christophe Villeneuve
 
Propulser votre architecture grâce aux mocks
Propulser votre architecture grâce aux mocksPropulser votre architecture grâce aux mocks
Propulser votre architecture grâce aux mocks
Elapse Technologies
 
AT2010 Principes Integration Continue
AT2010 Principes Integration ContinueAT2010 Principes Integration Continue
AT2010 Principes Integration Continue
Normandy JUG
 
Human Talks Grenoble - 11/12/2012 - TDD
Human Talks Grenoble - 11/12/2012 - TDDHuman Talks Grenoble - 11/12/2012 - TDD
Human Talks Grenoble - 11/12/2012 - TDD
Xavier NOPRE
 
Mix-IT 2013 - Agilistes : n'oubliez pas la technique - mix-it 2013
Mix-IT 2013 - Agilistes : n'oubliez pas la technique - mix-it 2013Mix-IT 2013 - Agilistes : n'oubliez pas la technique - mix-it 2013
Mix-IT 2013 - Agilistes : n'oubliez pas la technique - mix-it 2013
Xavier NOPRE
 
Traits : de la théorie à la pratique
Traits : de la théorie à la pratiqueTraits : de la théorie à la pratique
Traits : de la théorie à la pratiqueFrederic Hardy
 
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
Thierry Gayet
 
Test unitaires - refactoring - clean code
Test unitaires - refactoring - clean codeTest unitaires - refactoring - clean code
Test unitaires - refactoring - clean code
Hadrien Blanc
 
BBL - TDD pour les DevOps - Puppet
BBL - TDD pour les DevOps - PuppetBBL - TDD pour les DevOps - Puppet
BBL - TDD pour les DevOps - Puppet
Olivier BAZOUD
 
Tdd en action - découverte
Tdd en action - découverteTdd en action - découverte
Tdd en action - découverteEric Mignot
 
Université de la performance
Université de la performanceUniversité de la performance
Université de la performance
pkernevez
 
Les cinq bonnes pratiques des Tests Unitaires dans un projet Agile
Les cinq bonnes pratiques des Tests Unitaires dans un projet AgileLes cinq bonnes pratiques des Tests Unitaires dans un projet Agile
Les cinq bonnes pratiques des Tests Unitaires dans un projet Agile
Denis Voituron
 
Développement en méthode agile
Développement en méthode agileDéveloppement en méthode agile
Développement en méthode agilelaurent bristiel
 
Université du soir - TDD
Université du soir - TDDUniversité du soir - TDD
Université du soir - TDD
Jean-Baptiste Vigneron
 
Anatomie du test
Anatomie du testAnatomie du test
Anatomie du test
Frederic Hardy
 
Flex Unit Testing
Flex Unit TestingFlex Unit Testing
Flex Unit Testing
Christophe Keromen
 
[Agile Testing Day] Test Driven Development (TDD)
[Agile Testing Day] Test Driven Development (TDD)[Agile Testing Day] Test Driven Development (TDD)
[Agile Testing Day] Test Driven Development (TDD)
Cellenza
 

Similaire à Tour d'horizon des tests (20)

Qualité logicielle
Qualité logicielleQualité logicielle
Qualité logicielle
 
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
 
AgileTour Strasbourg 2011 BDD with jBehave
AgileTour Strasbourg 2011 BDD with jBehaveAgileTour Strasbourg 2011 BDD with jBehave
AgileTour Strasbourg 2011 BDD with jBehave
 
Valider par des tests - Blend
Valider par des tests - BlendValider par des tests - Blend
Valider par des tests - Blend
 
Propulser votre architecture grâce aux mocks
Propulser votre architecture grâce aux mocksPropulser votre architecture grâce aux mocks
Propulser votre architecture grâce aux mocks
 
AT2010 Principes Integration Continue
AT2010 Principes Integration ContinueAT2010 Principes Integration Continue
AT2010 Principes Integration Continue
 
Human Talks Grenoble - 11/12/2012 - TDD
Human Talks Grenoble - 11/12/2012 - TDDHuman Talks Grenoble - 11/12/2012 - TDD
Human Talks Grenoble - 11/12/2012 - TDD
 
Mix-IT 2013 - Agilistes : n'oubliez pas la technique - mix-it 2013
Mix-IT 2013 - Agilistes : n'oubliez pas la technique - mix-it 2013Mix-IT 2013 - Agilistes : n'oubliez pas la technique - mix-it 2013
Mix-IT 2013 - Agilistes : n'oubliez pas la technique - mix-it 2013
 
Traits : de la théorie à la pratique
Traits : de la théorie à la pratiqueTraits : de la théorie à la pratique
Traits : de la théorie à la pratique
 
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
 
Test unitaires - refactoring - clean code
Test unitaires - refactoring - clean codeTest unitaires - refactoring - clean code
Test unitaires - refactoring - clean code
 
BBL - TDD pour les DevOps - Puppet
BBL - TDD pour les DevOps - PuppetBBL - TDD pour les DevOps - Puppet
BBL - TDD pour les DevOps - Puppet
 
Tdd en action - découverte
Tdd en action - découverteTdd en action - découverte
Tdd en action - découverte
 
Université de la performance
Université de la performanceUniversité de la performance
Université de la performance
 
Les cinq bonnes pratiques des Tests Unitaires dans un projet Agile
Les cinq bonnes pratiques des Tests Unitaires dans un projet AgileLes cinq bonnes pratiques des Tests Unitaires dans un projet Agile
Les cinq bonnes pratiques des Tests Unitaires dans un projet Agile
 
Développement en méthode agile
Développement en méthode agileDéveloppement en méthode agile
Développement en méthode agile
 
Université du soir - TDD
Université du soir - TDDUniversité du soir - TDD
Université du soir - TDD
 
Anatomie du test
Anatomie du testAnatomie du test
Anatomie du test
 
Flex Unit Testing
Flex Unit TestingFlex Unit Testing
Flex Unit Testing
 
[Agile Testing Day] Test Driven Development (TDD)
[Agile Testing Day] Test Driven Development (TDD)[Agile Testing Day] Test Driven Development (TDD)
[Agile Testing Day] Test Driven Development (TDD)
 

Plus de yannick grenzinger

Software Craftmanship - Cours Polytech
Software Craftmanship - Cours PolytechSoftware Craftmanship - Cours Polytech
Software Craftmanship - Cours Polytech
yannick grenzinger
 
Microservices depuis les tranchées
Microservices depuis les tranchéesMicroservices depuis les tranchées
Microservices depuis les tranchées
yannick grenzinger
 
From Scrum To Flow
From Scrum To FlowFrom Scrum To Flow
From Scrum To Flow
yannick grenzinger
 
Changements - psychologie systémique
Changements - psychologie systémiqueChangements - psychologie systémique
Changements - psychologie systémique
yannick grenzinger
 
Spirale dynamique - Mieux comprendre les organisations
Spirale dynamique - Mieux comprendre les organisationsSpirale dynamique - Mieux comprendre les organisations
Spirale dynamique - Mieux comprendre les organisations
yannick grenzinger
 
Paradigms programming from functional to multi-agent dataflow
Paradigms programming  from functional to multi-agent dataflowParadigms programming  from functional to multi-agent dataflow
Paradigms programming from functional to multi-agent dataflow
yannick grenzinger
 
Guerilla DDD
Guerilla DDDGuerilla DDD
Guerilla DDD
yannick grenzinger
 
Docker introduction for Carbon IT
Docker introduction for Carbon ITDocker introduction for Carbon IT
Docker introduction for Carbon IT
yannick grenzinger
 
Le design du code de tous les jours
Le design du code  de tous les joursLe design du code  de tous les jours
Le design du code de tous les jours
yannick grenzinger
 
Spirale Dynamique et Organisations
Spirale Dynamique et OrganisationsSpirale Dynamique et Organisations
Spirale Dynamique et Organisations
yannick grenzinger
 
BBL - Lean Startup
BBL - Lean StartupBBL - Lean Startup
BBL - Lean Startup
yannick grenzinger
 
Construisons des organisations adaptées au 21ème siècle
 Construisons des organisations adaptées au 21ème siècle Construisons des organisations adaptées au 21ème siècle
Construisons des organisations adaptées au 21ème siècle
yannick grenzinger
 
Coding fast and slow
Coding fast and slowCoding fast and slow
Coding fast and slow
yannick grenzinger
 
Liberez vos developpeurs
Liberez vos developpeursLiberez vos developpeurs
Liberez vos developpeurs
yannick grenzinger
 
Devoxx france 2015 - Coding Fast and Slow
Devoxx france 2015 - Coding Fast and SlowDevoxx france 2015 - Coding Fast and Slow
Devoxx france 2015 - Coding Fast and Slow
yannick grenzinger
 
Introduction à la Gamification
Introduction à la GamificationIntroduction à la Gamification
Introduction à la Gamification
yannick grenzinger
 
Apprendre à apprendre pour innover, s'adapter et surtout survivre au 21ème si...
Apprendre à apprendre pour innover, s'adapter et surtout survivre au 21ème si...Apprendre à apprendre pour innover, s'adapter et surtout survivre au 21ème si...
Apprendre à apprendre pour innover, s'adapter et surtout survivre au 21ème si...
yannick grenzinger
 
Creons des produits exceptionnels
Creons des produits exceptionnelsCreons des produits exceptionnels
Creons des produits exceptionnelsyannick grenzinger
 

Plus de yannick grenzinger (18)

Software Craftmanship - Cours Polytech
Software Craftmanship - Cours PolytechSoftware Craftmanship - Cours Polytech
Software Craftmanship - Cours Polytech
 
Microservices depuis les tranchées
Microservices depuis les tranchéesMicroservices depuis les tranchées
Microservices depuis les tranchées
 
From Scrum To Flow
From Scrum To FlowFrom Scrum To Flow
From Scrum To Flow
 
Changements - psychologie systémique
Changements - psychologie systémiqueChangements - psychologie systémique
Changements - psychologie systémique
 
Spirale dynamique - Mieux comprendre les organisations
Spirale dynamique - Mieux comprendre les organisationsSpirale dynamique - Mieux comprendre les organisations
Spirale dynamique - Mieux comprendre les organisations
 
Paradigms programming from functional to multi-agent dataflow
Paradigms programming  from functional to multi-agent dataflowParadigms programming  from functional to multi-agent dataflow
Paradigms programming from functional to multi-agent dataflow
 
Guerilla DDD
Guerilla DDDGuerilla DDD
Guerilla DDD
 
Docker introduction for Carbon IT
Docker introduction for Carbon ITDocker introduction for Carbon IT
Docker introduction for Carbon IT
 
Le design du code de tous les jours
Le design du code  de tous les joursLe design du code  de tous les jours
Le design du code de tous les jours
 
Spirale Dynamique et Organisations
Spirale Dynamique et OrganisationsSpirale Dynamique et Organisations
Spirale Dynamique et Organisations
 
BBL - Lean Startup
BBL - Lean StartupBBL - Lean Startup
BBL - Lean Startup
 
Construisons des organisations adaptées au 21ème siècle
 Construisons des organisations adaptées au 21ème siècle Construisons des organisations adaptées au 21ème siècle
Construisons des organisations adaptées au 21ème siècle
 
Coding fast and slow
Coding fast and slowCoding fast and slow
Coding fast and slow
 
Liberez vos developpeurs
Liberez vos developpeursLiberez vos developpeurs
Liberez vos developpeurs
 
Devoxx france 2015 - Coding Fast and Slow
Devoxx france 2015 - Coding Fast and SlowDevoxx france 2015 - Coding Fast and Slow
Devoxx france 2015 - Coding Fast and Slow
 
Introduction à la Gamification
Introduction à la GamificationIntroduction à la Gamification
Introduction à la Gamification
 
Apprendre à apprendre pour innover, s'adapter et surtout survivre au 21ème si...
Apprendre à apprendre pour innover, s'adapter et surtout survivre au 21ème si...Apprendre à apprendre pour innover, s'adapter et surtout survivre au 21ème si...
Apprendre à apprendre pour innover, s'adapter et surtout survivre au 21ème si...
 
Creons des produits exceptionnels
Creons des produits exceptionnelsCreons des produits exceptionnels
Creons des produits exceptionnels
 

Dernier

Le Comptoir OCTO - Équipes infra et prod, ne ratez pas l'embarquement pour l'...
Le Comptoir OCTO - Équipes infra et prod, ne ratez pas l'embarquement pour l'...Le Comptoir OCTO - Équipes infra et prod, ne ratez pas l'embarquement pour l'...
Le Comptoir OCTO - Équipes infra et prod, ne ratez pas l'embarquement pour l'...
OCTO Technology
 
De l'IA comme plagiat à la rédaction d'une « charte IA » à l'université
De l'IA comme plagiat à la rédaction d'une « charte IA » à l'universitéDe l'IA comme plagiat à la rédaction d'une « charte IA » à l'université
De l'IA comme plagiat à la rédaction d'une « charte IA » à l'université
Université de Franche-Comté
 
Ouvrez la porte ou prenez un mur (Agile Tour Genève 2024)
Ouvrez la porte ou prenez un mur (Agile Tour Genève 2024)Ouvrez la porte ou prenez un mur (Agile Tour Genève 2024)
Ouvrez la porte ou prenez un mur (Agile Tour Genève 2024)
Laurent Speyser
 
Le support de présentation des Signaux 2024
Le support de présentation des Signaux 2024Le support de présentation des Signaux 2024
Le support de présentation des Signaux 2024
UNITECBordeaux
 
OCTO TALKS : 4 Tech Trends du Software Engineering.pdf
OCTO TALKS : 4 Tech Trends du Software Engineering.pdfOCTO TALKS : 4 Tech Trends du Software Engineering.pdf
OCTO TALKS : 4 Tech Trends du Software Engineering.pdf
OCTO Technology
 
Le Comptoir OCTO - Qu’apporte l’analyse de cycle de vie lors d’un audit d’éco...
Le Comptoir OCTO - Qu’apporte l’analyse de cycle de vie lors d’un audit d’éco...Le Comptoir OCTO - Qu’apporte l’analyse de cycle de vie lors d’un audit d’éco...
Le Comptoir OCTO - Qu’apporte l’analyse de cycle de vie lors d’un audit d’éco...
OCTO Technology
 

Dernier (6)

Le Comptoir OCTO - Équipes infra et prod, ne ratez pas l'embarquement pour l'...
Le Comptoir OCTO - Équipes infra et prod, ne ratez pas l'embarquement pour l'...Le Comptoir OCTO - Équipes infra et prod, ne ratez pas l'embarquement pour l'...
Le Comptoir OCTO - Équipes infra et prod, ne ratez pas l'embarquement pour l'...
 
De l'IA comme plagiat à la rédaction d'une « charte IA » à l'université
De l'IA comme plagiat à la rédaction d'une « charte IA » à l'universitéDe l'IA comme plagiat à la rédaction d'une « charte IA » à l'université
De l'IA comme plagiat à la rédaction d'une « charte IA » à l'université
 
Ouvrez la porte ou prenez un mur (Agile Tour Genève 2024)
Ouvrez la porte ou prenez un mur (Agile Tour Genève 2024)Ouvrez la porte ou prenez un mur (Agile Tour Genève 2024)
Ouvrez la porte ou prenez un mur (Agile Tour Genève 2024)
 
Le support de présentation des Signaux 2024
Le support de présentation des Signaux 2024Le support de présentation des Signaux 2024
Le support de présentation des Signaux 2024
 
OCTO TALKS : 4 Tech Trends du Software Engineering.pdf
OCTO TALKS : 4 Tech Trends du Software Engineering.pdfOCTO TALKS : 4 Tech Trends du Software Engineering.pdf
OCTO TALKS : 4 Tech Trends du Software Engineering.pdf
 
Le Comptoir OCTO - Qu’apporte l’analyse de cycle de vie lors d’un audit d’éco...
Le Comptoir OCTO - Qu’apporte l’analyse de cycle de vie lors d’un audit d’éco...Le Comptoir OCTO - Qu’apporte l’analyse de cycle de vie lors d’un audit d’éco...
Le Comptoir OCTO - Qu’apporte l’analyse de cycle de vie lors d’un audit d’éco...
 

Tour d'horizon des tests

  • 1. #DevoxxFR Devoxx France 2021 Tour d’horizon des tests logiciels Maxime Gellé @maxime_gelle Yannick Grenzinger @ygrenzinger 1
  • 2. 2
  • 5. 5 Sommaire 1. Tester le coeur du métier 1.1. TDD et tests dʼacceptance unitaires 1.2. Sacraliser le domaine métier 1.3. Mutation testing 1.4. BDD et documentation vivante 2. Tester les frontières 2.2. Integration tests 2.3. Contract testing 2.4. UI testing 3. Vers lʼinfini et au delà 3.1. Exploration testing 3.2. Property Based Testing 3.3. Testing in production Retour aux bases - 1ère moitié Allons plus loin - 2nd moitié
  • 6. Cette conférence est: - Un avis basé sur nos expériences - Basée sur nos définitions - Limité par lʼétat de nos connaissances - Limité par le temps 6
  • 7. “Standing on the shoulder of giants” 7 Merci à Kent Beck Martin Fowler Ian Cooper Seb Rose Thomas Pierrain Et beaucoup dʼautres :)
  • 8. Notre exemple pratique : fruit shop kata 8 Une caisse enregistreuse Un panier de fruits Des réductions - 1 offert pour X fruits achetés - 200c de réduction si plus de 10 fruits
  • 9. Notre exemple pratique : l’architecture 9 Présentation Métier Repository + Model
  • 10. 1. Tester le cœur du métier 10
  • 11. 11 1.1 TDD et tests d’acceptance unitaires
  • 12. Pourquoi tester ? - Aligner le code avec le besoin - Éliminer la peur du changement - Créer un filet de sécurité qui rend le déploiement en production plus sûr. - Avoir un premier utilisateur du code (feedback court) 12
  • 13. Tester pour couvrir des lignes de code 13
  • 14. Qu’est-ce qu’un bon test ? (FIRST) - Rapide - (Isolé) Indépendant - Répétable - Auto-vérifiable - Au bon moment (TDD ?) 14
  • 15. Un test d’acceptance unitaire est rapide, en mémoire, cohérent, automatisé et reproductible et permet de valider un comportement / règle métier en isolation des autres et des effets de bords 15
  • 16. “ Un test unitaire est un test rapide, en mémoire, cohérent, automatisé et reproductible d'une unité de travail fonctionnelle du système. Une unité de travail est un scénario fonctionnel du système. Elle peut être aussi courte qu'une fonction, ou couvrir plusieurs classes et fonctions, et elle fournit une valeur interne ou commerciale au système testé. -- Roy Osherove “The Art of unit testing” 16
  • 17. Zen Les tests ne prouvent pas lʼabsence dʼerreurs. Mais la présence dʼune correction à une erreur (aka fonctionnel attendu) 17 Ce qui nous amène à TDD
  • 18. Test Driven Development 18 Traduire une exigence en un test falsifiable. Le test représente un besoin métier. Le code compile. Ecrire le code le plus simple pour faire passer le test. Nʼhésitez pas à tricher ! “do it sinfully” Vous pouvez ré-écrire (refactor) et généraliser le code en y mettant design, pattern, beauté.
  • 19. TDD similaire à la méthode scientifique La méthode scientifique TDD Question Besoin Prediction Sortie attendue Expérimentation Lancer le test Sujet de l’expérimentation Code de l’implémentation On est lʼopposée du test de non régression
  • 20. Le TDD c’est dur ! - Discipline - Désapprendre - Comprendre le besoin - Petit pas ○ Test && Commit || Revert Plus de détails avec lʼarticle de Dorra Bartaguiz https://www.arolla.fr/blog/2020/03/comment- reussir-son-regime-tdd/ 20
  • 21. Mais cela a de gros avantages - Une meilleur compréhension du besoin - De meilleurs tests (aka documentation) - Du meilleur code - Moins de complexité accidentelle - Du design émergent 21
  • 22. 22
  • 23. L’isolation, l’incompréhension du test unitaire Lʼisolation ce nʼest pas : une classe == une classe de test. Ce qui mène à la sur-utilisation des mocks. Ce qui mène à la colère. (TDD is dead) 23
  • 24. D’autres raisons de cette colère - Si changer lʼimplémentation casse régulièrement beaucoup de tests - Si lʼintention des tests est difficile à comprendre - Sʼil y a un déséquilibre entre les tests et lʼimplémentation (ou le System Under Test) 24
  • 26. Exemple pratique 26 Ajouter une réduction : 100c de réduction si plus de 4 fruits différents
  • 27. 27 1.2 Sacraliser le domaine métier
  • 29. SOLID Dependency Inversion “Les modules de haut niveau ne doivent pas dépendre de modules de bas niveau.” Quoi tester ? 29 Présentation Métier Persistence
  • 30. Architecture - Architecture hexagonale - Clean Architecture - Imperative Shell, Functional Core - ... 30
  • 34. 34 La couverture de code traditionnelle ne mesure que le code exécuté par vos tests.
  • 35. 35
  • 36. 36
  • 38. “Gold standard” Imaginée dans en 1971 avec une 1ère implémentation en 1980, le mutation testing détecte si chaque ligne est testée de manière significative. 38
  • 39. Mutants Les mutations sont automatiquement introduites dans le code, puis les tests sont exécutés. Si les tests échouent <> la mutation est tuée Si vos tests réussissent <> la mutation est vivante 39
  • 40. 40 Exemples de mutations et de résultat possible - Opérateurs (Math, Comparaison …) - Inverser les conditions - Changer les valeurs de retours - Ne pas appeler les méthodes n’ayant pas de retours https://pitest.org/qui ckstart/mutators
  • 42. 42 1.4 BDD et documentation vivante
  • 43. 43 “Nos devs et le métier ne se comprennent pas ! Comment faire ?” “Ok, on va imposer Cucumber !”
  • 44. 44 Un exemple de Guerkin Feature: Pet store queries Scenario: Get mammals Given a logged in user : | email | type | | a.user@mail.com | Buyer | And the pets : | name | race | category | color | sex | | Bobby | Dog | mammal | black | male | | Nemo | Goldfish | fish | red | male | | Milo | Cat | mammal | gold | female | When I send a 'GET' request to '{base}/pets' And I add the query string parameters: | sort | filter | | desc | mammal | Then I should receive a response with the status 200 And the response body json path at "$.[0].type" should equal "Cat" And the response body json path at "$.[1].type" should equal "Dog"
  • 45. BDD - Dan North - Spécification par lʼexemple - Not only Gherkin 45
  • 46. BDD n’est pas - Des tests E2E - Des tests écrits par les QA / PO - Des tests par les devs en solo - Not (only) tests 46
  • 48. Découverte - Objectif : formaliser lʼespace du problème - Avec : 3 amigos (Dev + QA + Métier/PO) - Atelier : example mapping 48
  • 49. 7 bonnes pratiques 49 - Exprimer lʼintention - Utiliser le langage du métier - Cacher les détails - Utiliser des personas (utilisateur et objets) - Expliciter le “background” - Un seul “when” - F.I.R.S.T http://www.thinkcode.se/blog/2016/06/22/cucumber-antipatterns Documenter
  • 50. 50 Feature: Pet store queries Scenario: Get mammals Given a logged in user : | email | type | | a.user@mail.com | customer | And the pets : | name | race | category | color | sex | | Bobby | Dog | mammal | black | male | | Nemo | Goldfish | fish | red | male | | Milo | Cat | mammal | gold | female | When I send a 'GET' request to '{base}/pets' And I add the query string parameters: | sort | filter | | desc | mammal | Then I should receive a response with the status 200 And the response body json path at "$.[0].type" should equal "Cat" And the response body json path at "$.[1].type" should equal "Dog"
  • 51. 51 Feature: Pet store queries Customers wants to filter and sort animals to quickly find the one that will suit them. Filtering should be possible by group, species and/or breed. Background: Given 'customer' is logged in And the pets : | race | category | | Dog | mammal | | Cat | mammal | | Goldfish | fish | Scenario: Sort and filter pet types Given 'ascending' sort has been selected And 'mammal' filter has been selected When retrieving list of pets Then results are naturally ordered by name: | Cat | | Dog |
  • 52. 52 Créer de la documentation vivante Par exemple Cukedoctor permet de créer un site statique
  • 53. pro-tips Si le métier ne lit pas votre Gherkin, nʼen écrivez pas. Écrivez des tests dʼacceptances unitaires proprement 53
  • 56. Exemple pratique 56 Le métier ne comprend pas la réduction sur les fruits locaux. Celle-ci ne semble pas fixe. Le jira parle dʼune réduction de 200c.
  • 57. 2. Tester les frontières 57
  • 59. Tests d’intégrations (tout ensemble) 59 Présentation Métier Persistence
  • 60. 60 Oui mais - Tests compliqués - Lent - Peu explicite - ...
  • 61. L’application et son éco-système
  • 62. Quoi tester ? 62 DB Présentation Métier Repositories HTTP Client Message Broker Message listener
  • 63. Métier Bases de données 63 DB Présentation Repositories HTTP Client Message Broker Message listener
  • 64. Services HTTP 64 DB Présentation Métier Repositories HTTP Client Message Broker Message listener Mock service HTTP
  • 65. Messages brokers 65 DB Présentation Métier Repositories HTTP Client Message Broker Message listener Mock Message queue
  • 67. 2. Tests dʼintégration 1. Tests fonctionnels (BDD) 2. Tests dʼintégration Résumé des tests 67 Présentation Métier Persistence Interface Interface TU TU TU
  • 68. Article de Thomas Pierrain http://tpierrain.blogspot.com/2021/03/outside-in-diamond-tdd-1-style-made.html 68
  • 72. Un contrat Interaction : Requête HTTP GET /products/1 Réponse : HTTP 200 { id: 1, Name: “Shoes” }
  • 74. 74 Test du provider Expected Request Actual Response Consumer Mock Provider Send request Compare Contract Expected Request Expected Response
  • 78. 78 “Il faudrait tout tester du point de vue de l’utilisateur ! ” “Ok, on va lancer la plateforme sur un env de test et on va utiliser un framework de test E2E ! ”
  • 79. 79 Web : CypressJS, Puppeeter/Playwright/Webdriver, Codecept - Android : Expresso - iOS: XCTest - Multi : Browserstack
  • 80. 80 - Coûteux - Lents (réseau) - Non répétable - Imprécis - Difficile à analyser Malheureusement, les tests UI sont (souvent)
  • 81. Le graal Avoir un framework qui puisse se synchroniser avec lʼUI (composée de tâche asynchrone). Même dans ce cas, lʼE2E reste déconseillé. 81
  • 82. 82 1ère possibilité Tester uniquement le front en mockant le back-end Cela permet de : - Maîtriser les données - Avoir peu ou pas de lenteur due au réseau Les fronts ont leur propre pyramide de tests (Unit + UI)
  • 83. 83 2ème possibilité Tester quelques scénarios typiques dʼutilisation en E2E - loi des 20/80 Par exemple: Smoke tests en prod Feature: Pizza purchase journey @journey Scenario: Pay-on-collection journey * Reggie visits our website * he adds a pizza to his basket * he enters valid contact details * he chooses pay-on-collection * he receives an order confirmation
  • 84. 84 Indispensable ! Le pattern Page Object Attention à la duplication ! Représentez les pages par des “objets” avec lesquels les scénarios vont interagir. Ces objets fournissent une API plus métier et encapsule lʼaccès / interaction lié au DOM Autres : app action (cypress), Screenplay pattern
  • 85. 3. Vers l’infini et au delà 85
  • 87. QA On parle des tests depuis le début sans parler du rôle de QA. Étonnant non ? 87
  • 88. Nos QAs vérifient que les devs ont bien fait leur travail 88 https://dannorth.net/2021/07/26/we-need-to-talk-about-testing/
  • 89. Pourquoi faire des tests exploratoires ? - Progresser dans la compréhension profonde du produit / métier - Améliorer lʼutilisabilité et la stabilité - Pousser le produit dans ses retranchements 89
  • 90. 90 Trouver les mines avant l’utilisateur - Maaret Pyhäjärvi
  • 91. “ A QA engineer walks into a bar. Orders a beer. Orders 0 beers. Orders 999999999 beers. Orders a lizard. Orders -1 beers. Orders a sfdeljknesv. 91
  • 92. Exploration testing Une approche structurée nécessitant une préparation rigoureuse et nécessitant beaucoup de créativité. Cʼest le talent des bons QAs. 92
  • 93. Pourquoi faire des tests exploratoires ? - Progresser dans la compréhension profonde du produit / métier - Améliorer lʼutilisabilité et la stabilité - Pousser le produit dans ses retranchements Une très bonne façon de trouver des anomalies sur le besoin et lʼimplémentation qui seraient difficilement découverts par des tests formels 93
  • 95. Exemple pratique 95 Quand jʼajoute 11 fraises au prix dʼ25c avec une offre dʼune fraise offerte pour 4 achetées et les offres du panier : - Plus de 4 pommes - Plus de 10 fruits - Fruits locaux Le total affiche -20c
  • 97. Automatiser Faire écrire des cas dʼexemples à un robot. 97
  • 98. Une propriété Vérifiée pour tous les cas générés. 98
  • 102. 102 Trouver des propriétés - Généraliser à partir dʼun exemple - Trouver des invariants (propriété toujours vraie) - Trouver des symétries - Comparer à un modèle
  • 106. PBT vs TDD Le property based testing ne remplace pas TDD Mais ça complète 106
  • 107. Prod vs Test Ne pas recréer le code métier dans les tests 107
  • 109. 109 3.3 Testing (in) production
  • 110. Il n‘est pas possible de prévoir toutes les conditions d’échec en dehors de la prod 110
  • 111. “ 111 Lorsque les systèmes tombent en panne, ils le font toujours de manière surprenante et imprévisible. -- Cindy Sridharan @copyconstruct
  • 112. Que se passe-t-il quand un incident arrive sur votre prod ? “ Les systèmes doivent continuer à fonctionner même si ʻla maison est en feuʼ. ” -- Werner Vogels CTO Amazon 112
  • 113. Que se passe-t-il quand un incident arrive sur votre prod ? “if it hurts, do it more often, and bring the pain forward.” -- Continuous Delivery 113
  • 114. “ 114 Nous devions construire des systèmes qui acceptent l'échec comme une occurrence naturelle, même si nous ne savons pas ce quel pouvait être cet échec. Les systèmes doivent continuer à fonctionner même si "la maison est en feu". -- Werner Vogels CTO Amazon
  • 115. 115 Cindy Sridharan - https://copyconstruct.medium.com/testing-in-production-the-safe-way-18ca102d0ef1
  • 117. Changer une seule chose à la fois 117
  • 118. Vers des applications anti-fragile ? Fragile 118 Robuste Résilient Anti fragile Tests pre-production Peu de tests Tests en production Amélioration de la chaîne de tests et de la qualité du service
  • 119. 119
  • 120. Et la sécurité ? Vaste sujet ! - De bonnes pratiques vérifiables pré-prod (OWASP) - Voir les trés bonne confs de notre ami Julien Topçu comme “Comment se faire hacker bien comme il faut!” - Des pratiques vérifiables en prod (bug bounty) 120
  • 122. 122 Une bonne stratégie de tests vous permet ... - Dʼavoir la sérénité de changer lʼexistant - Dʼavoir un cycle de feedback court - De documenter votre code métier - Dʼavoir le bon retour sur investissement - De livrer régulièrement en production - De créer une résilience opérationnelle
  • 123. 123 Une bonne stratégie de tests est basée sur: - Un maximum de tests orientés métier ultra rapide - Un design permettant de les faciliter - Lʼutilisation efficiente de tests dʼintégration, UI ou E2E - La capacité dʼutiliser des outils de tests avancées - Contract testing - Fuzzing / Property based testing - Mutation testing - Lʼutilisation de lʼexpertise des QAs - Le fait de ne jamais oublier que la production est la seule vérité
  • 125. 2. Tests dʼintégration 1. Tests fonctionnels (BDD) 2. Tests dʼintégration Une application... 125 Présentation Métier Persistence Interface Interface TU TU TU
  • 126. ...ça se découpe 126 Présentation Métier Persistence Métier Métier Persistence Persistence Persistence Présentation Présentation
  • 128. 128 Eviter les tests trop fins
  • 129. 129 UI tests E2E test Tests bas niveau (Test dʼune classe) Rend le design rigide Couteux, lent, ... Tests dʼintégration Tests dʼacceptances Tests Guerkin “Pyramide” des tests Le bon compromis
  • 131. 131 Comment commencer - Tests dʼacceptances unitaires - Test dʼintégrations - BDD - Mutation Testing - Property Based testing - Testing in production
  • 132. #DevoxxFR Merci à vous et aux orgas ! Vous trouverez les slides ici : http://shorturl.at/efIZ0 Et le code ici: https://github.com/ygrenzinger/testing-overview-university Presentation template by SlidesCarnival Photographs by Unsplash 13 2
  • 133. 133
  • 134. “ Quotations are commonly printed as a means of inspiration and to invoke philosophical thoughts from the reader. 134
  • 135. This is a slide title ◎ Here you have a list of items ◎ And some text ◎ But remember not to overload your slides with content Your audience will listen to you or read the content, but wonʼt do both. 135
  • 136. Big concept Bring the attention of your audience over a key concept using icons or illustrations 136
  • 137. White Is the color of milk and fresh snow, the color produced by the combination of all the colors of the visible spectrum. You can also split your content Black Is the color of coal, ebony, and of outer space. It is the darkest color, the result of the absence of or complete absorption of light. 137
  • 138. In two or three columns Yellow Is the color of gold, butter and ripe lemons. In the spectrum of visible light, yellow is found between green and orange. Blue Is the colour of the clear sky and the deep sea. It is located between violet and green on the optical spectrum. Red Is the color of blood, and because of this it has historically been associated with sacrifice, danger and courage. 138
  • 139. A picture is worth a thousand words A complex idea can be conveyed with just a single still image, namely making it possible to absorb large amounts of data quickly. 139
  • 141. Use charts to explain your ideas Gray White Black 141
  • 142. Or diagrams to explain complex ideas Example text. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam venenatis nisi at nisl tempor, et luctus diam lobortis. Nulla sit amet metus consequat velit iaculis tempor. Example text. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam venenatis nisi at nisl tempor, et luctus diam lobortis. Nulla sit amet metus consequat velit iaculis tempor. 142
  • 143. And tables to compare data A B C Yellow 10 20 7 Blue 30 15 10 Orange 5 24 16 143
  • 145. 89,526,124 Whoa! Thatʼs a big number, arenʼt you proud? 145
  • 146. 89,526,124$ Thatʼs a lot of money 100% Total success! 185,244 users And a lot of users 146
  • 147. Our process is easy first second last 147
  • 148. Let’s review some concepts Yellow Is the color of gold, butter and ripe lemons. In the spectrum of visible light, yellow is found between green and orange. Blue Is the colour of the clear sky and the deep sea. It is located between violet and green on the optical spectrum. Red Is the color of blood, and because of this it has historically been associated with sacrifice, danger and courage. Yellow Is the color of gold, butter and ripe lemons. In the spectrum of visible light, yellow is found between green and orange. Blue Is the colour of the clear sky and the deep sea. It is located between violet and green on the optical spectrum. Red Is the color of blood, and because of this it has historically been associated with sacrifice, danger and courage. 148
  • 149. You can copy&paste graphs from Google Sheets 149
  • 150. Mobile project Show and explain your web, app or software projects using these gadget templates. 150 Place your screenshot here
  • 151. Tablet project Show and explain your web, app or software projects using these gadget templates. 151 Place your screenshot here
  • 152. Place your screenshot here Desktop project Show and explain your web, app or software projects using these gadget templates. 152
  • 153. Thanks! Any questions? You can find me at: @username & user@mail.me 153
  • 154. Credits Special thanks to all the people who made and released these awesome resources for free: ◎ Presentation template by SlidesCarnival ◎ Photographs by Unsplash 154
  • 155. Presentation design This presentations uses the following typographies and colors: ◎ Titles: Roboto Slab ◎ Body copy: Source Sans Pro You can download the fonts on these pages: https://www.fontsquirrel.com/fonts/roboto-slab https://www.fontsquirrel.com/fonts/source-sans-pro ◎ Blue #0091ea ◎ Dark gray #263238 ◎ Medium gray #607d8b ◎ Light gray #cfd8dc You donʼt need to keep this slide in your presentation. Itʼs only here to serve you as a design guide if you need to create new slides or download the fonts to edit the presentation in PowerPoint® 155
  • 156. 156 SlidesCarnival icons are editable shapes. This means that you can: ● Resize them without losing quality. ● Change line color, width and style. Isnʼt that nice? :) Examples:
  • 158. Now you can use any emoji as an icon! And of course it resizes without losing quality and you can change the color. How? Follow Google instructions https://twitter.com/googledocs/status/730087240156643328 ✋👆👉👍👤👦👧👨👩👪💃🏃 💑❤😂😉😋😒😭👶😸🐟🍒🍔 💣📌📖🔨🎃🎈🎨🏈🏰🌏🔌🔑 and many more... �� 158
  • 159. Free templates for all your presentation needs Ready to use, professional and customizable 100% free for personal or commercial use Blow your audience away with attractive visuals For PowerPoint and Google Slides