Coucou
- twitter.com/timbarray
- github.com/tyx
Timothée Barray
développeur PHP depuis + 12 ans
La cuillère n'existe pas
- Et niveau test vous en êtes où ?
- On en a pas, on a pas le temps
- On a pas encore le temps
![](https://media1.giphy.com/media/3o6Zt0hNCfak3QCqsw/giphy.gif)
Instant gif
Profitez c'est
le seul
Disclaimer
Tout ceci n'est que le reflet de mon opinion issue de ma propre expérience
![](https://s3.amazonaws.com/media-p.slid.es/uploads/846450/images/5400835/tweet1.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/846450/images/5400834/tweet2.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/846450/images/5400834/tweet2.png)
Celui qui fait le dev
Celui qui reprend le dev
Un test ça sert à 2 personnes
Savoir
Les gens ne font pas
de test ?
Ils n'ont pas le temps
Ils ne savent pas ce qu'est un test
Les gens ne font pas
de test ?
on a pas d’argent à mettre dedans parce qu'on a aucune idée de ce qu’on y gagne
Problème
Alors pourquoi on test ?
Pour valider des comportements !
implémentations
C'est la slide
à retenir !
Toute ressemblance avec des faits réels ne serait que pure et fortuite coïncidence
Nos devs cobayes
![](https://s3.amazonaws.com/media-p.slid.es/uploads/846450/images/5403794/jean-marc.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/846450/images/5403796/Malik.png)
Jean-Marc
Malik
Jean-Marc
- Comprend vite les problèmes
- Dessiner des MCD comme personne
- Grosse capacité de mentalisation
![](https://s3.amazonaws.com/media-p.slid.es/uploads/846450/images/5403794/jean-marc.png)
Mentalisation ?
Malik
- Les MCD ils aiment pas trop ça
- Mentalise des choses pas trop grosse
- a souvent des questions
![](https://s3.amazonaws.com/media-p.slid.es/uploads/846450/images/5403796/Malik.png)
Jean-Marc
![](https://s3.amazonaws.com/media-p.slid.es/uploads/846450/images/5403794/jean-marc.png)
On prend les mêmes et on recommence
Plus grosse flèche
parce que c'est long
Jean-Marc
3 jours de travail = 510€
3 heures de tests IHM = 73€
À l'année :
73€ / 3 j de travail * 5 j semaine
* 47 semaines travaillées =
![](https://s3.amazonaws.com/media-p.slid.es/uploads/846450/images/5403794/jean-marc.png)
5718 €
Malik
![](https://s3.amazonaws.com/media-p.slid.es/uploads/846450/images/5403796/Malik.png)
On prend les mêmes et on recommence
Malik
4 jours de travail = 680€
Différence avec Jean-Marc = 170 €
À l'année :
170€ / 4 j de travail * 5 j semaine
* 47 semaines travaillées =
![](https://s3.amazonaws.com/media-p.slid.es/uploads/846450/images/5403796/Malik.png)
9987 €
Bilan
![](https://s3.amazonaws.com/media-p.slid.es/uploads/846450/images/5403794/jean-marc.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/846450/images/5403796/Malik.png)
En argent
<
5718 €
9987 €
Prix du test ?
4269 € par an pour un développeur
Qu'est-ce qu'on a pour ce prix ?
- Un Product owner qui fait son vrai métier
- Une suite de test capable de minimiser les régressions possibles
- Mitiger l'apport d'un dev legacy
Et c'est tout ?
Ça les vaut vraiment ?
C'était juste l'apport de test tout court...
Malik apporte en plus
Une vrai documentation fonctionnelle à jour avec le code
Une meilleur introduction pour les nouveaux devs.
Et le prix d'une évolution avec ou sans test ?
Prix d'une
documentation classique ?
Temps de
prise en main du logiciel ?
Tester c'est investir sur l'avenir
Le ROI est immédiat !
Méthodologie ?
Par où on commence ?
![](https://s3.amazonaws.com/media-p.slid.es/uploads/846450/images/5403796/Malik.png)
On ne se parle jamais trop
Le grand V
Le besoin
Le code
Discussion
Test d'intégration
Test unitaire
Test unitaire
Test d'intégration
Recette
Modelling
by example
Given
When
Then
Given I registred my vehicle with platenumber "3456 RT 567"
Un effort de traduction minimum
$vehicle = Vehicle::registred(new Platenumber("3456 RT 567"))
public function testAddRequestHeader(array $addHeadersSteps, array $expectedHeaders)
public function test_should_not_decode_invalid_json()
public function test multiple retry should lead to park()
Espace insécables
FTW
DDD ?
CQRS ? Event Sourcing ?
When I park my vehicle with platenumber "3456 RT 567" at location "3.123456,2.7890"
$this->commandBus->handle(new ParkVehicle('3456 RT 567', '3.123456,2.7890'));
CQRS
Given I registred my vehicle with platenumber "3456 RT 567"
Then the known location of my vehicle "3456 RT 567" should be "3.123456,2.7890"
$this->pastChanges[] = new Domain\VehicleWasRegistered(
$this->userId,
$platenumber
);
$this->vehicleFleetShouldHaveRecordedChanges([
new Domain\VehicleWasParked(
$this->userId,
$platenumber,
$location->getLatitude(),
$location->getLongitude(),
$this->parkedAt->getTimestamp()
)
]);