72
Docteur BDD Ou comment j’ai appris à ne plus m’en faire avec les tests (et la doc!)

TDD/BDD: ou comment j’ai appris à ne plus m’en faire avec les tests (et la doc)

Embed Size (px)

Citation preview

Page 1: TDD/BDD: ou comment j’ai appris à ne plus m’en faire avec les tests (et la doc)

Docteur BDD

Ou comment j’ai appris à ne plus m’en faire avec les tests

(et la doc!)

Page 2: TDD/BDD: ou comment j’ai appris à ne plus m’en faire avec les tests (et la doc)

Merci à nos sponsors Platinum

Page 3: TDD/BDD: ou comment j’ai appris à ne plus m’en faire avec les tests (et la doc)

Et merci à nos sponsors Gold et Silver

Page 4: TDD/BDD: ou comment j’ai appris à ne plus m’en faire avec les tests (et la doc)

Guillaume Saint Etienne

• Développeur Senior .Net

• Artisan Logiciel / Software Craftsman • J’ai également été Architecte, Chef de Projet, Scrum Master,

Responsable d’Activité

• http://dotnetguru2.org/gse

• http://groups.google.com/group/craftsmen-france-

• Twitter : @guillaume_agile

Page 5: TDD/BDD: ou comment j’ai appris à ne plus m’en faire avec les tests (et la doc)

TESTER

• Je teste

• Tu testes

• Il ou elle teste

• Nous testons

• Vous testez

• Ils ou elles testent

• … mais tu peux pas (tout) test

Page 6: TDD/BDD: ou comment j’ai appris à ne plus m’en faire avec les tests (et la doc)

qu'est ce que je teste?

Mon logiciel…

Page 7: TDD/BDD: ou comment j’ai appris à ne plus m’en faire avec les tests (et la doc)

Comment je vois mon logiciel

Page 8: TDD/BDD: ou comment j’ai appris à ne plus m’en faire avec les tests (et la doc)

De ma vision du logiciel découle ma vision des tests

Page 9: TDD/BDD: ou comment j’ai appris à ne plus m’en faire avec les tests (et la doc)

Acceptance = IHM?

• Et les règles métier?

• Et le stockage?

• Et les transmissions/flux?

• Les transactions? les services externes?

• La gestion des erreurs, des mises à jour… Faut-il à chaque fois que je lance tout mon logiciel pour n’en tester qu’une partie???

Page 10: TDD/BDD: ou comment j’ai appris à ne plus m’en faire avec les tests (et la doc)

% Code de l’IHM

Page 11: TDD/BDD: ou comment j’ai appris à ne plus m’en faire avec les tests (et la doc)

GOF, ca vous parle?

• Humble Dialog

• MVC

• MVP

• MVVM

• …

Page 12: TDD/BDD: ou comment j’ai appris à ne plus m’en faire avec les tests (et la doc)

Alors, découpons

Page 13: TDD/BDD: ou comment j’ai appris à ne plus m’en faire avec les tests (et la doc)

Comment tester cela?

Page 14: TDD/BDD: ou comment j’ai appris à ne plus m’en faire avec les tests (et la doc)

On est passé de ca…

Page 15: TDD/BDD: ou comment j’ai appris à ne plus m’en faire avec les tests (et la doc)

…à cà!

Page 16: TDD/BDD: ou comment j’ai appris à ne plus m’en faire avec les tests (et la doc)

Et puis on m’a parlé de services…

Page 17: TDD/BDD: ou comment j’ai appris à ne plus m’en faire avec les tests (et la doc)

Alors j’ai découpé en services

Page 18: TDD/BDD: ou comment j’ai appris à ne plus m’en faire avec les tests (et la doc)

Ca me rappelle …

Page 19: TDD/BDD: ou comment j’ai appris à ne plus m’en faire avec les tests (et la doc)

Heureusement, je travaille chez

Page 20: TDD/BDD: ou comment j’ai appris à ne plus m’en faire avec les tests (et la doc)

J’ai voulu tester les « services »

