#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

Tour d'horizon des tests

  • 1.
    #DevoxxFR Devoxx France 2021 Tourd’horizon des tests logiciels Maxime Gellé @maxime_gelle Yannick Grenzinger @ygrenzinger 1
  • 2.
  • 3.
  • 4.
  • 5.
    5 Sommaire 1. Tester lecoeur 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 theshoulder 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 lecœur du métier 10
  • 11.
    11 1.1 TDD ettests 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 couvrirdes lignes de code 13
  • 14.
    Qu’est-ce qu’un bontest ? (FIRST) - Rapide - (Isolé) Indépendant - Répétable - Auto-vérifiable - Au bon moment (TDD ?) 14
  • 15.
    Un test d’acceptance unitaire estrapide, 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 unitaireest 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 neprouvent 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 Traduireune 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’estdur ! - 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 ade 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.
  • 23.
    L’isolation, l’incompréhension dutest 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 decette 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.
  • 26.
    Exemple pratique 26 Ajouter uneréduction : 100c de réduction si plus de 4 fruits différents
  • 27.
    27 1.2 Sacraliser ledomaine métier
  • 28.
  • 29.
    SOLID Dependency Inversion “Les modulesde 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
  • 31.
  • 32.
  • 33.
  • 34.
    34 La couverture decode traditionnelle ne mesure que le code exécuté par vos tests.
  • 35.
  • 36.
  • 37.
  • 38.
    “Gold standard” Imaginée dans en1971 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 sontautomatiquement 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 mutationset 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.
  • 42.
    42 1.4 BDD etdocumentation vivante
  • 43.
    43 “Nos devs etle métier ne se comprennent pas ! Comment faire ?” “Ok, on va imposer Cucumber !”
  • 44.
    44 Un exemple deGuerkin 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
  • 47.
  • 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 storequeries 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 storequeries 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 ladocumentation vivante Par exemple Cukedoctor permet de créer un site statique
  • 53.
    pro-tips Si le métierne lit pas votre Gherkin, nʼen écrivez pas. Écrivez des tests dʼacceptances unitaires proprement 53
  • 54.
  • 55.
  • 56.
    Exemple pratique 56 Le métierne 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 lesfrontières 57
  • 58.
  • 59.
    Tests d’intégrations (toutensemble) 59 Présentation Métier Persistence
  • 60.
    60 Oui mais - Testscompliqués - Lent - Peu explicite - ...
  • 61.
  • 62.
    Quoi tester ? 62 DB Présentation MétierRepositories HTTP Client Message Broker Message listener
  • 63.
  • 64.
    Services HTTP 64 DB Présentation Métier Repositories HTTPClient Message Broker Message listener Mock service HTTP
  • 65.
    Messages brokers 65 DB Présentation Métier Repositories HTTPClient Message Broker Message listener Mock Message queue
  • 66.
  • 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 ThomasPierrain http://tpierrain.blogspot.com/2021/03/outside-in-diamond-tdd-1-style-made.html 68
  • 69.
  • 70.
  • 71.
  • 72.
    Un contrat Interaction : Requête HTTPGET /products/1 Réponse : HTTP 200 { id: 1, Name: “Shoes” }
  • 73.
  • 74.
    74 Test du provider Expected Request Actual Response ConsumerMock Provider Send request Compare Contract Expected Request Expected Response
  • 75.
  • 76.
  • 77.
  • 78.
    78 “Il faudrait touttester 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 unframework 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 uniquementle 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 quelquesscé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 ! Lepattern 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’infiniet au delà 85
  • 86.
  • 87.
    QA On parle destests depuis le début sans parler du rôle de QA. Étonnant non ? 87
  • 88.
    Nos QAs vérifientque les devs ont bien fait leur travail 88 https://dannorth.net/2021/07/26/we-need-to-talk-about-testing/
  • 89.
    Pourquoi faire destests 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 minesavant l’utilisateur - Maaret Pyhäjärvi
  • 91.
    “ A QA engineerwalks 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écessitantune préparation rigoureuse et nécessitant beaucoup de créativité. Cʼest le talent des bons QAs. 92
  • 93.
    Pourquoi faire destests 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.
  • 95.
    Exemple pratique 95 Quand jʼajoute11 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.
  • 97.
    Automatiser Faire écrire descas dʼexemples à un robot. 97
  • 98.
    Une propriété Vérifiée pourtous les cas générés. 98
  • 99.
  • 100.
  • 101.
  • 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
  • 103.
  • 104.
  • 105.
  • 106.
    PBT vs TDD Leproperty based testing ne remplace pas TDD Mais ça complète 106
  • 107.
    Prod vs Test Nepas recréer le code métier dans les tests 107
  • 108.
  • 109.
  • 110.
    Il n‘est pas possiblede prévoir toutes les conditions d’échec en dehors de la prod 110
  • 111.
    “ 111 Lorsque les systèmestombent en panne, ils le font toujours de manière surprenante et imprévisible. -- Cindy Sridharan @copyconstruct
  • 112.
    Que se passe-t-ilquand 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-ilquand 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 construiredes 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
  • 116.
  • 117.
  • 118.
    Vers des applicationsanti-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.
  • 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
  • 121.
  • 122.
    122 Une bonne stratégiede 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égiede 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é
  • 124.
  • 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étierMétier Persistence Persistence Persistence Présentation Présentation
  • 127.
  • 128.
  • 129.
    129 UI tests E2E test Testsbas 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
  • 130.
  • 131.
    131 Comment commencer - Testsdʼacceptances unitaires - Test dʼintégrations - BDD - Mutation Testing - Property Based testing - Testing in production
  • 132.
    #DevoxxFR Merci à vouset 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.
  • 134.
    “ Quotations are commonlyprinted as a means of inspiration and to invoke philosophical thoughts from the reader. 134
  • 135.
    This is aslide 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 theattention of your audience over a key concept using icons or illustrations 136
  • 137.
    White Is the colorof 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 orthree 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 isworth 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
  • 140.
  • 141.
    Use charts toexplain your ideas Gray White Black 141
  • 142.
    Or diagrams toexplain 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 tocompare data A B C Yellow 10 20 7 Blue 30 15 10 Orange 5 24 16 143
  • 144.
  • 145.
    89,526,124 Whoa! Thatʼs abig number, arenʼt you proud? 145
  • 146.
    89,526,124$ Thatʼs a lotof money 100% Total success! 185,244 users And a lot of users 146
  • 147.
    Our process iseasy first second last 147
  • 148.
    Let’s review someconcepts 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&pastegraphs from Google Sheets 149
  • 150.
    Mobile project Show andexplain your web, app or software projects using these gadget templates. 150 Place your screenshot here
  • 151.
    Tablet project Show andexplain your web, app or software projects using these gadget templates. 151 Place your screenshot here
  • 152.
    Place your screenshothere Desktop project Show and explain your web, app or software projects using these gadget templates. 152
  • 153.
    Thanks! Any questions? You canfind me at: @username & user@mail.me 153
  • 154.
    Credits Special thanks toall the people who made and released these awesome resources for free: ◎ Presentation template by SlidesCarnival ◎ Photographs by Unsplash 154
  • 155.
    Presentation design This presentationsuses 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 areeditable shapes. This means that you can: ● Resize them without losing quality. ● Change line color, width and style. Isnʼt that nice? :) Examples:
  • 157.
  • 158.
    Now you canuse 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 forall 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