SlideShare ist ein Scribd-Unternehmen logo
1 von 29
Downloaden Sie, um offline zu lesen
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

Weitere ähnliche Inhalte

Was ist angesagt?

Chp1 - Introduction au Développement Mobile
Chp1 - Introduction au Développement MobileChp1 - Introduction au Développement Mobile
Chp1 - Introduction au Développement MobileLilia Sfaxi
 
Applications Android - cours 11 : Boites de dialogue
Applications Android - cours 11 : Boites de dialogueApplications Android - cours 11 : Boites de dialogue
Applications Android - cours 11 : Boites de dialogueAhmed-Chawki Chaouche
 
CV youssef mami Analyste développeur formateur expert en sécurité informatiq...
CV youssef mami Analyste développeur formateur expert  en sécurité informatiq...CV youssef mami Analyste développeur formateur expert  en sécurité informatiq...
CV youssef mami Analyste développeur formateur expert en sécurité informatiq...Joseph Mami
 
Applications Android - cours 12 : Persistance de données SQLite
Applications Android - cours 12 : Persistance de données SQLiteApplications Android - cours 12 : Persistance de données SQLite
Applications Android - cours 12 : Persistance de données SQLiteAhmed-Chawki Chaouche
 
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.2Stéphane Salmons
 
Introduction à React JS
Introduction à React JSIntroduction à React JS
Introduction à React JSAbdoulaye Dieng
 
Méthodologie 2 Track Unified Process
Méthodologie 2 Track Unified ProcessMéthodologie 2 Track Unified Process
Méthodologie 2 Track Unified ProcessZakaria Bouazza
 
Introduction au génie logiciel
Introduction au génie logicielIntroduction au génie logiciel
Introduction au génie logicielMohamed Diallo
 
Android - Tp3 - intents
Android - Tp3 -  intentsAndroid - Tp3 -  intents
Android - Tp3 - intentsLilia Sfaxi
 
Modèle en v
 Modèle en v Modèle en v
Modèle en vbouye2209
 
Principes de L'intégration Continue
Principes de L'intégration ContinuePrincipes de L'intégration Continue
Principes de L'intégration ContinueXavier Warzee
 
Conception d’une plateforme web d’e-Commerce au sein d’une entreprise commerc...
Conception d’une plateforme web d’e-Commerce au sein d’une entreprise commerc...Conception d’une plateforme web d’e-Commerce au sein d’une entreprise commerc...
Conception d’une plateforme web d’e-Commerce au sein d’une entreprise commerc...Symphorien Niyonzima
 

Was ist angesagt? (20)

Chp1 - Introduction au Développement Mobile
Chp1 - Introduction au Développement MobileChp1 - Introduction au Développement Mobile
Chp1 - Introduction au Développement Mobile
 
Support de cours Spring M.youssfi
Support de cours Spring  M.youssfiSupport de cours Spring  M.youssfi
Support de cours Spring M.youssfi
 
Applications Android - cours 11 : Boites de dialogue
Applications Android - cours 11 : Boites de dialogueApplications Android - cours 11 : Boites de dialogue
Applications Android - cours 11 : Boites de dialogue
 
CV youssef mami Analyste développeur formateur expert en sécurité informatiq...
CV youssef mami Analyste développeur formateur expert  en sécurité informatiq...CV youssef mami Analyste développeur formateur expert  en sécurité informatiq...
CV youssef mami Analyste développeur formateur expert en sécurité informatiq...
 
Applications Android - cours 12 : Persistance de données SQLite
Applications Android - cours 12 : Persistance de données SQLiteApplications Android - cours 12 : Persistance de données SQLite
Applications Android - cours 12 : Persistance de données SQLite
 
Génie Logiciel : les tests
Génie Logiciel : les testsGénie Logiciel : les tests
Génie Logiciel : les tests
 
Support programmation orientée objet c# .net version f8
Support programmation orientée objet c#  .net version f8Support programmation orientée objet c#  .net version f8
Support programmation orientée objet c# .net version f8
 
Support de cours technologie et application m.youssfi
Support de cours technologie et application m.youssfiSupport de cours technologie et application m.youssfi
Support de cours technologie et application m.youssfi
 
Support POO Java première partie
Support POO Java première partieSupport POO Java première partie
Support POO Java première partie
 
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
 
