27
TDD, le meilleur moyen d'écrire du code testable Xavier Nopre

Agile Tour Nantes 2014 - Tdd, le meilleur moyen d'écrire du code testable

Embed Size (px)

DESCRIPTION

Les tests unitaires automatisés sont indispensables à l'agilité. Le TDD est le meilleur moyen d'écrire ces tests et d'avoir du code testable, mais sa pratique va au-delà, notamment dans l'aide à la conception du code. Un peu de théorie et beaucoup de démo live pour vous montrer cette pratique.

Citation preview

Page 1: Agile Tour Nantes 2014 - Tdd, le meilleur moyen d'écrire du code testable

TDD, le meilleur moyen d'écrire du code testable

Xavier Nopre

Page 2: Agile Tour Nantes 2014 - Tdd, le meilleur moyen d'écrire du code testable

Puis-je avoir ce diaporama ?

Un mail à [email protected] :

– Votre avis sur cette session

– Vos questions

Page 3: Agile Tour Nantes 2014 - Tdd, le meilleur moyen d'écrire du code testable

Qui suis-je ?

Artisan-programmeur Agiliste

Indépendant

Xavier Nopre

• Développement d'applications "sur-mesure" pour des clients finaux

• Interventions en entreprises : formation, accompagnement, développement freelance

@xnopre xnopre.blogspot.com

Page 4: Agile Tour Nantes 2014 - Tdd, le meilleur moyen d'écrire du code testable

Tests unitaires

Page 5: Agile Tour Nantes 2014 - Tdd, le meilleur moyen d'écrire du code testable

De quoi parlons-nous ?

Tests unitaires =

Du code qui teste du code

Page 6: Agile Tour Nantes 2014 - Tdd, le meilleur moyen d'écrire du code testable

Tests unitaires et agilité ?

Agilité :

• Développement itératif et incrémental

• En permanence, adapter le code existant pour ajouter de nouvelles fonctionnalités = refactoring

• Sans régression Nécessité de filets de sécurité

• Tests unitaires et autres

Page 7: Agile Tour Nantes 2014 - Tdd, le meilleur moyen d'écrire du code testable

Tests unitaires = la base des tests

Test unitaires

Tests intégration / acceptance

Tests GUI

Tests manuels

Pyramide des tests – Mike Cohn

• Les tests unitaires sont la "base" de tous les tests

• L'investissement et le volume sont plus importants pour les TU

• Tous les types de tests sont complémentaires

Page 8: Agile Tour Nantes 2014 - Tdd, le meilleur moyen d'écrire du code testable

Tests unitaires = limiter les coûts des anomalies

€€€

Page 9: Agile Tour Nantes 2014 - Tdd, le meilleur moyen d'écrire du code testable

Rappels sur les tests unitaires

• Simples ("unitaires")

• Lisibles

• Rapides à écrire

• Rapides à exécuter

• Indépendants (des autres)

• Répétables

• Automatisables

• Pas forcément partout … (pensez ROI)

• Structurés – Préparations

– Test (1 action)

– Vérifications

• Bon outillage

• …

Page 10: Agile Tour Nantes 2014 - Tdd, le meilleur moyen d'écrire du code testable

TDD =

"Test Driven Development"

Page 11: Agile Tour Nantes 2014 - Tdd, le meilleur moyen d'écrire du code testable

TDD pourquoi ?

• Vérifier la compréhension du besoin fonctionnel et être sûr d'y répondre Traduction des specs en tests

• Détecter au plus tôt des problèmes dans les specs : oublis, impressions, contradictions, …

• Générer du code testable

• Systématiser la présence de tests unitaires, améliorer la couverture du code par les tests

• Les tests sont plus "faciles" à écrire avant le code de production que après

Page 12: Agile Tour Nantes 2014 - Tdd, le meilleur moyen d'écrire du code testable

Oui, mais …

• Les débuts sont difficiles

• L'apprentissage est long

• C'est un investissement, qui doit être collectif (équipe)

• Plus facile avec formation & accompagnement

• Mais ROI important !

Page 13: Agile Tour Nantes 2014 - Tdd, le meilleur moyen d'écrire du code testable

Le cycle du TDD