Page 21: TDD/BDD: ou comment j’ai appris à ne plus m’en faire avec les tests (et la doc)

Mais un service c’est pas simple

• Les dépendances m’ont tuer!

Page 22: TDD/BDD: ou comment j’ai appris à ne plus m’en faire avec les tests (et la doc)

A l’intérieur…

Page 23: TDD/BDD: ou comment j’ai appris à ne plus m’en faire avec les tests (et la doc)

Ce que je teste, je l’éclaire

Page 24: TDD/BDD: ou comment j’ai appris à ne plus m’en faire avec les tests (et la doc)

Ce que je teste, je le nomme

Page 25: TDD/BDD: ou comment j’ai appris à ne plus m’en faire avec les tests (et la doc)

Ce que je teste, je l’explicite

• Je dis clairement et simplement ce que j’attends, moi développeur.

• Ce que j’attends comme comportement, c’est ce qui va œuvrer (et qui est indispensable pour) le bon fonctionnement de l’ensemble.

• Comment mon client pourrait-il être satisfait de l’ensemble, si chaque pièce ne fonctionne pas de manière irréprochable?

Page 26: TDD/BDD: ou comment j’ai appris à ne plus m’en faire avec les tests (et la doc)

Tester à partir des UI?

Page 28: TDD/BDD: ou comment j’ai appris à ne plus m’en faire avec les tests (et la doc)

Pourquoi abandonner ATDD

• Si « Humble Dialog » est bien appliqué,

• tester sur l’UI revient à tester le navigateur Web ou Winform/WPF ou JFC/Swing ou ….

• (too much) code in the UI = it smells

• Integrated Tests are a scam!

Page 29: TDD/BDD: ou comment j’ai appris à ne plus m’en faire avec les tests (et la doc)

Integrated Tests are a scam!

• I use the term integrated test to mean any test whose result (pass or fail) depends on the correctness of the implementation of more than one piece of non-trivial behavior.

– J. B. Rainsberger

Page 30: TDD/BDD: ou comment j’ai appris à ne plus m’en faire avec les tests (et la doc)

Un seul principe

Page 31: TDD/BDD: ou comment j’ai appris à ne plus m’en faire avec les tests (et la doc)

KISS

• Keep it simple, stupid!

• Ce que l’on teste bien s’énonce clairement

– (ou comment ne pas boire la tasse quand on cite Boileau)

• Simple = Unique, seul

Page 32: TDD/BDD: ou comment j’ai appris à ne plus m’en faire avec les tests (et la doc)

Tester c’est comprendre

• du latin « comprehensio »1, de « cum », avec, et « prehendere », prendre: action de saisir ensemble ou de prendre avec soi

Page 33: TDD/BDD: ou comment j’ai appris à ne plus m’en faire avec les tests (et la doc)

Comprendre quoi?

• .. Comment ca marche (à l’intérieur)

– Ou bien

• Comment ça se comporte (de l’extérieur)

Page 34: TDD/BDD: ou comment j’ai appris à ne plus m’en faire avec les tests (et la doc)
Page 35: TDD/BDD: ou comment j’ai appris à ne plus m’en faire avec les tests (et la doc)

Le Test Comportementaliste

Page 36: TDD/BDD: ou comment j’ai appris à ne plus m’en faire avec les tests (et la doc)

Le réserver aux IHM?

• Pourquoi n’y aurait-il que les IHM qui ont un comportement?

Page 37: TDD/BDD: ou comment j’ai appris à ne plus m’en faire avec les tests (et la doc)

Qu’est ce qu’un comportement?

• Le comportement d'un être vivant et, plus généralement, de tout autre système est la partie de son activité qui se manifeste à un observateur

• http://fr.wikipedia.org/wiki/Comportement

Page 38: TDD/BDD: ou comment j’ai appris à ne plus m’en faire avec les tests (et la doc)

Qui observe quoi?

Page 39: TDD/BDD: ou comment j’ai appris à ne plus m’en faire avec les tests (et la doc)

On a bien dit « automatiser le test »

• L’observateur est donc un programme

…un automate

