Projet : TDD

La programmation part les tests n'est pas quelque chose d'instinctif. Elle nécessite :

  1. un apprentissage (au départ on se sent nul et comme on aime pas ça on blame la méthode)
  2. d'être appréhendée de façon non dogmatique (on ne test pas tout avant, on utilise juste la fonctionnalité que l'on va coder pour nous permettre de mieux la définir)

Bref, prenez la comme une voie à suivre. Une fois habitué vous ne pourrez plus vous en passer.

Nous allons suivre le livre TDD by example de Kent Beck (Suivez son twitter, ses posts sont souvent rigolos et toujours utiles). Initialement écrit pour le java, nous allons appliquer ses enseignements au python. Vous allez apprendre à écrire du code par les tests et pourquoi cela permet permet d'atteindre plus facilement le but de la programmation :

Définition

Le But de la programmation est de créer du code propre qui fonctionne (clean code that works en version originale).

Outre la méthode, nous verrons également quelques techniques pour y arriver de façon claire et pratique, comme des règles de refactoring (issues de Refactoring: Improving the Design of Existing Code de Martin Fowler (allez voir son site, y'a moult choses chouettes sur le code, l'agile, la vie et le reste)).

Ceci devrait vous permettre de diminuer le nombre de WTFs/minute, qui est le meilleur indicateur au monde d'un bon code (issu du livre clean code de Robert C. Martin. Ce n'est pas un livre pour débutant mais si vous avez déjà compris le tdd, c'est un super pour finaliser votre compréhension) :

WTFs/minute

Faites l'effort de suivre cette séance en codant en même temps le projet. Tout est donné mais le voir fonctionner pour de vrai est plus impressionnant que de juste le lire.

On va exécuter les tests un million de fois. Pour éviter la luxation de l'index il faut retenir les raccourcis claviers qui vont vous permettre de lancer les tests sans problème :

Projet

Vous allez créer dans cette séance une application de change entre Franc suisse (CHF) et dollars US ($).

qui combien prix total
Apple 1000 $200 $200 000
Nestlé 400 80 CHF 32 000 CHF
total $248 000

Avec le taux de conversion : 1 CHF = $0.5

Comment ?

En programmant par les tests bien sur !

On commence par une todo list qui regroupe tout ce que l'on pense faire pour l'instant. Cette liste va diminuer lorsque l'on avancera sur le projet et grossir lorsque notre connaissance du projet va s'affiner.

Nous n'utiliserons pas ici notre code. Mais il faudra tout faire from scratch. On aura donc besoin :

On verra tout au long du cours divers patterns de test et de développement pour que tout aille pour le mieux. Notre but est ici de faire du :

clean code that works

Pour cela on va se fixer quelques règles :

Ces 2 règles impliquent un mode de fonctionnement de note production code :

Principe du TDD

  1. rouge :
    • écrire rapidement un petit test
    • lancer les tests et les voir planter, voir même ne correspondre à aucun code.
  2. vert :
    • écrire le code minimal qui permet de faire passer le test
    • lancer les tests et les voir tous réussir
  3. code/refactor :
    • élimine les duplications tout en conservant la validité des tests.

La partie refactor, qui est la partie réelle où l'on code ne se fait que sur du vert : on est assuré de ne pas casser le code puisque les tests passent.

Cela permet de prendre du plaisir à coder :

Toutes ces règles visent à diminuer la peur qui bloque tout progrès

Code

On va développer petit à petit notre propre application de change en utilisant le TDD. La logique est :

Déroulé

Créez un dossier projet-tdd qui contiendra votre projet.

Le déroulé du projet est séparé en trois parties :

  1. Introduction et principes de la méthode en action
  2. On s'entraîne
  3. On progresse en utilisant des design pattern

Bilan

Cette méthode vous aidera à mieux coder, elle élimine la peur de faire des essais et de modifier le code. En revanche, elle n'est vraiment efficace qu'une fois bien assimilée. Avant, vous allez avoir l'impression de perdre votre temps.

Faire l'effort de maîtriser la technique, les effets vous seront bénéfique tout au long de votre vie de code.