SlideShare a Scribd company logo
1 of 20
Des tests unitaires automatiques ?
                  Trop cher ! Trop compliqué !
Des recettes pour passer à TDD sans douleur.

                          Frédéric SCHÄFER
                           Djamel ZOUAOUI
Pourquoi je ne fais pas de tests ?


Plus tard  jamais                       Pas le temps



                                            Trop cher



Pas testable                                Sert à rien
Objectif de la session




 J’ai envie de faire des tests unitaires…
mais je ne sais pas comment m’y prendre !
    Et je sais comment m’y prendre !
Tordons le cou à ces fausses raisons !

• Je testerai après…
   –   Parce que je ne sais pas encore comment je vais écrire mon code
   –   Parce que mon code va évoluer                                              Partie 1
   –   Parce qu’il faut que je montre quelque chose rapidement
   –   Parce que je pourrai générer des tests automatiquement / plus facilement
   –   …



• Ce n’est pas testable parce que …
   –   Ma classe dépend d’une autre
   –   Mon code est dans la couche d’interface usager                             Partie 2
   –   Mon code doit créer des objets lors de l’exécution
   –   L’exécution de mon code n’est pas reproductible (dates, hasard,…)
   –   …
Partie 1

• Je testerai après…
   –   Parce que je ne sais pas encore comment je vais écrire mon code
   –   Parce que mon code va évoluer
   –   Parce qu’il faut que je montre quelque chose rapidement
   –   Parce que je pourrai générer des tests automatiquement / plus facilement


• 2 mois plus tard… : Je n’ai pas eu le temps de tester

• Solution : Commencer par tester (TDD)

                                  Développement
                           Développement                                  Tests
Développement piloté par les tests


• Les tests sont conçus et écrits avant le code applicatif
   – Ils représentent l’expression du besoin
   – Ils définissent et nouent un contrat de bon fonctionnement de
     l’application



            Chaque ligne de code est justifiée
             par un test qui ne passait pas.
Mastermind


Propositions       Mal placés


                   Bien placés




 Code Secret
On code ?
Partie 1 : Conclusion

 (Cassé) – Rouge – Vert – (Remaniement)

 3A : Acteur – Action – Assertion

 1 test vert  1 commit

 1 bug  1 test

 Jouer l’ensemble des tests
   Les tests sont automatisés et rapides
2ème partie

 Ce n’est pas testable parce que …

    Ma classe dépend d’une autre

    L’exécution de mon code n’est pas reproductible
     (dates, hasard,…)

    Mon code est dans l’IHM
Ma classe dépend d’une autre :
                            Injection de dépendance

• Les dépendances entre les modules de code peuvent
  être définies par un module tiers
   – Une classe A ne crée pas l’instance d’une classe B dont elle a
     besoin mais utilise une interface IB implémentée par B
   – L’implémentation de l’interface IB est fournie à A par un module
     tiers
• Respecte le principe de Hollywood
         « Ne nous appelez pas, c’est nous qui vous appelons »
   – C’est le conteneur qui appelle notre objet pour lui fournir la
     dépendance dans notre objet (constructeur / setter) .
   – L’objet est en fait passif dans le processus de choix des
     dépendances.
   – Les dépendances sont sous la responsabilité du conteneur et
     non de l’objet.
Bouchonnage

• Le bouchonnage d’une classe est la création d’une
  classe « similaire » à celle-ci et qui, le cas
  échéant, pourra se substituer à elle.
• Cela se formalise par une classe qui se présente comme
  la « vraie » classe (même méthodes et propriétés
  publiques) mais sur laquelle le développeur a le contrôle.

• Le bouchonnage permet de simuler les données
  attendues par une méthode pour son fonctionnement.

• Facilité par l’injection de dépendance !
Application à notre Mastermind
                              Jeu

                   CodeSecret
                   NombreDeCoupsJoues
                   NombreDeCoupsMaximum
                   StatutActuel
                   Evalue()
  Resultat         Jeu()                               Evaluateur


NbBienPlaces                                       EvalueBienPlaces()
NbMalPlaces                                        EvalueMalPlaces()




                               Jeu

                   CodeSecret
                   NombreDeCoupsJoues
                   NombreDeCoupsMaximum
                   StatutActuel
                   Evalue()
  Resultat         Jeu(IEvaluateur)                     IEvaluateur

                                                   EvalueBienPlaces()
