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
Instant gif
Profitez c'est
le seul
Disclaimer
Tout ceci n'est que le reflet de mon opinion issue de ma propre expérience
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
Jean-Marc
Malik
Jean-Marc
- Comprend vite les problèmes
- Dessiner des MCD comme personne
- Grosse capacité de mentalisation
Mentalisation ?
Malik
- Les MCD ils aiment pas trop ça
- Mentalise des choses pas trop grosse
- a souvent des questions
Jean-Marc
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 =
5718 €
Malik
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 =
9987 €
Bilan
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 ?
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()
)
]);