Ecriture du test

Ecriture du code de production

Refactoring

Ecriture d'un test et un seul et s’assurer qu’il ne

passe pas pour de bonnes raisons

Ecriture du code minimum pour faire passer ce test

Remaniement et mise au propre du code, de l'architecture, de la

présentation, factorisation, commentaires, …

Page 14: Agile Tour Nantes 2014 - Tdd, le meilleur moyen d'écrire du code testable

Démo time !

Page 15: Agile Tour Nantes 2014 - Tdd, le meilleur moyen d'écrire du code testable

Régles du coding-dojo "kata"

• Démonstration :

– D' 1 solution

– À 1 défi

– Par 1 personne

• Objectif : montrer

• Tout le monde doit suivre et comprendre on peut interrompre

Page 16: Agile Tour Nantes 2014 - Tdd, le meilleur moyen d'écrire du code testable

Sujet

• Issu de l'atelier "Elephant Carpaccio exercise"

• Calcul de prix avec remises : (PU ; Quantité) prix

• Remises :

Valeur commande Réduction

1 000 € 3 %

5 000 € 5 %

7 000 € 7 %

10 000 € 10 %

Page 17: Agile Tour Nantes 2014 - Tdd, le meilleur moyen d'écrire du code testable

Je réfléchis à mes tests …

// doit_appliquer_un_prix_sans_remise

// 3 (1.25) --> 3,75

// doit_appliquer_une_remise_de_3_pourcents_si_plus_de_1000

// 100 (12.10) --> 1173.70

// doit_appliquer_une_remise_de_5_pourcents_si_plus_de_5000

// 500 (12.10) --> 5747.50

// doit_appliquer_une_remise_de_7_pourcents_si_plus_de_7000

// 700 (12.10) --> 7877.10

Page 18: Agile Tour Nantes 2014 - Tdd, le meilleur moyen d'écrire du code testable

C'est parti !

Page 19: Agile Tour Nantes 2014 - Tdd, le meilleur moyen d'écrire du code testable

TDD : pas seulement du "test first"

• Plus qu'une pratique une discipline

– Pas d'ajout de code sans test rouge

• Plus qu'une méthode de tests une activité de conception

• Etat d'esprit

• Une approche addictive

Partie intégrante de la pratique

de développement logiciel !

Page 20: Agile Tour Nantes 2014 - Tdd, le meilleur moyen d'écrire du code testable

Mocks

Page 21: Agile Tour Nantes 2014 - Tdd, le meilleur moyen d'écrire du code testable

Les Mocks

Classe à tester

1 rôle !

Collaborateur Collaborateur

Collaborateur

Collaborateur

Page 22: Agile Tour Nantes 2014 - Tdd, le meilleur moyen d'écrire du code testable

Les mocks : sujet de démo

Jeu de tennis : GUI & Controller !

Page 23: Agile Tour Nantes 2014 - Tdd, le meilleur moyen d'écrire du code testable

Les Mocks

Controler

Game

GUI

ScoreBuilder

buttonPlayer1Pressed()

player1Scored()

computeScore(game)

"15-0"

displayScore("15-0")

Page 24: Agile Tour Nantes 2014 - Tdd, le meilleur moyen d'écrire du code testable

Le 1er test avec les mocks

• Etant donné (Given) :

– Un "Controler" et ses collaborateurs

• Lorsque (When) :

– J'appelle la méthode "button1HasBeenClicked"

• Alors (Then) :

– La méthode "displayScore("?")" est appelée

Page 25: Agile Tour Nantes 2014 - Tdd, le meilleur moyen d'écrire du code testable

Les mocks : démo !

Page 26: Agile Tour Nantes 2014 - Tdd, le meilleur moyen d'écrire du code testable

Conclusion ?

• Tests unitaires (et ingénierie agile) : indispensables à l'agilité

• TDD : "le meilleur moyen d'écrire du code testable" (et testé), et générer une bonne architecture

• Apprentissage long et difficile : Formation et accompagnement S'entrainer, s'entraider ROI garanti !

Page 27: Agile Tour Nantes 2014 - Tdd, le meilleur moyen d'écrire du code testable

Merci !

Questions ?

[email protected]