NbBienPlaces                                       EvalueMalPlaces()
NbMalPlaces



                                EvaluateurMock          Evaluateur


                                                   EvalueBienPlaces()
                              EvalueBienPlaces()
                                                   EvalueMalPlaces()
                              EvalueMalPlaces()
On code ?
Tests UI : Model-View-ViewModel

• Séparation Présentation – Logique de présentation


                                     UnitTest




             View                   ViewModel   Model


                      DataBinding
On code ?
La couverture des tests…
Conclusion

Pas d’excuses !
• Pour avoir le temps d’écrire les tests, faites du TDD
• On peut (presque) tout tester


Avec TDD je peux...
• mieux documenter le code
    – Mon code fait ce qui est décrit dans les tests ni plus, ni moins
• modifier le code sans risque
    – (détecter la moindre régression)
• avoir un code flexible
    – (non pas générique, mais prêt au changement)
Resources
• Test Driven Development - Wikipedia :
   http://fr.wikipedia.org/wiki/Test_Driven_Development

• Développement piloté par les tests avec Visual Studio 2005
  TeamSystem :
    http://download.microsoft.com/download/3/5/7/3574ef99-ba3e-48d6-9fba-
   0307742741d9/Programmez-SpecialVSTS-Mars2006.pdf (p. 7)

• Inversion of Control Containers and the Dependency Injection
  pattern : http://martinfowler.com/articles/injection.html

• Spring .NET : http://www.springframework.net/
• NMock : http://nmock2.wiki.sourceforge.net/

• Blog OCTO Technology : http://blog.octo.com/
• Podcast « Les tests, pourquoi en faire ? » :
   http://www.visualstudiotalkshow.com/Archives/091-28janvier2009-Frederi.html
Frédéric SCHÄFER
fschafer@octo.com
+41 79 501 56 76

Djamel ZOUAOUI
dzouaoui@octo.com
+33 6 18 38 47 91

More Related Content

What's hot

Pizza party 30-09-2011 bdd-cucumber
Pizza party 30-09-2011 bdd-cucumberPizza party 30-09-2011 bdd-cucumber
Pizza party 30-09-2011 bdd-cucumberHervé Leclerc
 
Iut agile lyon 20 nov. 2013 - bdd
Iut agile lyon   20 nov. 2013 - bddIut agile lyon   20 nov. 2013 - bdd
Iut agile lyon 20 nov. 2013 - bddagnes_crepet
 
Les Aventures d'Alice - la Révolte des Tests
Les Aventures d'Alice - la Révolte des TestsLes Aventures d'Alice - la Révolte des Tests
Les Aventures d'Alice - la Révolte des TestsLy-Jia Goldstein
 
PHPTour Lyon 2014 - Conférence - Tests unitaires Je veux mes 80% de couvertur...
PHPTour Lyon 2014 - Conférence - Tests unitaires Je veux mes 80% de couvertur...PHPTour Lyon 2014 - Conférence - Tests unitaires Je veux mes 80% de couvertur...
PHPTour Lyon 2014 - Conférence - Tests unitaires Je veux mes 80% de couvertur...Cyrille Grandval
 
Test unitaire
Test unitaireTest unitaire
Test unitaireIsenDev
 
Tdd en action - refactoring
Tdd en action - refactoringTdd en action - refactoring
Tdd en action - refactoringEric Mignot
 
Le rôle du testeur et le Blackbox testing
Le rôle du testeur et le Blackbox testingLe rôle du testeur et le Blackbox testing
Le rôle du testeur et le Blackbox testingGeeks Anonymes
 
Du JavaScript dans mon projet
Du JavaScript dans mon projetDu JavaScript dans mon projet
Du JavaScript dans mon projetjollivetc
 
Guide javascript
Guide javascriptGuide javascript
Guide javascriptjollivetc
 

What's hot (11)

Pizza party 30-09-2011 bdd-cucumber
Pizza party 30-09-2011 bdd-cucumberPizza party 30-09-2011 bdd-cucumber
Pizza party 30-09-2011 bdd-cucumber
 
Iut agile lyon 20 nov. 2013 - bdd
Iut agile lyon   20 nov. 2013 - bddIut agile lyon   20 nov. 2013 - bdd
Iut agile lyon 20 nov. 2013 - bdd
 
Les Aventures d'Alice - la Révolte des Tests
Les Aventures d'Alice - la Révolte des TestsLes Aventures d'Alice - la Révolte des Tests
Les Aventures d'Alice - la Révolte des Tests
 
Behavior driven Development
Behavior driven DevelopmentBehavior driven Development
Behavior driven Development
 