Page 40: TDD/BDD: ou comment j’ai appris à ne plus m’en faire avec les tests (et la doc)

La chose observée

• est un bout de code.

• Doit être:

– Simplifiée pour mieux comprendre

– Simplifiée pour tester plus vite

– Simplifiée pour avoir un résultat plus rapidement

– Simplifiée pour rechercher les problèmes plus simplement.

• Le test lui-même doit rester simple

Page 41: TDD/BDD: ou comment j’ai appris à ne plus m’en faire avec les tests (et la doc)

Simplifier = Isoler

Page 42: TDD/BDD: ou comment j’ai appris à ne plus m’en faire avec les tests (et la doc)

Une chose à la fois

Page 43: TDD/BDD: ou comment j’ai appris à ne plus m’en faire avec les tests (et la doc)

Single Responsibility

Page 44: TDD/BDD: ou comment j’ai appris à ne plus m’en faire avec les tests (et la doc)

S.O.L.I.D. • Single responsibility principle

– the notion that an object should have only a single responsibility.

• Liskov substitution principle

– the notion that “objects in a program should be replaceable with instances of their subtypes without altering the correctness of that program”

• Interface segregation principle

– the notion that “many client specific interfaces are better than one general purpose interface

Page 45: TDD/BDD: ou comment j’ai appris à ne plus m’en faire avec les tests (et la doc)

Si mon code est SOLID

• Alors mes tests doivent l’être aussi

Page 46: TDD/BDD: ou comment j’ai appris à ne plus m’en faire avec les tests (et la doc)

Un exemple

• Et maintenant, un peu de vrai code

Page 47: TDD/BDD: ou comment j’ai appris à ne plus m’en faire avec les tests (et la doc)

Ce que m’apporte la forme BDD

T.U. classique

•ARRANGE

•ACT

•ASSERT

T.U. Behavioriste

•GIVEN

•WHEN

• THEN

Page 48: TDD/BDD: ou comment j’ai appris à ne plus m’en faire avec les tests (et la doc)

Je passe au BDD

• Je passe à une description textuelle

• Exemple!

Page 49: TDD/BDD: ou comment j’ai appris à ne plus m’en faire avec les tests (et la doc)

DRY

• Mes tests aussi !

• Refactoring

• Les Steps c’est beaucoup de DRY

• Exemple!

Page 50: TDD/BDD: ou comment j’ai appris à ne plus m’en faire avec les tests (et la doc)

Exemple de refactoring

• Je vais gagner énormément de temps

• Fini le copier/coller… dans le code !

• Donc fini les erreurs…. sur le code (technique)

des tests!

• Exemple!

Page 51: TDD/BDD: ou comment j’ai appris à ne plus m’en faire avec les tests (et la doc)

Les incontournables

• de la refactorisation :

– Dummies / Doublures

– Fake

– Mocks

– Stub

– Espions

– Helpers

Page 52: TDD/BDD: ou comment j’ai appris à ne plus m’en faire avec les tests (et la doc)

Mes tests peuvent être lus

• Ce n’est plus du code, c’est du texte!!

• C’est ca qui change tout

• Je peux les échanger

• Quelqu’un de non technique pourrait les écrire

Page 53: TDD/BDD: ou comment j’ai appris à ne plus m’en faire avec les tests (et la doc)

Qu'est ce que mon test raconte?

• Un scénario

• Même s’il revêt une réalité technique, le comportement devrait pouvoir être compris et approuvé par quelqu’un de logique.

• Il ne doit cibler qu’une chose à la fois (isolation)

Page 54: TDD/BDD: ou comment j’ai appris à ne plus m’en faire avec les tests (et la doc)

Est ce suffisant pour faire une documentation?

Page 55: TDD/BDD: ou comment j’ai appris à ne plus m’en faire avec les tests (et la doc)

• Si c’est bien raconté, oui.

• Pèsera autant qu’un lourd cahier de tests.

• J’ai gagné des semaines (voir des mois) hommes de travail de rédaction et de vérifications.

• Export automatique -> Html, Word, Pdf