Introduction à React JS
Introduction à React JSIntroduction à React JS
Introduction à React JS
 
Méthodologie 2 Track Unified Process
Méthodologie 2 Track Unified ProcessMéthodologie 2 Track Unified Process
Méthodologie 2 Track Unified Process
 
Support de cours angular
Support de cours angularSupport de cours angular
Support de cours angular
 
Introduction au génie logiciel
Introduction au génie logicielIntroduction au génie logiciel
Introduction au génie logiciel
 
Presentation mantis
Presentation mantisPresentation mantis
Presentation mantis
 
Android - Tp3 - intents
Android - Tp3 -  intentsAndroid - Tp3 -  intents
Android - Tp3 - intents
 
Traitement distribue en BIg Data - KAFKA Broker and Kafka Streams
Traitement distribue en BIg Data - KAFKA Broker and Kafka StreamsTraitement distribue en BIg Data - KAFKA Broker and Kafka Streams
Traitement distribue en BIg Data - KAFKA Broker and Kafka Streams
 
Modèle en v
 Modèle en v Modèle en v
Modèle en v
 
Principes de L'intégration Continue
Principes de L'intégration ContinuePrincipes de L'intégration Continue
Principes de L'intégration Continue
 
Conception d’une plateforme web d’e-Commerce au sein d’une entreprise commerc...
Conception d’une plateforme web d’e-Commerce au sein d’une entreprise commerc...Conception d’une plateforme web d’e-Commerce au sein d’une entreprise commerc...
Conception d’une plateforme web d’e-Commerce au sein d’une entreprise commerc...
 

Ähnlich wie 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 collaboratifkemenaran
 
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
 
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 AgileAgile 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 - TDDXavier NOPRE
 
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 AgileDenis Voituron
 
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
 
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 outilsAgile 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 Logiciellauraty3204
 
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 20121221Frédéric Delorme
 
L'integration continue pour tous
L'integration continue pour tousL'integration continue pour tous
L'integration continue pour tousAurelien Navarre
 
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-17Marc Hage Chahine
 
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
 
Delphi et les tests unitaires
Delphi et les tests unitairesDelphi et les tests unitaires
Delphi et les tests unitairespprem
 
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
 

Ähnlich wie 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
 
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
 
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
 
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
 
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
 
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
 
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. ...
 
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)
 

Mehr von 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 workersneuros
 
Proteger votre vie privee sur internet
Proteger votre vie privee sur internetProteger votre vie privee sur internet
Proteger votre vie privee sur internetneuros
 
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 Internetneuros
 
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 ouvertesneuros
 
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éveloppeursneuros
 
Http2 les impacts dans le web
Http2 les impacts dans le webHttp2 les impacts dans le web
Http2 les impacts dans le webneuros
 
Php 7 Think php7
Php 7 Think php7Php 7 Think php7
Php 7 Think php7neuros
 
RGAA 3 dans un Web Accessible
RGAA 3 dans un Web AccessibleRGAA 3 dans un Web Accessible
RGAA 3 dans un Web Accessibleneuros
 
Les effets de la loi Hamon
Les effets de la loi HamonLes effets de la loi Hamon
Les effets de la loi Hamonneuros
 
La sécurité et php
La sécurité et phpLa sécurité et php
La sécurité et phpneuros
 
Les protocoles temps réels
Les protocoles temps réelsLes protocoles temps réels
Les protocoles temps réelsneuros
 
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 SQLneuros
 
Newschool partie1 methode HTML5
Newschool partie1 methode HTML5Newschool partie1 methode HTML5
Newschool partie1 methode HTML5neuros
 
Integrons en mode continu
Integrons en mode continuIntegrons en mode continu
Integrons en mode continuneuros
 
Effectuer des tests modernes pour drupal
Effectuer des tests modernes pour drupalEffectuer des tests modernes pour drupal
Effectuer des tests modernes pour drupalneuros
 
Integration Drupal systemes d'informations
Integration Drupal systemes d'informationsIntegration Drupal systemes d'informations
Integration Drupal systemes d'informationsneuros
 
La maitrise des contenus hors internet
La maitrise des contenus hors internetLa maitrise des contenus hors internet
La maitrise des contenus hors internetneuros
 
La mémoire et PHP
La mémoire et PHPLa mémoire et PHP
La mémoire et PHPneuros
 

Mehr von 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