PHPTour Lyon 2014 - Conférence - Tests unitaires Je veux mes 80% de couvertur...
PHPTour Lyon 2014 - Conférence - Tests unitaires Je veux mes 80% de couvertur...PHPTour Lyon 2014 - Conférence - Tests unitaires Je veux mes 80% de couvertur...
PHPTour Lyon 2014 - Conférence - Tests unitaires Je veux mes 80% de couvertur...
 
Test unitaire
Test unitaireTest unitaire
Test unitaire
 
Tdd en action - refactoring
Tdd en action - refactoringTdd en action - refactoring
Tdd en action - refactoring
 
Le rôle du testeur et le Blackbox testing
Le rôle du testeur et le Blackbox testingLe rôle du testeur et le Blackbox testing
Le rôle du testeur et le Blackbox testing
 
Designs Patterns
Designs PatternsDesigns Patterns
Designs Patterns
 
Du JavaScript dans mon projet
Du JavaScript dans mon projetDu JavaScript dans mon projet
Du JavaScript dans mon projet
 
Guide javascript
Guide javascriptGuide javascript
Guide javascript
 

Viewers also liked

lipolyse laser ou mincir sans effort
lipolyse laser ou mincir sans effort lipolyse laser ou mincir sans effort
lipolyse laser ou mincir sans effort aesthelys
 
Biological Solutions in a chemical world
Biological Solutions in a chemical worldBiological Solutions in a chemical world
Biological Solutions in a chemical worldThomas Schäfer
 
Unit testing symfony plugins with php unit
Unit testing symfony plugins with php unitUnit testing symfony plugins with php unit
Unit testing symfony plugins with php unitChristian Schaefer
 
Designing Collaboration: Building Systems that Really Work - Philipp Schäfer
Designing Collaboration: Building Systems that Really Work - Philipp SchäferDesigning Collaboration: Building Systems that Really Work - Philipp Schäfer
Designing Collaboration: Building Systems that Really Work - Philipp SchäferOpenKnowledge srl
 
UNIVERSITY PORTFOLIO - ERIN SCHAFER
UNIVERSITY PORTFOLIO - ERIN SCHAFER UNIVERSITY PORTFOLIO - ERIN SCHAFER
UNIVERSITY PORTFOLIO - ERIN SCHAFER Erin Schafer
 
E-COMMERCE E AUTOMAZIONE: LE SMART SOLUTIONS DI SSI SCHÄFER
E-COMMERCE E AUTOMAZIONE: LE SMART SOLUTIONS DI SSI SCHÄFERE-COMMERCE E AUTOMAZIONE: LE SMART SOLUTIONS DI SSI SCHÄFER
E-COMMERCE E AUTOMAZIONE: LE SMART SOLUTIONS DI SSI SCHÄFERlogisticaefficiente
 
Social Business und eRecruiting_IBM Symposium2013_Kay Buck
Social Business und eRecruiting_IBM Symposium2013_Kay BuckSocial Business und eRecruiting_IBM Symposium2013_Kay Buck
Social Business und eRecruiting_IBM Symposium2013_Kay BuckIBM Switzerland
 
Presentation ibm pascal gaussen à la fevad mars2012
Presentation ibm pascal gaussen à la fevad mars2012Presentation ibm pascal gaussen à la fevad mars2012
Presentation ibm pascal gaussen à la fevad mars2012Henri Kaufman
 
FSLN: Interaktive lernressourcen Abschlusspräsentation
FSLN: Interaktive lernressourcen AbschlusspräsentationFSLN: Interaktive lernressourcen Abschlusspräsentation
FSLN: Interaktive lernressourcen AbschlusspräsentationAlexander Schäfer
 
Schafer Corporation
Schafer CorporationSchafer Corporation
Schafer CorporationJoseph Brown
 
Cours bota 2012 - niveau débutant
Cours bota 2012 - niveau débutantCours bota 2012 - niveau débutant
Cours bota 2012 - niveau débutantaudreytocco
 
Cours bota 2012 - niveau intermédiaire
Cours bota 2012 - niveau intermédiaireCours bota 2012 - niveau intermédiaire
Cours bota 2012 - niveau intermédiaireaudreytocco
 
IoT vs. Industrie Vergleich
IoT vs. Industrie VergleichIoT vs. Industrie Vergleich
IoT vs. Industrie VergleichPlamen Kiradjiev
 
Fonctions Mono-Ligne
Fonctions Mono-LigneFonctions Mono-Ligne
Fonctions Mono-Lignewebreaker
 