Page 56: TDD/BDD: ou comment j’ai appris à ne plus m’en faire avec les tests (et la doc)

Est-ce que tester "à ce point" modifie ma conception logicielle?

(design émergeant)

Page 57: TDD/BDD: ou comment j’ai appris à ne plus m’en faire avec les tests (et la doc)

Oui, et de 2 façons

Page 58: TDD/BDD: ou comment j’ai appris à ne plus m’en faire avec les tests (et la doc)

Penser le test en premier

• BDD = TDD

• Test First

• Anticiper plutôt que guérir

• 40 à 90% de code défectueux en moins

• 15 à 35% de temps supplémentaire au début du projet (seulement)

• Vous connaissez le cout de la correction après développement ou de la TMA…. donc... – http://www.infoq.com/news/2009/03/TDD-Improves-Quality

Page 59: TDD/BDD: ou comment j’ai appris à ne plus m’en faire avec les tests (et la doc)

Penser le comportement

Les vertus de l’abstraction

Page 60: TDD/BDD: ou comment j’ai appris à ne plus m’en faire avec les tests (et la doc)

Décrire

Descriptif n’est pas Impératif

Page 61: TDD/BDD: ou comment j’ai appris à ne plus m’en faire avec les tests (et la doc)

Un comportement attendu

est vérifiable à coup sur

Page 62: TDD/BDD: ou comment j’ai appris à ne plus m’en faire avec les tests (et la doc)

Domain Driven Design

• C’est le meilleur moyen d’être proche du domaine métier de votre client

• Exemple (description BDD et objet métier)

Page 63: TDD/BDD: ou comment j’ai appris à ne plus m’en faire avec les tests (et la doc)

Polyglot Data

• Le meilleur moyen d’être Data Storage Agnostic

• Ce n’est plus le DBA qui commande

• SQL / NoSQL ?

• La persistance est un plus, voila tout.

• Exemple: le FakeStorer dans les tests

Page 64: TDD/BDD: ou comment j’ai appris à ne plus m’en faire avec les tests (et la doc)

Concevoir un comportement

• C’est penser en terme FONCTIONNELS

Page 65: TDD/BDD: ou comment j’ai appris à ne plus m’en faire avec les tests (et la doc)

C’est s’interesser à l’essentiel

• On ne voit bien qu'avec le test. L'essentiel est invisible pour les yeux.

Antoine de Saint-Test

Page 66: TDD/BDD: ou comment j’ai appris à ne plus m’en faire avec les tests (et la doc)

Incidences sur le code

• Penser d’abord des Interfaces qui décrivent le comportement tels que les tests ont pu les expliciter dans des scénarios mettant en évidence la valeur ajoutée du fonctionnement choisi.

• Ecrire les tests qui détaille les scénarios du comportement à observer.

• Ecrire l’implémentation.

• Vérifier.

Page 67: TDD/BDD: ou comment j’ai appris à ne plus m’en faire avec les tests (et la doc)

Responsabiliser le code

• Isolation = Une seule responsabilité

• Tester c’est apprivoiser.

• « Tu deviens responsable pour toujours de ce que tu as testé »

Antoine de Saint-Test

Page 68: TDD/BDD: ou comment j’ai appris à ne plus m’en faire avec les tests (et la doc)

Toujours plus fluide

• Le style change

• On devient plus « fluent »

• Le code se lit (presque) comme une phrase en langage naturel

• On se rapproche de la programmation fonctionnelle (sans changer de langage)

• Fluent API + lambda expressions = le chainon manquant?

Page 69: TDD/BDD: ou comment j’ai appris à ne plus m’en faire avec les tests (et la doc)

Références

Page 70: TDD/BDD: ou comment j’ai appris à ne plus m’en faire avec les tests (et la doc)
Page 71: TDD/BDD: ou comment j’ai appris à ne plus m’en faire avec les tests (et la doc)

Pardon

• à Antoine de Saint-Exupéry à relire (souvent)

Page 72: TDD/BDD: ou comment j’ai appris à ne plus m’en faire avec les tests (et la doc)

Questions ?