Enviar búsqueda
Cargar
TDD où l’art de développer à l’endroit
•
4 recomendaciones
•
1,024 vistas
E
EspritAgile
Seguir
Conférence de J. Fargeon lors de l'Agile Tour Aix-Marseille 2017
Leer menos
Leer más
Software
Denunciar
Compartir
Denunciar
Compartir
1 de 57
Descargar ahora
Descargar para leer sin conexión
Recomendados
#jjug_ccc #ccc_f1 広告システム刷新の舞台裏 - PHPからJavaに変えてみました
#jjug_ccc #ccc_f1 広告システム刷新の舞台裏 - PHPからJavaに変えてみました
Yahoo!デベロッパーネットワーク
Golangにおける端末制御 リッチなターミナルUIの実現方法
Golangにおける端末制御 リッチなターミナルUIの実現方法
Masashi Shibata
Память в Java. Garbage Collector
Память в Java. Garbage Collector
Olexandra Dmytrenko
單元測試不是有寫就好
單元測試不是有寫就好
Yu-Song Syu
Sphinx ではじめるドキュメント生活 2012 #pyconjp #sphinxconjp
Sphinx ではじめるドキュメント生活 2012 #pyconjp #sphinxconjp
Takeshi Komiya
Advanced Functional Programming in Scala
Advanced Functional Programming in Scala
Patrick Nicolas
Java Crash分析(2012-05-10)
Java Crash分析(2012-05-10)
Kris Mok
Concurrency Utilities in Java 8
Concurrency Utilities in Java 8
Martin Toshev
Recomendados
#jjug_ccc #ccc_f1 広告システム刷新の舞台裏 - PHPからJavaに変えてみました
#jjug_ccc #ccc_f1 広告システム刷新の舞台裏 - PHPからJavaに変えてみました
Yahoo!デベロッパーネットワーク
Golangにおける端末制御 リッチなターミナルUIの実現方法
Golangにおける端末制御 リッチなターミナルUIの実現方法
Masashi Shibata
Память в Java. Garbage Collector
Память в Java. Garbage Collector
Olexandra Dmytrenko
單元測試不是有寫就好
單元測試不是有寫就好
Yu-Song Syu
Sphinx ではじめるドキュメント生活 2012 #pyconjp #sphinxconjp
Sphinx ではじめるドキュメント生活 2012 #pyconjp #sphinxconjp
Takeshi Komiya
Advanced Functional Programming in Scala
Advanced Functional Programming in Scala
Patrick Nicolas
Java Crash分析(2012-05-10)
Java Crash分析(2012-05-10)
Kris Mok
Concurrency Utilities in Java 8
Concurrency Utilities in Java 8
Martin Toshev
Mastering message queues | Tobias Nyholm | CODEiD
Mastering message queues | Tobias Nyholm | CODEiD
CODEiD PHP Community
DevNexus 2019: Migrating to Java 11
DevNexus 2019: Migrating to Java 11
DaliaAboSheasha
The java interview questions ebook - confused coders
The java interview questions ebook - confused coders
Yash Sharma
ACL in CodeIgniter
ACL in CodeIgniter
mirahman
Introduction to Functional Programming with Scala
Introduction to Functional Programming with Scala
pramode_ce
できる!並列・並行プログラミング
できる!並列・並行プログラミング
Preferred Networks
Praktikum excel
Praktikum excel
Filip Visnjic
Az oktatás módszerei
Az oktatás módszerei
Dr. Ollé János
Genin quruluşu və ekspressiyası
Genin quruluşu və ekspressiyası
hriMmmdova
Automatisation des tests - objectifs et concepts - partie 2
Automatisation des tests - objectifs et concepts - partie 2
Christophe Rochefolle
20171122 03 - Les tests de performance en environnement DevOps
20171122 03 - Les tests de performance en environnement DevOps
LeClubQualiteLogicielle
Anatomie du test
Anatomie du test
Frederic Hardy
ATMTL23 - Dépasser les frontières : Réinterpréter les Principes ISTQB avec un...
ATMTL23 - Dépasser les frontières : Réinterpréter les Principes ISTQB avec un...
Agile Montréal
Strategie de test à agile tour bordeaux
Strategie de test à agile tour bordeaux
Nicolas Fédou
Test unitaires
Test unitaires
Mohamed Akrouh
Methodologies de Developpement Agiles : Scrum et XP
Methodologies de Developpement Agiles : Scrum et XP
Nicolas Perriault
Test Driven Development (aka TDD) for agile teams
Test Driven Development (aka TDD) for agile teams
Thierry Gayet
AgileTour Toulouse 2012 : de la livraison continue dans mon organisation
AgileTour Toulouse 2012 : de la livraison continue dans mon organisation
Agile Toulouse
De la livraison continue dans mon organisation?
De la livraison continue dans mon organisation?
Goood!
Industrialisation des développements logiciels
Industrialisation des développements logiciels
Sylvain Leroy
Introduction aux méthodes agiles
Introduction aux méthodes agiles
Guillaume Collic
Soirée du Test Logiciel - Démystifier les xDD - C. TARDIEU, Acp qualife
Soirée du Test Logiciel - Démystifier les xDD - C. TARDIEU, Acp qualife
TelecomValley
Más contenido relacionado
La actualidad más candente
Mastering message queues | Tobias Nyholm | CODEiD
Mastering message queues | Tobias Nyholm | CODEiD
CODEiD PHP Community
DevNexus 2019: Migrating to Java 11
DevNexus 2019: Migrating to Java 11
DaliaAboSheasha
The java interview questions ebook - confused coders
The java interview questions ebook - confused coders
Yash Sharma
ACL in CodeIgniter
ACL in CodeIgniter
mirahman
Introduction to Functional Programming with Scala
Introduction to Functional Programming with Scala
pramode_ce
できる!並列・並行プログラミング
できる!並列・並行プログラミング
Preferred Networks
Praktikum excel
Praktikum excel
Filip Visnjic
Az oktatás módszerei
Az oktatás módszerei
Dr. Ollé János
Genin quruluşu və ekspressiyası
Genin quruluşu və ekspressiyası
hriMmmdova
La actualidad más candente
(9)
Mastering message queues | Tobias Nyholm | CODEiD
Mastering message queues | Tobias Nyholm | CODEiD
DevNexus 2019: Migrating to Java 11
DevNexus 2019: Migrating to Java 11
The java interview questions ebook - confused coders
The java interview questions ebook - confused coders
ACL in CodeIgniter
ACL in CodeIgniter
Introduction to Functional Programming with Scala
Introduction to Functional Programming with Scala
できる!並列・並行プログラミング
できる!並列・並行プログラミング
Praktikum excel
Praktikum excel
Az oktatás módszerei
Az oktatás módszerei
Genin quruluşu və ekspressiyası
Genin quruluşu və ekspressiyası
Similar a TDD où l’art de développer à l’endroit
Automatisation des tests - objectifs et concepts - partie 2
Automatisation des tests - objectifs et concepts - partie 2
Christophe Rochefolle
20171122 03 - Les tests de performance en environnement DevOps
20171122 03 - Les tests de performance en environnement DevOps
LeClubQualiteLogicielle
Anatomie du test
Anatomie du test
Frederic Hardy
ATMTL23 - Dépasser les frontières : Réinterpréter les Principes ISTQB avec un...
ATMTL23 - Dépasser les frontières : Réinterpréter les Principes ISTQB avec un...
Agile Montréal
Strategie de test à agile tour bordeaux
Strategie de test à agile tour bordeaux
Nicolas Fédou
Test unitaires
Test unitaires
Mohamed Akrouh
Methodologies de Developpement Agiles : Scrum et XP
Methodologies de Developpement Agiles : Scrum et XP
Nicolas Perriault
Test Driven Development (aka TDD) for agile teams
Test Driven Development (aka TDD) for agile teams
Thierry Gayet
AgileTour Toulouse 2012 : de la livraison continue dans mon organisation
AgileTour Toulouse 2012 : de la livraison continue dans mon organisation
Agile Toulouse
De la livraison continue dans mon organisation?
De la livraison continue dans mon organisation?
Goood!
Industrialisation des développements logiciels
Industrialisation des développements logiciels
Sylvain Leroy
Introduction aux méthodes agiles
Introduction aux méthodes agiles
Guillaume Collic
Soirée du Test Logiciel - Démystifier les xDD - C. TARDIEU, Acp qualife
Soirée du Test Logiciel - Démystifier les xDD - C. TARDIEU, Acp qualife
TelecomValley
qualité logicielle (8).pdf
qualité logicielle (8).pdf
NoamHaythem
Perf university
Perf university
Henri Tremblay
Ha zut, le DevOps a mangé ma vélocité par Jean-Marc Lavoie & Sylvie Trudel
Ha zut, le DevOps a mangé ma vélocité par Jean-Marc Lavoie & Sylvie Trudel
Agile Montréal
De la livraison continue dans mon organisation?
De la livraison continue dans mon organisation?
Goood!
Valider par des tests - Blend
Valider par des tests - Blend
Christophe Villeneuve
Université de la performance - Devoxx France
Université de la performance - Devoxx France
Marc Bojoly
[Agile Testing Day] Introduction
[Agile Testing Day] Introduction
Cellenza
Similar a TDD où l’art de développer à l’endroit
(20)
Automatisation des tests - objectifs et concepts - partie 2
Automatisation des tests - objectifs et concepts - partie 2
20171122 03 - Les tests de performance en environnement DevOps
20171122 03 - Les tests de performance en environnement DevOps
Anatomie du test
Anatomie du test
ATMTL23 - Dépasser les frontières : Réinterpréter les Principes ISTQB avec un...
ATMTL23 - Dépasser les frontières : Réinterpréter les Principes ISTQB avec un...
Strategie de test à agile tour bordeaux
Strategie de test à agile tour bordeaux
Test unitaires
Test unitaires
Methodologies de Developpement Agiles : Scrum et XP
Methodologies de Developpement Agiles : Scrum et XP
Test Driven Development (aka TDD) for agile teams
Test Driven Development (aka TDD) for agile teams
AgileTour Toulouse 2012 : de la livraison continue dans mon organisation
AgileTour Toulouse 2012 : de la livraison continue dans mon organisation
De la livraison continue dans mon organisation?
De la livraison continue dans mon organisation?
Industrialisation des développements logiciels
Industrialisation des développements logiciels
Introduction aux méthodes agiles
Introduction aux méthodes agiles
Soirée du Test Logiciel - Démystifier les xDD - C. TARDIEU, Acp qualife
Soirée du Test Logiciel - Démystifier les xDD - C. TARDIEU, Acp qualife
qualité logicielle (8).pdf
qualité logicielle (8).pdf
Perf university
Perf university
Ha zut, le DevOps a mangé ma vélocité par Jean-Marc Lavoie & Sylvie Trudel
Ha zut, le DevOps a mangé ma vélocité par Jean-Marc Lavoie & Sylvie Trudel
De la livraison continue dans mon organisation?
De la livraison continue dans mon organisation?
Valider par des tests - Blend
Valider par des tests - Blend
Université de la performance - Devoxx France
Université de la performance - Devoxx France
[Agile Testing Day] Introduction
[Agile Testing Day] Introduction
Más de EspritAgile
Le gameday...un concept devopsludique
Le gameday...un concept devopsludique
EspritAgile
Prioriser c est sacrifier
Prioriser c est sacrifier
EspritAgile
Cargo Cult Agile
Cargo Cult Agile
EspritAgile
Sudokanban
Sudokanban
EspritAgile
Dances with unicorns
Dances with unicorns
EspritAgile
L'agilité ça marche aussi dans mon codir
L'agilité ça marche aussi dans mon codir
EspritAgile
Hé hi ! hé ho ! on va en rétro !
Hé hi ! hé ho ! on va en rétro !
EspritAgile
A la conquête de l'agilité chez les développeurs
A la conquête de l'agilité chez les développeurs
EspritAgile
Les aventuriers des tests exploratoires : à la poursuite du bug perdu V. Théa...
Les aventuriers des tests exploratoires : à la poursuite du bug perdu V. Théa...
EspritAgile
Favoriser l'émergence et réduire les risques interculturels F. Walter / I. Ko...
Favoriser l'émergence et réduire les risques interculturels F. Walter / I. Ko...
EspritAgile
Atelier Lean Canvas O. Lafontan
Atelier Lean Canvas O. Lafontan
EspritAgile
Approche pédagogique ALPES P. Beaune / X. Serpaggi
Approche pédagogique ALPES P. Beaune / X. Serpaggi
EspritAgile
Périgrination d'un coach agile explorateur en systémique A. Gervais
Périgrination d'un coach agile explorateur en systémique A. Gervais
EspritAgile
Kata des représentations systémiques A. Gervais
Kata des représentations systémiques A. Gervais
EspritAgile
La délégation créatrice de valeur ou comment créer de l’agilité autonome C. D...
La délégation créatrice de valeur ou comment créer de l’agilité autonome C. D...
EspritAgile
L'agilité au service de l'innovation E. Esposito
L'agilité au service de l'innovation E. Esposito
EspritAgile
Au coeur de Lean : l'Humain T. Cros
Au coeur de Lean : l'Humain T. Cros
EspritAgile
Más de EspritAgile
(17)
Le gameday...un concept devopsludique
Le gameday...un concept devopsludique
Prioriser c est sacrifier
Prioriser c est sacrifier
Cargo Cult Agile
Cargo Cult Agile
Sudokanban
Sudokanban
Dances with unicorns
Dances with unicorns
L'agilité ça marche aussi dans mon codir
L'agilité ça marche aussi dans mon codir
Hé hi ! hé ho ! on va en rétro !
Hé hi ! hé ho ! on va en rétro !
A la conquête de l'agilité chez les développeurs
A la conquête de l'agilité chez les développeurs
Les aventuriers des tests exploratoires : à la poursuite du bug perdu V. Théa...
Les aventuriers des tests exploratoires : à la poursuite du bug perdu V. Théa...
Favoriser l'émergence et réduire les risques interculturels F. Walter / I. Ko...
Favoriser l'émergence et réduire les risques interculturels F. Walter / I. Ko...
Atelier Lean Canvas O. Lafontan
Atelier Lean Canvas O. Lafontan
Approche pédagogique ALPES P. Beaune / X. Serpaggi
Approche pédagogique ALPES P. Beaune / X. Serpaggi
Périgrination d'un coach agile explorateur en systémique A. Gervais
Périgrination d'un coach agile explorateur en systémique A. Gervais
Kata des représentations systémiques A. Gervais
Kata des représentations systémiques A. Gervais
La délégation créatrice de valeur ou comment créer de l’agilité autonome C. D...
La délégation créatrice de valeur ou comment créer de l’agilité autonome C. D...
L'agilité au service de l'innovation E. Esposito
L'agilité au service de l'innovation E. Esposito
Au coeur de Lean : l'Humain T. Cros
Au coeur de Lean : l'Humain T. Cros
TDD où l’art de développer à l’endroit
1.
05/12/2017 #AgileTourSophia (par
@AgileTourSophia) Agile Tour Sophia Antipolis 7ème édition – 5 décembre 2017 1 TDD où l’art de développer à l’endroit Julien FARGEON
2.
05/12/2017 #AgileTourSophia (par
@AgileTourSophia) 2 Merci aux Sponsors !
3.
1.Agilité et Qualité 2.Les
tests unitaires 3.TDD – Test Driven Development 4.Quelle approche choisir ? 5.Les styles de TDD © SOFTEAM Cadextan 2017
4.
1 QUALITÉ ET
AGILITÉ © SOFTEAM Cadextan 2017 4
5.
QUALITÉ ET AGILITÉ ©
SOFTEAM Cadextan 2017 5 Porter une attention continue à l’excellence technique 9ème principe du Manifeste Agile
6.
QUALITÉ ET AGILITÉ
– POURQUOI ? © SOFTEAM Cadextan 2017 6 Favoriser l’adaptation au changement plus que le suivi d’un plan 4ème valeur du Manifeste Agile
7.
QUALITÉ ET AGILITÉ ©
SOFTEAM Cadextan 2017 7
8.
QUALITÉ ET AGILITÉ · Vu
sur le Web… │ Any fool can write code that a computer can understand. Good programmers write code that Humans can understand. Martin Fowler │ My project is 90 % done. I hope the second half goes as well. Scott W. Ambler │ Codez toujours en pensant que celui maintiendra votre code est un psychopathe qui connait votre adresse. Martin Golding © SOFTEAM Cadextan 2017 8
9.
QUALITÉ ET AGILITÉ ©
SOFTEAM Cadextan 2017 9 Une application informatique est de qualité lorsque le coût d’ajout d’une fonctionnalité reste stable
10.
STRATÉGIE DE TESTS
HABITUELLE © SOFTEAM Cadextan 2017 10 Spécification Réalisation Tests
11.
QUALITÉ ET AGILITÉ · Les
problèmes qui surviennent: │ « La spécification est mal comprise par les développeurs » │ « La spécification a été interprétée » │ « Vous n’avez pas compris ce qu’on voulait! » │ « Ce n’est pas ce que dit la spécification! » │ « Aurais-tu un exemple à me donner pour que je comprenne un peu mieux ? » │ « Les développeurs ne comprennent rien à notre métier » │ « Le client ne connaît pas l’informatique! » © SOFTEAM Cadextan 2017 11
12.
QUALITÉ ET AGILITÉ · Travailler
en collaboration : │ Des spécifications sont basées sur des exemples: • Rassurent l’équipe quant à la conformité au besoin • Réduisent les possibles mauvaises interprétations • Cassent la barrière d’un langage métier parfois complexe © SOFTEAM Cadextan 2017 12
13.
QUALITÉ ET AGILITÉ · Exemples
de spécifications par l’exemple: │ Calculatrice • Lorsque je saisis 30, j’appuie sur le bouton ‘+’, je saisis 45, j’appuie sur le bouton égal, alors j’obtiens 75 │ Orthodromie • La distance orthodromique entre Paris (48°51’N – 2°21’E) et Montpellier (43°36’N – 3°53’E) et de 595 Kms │ Calcul d’agios • Sur le 4ème trimestre 2012, un compte est débiteur de 451€ du 13/11 au 28/11 et de 342€ du 08/12 au 27/12, avec un taux d’intérêt de 20% annuel. Les intérêts sur la période sont de 7,27€ © SOFTEAM Cadextan 2017 13
14.
QUALITÉ ET AGILITÉ · Ce
qui est essentiel : · © SOFTEAM Cadextan 2017 14
15.
PILOTAGE PAR LES
TESTS · Principe : · Ces tests vont guider le développement et la conception © SOFTEAM Cadextan 2017 15
16.
APPROCHE AGILE · Vision de
l’avancement dans un projet traditionnel : © SOFTEAM Cadextan 2017 16 Analyse Design Dev Test Avancement
17.
APPROCHE AGILE · Vision de
l’avancement dans un projet Agile : © SOFTEAM Cadextan 2017 17 Avancement Analyse Design Dev Test Fct 1 Fct N …
18.
QUADRANT DE TEST
AGILE © SOFTEAM Cadextan 2017 18 Fonctionnels Exemples Démos Acceptation Prototype Exploratoires Utilisateur Ergonomiques Alpha/beta Unitaires Intégration Composant Performance Sécurité Rupture Aideaudéveloppement Métier Technique Aideàlavalidation
19.
QUE FAUT-IL TESTER? · Pyramide
des tests de Mike Cohn © SOFTEAM Cadextan 2017 19 UI Intégration Unitaires
20.
AUTOMATISATION · Pourquoi automatiser les
tests ? © SOFTEAM Cadextan 2017 20 Feedback Permanent
21.
EXTREME PROGRAMMING © SOFTEAM
Cadextan 2017 21 http://www.extremeprogramming.org/map/images/loop.gif
22.
POURQUOI AUTOMATISER LES
TESTS? · Economiquement pertinent │ Dans la majorité des cas │ Dépend notamment de la durée de vie de l’application et du coût du bug en production · Plus fiable qu’un test manuel de l’ensemble du système · Pour réaliser des opérations complexes exécutables par une machine · Garantir le Feedback du bon fonctionnement de tout ce qui a été développé · Radiateur d’information : Améliore l’ambiance et le moral de l’équipe par rapport à ce qui a été accomplis © SOFTEAM Cadextan 2017 22
23.
2 LES TESTS
UNITAIRES © SOFTEAM Cadextan 2017 23
24.
DÉFINITIONS · Un test unitaire
est un test… │Portant sur une ou partie de l’application testable et la plus petite possible, isolée du reste de l’application │Qui détermine si cette partie s’exécute correctement vis-à-vis d’un comportement attendu · Partie de code testée = SUT │SUT : System Under Test │Peut être une classe ou un petit ensemble de classe (namespace/ package) · Un test est avant tout un exemple ! │Exprimé avec des données significatives © SOFTEAM Cadextan 2017 24
25.
EXEMPLE DE TEST
UNITAIRE © SOFTEAM Cadextan 2017 25 [TestClass] class CalculatorTests { [TestMethod] public void shouldAddTwoNumbers() { Calculator calculator = new Calculator(); int result = calculator.Add(1,2); Assert.AreEqual(3, result); } }
26.
STRUCTURE D’UN TEST
UNITAIRE · Structure de base : 3 A │Arrange │Act │Assert © SOFTEAM Cadextan 2017 26 [TestClass] class CalculatorTests { [TestMethod] public void shouldAddTwoNumbers() { // Arrange Calculator calculator = new Calculator(); // Act int result = calculator.Add(1,2); // Assert Assert.AreEqual(3, result); } }
27.
STRUCTURE D’UN TEST
UNITAIRE · Structure issue du BDD │Given │When │Then © SOFTEAM Cadextan 2017 27 [TestClass] class CalculatorTests { [TestMethod] public void shouldAddTwoNumbers() { // Given Calculator calculator = new Calculator(); // When int result = calculator.Add(1,2); // Then Assert.AreEqual(3, result); } }
28.
ORGANISATION D’UN TEST
UNITAIRE · 1 méthode par test · 1 concept testé par test │= 1 assertion ? │Ex : Calculator • 1 test pour la division • 1 test pour la division par zéro · 1 classe de test par SUT (System Under Test) │« Single Responsibility Principle » (S.O.L.I.D) © SOFTEAM Cadextan 2017 28
29.
LIBRAIRIES DE TESTS
UNITAIRES · Plusieurs librairies en fonction des langages │ xUnit • La plus populaire • Junit, Nunit, CppUnit, etc. │ Jmockit, Mockito │ PITest │ Etc. · Déclaration, préparation et nettoyage des tests par annotations (ex: Java) · Utilisation d’assertions │ Rendent le test auto-validant │ Disponibles sous forme de classes et méthodes fournies par les frameworks • assertEquals, assertNull • assertFalse, assertTrue, fail • Etc. © SOFTEAM Cadextan 2017 29 @Test public void test_method_1() { System.out.println("@Test - test_method_1"); } // Run once, e.g. Database connection, connection pool @BeforeClass public static void runOnceBeforeClass() { System.out.println("@BeforeClass - runOnceBeforeClass"); } // Run once, e.g close connection, cleanup @AfterClass public static void runOnceAfterClass() { System.out.println("@AfterClass - runOnceAfterClass"); } // Should rename to @BeforeTestMethod // e.g. Creating an similar object and share for all @Test @Before public void runBeforeTestMethod() { System.out.println("@Before - runBeforeTestMethod"); } // Should rename to @AfterTestMethod @After public void runAfterTestMethod() { System.out.println("@After - runAfterTestMethod"); }
30.
MNÉMOTECHNIQUE · F.I.R.S.T. │Fast │Independant │Repeatable │Self-Validating │Timely © SOFTEAM Cadextan
2017 30
31.
3 TDD –
TEST DRIVEN DEVELOPMENT © SOFTEAM Cadextan 2017 31
32.
DÉFINITION TDD Test · Driven · Development © SOFTEAM
Cadextan 2017 32 Discipline de conception Conception émergente Centré sur le besoin Refactoring intensif
33.
DÉFINITION TDD · Test Driven
Development │La rédaction des tests est la première étape de la formalisation du codage │Chaque élément de code n’est écrit QUE pour permettre de passer le test │À chaque modification du code : • on lance tous les tests écrits par tous les développeurs • On sait immédiatement si quelque chose ne fonctionne plus │Les tests sont conservés et maintenus jusqu’à la fin du projet │Le code est remanié · Avantages : │Interaction entre les cas de tests et la compréhension fine des besoins fonctionnels │Adhérence du code aux tests • Intégration forte de la qualité logicielle │Le code écrit en TDD est plus maintenable, mieux découpé │Sécurise le développement © SOFTEAM Cadextan 2017 33 Communication !
34.
LE CYCLE TDD 1.
Étapes : 1. RED 2. GREEN 3. REFACTOR © SOFTEAM Cadextan 2017 34 http://dbottiau.azurewebsites.net/unit-testing/
35.
PROCESSUS TRADITIONNEL © SOFTEAM
Cadextan 2017 35 Spécification Développement Tests Design Non testable Bugs
36.
TDD © SOFTEAM Cadextan
2017 36 Spécification Développement Tests Design Cycles très courts FAIL FAST, FAIL SAFE
37.
EN RÉSUMÉ · TDD : │1
discipline de conception de code │1 cycle : RED – GREEN – REFACTOR • Approche test F.I.R.S.T. · Intérêt du test First : │Le test est écrit │Le code testé est testable par nature • Donc le design est meilleur │Les assertions sont validées • Par l’étape RED │Nécessite de se focaliser sur ce qui est nécessaire • Evite d’écrire du code inutile │Chaque test est un pas en avant │Le debugger est beaucoup moins nécessaire © SOFTEAM Cadextan 2017 37
38.
DESIGN EMERGEANT · « First make
it work, then make it right » │Le code fonctionne │Le code est ensuite refactoré · Refactoring │Elimination de la duplication │Couplage lâche · Les classes et méthodes créées le sont par nécessité · Le refactoring est réalisé en permanence │Chaque opportunité d’améliorer le code est saisie (Scout toujours !) │Les tests sont là en protection, à tout moment © SOFTEAM Cadextan 2017 38
39.
MNÉMOTECHNIQUE - SIMPLICITÉ · Y.A.G.N.I. │
« You aren’t Gonna Need It ! » │ Tout ce qui n’est pas absolument utile à un moment donnée n’est pas implémenté │ Pas d’optimisation prématurée · Les décisions sont retardées │ Eviter de payer le coût de décision prises trop tôt · Faire appel aux patterns quand il le faut │ Inutile d’appliquer des patterns si le besoin n’est pas réel · Faire simple ≠ Facile │ Il est difficile de faire simple © SOFTEAM Cadextan 2017 39
40.
4 QUELLE APPROCHE
CHOISIR? © SOFTEAM Cadextan 2017 40
41.
2 APPROCHES TDD · Approche
Middle-out │Avantages : • Permet de se concentrer d’abord sur le domaine • Séparation des préoccupations plus simples │Inconvénients : • Peut conduire à en faire « trop », au-delà de ce qui est nécessaire © SOFTEAM Cadextan 2017 41 UI Services Data Access Domain
42.
2 APPROCHES TDD · Approche
Outside-In │Avantages : • Tout est guidé par le besoin primaire │Inconvénients : • Peut conduire à donner trop de responsabilités aux préoccupations de haut niveau © SOFTEAM Cadextan 2017 42 UI Services Data Access Domain
43.
5 LE TDD
C’EST STYLÉ © SOFTEAM Cadextan 2017 43
44.
LES DOUBLURES Tester une
classe qui n’a aucune dépendance est généralement assez simple. La difficulté va commencer à se faire sentir (et cela devrait arriver presque tout le temps) lorsque les classes vont utiliser des dépendances. Nous avons deux solutions pour tester une classe : 1.Tester la classe avec toutes ses dépendances, et si vous comptez faire ça, alors il serait bien que vous sortiez (Nan mais restez car le plus important c’est de tester le comportement de la classe). 2.Ou bien, nous pouvons essayer d’isoler notre classe de ses dépendances : C’est là où interviennent les tests doubles. © SOFTEAM Cadextan 2017 44
45.
LES DOUBLURES · Doublures │Terme générique
qui identifie les objets utilisés en remplacement d’autres objets à des fins de test │Duplications de classes qui sont plus coopérative que les vrais !! · Permettent d’isoler le SUT du reste de système │Et donc d’écrire de vrais tests unitaires · Simplifient l’exécution du test │Pas besoin d’un environnement spécifique · Rendent l’exécution du test plus rapide © SOFTEAM Cadextan 2017 45
46.
LES DUMMIES · Inoffensifs · Servent de
paramètres à une méthode ou à un constructeur · Permettent simplement d’appeler correctement la méthode ou le constructeur · N’ont pas d’influence sur le code testé │ Sinon c’est un fake ou un mock © SOFTEAM Cadextan 2017 46 DUMMY N’EST RIEN D’AUTRE QU’UNE CLASSE DONT ON SE FICHE DE COMMENT ELLE EST UTILISÉE.
47.
LES DUMMIES © SOFTEAM
Cadextan 2017 47 interface UserInterface { public function getPassword(); public function getUsername(); } class DummyUser implements UserInterface { public function getPassword() { return null; } public function getUsername() { return null; } }
48.
LES STUBS · Paramétrés pour
se comporter d’une certaine façon et retourner certaines valeurs… © SOFTEAM Cadextan 2017 48 http://xunitpatterns.com
49.
LES STUBS © SOFTEAM
Cadextan 2017 49 http://xunitpatterns.com UN STUB EST UNE CLASSE QUI VA RÉPONDRE EXACTEMENT CE QUE J’ATTENDS class StubUser implements UserInterface { public function getPassword() { return 'foo'; } public function getUsername() { return 'Marvin'; } } class SendEmail { private $user; public function __construct(UserInterface $user) { $this->user = $user; } public function forgotPassword() { return sprintf( 'Hi %s, your password is %s', $this->user->getUsername(), $this->user->getPassword() ); } }
50.
LES FAKES · Remplace une
implémentation existante en rendant son utilisation plus appropriée pour les tests │ Exemple : base de données © SOFTEAM Cadextan 2017 50 http://xunitpatterns.com UN FAKE EST UN PEU COMME UN STUB, MAIS AVEC UN PEU DE LOGIQUE, UNE SORTE DE MINI-IMPLÉMENTATION DE LA VRAIE CLASSE
51.
LES SPIES · Un stub
qui enregistre des informations lorsqu’il est appelée, ces informations servant lors des assertions │ Exemple : Serveur de mails © SOFTEAM Cadextan 2017 51 UN SPY VA AVOIR LE MÊME COMPORTEMENT QU’UN STUB, MAIS IL VA NOUS PERMETTRE D’OBTENIR DES INFORMATIONS SUPPLÉMENTAIRES, UNE FOIS LE TEST EFFECTUÉ.
52.
LES MOCKS · Stubs dont
on vérifie s’ils se sont comportés comme prévu © SOFTEAM Cadextan 2017 52 IL S’AGIT SIMPLEMENT D’UN OBJET QUI EST UNE SUBSTITUTION COMPLÈTE DE L’IMPLÉMENTATION ORIGINALE D’UNE CLASSE CONCRÈTE
53.
LES MOCKS © SOFTEAM
Cadextan 2017 53 class MockUser implements UserInterface { private $numberCalled = 0; private $numberShouldBeCalled = 0; public function getPassword() { return 'foo'; } public function getUserName() { $this->numberCalled++; return 'Marvin'; } public function setExpectedNumberCalls($number) { $this->numberShouldBeCalled = $number; } public function verify() { if ($this->numberShouldBeCalled != $this->numberCalled) { throw new Exception(sprintf( 'Actual number of calls %d - expected %d.', $this->numberCalled, $this->numberShouldBeCalled )); } return true; } } L’UTILITÉ D’UN MOCK : UNE VÉRIFICATION COMPORTEMENTALE
54.
DES QUESTIONS? © SOFTEAM
Cadextan 2017 54
55.
DES QUESTIONS? © SOFTEAM
Cadextan 2017 55
56.
DES QUESTIONS? © SOFTEAM
Cadextan 2017 56
57.
05/12/2017 #AgileTourSophia (par
@AgileTourSophia) 57 Merci aux Sponsors ! Julien FARGEON
Descargar ahora