Manipulation des Données , cours sql oracle
Manipulation des Données , cours sql oracleManipulation des Données , cours sql oracle
Manipulation des Données , cours sql oraclewebreaker
 
Mise en Forme des Résultats avec SQL*Plus
Mise en Forme des Résultats avec SQL*PlusMise en Forme des Résultats avec SQL*Plus
Mise en Forme des Résultats avec SQL*Pluswebreaker
 
Conférence en ligne LinkedIn - Recruter à l'ère du mobile
Conférence en ligne LinkedIn - Recruter à l'ère du mobileConférence en ligne LinkedIn - Recruter à l'ère du mobile
Conférence en ligne LinkedIn - Recruter à l'ère du mobileLinkedIn
 
WHAT DO YOU STAND FOR? - COOLBRANDS PEOPLE
WHAT DO YOU STAND FOR? - COOLBRANDS PEOPLEWHAT DO YOU STAND FOR? - COOLBRANDS PEOPLE
WHAT DO YOU STAND FOR? - COOLBRANDS PEOPLECoolBrands People
 

Viewers also liked (20)

lipolyse laser ou mincir sans effort
lipolyse laser ou mincir sans effort lipolyse laser ou mincir sans effort
lipolyse laser ou mincir sans effort
 
Biological Solutions in a chemical world
Biological Solutions in a chemical worldBiological Solutions in a chemical world
Biological Solutions in a chemical world
 
Unit testing symfony plugins with php unit
Unit testing symfony plugins with php unitUnit testing symfony plugins with php unit
Unit testing symfony plugins with php unit
 
Designing Collaboration: Building Systems that Really Work - Philipp Schäfer
Designing Collaboration: Building Systems that Really Work - Philipp SchäferDesigning Collaboration: Building Systems that Really Work - Philipp Schäfer
Designing Collaboration: Building Systems that Really Work - Philipp Schäfer
 
UNIVERSITY PORTFOLIO - ERIN SCHAFER
UNIVERSITY PORTFOLIO - ERIN SCHAFER UNIVERSITY PORTFOLIO - ERIN SCHAFER
UNIVERSITY PORTFOLIO - ERIN SCHAFER
 
E-COMMERCE E AUTOMAZIONE: LE SMART SOLUTIONS DI SSI SCHÄFER
E-COMMERCE E AUTOMAZIONE: LE SMART SOLUTIONS DI SSI SCHÄFERE-COMMERCE E AUTOMAZIONE: LE SMART SOLUTIONS DI SSI SCHÄFER
E-COMMERCE E AUTOMAZIONE: LE SMART SOLUTIONS DI SSI SCHÄFER
 
La Petite Histoire Des Subprimes
La Petite Histoire Des SubprimesLa Petite Histoire Des Subprimes
La Petite Histoire Des Subprimes
 
Social Business und eRecruiting_IBM Symposium2013_Kay Buck
Social Business und eRecruiting_IBM Symposium2013_Kay BuckSocial Business und eRecruiting_IBM Symposium2013_Kay Buck
Social Business und eRecruiting_IBM Symposium2013_Kay Buck
 
Presentation ibm pascal gaussen à la fevad mars2012
Presentation ibm pascal gaussen à la fevad mars2012Presentation ibm pascal gaussen à la fevad mars2012
Presentation ibm pascal gaussen à la fevad mars2012
 
FSLN: Interaktive lernressourcen Abschlusspräsentation
FSLN: Interaktive lernressourcen AbschlusspräsentationFSLN: Interaktive lernressourcen Abschlusspräsentation
FSLN: Interaktive lernressourcen Abschlusspräsentation
 
Schafer Corporation
Schafer CorporationSchafer Corporation
Schafer Corporation
 
Coordinated assessment
Coordinated assessmentCoordinated assessment
Coordinated assessment
 
Cours bota 2012 - niveau débutant
Cours bota 2012 - niveau débutantCours bota 2012 - niveau débutant
Cours bota 2012 - niveau débutant
 
Cours bota 2012 - niveau intermédiaire
Cours bota 2012 - niveau intermédiaireCours bota 2012 - niveau intermédiaire
Cours bota 2012 - niveau intermédiaire
 
IoT vs. Industrie Vergleich
IoT vs. Industrie VergleichIoT vs. Industrie Vergleich
IoT vs. Industrie Vergleich
 
Fonctions Mono-Ligne
Fonctions Mono-LigneFonctions Mono-Ligne
Fonctions Mono-Ligne
 
