SlideShare une entreprise Scribd logo
TDD et Refactoring




                     Walid
                     Skouri
Plan
• Introduction
• L’eXtreme Programming
• Les bases du TDD
• Les tests unitaires
• Le refactoring
Introduction
Introduction
• Introduction
• L’eXtreme Programming
• Les bases du TDD
• Le refactoring
Introduction
• Les démarches traditionnelles



  – spécification > conception > réalisation > validation




         – Concentre la plupart des décision au début d’un projet

         – Les client réalisent que leurs besoins ont changé
Introduction
Accepter ce changment
• C’est une composante incontournable de
  tout projet

• Approche XP
eXtreme Programming
XP
L’idée

• Réduction significative de la durée du cycle
  de développement:
  – Réduction du temps entre :
     • L’implémentation d’une fonctionnalité
     • Mise en production d’une nouvelle version du logiciel
XP
Comment
• On ne fait de conception que pour les fonctionnalités
  existantes, pas pour les fonctionnalités futures:
  – On ne fait de généralisations dans la conception que lorsque
    des besoins concrets se font sentir.
  – On n'introduit pas d'optimisations si elles ne sont pas
    demandées par le client.
• Priorité :
  – Travail actuel bien fait : Code testé, simple, lisible et sans
    duplication
XP
Principaux éléments de fonctionnement de XP

• Cycles itératifs pilotés par le client : Le projet progresse au rythme d'itérations
  très courtes, dont le contenu fonctionnel est déterminé par le client.
• Travail d'équipe auto-organisé : L'équipe travaille réellement... en équipe. Les
  développeurs organisent eux-mêmes leur travail, interviennent sur l'ensemble du
  code, travaillent systématiquement en binômes, et synchronisent leurs
  développements plusieurs fois par jour.
• Programmation pilotée par les tests : les développeurs écrivent des test
  automatiques pour chaque portion de code qu'ils conçoivent, et ils s'appuient sur
  ces tests pour affiner et améliorer sans cesse la conception de l'application sans
  craindre de régression.
XP
    Le coût des changements

                              Traditionnel




 Coût des
changement
     s




                                             XP




                                                  Temps
XP
Les valeurs de XP
• Communication : XP favorise le contact humain, la communication directe, plutôt que le cloisonnement
  des activités et les échanges de courriers électroniques ou de documents formels. Les développeurs
  travaillent directement avec la maîtrise d'ouvrage, les testeurs sont intégrés à l'équipe de développement,
  etc.


• Feedback : qu'il s'agisse d'itérations courtes, de livraisons fréquentes, de travail en binômes ou de tests
  automatiques exécutés en permanence, la plupart des pratiques XP sont conçues pour donner un
  maximum de feedback sur le déroulement du projet afin de corriger la trajectoire au plus tôt. En particulier,
  les points de début d'itération offrent à l'équipe le moyen de prendre du recul sur son fonctionnement et de
  l'améliorer sans cesse au fil des itérations.


• Simplicité : XP relève le défi suivant : « que pouvons-nous arrêter de faire tout en continuant à créer
  efficacement un logiciel qui réponde aux besoins réels du client ? ». Cette recherche de simplification
  touche le processus lui-même, mais aussi l'outil fabriqué (la mécanique de planification incite le client à
  focaliser les efforts sur les fonctions prioritaires) ou encore la conception de l'application (guidée par un
  principe de « You ain't gonna need it »).
Les bases du TDD
Les bases du TDD
Tests au début du développement


              Ecriture des             Ecriture du
                  tests                   code
                              Tests
  Commencer                                          Fini
                             échoués
Les bases du TDD
Développements pilotés par les tests


       Code                      Tests
       propre                   échoués




       Refactoring

                     Tous les
                       tests
                      réussis
TDD
Les bases du TDD
 Recommandations




• Ne jamais écrire de code sans avoir de
  tests qui échouent
• Les tests doivent être représentatifs des
  spécifications
Les test unitaires
Les tests unitaires
• Il permettent


  – De contrôler et conserver la qualité du produit tout
    au long du projet
  – De se focaliser sur l’amélioration du code, plutôt
    que sur les bugs
  – D’améliorer la productivité de l’équipe en
    automatisant un maximum de tâches redondantes
    et ennuyantes
