Tdd en action - découverte

Post on 27-Jun-2015

738 views 1 download

Transcript of Tdd en action - découverte

TDD en action : découverte

Repérage

● TDD en action– Découverte

– Refactoring

– Itératif incrémental

– Bases de données

– Développement Web

– Déploiement continu

Nous allons aborder ceci

Découverte

● Définition● Théorie● Exemple● Exercice● Auto-évaluation

TDD

TDD = Test-Driven Development

=Développement piloté par les tests

=Écrire des tests avant le code

=Écrire des tests pour guider l'écriture du code

=Écrire des tests pour partager une idée

=Écrire des tests pour explorer une hypothèse

Le TDD c'est...

● Une méthode de développement incrémental● Une technique de spécification● Une démarche qualité● Une technique de collaboration● Une des 13 pratiques de eXtrem Programming

...et aussi :

● Un outil pour ne plus avoir peur● Un jeu● Un ami qui vous simplifie la vie

Théorie – le « cycle » du TDD

1.TEST 2.CODE

3.REFACTOR

1.TEST

● Décrire le comportement souhaité● Ce comportement peut être

– Unitaire : exercer une unité de code

– Intégré : exercer plusieurs unités de code

– Système : exercer l'ensemble d'un systéme

1.TEST

1.TEST

Notez que le caractère unitaire, intégré ou système d'un test est défini par l'envergure du

code exercé lorsqu'on exécute ce test.

1.TEST

Parfois on peut avoir des intuitions quant à cette envergure dès la lecture du test

1.TEST

Au début, commencez par explorer un cas simple

● Faire passer le test● Vous avez le « droit » de tout faire

– Écrire du code de débutant

– Dupliquer du code existant

– Mettre des valeurs magiques dans le code

– ...

2.CODE

2.CODE

Au début commencez par le code le plus simple possible faisant passer le test

● Supprimer le code dangereux...● ...SANS ajouter de fonctionnalités...● ...en continuant à avoir tous les tests qui

passent

3.REFACTOR

● Qu'est ce que du code « dangereux »?– Duplication

– Couplage

– Valeurs magiques

– Conditionnel

– Longues classes ou méthodes

– Code obscur

– ...cherchez « code smells » sur Google

3.REFACTOR

● Comment supprimer du code « dangereux »?

3.REFACTOR

Au début, commencez par apprendre à repérer le code « dangereux »

3.REFACTOR

Je vois une valeur magique ici

Il est temps de pratiquer

Exemple

● Le kata des chiffres romainsLe kata dit que vous devez écrire une fonction pour convertir les nombres dont nous avons l'habitude en chiffres romains.

Par exemple :

1--> I

10-->X

7-->VII

Etc.

● Extrait de 10 minutes : http://vimeo.com/19621491

● Vous pourrez trouver d'autres extraits non loin de celui-ci

Exemple

Notez dans cette vidéo :● Les tests s'exécutent automatiquement en bas

à gauche● Les tests peuvent rester rouges tout en

changeant de message d'erreur● Le refactoring n'ajoute pas de fonctionnalités

A vous :)

● Exercice : le kata des facteurs premiersLe kata dit que vous devez écrire une fonction qui donne la décomposition d'un nombre en ses facteurs premiers.

Par exemple :

15 = 3 x 5

300 = 2 x 2 x 3 x 5 x 5

Etc.

Souvenez-vous

● Commencez par un seul test● Commencez par un cas simple● Respectez le cycle

1.TEST 2.CODE

3.REFACTOR

Vous avez fini ?

Recommencez :)

Plusieurs fois, avec différents langages.

Auto-évaluation

● Combien d'exemples sont présents dans vos tests ?– Vous en voulez plusieurs

● Avez-vous écrit le code minimum pour faire passer chaque test ?– Vous pouvez avoir une idée de cela en vérifiant que

chaque nouveau test ne passe pas sans nouveau code

Auto-évaluation

● A chaque refactoring, quel « code smell » avez-vous supprimé ?– Essayer à chaque fois de les nommer

● Est-ce que vos tests documentent votre code ?– Prenez votre courage à deux mains et montrez vos

tests à un ami, ils doivent suffire à expliquer ce qu'offre votre code

Auto-évaluation

● Est-ce que vos tests traduisent une démarche incrémentale ?– Vos premiers tests devraient présenter des cas

simples, les cas plus compliqués venant ensuite.

Auto-évaluation

Tests X / V ?

J'ai écrit plusieurs tests

Chaque nouveau test commence par ne pas passer

Chaque test a une seule intention

Chaque test a un nom qui illustre l'intention du test

Mes tests illustrent un développement incrémentale

Un autre que moi comprend l'intention de mes tests

Je sais nommer les smells que je supprime en refactoring

Merci

● M'aiderez vous à améliorer ce matériel ?– Qu'avez-vous aimé ?

– Quelles améliorations feriez-vous ?

eric.mignot@gmail.com