Manipulation des Données , cours sql oracle
Manipulation des Données , cours sql oracleManipulation des Données , cours sql oracle
Manipulation des Données , cours sql oracle
 
Mise en Forme des Résultats avec SQL*Plus
Mise en Forme des Résultats avec SQL*PlusMise en Forme des Résultats avec SQL*Plus
Mise en Forme des Résultats avec SQL*Plus
 
Conférence en ligne LinkedIn - Recruter à l'ère du mobile
Conférence en ligne LinkedIn - Recruter à l'ère du mobileConférence en ligne LinkedIn - Recruter à l'ère du mobile
Conférence en ligne LinkedIn - Recruter à l'ère du mobile
 
WHAT DO YOU STAND FOR? - COOLBRANDS PEOPLE
WHAT DO YOU STAND FOR? - COOLBRANDS PEOPLEWHAT DO YOU STAND FOR? - COOLBRANDS PEOPLE
WHAT DO YOU STAND FOR? - COOLBRANDS PEOPLE
 

Similar to Présentation Alt.net - Tests unitaires automatisés

Tester du legacy code, mission impossible ?
Tester du legacy code, mission impossible ?Tester du legacy code, mission impossible ?
Tester du legacy code, mission impossible ?CGI Québec Formation
 
CocoaHeads Toulouse - Xcode et les tests - Epitez
CocoaHeads Toulouse - Xcode et les tests - EpitezCocoaHeads Toulouse - Xcode et les tests - Epitez
CocoaHeads Toulouse - Xcode et les tests - EpitezCocoaHeads France
 
Essential skills for the agile developer
Essential skills for the agile developerEssential skills for the agile developer
Essential skills for the agile developerAlice Barralon
 
Pourquoi vous ne pouvez pas tester votre code
Pourquoi vous ne pouvez pas tester votre codePourquoi vous ne pouvez pas tester votre code
Pourquoi vous ne pouvez pas tester votre codeRémi Lesieur
 
C'est quoi, du bon code ?
C'est quoi, du bon code ?C'est quoi, du bon code ?
C'est quoi, du bon code ?Rémi Lesieur
 
Une architecture agile et testable
Une architecture agile et testableUne architecture agile et testable
Une architecture agile et testablemartinsson
 
Automatisation des tests - objectifs et concepts - partie 2
Automatisation des tests  - objectifs et concepts - partie 2Automatisation des tests  - objectifs et concepts - partie 2
Automatisation des tests - objectifs et concepts - partie 2Christophe Rochefolle
 
Les Code Reviews : le guide de survie
Les Code Reviews : le guide de survieLes Code Reviews : le guide de survie
Les Code Reviews : le guide de survieNicolas VERINAUD
 
Human Talks Grenoble - 11/12/2012 - TDD
Human Talks Grenoble - 11/12/2012 - TDDHuman Talks Grenoble - 11/12/2012 - TDD
Human Talks Grenoble - 11/12/2012 - TDDXavier NOPRE
 
Tdd en action - découverte
Tdd en action - découverteTdd en action - découverte
Tdd en action - découverteEric Mignot
 
20131024 qualité de code et sonar - mug lyon
20131024   qualité de code et sonar - mug lyon20131024   qualité de code et sonar - mug lyon
20131024 qualité de code et sonar - mug lyonClement Bouillier
 
Chouette! Encore un bug! Agile Tour 2012
Chouette! Encore un bug! Agile Tour 2012Chouette! Encore un bug! Agile Tour 2012
Chouette! Encore un bug! Agile Tour 2012AgileCoach.net
 
Deux ans de développement Agile, erreurs et succès
Deux ans de développement Agile, erreurs et succèsDeux ans de développement Agile, erreurs et succès
Deux ans de développement Agile, erreurs et succèsAgile Tour 2009 Québec
 
Agile Tour Nantes 2014 - Tdd, le meilleur moyen d'écrire du code testable
Agile Tour Nantes 2014 - Tdd, le meilleur moyen d'écrire du code testableAgile Tour Nantes 2014 - Tdd, le meilleur moyen d'écrire du code testable
Agile Tour Nantes 2014 - Tdd, le meilleur moyen d'écrire du code testableAssociation Agile Nantes
 
Test driven development v0.2 20121221
Test driven development v0.2 20121221Test driven development v0.2 20121221
Test driven development v0.2 20121221Frédéric Delorme
 
Chouette! Encore un bug!
Chouette! Encore un bug!Chouette! Encore un bug!
Chouette! Encore un bug!AgileCoach.net
 