Les tests unitaires
Testabilité du code



• Privilégier la composition à l’héritage
• Isoler les dépendances
• Injecter les dépendances
Les tests unitaires
  Testabilité du code
• Privilégier la composition à l’héritage

                                   Héritage                                            Composition
                 class Fruit {                                           class Fruit {
                 //... }                                                 //... }
                 class Apple extends Fruit {                             class Apple {
                 //... }                                                 private Fruit fruit = new Fruit(); //... }




  – L’héritage permet à la sous classe d’heriter toutes les fonctionnalité
  – La composition permet une solution plus flexible et réutilisable
  – Exemple: Permet d’instancier le l’objet composite avec différentes implémentations
Les tests unitaires
 Testabilité du code



Injection de dépendance
• Se rapporte à la fourniture d'une dépendance
  externe à un composant logiciel.
• Formes d’injection de dépendance
   – interface injection
   – setter injection
   – constructor injection
Les tests unitaires
  Testabilité du code

Injection du constructeur
public class ImportantClass {             public class ImportantClass {
        IFoo foo;                                 IFoo foo;
        public ImportantClass()           public ImportantClass(IFoo foo) {
        {                                         this.foo = foo;
              this.foo = new              }
        EnterpriseFoo();
                                                  void doReallyImportantStuff() {
        }
                                                  this.foo.bar();
        void doReallyImportantStuff() {
        this.foo.bar();                           }
        }                                  }
 }
Refactoring
Refactoring
 C’est quoi?



• C’est une technique de restructuration du
  code existant: modifier sa structure sans
  changer son comportement externe


• Ensemble de petites modifications dans le
  but d’améliorer le code
Refactoring
 C’est quoi?


• Chaque transformation (ou Refactoring) ne
  modifie qu’une petite partie du code mais un
  ensemble de transformations peut produire un
  changement significatif


• Le système se doit de toujours fonctionner suite
  à chaque refactoring. Eviter les régressions.
Refactoring
  Pourquoi?


• Améliorer la structure du logiciel


• Rendre le code plus lisible et maintenable


• Faciliter les futurs changements


• Plus de flexibilité


• Augmenter la réutilisabilité


• Faciliter la recherche de bugs
Refactoring
 Quand?


• Code dupliqué


• Longues méthodes


• Longues liste de paramètres


• Nommage inapproprié
Démo

Contenu connexe

Tendances

eXtreme Programming [fr]
eXtreme Programming [fr]eXtreme Programming [fr]
eXtreme Programming [fr]
Rémy Coutable
 
Pompes et Compresseurs Pour applications fixes GPL et NH3
Pompes et Compresseurs Pour applications fixes GPL et NH3Pompes et Compresseurs Pour applications fixes GPL et NH3
Pompes et Compresseurs Pour applications fixes GPL et NH3
FAS Flussiggas Anlagen
 
Test logiciel
Test logicielTest logiciel
Test logiciel
Youness Boukouchi
 
Methodologies de Developpement Agiles : Scrum et XP
Methodologies de Developpement Agiles : Scrum et XPMethodologies de Developpement Agiles : Scrum et XP
Methodologies de Developpement Agiles : Scrum et XP
Nicolas Perriault
 
Introdução ao TDD
Introdução ao TDDIntrodução ao TDD
Introdução ao TDD
Eduardo Mendes
 
Segula
SegulaSegula
Automatisation des tests - objectifs et concepts - partie 1
Automatisation des tests  - objectifs et concepts - partie 1Automatisation des tests  - objectifs et concepts - partie 1
Automatisation des tests - objectifs et concepts - partie 1
Christophe Rochefolle
 
Les cinq bonnes pratiques des Tests Unitaires dans un projet Agile
Les cinq bonnes pratiques des Tests Unitaires dans un projet AgileLes cinq bonnes pratiques des Tests Unitaires dans un projet Agile
Les cinq bonnes pratiques des Tests Unitaires dans un projet Agile
Denis Voituron
 
Intégration continue et déploiement continue avec Jenkins
Intégration continue et déploiement continue avec JenkinsIntégration continue et déploiement continue avec Jenkins
Intégration continue et déploiement continue avec Jenkins
Kokou Gaglo
 
Rapport exposé eXtreme Programming XP
Rapport exposé eXtreme Programming XPRapport exposé eXtreme Programming XP
Rapport exposé eXtreme Programming XP
Sarah
 
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
Christophe Rochefolle
 
Présentation simulation des flux
Présentation simulation des flux Présentation simulation des flux
Présentation simulation des flux
Capgemini
 
Docker - un outil pour faciliter le développement et le déploiement informatique
Docker - un outil pour faciliter le développement et le déploiement informatiqueDocker - un outil pour faciliter le développement et le déploiement informatique
Docker - un outil pour faciliter le développement et le déploiement informatique
sdenier
 
TP2-UML-Correction
TP2-UML-CorrectionTP2-UML-Correction
TP2-UML-Correction
Lilia Sfaxi
 
Rédiger des User Stories
Rédiger des User StoriesRédiger des User Stories
Rédiger des User Stories
Yannick Quenec'hdu
 
Présentation Agile Testing
Présentation Agile TestingPrésentation Agile Testing
Présentation Agile Testing
jubehr
 
Introduction aux méthodes agiles
Introduction aux méthodes agilesIntroduction aux méthodes agiles
Introduction aux méthodes agiles
Guillaume Collic
 
Introduction au génie logiciel 1.2
Introduction au génie logiciel 1.2Introduction au génie logiciel 1.2
Introduction au génie logiciel 1.2
Stéphane Salmons
 
Méthode d'Agile: Scrum
Méthode d'Agile: ScrumMéthode d'Agile: Scrum
Méthode d'Agile: Scrum
ChaymaMghazli
 

Tendances (20)

eXtreme Programming [fr]
eXtreme Programming [fr]eXtreme Programming [fr]
eXtreme Programming [fr]
 
Pompes et Compresseurs Pour applications fixes GPL et NH3
Pompes et Compresseurs Pour applications fixes GPL et NH3Pompes et Compresseurs Pour applications fixes GPL et NH3
Pompes et Compresseurs Pour applications fixes GPL et NH3
 
Test logiciel
Test logicielTest logiciel
Test logiciel
 
Methodologies de Developpement Agiles : Scrum et XP
Methodologies de Developpement Agiles : Scrum et XPMethodologies de Developpement Agiles : Scrum et XP
Methodologies de Developpement Agiles : Scrum et XP
 
Introdução ao TDD
Introdução ao TDDIntrodução ao TDD
Introdução ao TDD
 
Segula
SegulaSegula
Segula
 
Automatisation des tests - objectifs et concepts - partie 1
Automatisation des tests  - objectifs et concepts - partie 1Automatisation des tests  - objectifs et concepts - partie 1
Automatisation des tests - objectifs et concepts - partie 1
 
Les cinq bonnes pratiques des Tests Unitaires dans un projet Agile
Les cinq bonnes pratiques des Tests Unitaires dans un projet AgileLes cinq bonnes pratiques des Tests Unitaires dans un projet Agile
Les cinq bonnes pratiques des Tests Unitaires dans un projet Agile
 
Intégration continue et déploiement continue avec Jenkins
Intégration continue et déploiement continue avec JenkinsIntégration continue et déploiement continue avec Jenkins
Intégration continue et déploiement continue avec Jenkins
 
Rapport exposé eXtreme Programming XP
Rapport exposé eXtreme Programming XPRapport exposé eXtreme Programming XP
Rapport exposé eXtreme Programming XP
 
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
 
Présentation simulation des flux
Présentation simulation des flux Présentation simulation des flux
Présentation simulation des flux
 
Docker - un outil pour faciliter le développement et le déploiement informatique
Docker - un outil pour faciliter le développement et le déploiement informatiqueDocker - un outil pour faciliter le développement et le déploiement informatique
Docker - un outil pour faciliter le développement et le déploiement informatique
 
TP2-UML-Correction
TP2-UML-CorrectionTP2-UML-Correction
TP2-UML-Correction
 
Docker
DockerDocker
Docker
 
Rédiger des User Stories
Rédiger des User StoriesRédiger des User Stories
Rédiger des User Stories
 
Présentation Agile Testing
Présentation Agile TestingPrésentation Agile Testing
Présentation Agile Testing
 
Introduction aux méthodes agiles
Introduction aux méthodes agilesIntroduction aux méthodes agiles
Introduction aux méthodes agiles
 
Introduction au génie logiciel 1.2
Introduction au génie logiciel 1.2Introduction au génie logiciel 1.2
Introduction au génie logiciel 1.2
 
Méthode d'Agile: Scrum
Méthode d'Agile: ScrumMéthode d'Agile: Scrum
Méthode d'Agile: Scrum
 

Similaire à TDD (Test Driven Developement) et refactoring

Formation Extreme Programming, Tests unitaires, travail collaboratif
Formation Extreme Programming, Tests unitaires, travail collaboratifFormation Extreme Programming, Tests unitaires, travail collaboratif
Formation Extreme Programming, Tests unitaires, travail collaboratif
kemenaran
 
Pratiques de développement pour équipes Agile
Pratiques de développement pour équipes AgilePratiques de développement pour équipes Agile
Pratiques de développement pour équipes Agile
Agile Tour 2009 Québec
 
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
Xavier NOPRE
 
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
Association Agile Nantes
 
Processus d’intégration continue et outils
Processus d’intégration continue et outilsProcessus d’intégration continue et outils
Processus d’intégration continue et outils
Agile Tour 2009 Québec
 
4-Cours de Géniel Logiciel
4-Cours de Géniel Logiciel4-Cours de Géniel Logiciel
4-Cours de Géniel Logiciel
lauraty3204
 
Flex Unit Testing
Flex Unit TestingFlex Unit Testing
Flex Unit Testing
Christophe Keromen
 
SharePoint Summit 2012 - Les tests automatisés et SharePoint 2010, c'est poss...
SharePoint Summit 2012 - Les tests automatisés et SharePoint 2010, c'est poss...SharePoint Summit 2012 - Les tests automatisés et SharePoint 2010, c'est poss...
SharePoint Summit 2012 - Les tests automatisés et SharePoint 2010, c'est poss...
Sébastien Levert
 
[Scrum Day 2011] Outillage Agile dans un environnement Microsoft
[Scrum Day 2011] Outillage Agile dans un environnement Microsoft[Scrum Day 2011] Outillage Agile dans un environnement Microsoft
[Scrum Day 2011] Outillage Agile dans un environnement MicrosoftChristophe HERAL
 
Test driven development v0.2 20121221
Test driven development v0.2 20121221Test driven development v0.2 20121221
Test driven development v0.2 20121221
Frédéric Delorme
 
L'integration continue pour tous
L'integration continue pour tousL'integration continue pour tous
L'integration continue pour tous
Aurelien Navarre
 
Soirée du Test Logiciel - Intégration, livraison et déploiement continu - A. ...
Soirée du Test Logiciel - Intégration, livraison et déploiement continu - A. ...Soirée du Test Logiciel - Intégration, livraison et déploiement continu - A. ...
Soirée du Test Logiciel - Intégration, livraison et déploiement continu - A. ...
TelecomValley
 
Altran soirée du test logiciel - assez des c 05-10-17
Altran   soirée du test logiciel - assez des c 05-10-17Altran   soirée du test logiciel - assez des c 05-10-17
Altran soirée du test logiciel - assez des c 05-10-17
Marc Hage Chahine
 
Test unitaires
Test unitairesTest unitaires
Test unitaires
Mohamed Akrouh
 
Valider par des tests - Blend
Valider par des tests - BlendValider par des tests - Blend
Valider par des tests - Blend
Christophe Villeneuve
 
Delphi et les tests unitaires
Delphi et les tests unitairesDelphi et les tests unitaires
Delphi et les tests unitaires
pprem
 
Usine Logicielle 2013
Usine Logicielle 2013Usine Logicielle 2013
Usine Logicielle 2013
Stéphane Liétard
 
Introduction aux spécifications exécutables (dit aussi atdd, bdd)
Introduction aux spécifications exécutables (dit aussi atdd, bdd)Introduction aux spécifications exécutables (dit aussi atdd, bdd)
Introduction aux spécifications exécutables (dit aussi atdd, bdd)
Jean-Pierre Lambert
 
Industrialisez vos projets Php
Industrialisez vos projets Php Industrialisez vos projets Php
Industrialisez vos projets Php ALTER WAY
 
Industrialisation des développements logiciels
Industrialisation des développements logicielsIndustrialisation des développements logiciels
Industrialisation des développements logiciels
Sylvain Leroy
 

Similaire à TDD (Test Driven Developement) et refactoring (20)

Formation Extreme Programming, Tests unitaires, travail collaboratif
Formation Extreme Programming, Tests unitaires, travail collaboratifFormation Extreme Programming, Tests unitaires, travail collaboratif
Formation Extreme Programming, Tests unitaires, travail collaboratif
 
Pratiques de développement pour équipes Agile
Pratiques de développement pour équipes AgilePratiques de développement pour équipes Agile
Pratiques de développement pour équipes Agile
 
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
 
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
 
Processus d’intégration continue et outils
Processus d’intégration continue et outilsProcessus d’intégration continue et outils
Processus d’intégration continue et outils
 
4-Cours de Géniel Logiciel
4-Cours de Géniel Logiciel4-Cours de Géniel Logiciel
4-Cours de Géniel Logiciel
 
Flex Unit Testing
Flex Unit TestingFlex Unit Testing
Flex Unit Testing
 
SharePoint Summit 2012 - Les tests automatisés et SharePoint 2010, c'est poss...
SharePoint Summit 2012 - Les tests automatisés et SharePoint 2010, c'est poss...SharePoint Summit 2012 - Les tests automatisés et SharePoint 2010, c'est poss...
SharePoint Summit 2012 - Les tests automatisés et SharePoint 2010, c'est poss...
 
[Scrum Day 2011] Outillage Agile dans un environnement Microsoft
[Scrum Day 2011] Outillage Agile dans un environnement Microsoft[Scrum Day 2011] Outillage Agile dans un environnement Microsoft
[Scrum Day 2011] Outillage Agile dans un environnement Microsoft
 
Test driven development v0.2 20121221
Test driven development v0.2 20121221Test driven development v0.2 20121221
Test driven development v0.2 20121221
 
L'integration continue pour tous
L'integration continue pour tousL'integration continue pour tous
L'integration continue pour tous
 
Soirée du Test Logiciel - Intégration, livraison et déploiement continu - A. ...
Soirée du Test Logiciel - Intégration, livraison et déploiement continu - A. ...Soirée du Test Logiciel - Intégration, livraison et déploiement continu - A. ...
Soirée du Test Logiciel - Intégration, livraison et déploiement continu - A. ...
 
Altran soirée du test logiciel - assez des c 05-10-17
Altran   soirée du test logiciel - assez des c 05-10-17Altran   soirée du test logiciel - assez des c 05-10-17
Altran soirée du test logiciel - assez des c 05-10-17
 
Test unitaires
Test unitairesTest unitaires
Test unitaires
 
Valider par des tests - Blend
Valider par des tests - BlendValider par des tests - Blend
Valider par des tests - Blend
 
Delphi et les tests unitaires
Delphi et les tests unitairesDelphi et les tests unitaires
Delphi et les tests unitaires
 
Usine Logicielle 2013
Usine Logicielle 2013Usine Logicielle 2013
Usine Logicielle 2013
 
Introduction aux spécifications exécutables (dit aussi atdd, bdd)
Introduction aux spécifications exécutables (dit aussi atdd, bdd)Introduction aux spécifications exécutables (dit aussi atdd, bdd)
Introduction aux spécifications exécutables (dit aussi atdd, bdd)
 
Industrialisez vos projets Php
Industrialisez vos projets Php Industrialisez vos projets Php
Industrialisez vos projets Php
 
Industrialisation des développements logiciels
Industrialisation des développements logicielsIndustrialisation des développements logiciels
Industrialisation des développements logiciels
 

Plus de neuros

Solution pour un Réseau Social d'Entreprise (RSE)
Solution pour un Réseau Social d'Entreprise (RSE)Solution pour un Réseau Social d'Entreprise (RSE)
Solution pour un Réseau Social d'Entreprise (RSE)
neuros
 
Le service workers
Le service workersLe service workers
Le service workers
neuros
 
Proteger votre vie privee sur internet
Proteger votre vie privee sur internetProteger votre vie privee sur internet
Proteger votre vie privee sur internet
neuros
 
Le pouvoir d'être Visible ou Invisible sur Internet
Le pouvoir d'être Visible ou Invisible  sur InternetLe pouvoir d'être Visible ou Invisible  sur Internet
Le pouvoir d'être Visible ou Invisible sur Internet
neuros
 
Vos projets web sur les plateformes ouvertes
Vos projets web sur les plateformes ouvertesVos projets web sur les plateformes ouvertes
Vos projets web sur les plateformes ouvertes
neuros
 
Livre Drupal avance, un CMS pour développeurs
Livre Drupal avance, un CMS pour développeursLivre Drupal avance, un CMS pour développeurs
Livre Drupal avance, un CMS pour développeurs
neuros
 
Http2 les impacts dans le web
Http2 les impacts dans le webHttp2 les impacts dans le web
Http2 les impacts dans le web
neuros
 
Php 7 Think php7
Php 7 Think php7Php 7 Think php7
Php 7 Think php7
neuros
 
RGAA 3 dans un Web Accessible
RGAA 3 dans un Web AccessibleRGAA 3 dans un Web Accessible
RGAA 3 dans un Web Accessible
neuros
 
Les effets de la loi Hamon
Les effets de la loi HamonLes effets de la loi Hamon
Les effets de la loi Hamon
neuros
 
La sécurité et php
La sécurité et phpLa sécurité et php
La sécurité et php
neuros
 
Les protocoles temps réels
Les protocoles temps réelsLes protocoles temps réels
Les protocoles temps réels
neuros
 
Vectoriel et 3d en html5 - Animation newschool (partie 2)
Vectoriel et 3d en html5 - Animation newschool (partie 2)Vectoriel et 3d en html5 - Animation newschool (partie 2)
Vectoriel et 3d en html5 - Animation newschool (partie 2)
neuros
 
Améliorer les performances SQL
Améliorer les performances SQLAméliorer les performances SQL
Améliorer les performances SQL
neuros
 
Newschool partie1 methode HTML5
Newschool partie1 methode HTML5Newschool partie1 methode HTML5
Newschool partie1 methode HTML5
neuros
 
Integrons en mode continu
Integrons en mode continuIntegrons en mode continu
Integrons en mode continu
neuros
 
Effectuer des tests modernes pour drupal
Effectuer des tests modernes pour drupalEffectuer des tests modernes pour drupal
Effectuer des tests modernes pour drupal
neuros
 
Integration Drupal systemes d'informations
Integration Drupal systemes d'informationsIntegration Drupal systemes d'informations
Integration Drupal systemes d'informations
neuros
 
La maitrise des contenus hors internet
La maitrise des contenus hors internetLa maitrise des contenus hors internet
La maitrise des contenus hors internet
neuros
 
La mémoire et PHP
La mémoire et PHPLa mémoire et PHP
La mémoire et PHP
neuros
 

Plus de neuros (20)

Solution pour un Réseau Social d'Entreprise (RSE)
Solution pour un Réseau Social d'Entreprise (RSE)Solution pour un Réseau Social d'Entreprise (RSE)
Solution pour un Réseau Social d'Entreprise (RSE)
 
Le service workers
Le service workersLe service workers
Le service workers
 
Proteger votre vie privee sur internet
Proteger votre vie privee sur internetProteger votre vie privee sur internet
Proteger votre vie privee sur internet
 
Le pouvoir d'être Visible ou Invisible sur Internet
Le pouvoir d'être Visible ou Invisible  sur InternetLe pouvoir d'être Visible ou Invisible  sur Internet
Le pouvoir d'être Visible ou Invisible sur Internet
 
Vos projets web sur les plateformes ouvertes
Vos projets web sur les plateformes ouvertesVos projets web sur les plateformes ouvertes
Vos projets web sur les plateformes ouvertes
 
Livre Drupal avance, un CMS pour développeurs
Livre Drupal avance, un CMS pour développeursLivre Drupal avance, un CMS pour développeurs
Livre Drupal avance, un CMS pour développeurs
 
Http2 les impacts dans le web
Http2 les impacts dans le webHttp2 les impacts dans le web
Http2 les impacts dans le web
 
Php 7 Think php7
Php 7 Think php7Php 7 Think php7
Php 7 Think php7
 
RGAA 3 dans un Web Accessible
RGAA 3 dans un Web AccessibleRGAA 3 dans un Web Accessible
RGAA 3 dans un Web Accessible
 
Les effets de la loi Hamon
Les effets de la loi HamonLes effets de la loi Hamon
Les effets de la loi Hamon
 
La sécurité et php
La sécurité et phpLa sécurité et php
La sécurité et php
 
Les protocoles temps réels
Les protocoles temps réelsLes protocoles temps réels
Les protocoles temps réels
 
Vectoriel et 3d en html5 - Animation newschool (partie 2)
Vectoriel et 3d en html5 - Animation newschool (partie 2)Vectoriel et 3d en html5 - Animation newschool (partie 2)
Vectoriel et 3d en html5 - Animation newschool (partie 2)
 
Améliorer les performances SQL
Améliorer les performances SQLAméliorer les performances SQL
Améliorer les performances SQL
 
Newschool partie1 methode HTML5
Newschool partie1 methode HTML5Newschool partie1 methode HTML5
Newschool partie1 methode HTML5
 
Integrons en mode continu
Integrons en mode continuIntegrons en mode continu
Integrons en mode continu
 
Effectuer des tests modernes pour drupal
Effectuer des tests modernes pour drupalEffectuer des tests modernes pour drupal
Effectuer des tests modernes pour drupal
 
Integration Drupal systemes d'informations
Integration Drupal systemes d'informationsIntegration Drupal systemes d'informations
Integration Drupal systemes d'informations
 
La maitrise des contenus hors internet
La maitrise des contenus hors internetLa maitrise des contenus hors internet
La maitrise des contenus hors internet
 
La mémoire et PHP
La mémoire et PHPLa mémoire et PHP
La mémoire et PHP
 

TDD (Test Driven Developement) et refactoring

  • 1. TDD et Refactoring Walid Skouri
  • 2. Plan • Introduction • L’eXtreme Programming • Les bases du TDD • Les tests unitaires • Le refactoring
  • 4. Introduction • Introduction • L’eXtreme Programming • Les bases du TDD • Le refactoring
  • 5. Introduction • Les démarches traditionnelles – spécification > conception > réalisation > validation – Concentre la plupart des décision au début d’un projet – Les client réalisent que leurs besoins ont changé
  • 6. Introduction Accepter ce changment • C’est une composante incontournable de tout projet • Approche XP
  • 8. XP L’idée • Réduction significative de la durée du cycle de développement: – Réduction du temps entre : • L’implémentation d’une fonctionnalité • Mise en production d’une nouvelle version du logiciel
  • 9. XP Comment • On ne fait de conception que pour les fonctionnalités existantes, pas pour les fonctionnalités futures: – On ne fait de généralisations dans la conception que lorsque des besoins concrets se font sentir. – On n'introduit pas d'optimisations si elles ne sont pas demandées par le client. • Priorité : – Travail actuel bien fait : Code testé, simple, lisible et sans duplication
  • 10. XP Principaux éléments de fonctionnement de XP • Cycles itératifs pilotés par le client : Le projet progresse au rythme d'itérations très courtes, dont le contenu fonctionnel est déterminé par le client. • Travail d'équipe auto-organisé : L'équipe travaille réellement... en équipe. Les développeurs organisent eux-mêmes leur travail, interviennent sur l'ensemble du code, travaillent systématiquement en binômes, et synchronisent leurs développements plusieurs fois par jour. • Programmation pilotée par les tests : les développeurs écrivent des test automatiques pour chaque portion de code qu'ils conçoivent, et ils s'appuient sur ces tests pour affiner et améliorer sans cesse la conception de l'application sans craindre de régression.
  • 11. XP Le coût des changements Traditionnel Coût des changement s XP Temps
  • 12. XP Les valeurs de XP • Communication : XP favorise le contact humain, la communication directe, plutôt que le cloisonnement des activités et les échanges de courriers électroniques ou de documents formels. Les développeurs travaillent directement avec la maîtrise d'ouvrage, les testeurs sont intégrés à l'équipe de développement, etc. • Feedback : qu'il s'agisse d'itérations courtes, de livraisons fréquentes, de travail en binômes ou de tests automatiques exécutés en permanence, la plupart des pratiques XP sont conçues pour donner un maximum de feedback sur le déroulement du projet afin de corriger la trajectoire au plus tôt. En particulier, les points de début d'itération offrent à l'équipe le moyen de prendre du recul sur son fonctionnement et de l'améliorer sans cesse au fil des itérations. • Simplicité : XP relève le défi suivant : « que pouvons-nous arrêter de faire tout en continuant à créer efficacement un logiciel qui réponde aux besoins réels du client ? ». Cette recherche de simplification touche le processus lui-même, mais aussi l'outil fabriqué (la mécanique de planification incite le client à focaliser les efforts sur les fonctions prioritaires) ou encore la conception de l'application (guidée par un principe de « You ain't gonna need it »).
  • 14. Les bases du TDD Tests au début du développement Ecriture des Ecriture du tests code Tests Commencer Fini échoués
  • 15. Les bases du TDD Développements pilotés par les tests Code Tests propre échoués Refactoring Tous les tests réussis
  • 16. TDD
  • 17. Les bases du TDD Recommandations • Ne jamais écrire de code sans avoir de tests qui échouent • Les tests doivent être représentatifs des spécifications
  • 19. Les tests unitaires • Il permettent – De contrôler et conserver la qualité du produit tout au long du projet – De se focaliser sur l’amélioration du code, plutôt que sur les bugs – D’améliorer la productivité de l’équipe en automatisant un maximum de tâches redondantes et ennuyantes
  • 20. Les tests unitaires Testabilité du code • Privilégier la composition à l’héritage • Isoler les dépendances • Injecter les dépendances
  • 21. Les tests unitaires Testabilité du code • Privilégier la composition à l’héritage Héritage Composition class Fruit { class Fruit { //... } //... } class Apple extends Fruit { class Apple { //... } private Fruit fruit = new Fruit(); //... } – L’héritage permet à la sous classe d’heriter toutes les fonctionnalité – La composition permet une solution plus flexible et réutilisable – Exemple: Permet d’instancier le l’objet composite avec différentes implémentations
  • 22. Les tests unitaires Testabilité du code Injection de dépendance • Se rapporte à la fourniture d'une dépendance externe à un composant logiciel. • Formes d’injection de dépendance – interface injection – setter injection – constructor injection
  • 23. Les tests unitaires Testabilité du code Injection du constructeur public class ImportantClass { public class ImportantClass { IFoo foo; IFoo foo; public ImportantClass() public ImportantClass(IFoo foo) { { this.foo = foo; this.foo = new } EnterpriseFoo(); void doReallyImportantStuff() { } this.foo.bar(); void doReallyImportantStuff() { this.foo.bar(); } } } }
  • 25. Refactoring C’est quoi? • C’est une technique de restructuration du code existant: modifier sa structure sans changer son comportement externe • Ensemble de petites modifications dans le but d’améliorer le code
  • 26. Refactoring C’est quoi? • Chaque transformation (ou Refactoring) ne modifie qu’une petite partie du code mais un ensemble de transformations peut produire un changement significatif • Le système se doit de toujours fonctionner suite à chaque refactoring. Eviter les régressions.
  • 27. Refactoring Pourquoi? • Améliorer la structure du logiciel • Rendre le code plus lisible et maintenable • Faciliter les futurs changements • Plus de flexibilité • Augmenter la réutilisabilité • Faciliter la recherche de bugs
  • 28. Refactoring Quand? • Code dupliqué • Longues méthodes • Longues liste de paramètres • Nommage inapproprié
  • 29. Démo