Similar to Présentation Alt.net - Tests unitaires automatisés (20)

Tester du legacy code, mission impossible ?
Tester du legacy code, mission impossible ?Tester du legacy code, mission impossible ?
Tester du legacy code, mission impossible ?
 
CocoaHeads Toulouse - Xcode et les tests - Epitez
CocoaHeads Toulouse - Xcode et les tests - EpitezCocoaHeads Toulouse - Xcode et les tests - Epitez
CocoaHeads Toulouse - Xcode et les tests - Epitez
 
Essential skills for the agile developer
Essential skills for the agile developerEssential skills for the agile developer
Essential skills for the agile developer
 
Pourquoi vous ne pouvez pas tester votre code
Pourquoi vous ne pouvez pas tester votre codePourquoi vous ne pouvez pas tester votre code
Pourquoi vous ne pouvez pas tester votre code
 
Valider par des tests - Blend
Valider par des tests - BlendValider par des tests - Blend
Valider par des tests - Blend
 
C'est quoi, du bon code ?
C'est quoi, du bon code ?C'est quoi, du bon code ?
C'est quoi, du bon code ?
 
Une architecture agile et testable
Une architecture agile et testableUne architecture agile et testable
Une architecture agile et testable
 
Anatomie du test
Anatomie du testAnatomie du test
Anatomie du test
 
Automatisation des tests - objectifs et concepts - partie 2
Automatisation des tests  - objectifs et concepts - partie 2Automatisation des tests  - objectifs et concepts - partie 2
Automatisation des tests - objectifs et concepts - partie 2
 
Les Code Reviews : le guide de survie
Les Code Reviews : le guide de survieLes Code Reviews : le guide de survie
Les Code Reviews : le guide de survie
 
Human Talks Grenoble - 11/12/2012 - TDD
Human Talks Grenoble - 11/12/2012 - TDDHuman Talks Grenoble - 11/12/2012 - TDD
Human Talks Grenoble - 11/12/2012 - TDD
 
Tdd en action - découverte
Tdd en action - découverteTdd en action - découverte
Tdd en action - découverte
 
20131024 qualité de code et sonar - mug lyon
20131024   qualité de code et sonar - mug lyon20131024   qualité de code et sonar - mug lyon
20131024 qualité de code et sonar - mug lyon
 
Chouette! Encore un bug! Agile Tour 2012
Chouette! Encore un bug! Agile Tour 2012Chouette! Encore un bug! Agile Tour 2012
Chouette! Encore un bug! Agile Tour 2012
 
Tour d'horizon des tests
Tour d'horizon des testsTour d'horizon des tests
Tour d'horizon des tests
 
Deux ans de développement Agile, erreurs et succès
Deux ans de développement Agile, erreurs et succèsDeux ans de développement Agile, erreurs et succès
Deux ans de développement Agile, erreurs et succès
 
Usine Logicielle 2013
Usine Logicielle 2013Usine Logicielle 2013
Usine Logicielle 2013
 
Agile Tour Nantes 2014 - Tdd, le meilleur moyen d'écrire du code testable
Agile Tour Nantes 2014 - Tdd, le meilleur moyen d'écrire du code testableAgile Tour Nantes 2014 - Tdd, le meilleur moyen d'écrire du code testable
Agile Tour Nantes 2014 - Tdd, le meilleur moyen d'écrire du code testable
 
Test driven development v0.2 20121221
Test driven development v0.2 20121221Test driven development v0.2 20121221
Test driven development v0.2 20121221
 
Chouette! Encore un bug!
Chouette! Encore un bug!Chouette! Encore un bug!
Chouette! Encore un bug!
 

More from Djamel Zouaoui

Paris Data Geek - Spark Streaming
Paris Data Geek - Spark Streaming Paris Data Geek - Spark Streaming
Paris Data Geek - Spark Streaming Djamel Zouaoui
 
Datajob 2013 - Construire un système de recommandation
Datajob 2013 - Construire un système de recommandationDatajob 2013 - Construire un système de recommandation
Datajob 2013 - Construire un système de recommandationDjamel Zouaoui
 
Usi 2013 - NoSql les defis à relever
Usi 2013 -  NoSql les defis à releverUsi 2013 -  NoSql les defis à relever
Usi 2013 - NoSql les defis à releverDjamel Zouaoui
 
ParisDataGeek - L amour est dans le graphe
ParisDataGeek - L amour est dans le grapheParisDataGeek - L amour est dans le graphe
ParisDataGeek - L amour est dans le grapheDjamel Zouaoui
 
Microsoft Tech days 2007 - Industrialisation des développements : Retours d'e...
Microsoft Tech days 2007 - Industrialisation des développements : Retours d'e...Microsoft Tech days 2007 - Industrialisation des développements : Retours d'e...
Microsoft Tech days 2007 - Industrialisation des développements : Retours d'e...Djamel Zouaoui
 
USI 2009 - Du RIA pour SI
USI 2009 - Du RIA pour SIUSI 2009 - Du RIA pour SI
USI 2009 - Du RIA pour SIDjamel Zouaoui
 
Retour d'expérience TechLead
Retour d'expérience TechLeadRetour d'expérience TechLead
Retour d'expérience TechLeadDjamel Zouaoui
 
USI Casablanca 2010 - Industrialisation et intégration continue
USI Casablanca 2010 - Industrialisation et intégration continueUSI Casablanca 2010 - Industrialisation et intégration continue
USI Casablanca 2010 - Industrialisation et intégration continueDjamel Zouaoui
 
USI 2011 - De l offshore qui fonctionne !
USI 2011 - De l offshore qui fonctionne !USI 2011 - De l offshore qui fonctionne !
USI 2011 - De l offshore qui fonctionne !Djamel Zouaoui
 

More from Djamel Zouaoui (9)

Paris Data Geek - Spark Streaming
Paris Data Geek - Spark Streaming Paris Data Geek - Spark Streaming
Paris Data Geek - Spark Streaming
 
Datajob 2013 - Construire un système de recommandation
Datajob 2013 - Construire un système de recommandationDatajob 2013 - Construire un système de recommandation
Datajob 2013 - Construire un système de recommandation
 
Usi 2013 - NoSql les defis à relever
Usi 2013 -  NoSql les defis à releverUsi 2013 -  NoSql les defis à relever
Usi 2013 - NoSql les defis à relever
 
ParisDataGeek - L amour est dans le graphe
ParisDataGeek - L amour est dans le grapheParisDataGeek - L amour est dans le graphe
ParisDataGeek - L amour est dans le graphe
 
Microsoft Tech days 2007 - Industrialisation des développements : Retours d'e...
Microsoft Tech days 2007 - Industrialisation des développements : Retours d'e...Microsoft Tech days 2007 - Industrialisation des développements : Retours d'e...
Microsoft Tech days 2007 - Industrialisation des développements : Retours d'e...
 
USI 2009 - Du RIA pour SI
USI 2009 - Du RIA pour SIUSI 2009 - Du RIA pour SI
USI 2009 - Du RIA pour SI
 
Retour d'expérience TechLead
Retour d'expérience TechLeadRetour d'expérience TechLead
Retour d'expérience TechLead
 
USI Casablanca 2010 - Industrialisation et intégration continue
USI Casablanca 2010 - Industrialisation et intégration continueUSI Casablanca 2010 - Industrialisation et intégration continue
USI Casablanca 2010 - Industrialisation et intégration continue
 
USI 2011 - De l offshore qui fonctionne !
USI 2011 - De l offshore qui fonctionne !USI 2011 - De l offshore qui fonctionne !
USI 2011 - De l offshore qui fonctionne !
 

Présentation Alt.net - Tests unitaires automatisés

  • 1. Des tests unitaires automatiques ? Trop cher ! Trop compliqué ! Des recettes pour passer à TDD sans douleur. Frédéric SCHÄFER Djamel ZOUAOUI
  • 2. Pourquoi je ne fais pas de tests ? Plus tard  jamais Pas le temps Trop cher Pas testable Sert à rien
  • 3. Objectif de la session J’ai envie de faire des tests unitaires… mais je ne sais pas comment m’y prendre ! Et je sais comment m’y prendre !
  • 4. Tordons le cou à ces fausses raisons ! • Je testerai après… – Parce que je ne sais pas encore comment je vais écrire mon code – Parce que mon code va évoluer Partie 1 – Parce qu’il faut que je montre quelque chose rapidement – Parce que je pourrai générer des tests automatiquement / plus facilement – … • Ce n’est pas testable parce que … – Ma classe dépend d’une autre – Mon code est dans la couche d’interface usager Partie 2 – Mon code doit créer des objets lors de l’exécution – L’exécution de mon code n’est pas reproductible (dates, hasard,…) – …
  • 5. Partie 1 • Je testerai après… – Parce que je ne sais pas encore comment je vais écrire mon code – Parce que mon code va évoluer – Parce qu’il faut que je montre quelque chose rapidement – Parce que je pourrai générer des tests automatiquement / plus facilement • 2 mois plus tard… : Je n’ai pas eu le temps de tester • Solution : Commencer par tester (TDD) Développement Développement Tests
  • 6. Développement piloté par les tests • Les tests sont conçus et écrits avant le code applicatif – Ils représentent l’expression du besoin – Ils définissent et nouent un contrat de bon fonctionnement de l’application Chaque ligne de code est justifiée par un test qui ne passait pas.
  • 7. Mastermind Propositions Mal placés Bien placés Code Secret
  • 9. Partie 1 : Conclusion  (Cassé) – Rouge – Vert – (Remaniement)  3A : Acteur – Action – Assertion  1 test vert  1 commit  1 bug  1 test  Jouer l’ensemble des tests  Les tests sont automatisés et rapides
  • 10. 2ème partie  Ce n’est pas testable parce que …  Ma classe dépend d’une autre  L’exécution de mon code n’est pas reproductible (dates, hasard,…)  Mon code est dans l’IHM
  • 11. Ma classe dépend d’une autre : Injection de dépendance • Les dépendances entre les modules de code peuvent être définies par un module tiers – Une classe A ne crée pas l’instance d’une classe B dont elle a besoin mais utilise une interface IB implémentée par B – L’implémentation de l’interface IB est fournie à A par un module tiers • Respecte le principe de Hollywood « Ne nous appelez pas, c’est nous qui vous appelons » – C’est le conteneur qui appelle notre objet pour lui fournir la dépendance dans notre objet (constructeur / setter) . – L’objet est en fait passif dans le processus de choix des dépendances. – Les dépendances sont sous la responsabilité du conteneur et non de l’objet.
  • 12. Bouchonnage • Le bouchonnage d’une classe est la création d’une classe « similaire » à celle-ci et qui, le cas échéant, pourra se substituer à elle. • Cela se formalise par une classe qui se présente comme la « vraie » classe (même méthodes et propriétés publiques) mais sur laquelle le développeur a le contrôle. • Le bouchonnage permet de simuler les données attendues par une méthode pour son fonctionnement. • Facilité par l’injection de dépendance !
  • 13. Application à notre Mastermind Jeu CodeSecret NombreDeCoupsJoues NombreDeCoupsMaximum StatutActuel Evalue() Resultat Jeu() Evaluateur NbBienPlaces EvalueBienPlaces() NbMalPlaces EvalueMalPlaces() Jeu CodeSecret NombreDeCoupsJoues NombreDeCoupsMaximum StatutActuel Evalue() Resultat Jeu(IEvaluateur) IEvaluateur EvalueBienPlaces() NbBienPlaces EvalueMalPlaces() NbMalPlaces EvaluateurMock Evaluateur EvalueBienPlaces() EvalueBienPlaces() EvalueMalPlaces() EvalueMalPlaces()
  • 15. Tests UI : Model-View-ViewModel • Séparation Présentation – Logique de présentation UnitTest View ViewModel Model DataBinding
  • 17. La couverture des tests…
  • 18. Conclusion Pas d’excuses ! • Pour avoir le temps d’écrire les tests, faites du TDD • On peut (presque) tout tester Avec TDD je peux... • mieux documenter le code – Mon code fait ce qui est décrit dans les tests ni plus, ni moins • modifier le code sans risque – (détecter la moindre régression) • avoir un code flexible – (non pas générique, mais prêt au changement)
  • 19. Resources • Test Driven Development - Wikipedia : http://fr.wikipedia.org/wiki/Test_Driven_Development • Développement piloté par les tests avec Visual Studio 2005 TeamSystem : http://download.microsoft.com/download/3/5/7/3574ef99-ba3e-48d6-9fba- 0307742741d9/Programmez-SpecialVSTS-Mars2006.pdf (p. 7) • Inversion of Control Containers and the Dependency Injection pattern : http://martinfowler.com/articles/injection.html • Spring .NET : http://www.springframework.net/ • NMock : http://nmock2.wiki.sourceforge.net/ • Blog OCTO Technology : http://blog.octo.com/ • Podcast « Les tests, pourquoi en faire ? » : http://www.visualstudiotalkshow.com/Archives/091-28janvier2009-Frederi.html
  • 20. Frédéric SCHÄFER fschafer@octo.com +41 79 501 56 76 Djamel ZOUAOUI dzouaoui@octo.com +33 6 18 38 47 91