SlideShare a Scribd company logo
t t
learn.tocraft.fr
t t
t t
TDD is dead?!? Let's do an autospy (ncrafts.io)
TDD is dead?!? Let's do an autospy (ncrafts.io)

More Related Content

Viewers also liked

.NET Inside - Microservices, .NET Core e Serverless
.NET Inside - Microservices, .NET Core e Serverless.NET Inside - Microservices, .NET Core e Serverless
.NET Inside - Microservices, .NET Core e Serverless
Ulili Emerson Martins Nhaga
 
QCONSF - ACID Is So Yesterday: Maintaining Data Consistency with Sagas
QCONSF - ACID Is So Yesterday: Maintaining Data Consistency with SagasQCONSF - ACID Is So Yesterday: Maintaining Data Consistency with Sagas
QCONSF - ACID Is So Yesterday: Maintaining Data Consistency with Sagas
Chris Richardson
 
Coder sans peur du changement avec la meme pas mal hexagonal architecture
Coder sans peur du changement avec la meme pas mal hexagonal architectureCoder sans peur du changement avec la meme pas mal hexagonal architecture
Coder sans peur du changement avec la meme pas mal hexagonal architecture
Thomas Pierrain
 
Ddd reboot (english version)
Ddd reboot (english version)Ddd reboot (english version)
Ddd reboot (english version)
Thomas Pierrain
 
Async await...oh wait!
Async await...oh wait!Async await...oh wait!
Async await...oh wait!
Thomas Pierrain
 
Culture craft humantalks
Culture craft humantalksCulture craft humantalks
Culture craft humantalks
Thomas Pierrain
 
A Pattern Language for Microservices
A Pattern Language for MicroservicesA Pattern Language for Microservices
A Pattern Language for Microservices
Chris Richardson
 
Windows Containers and Docker: Why You Should Care
Windows Containers and Docker: Why You Should CareWindows Containers and Docker: Why You Should Care
Windows Containers and Docker: Why You Should Care
Elton Stoneman
 
CQRS without event sourcing
CQRS without event sourcingCQRS without event sourcing
CQRS without event sourcing
Thomas Pierrain
 
Solving distributed data management problems in a microservice architecture (...
Solving distributed data management problems in a microservice architecture (...Solving distributed data management problems in a microservice architecture (...
Solving distributed data management problems in a microservice architecture (...
Chris Richardson
 
Building and deploying microservices with event sourcing, CQRS and Docker (Be...
Building and deploying microservices with event sourcing, CQRS and Docker (Be...Building and deploying microservices with event sourcing, CQRS and Docker (Be...
Building and deploying microservices with event sourcing, CQRS and Docker (Be...
Chris Richardson
 
Omnikron webbinar - Microservices: enabling the rapid, frequent, and reliable...
Omnikron webbinar - Microservices: enabling the rapid, frequent, and reliable...Omnikron webbinar - Microservices: enabling the rapid, frequent, and reliable...
Omnikron webbinar - Microservices: enabling the rapid, frequent, and reliable...
Chris Richardson
 
Microservices Workshop All Topics Deck 2016
Microservices Workshop All Topics Deck 2016Microservices Workshop All Topics Deck 2016
Microservices Workshop All Topics Deck 2016
Adrian Cockcroft
 
JavaOne2017: ACID Is So Yesterday: Maintaining Data Consistency with Sagas
JavaOne2017: ACID Is So Yesterday: Maintaining Data Consistency with SagasJavaOne2017: ACID Is So Yesterday: Maintaining Data Consistency with Sagas
JavaOne2017: ACID Is So Yesterday: Maintaining Data Consistency with Sagas
Chris Richardson
 
Architecting Microservices in .Net
Architecting Microservices in .NetArchitecting Microservices in .Net
Architecting Microservices in .Net
Richard Banks
 
Principles of microservices velocity
Principles of microservices   velocityPrinciples of microservices   velocity
Principles of microservices velocity
Sam Newman
 
Azure tales: a real world CQRS and ES Deep Dive - Andrea Saltarello
Azure tales: a real world CQRS and ES Deep Dive - Andrea SaltarelloAzure tales: a real world CQRS and ES Deep Dive - Andrea Saltarello
Azure tales: a real world CQRS and ES Deep Dive - Andrea Saltarello
ITCamp
 

Viewers also liked (17)

.NET Inside - Microservices, .NET Core e Serverless
.NET Inside - Microservices, .NET Core e Serverless.NET Inside - Microservices, .NET Core e Serverless
.NET Inside - Microservices, .NET Core e Serverless
 
QCONSF - ACID Is So Yesterday: Maintaining Data Consistency with Sagas
QCONSF - ACID Is So Yesterday: Maintaining Data Consistency with SagasQCONSF - ACID Is So Yesterday: Maintaining Data Consistency with Sagas
QCONSF - ACID Is So Yesterday: Maintaining Data Consistency with Sagas
 
Coder sans peur du changement avec la meme pas mal hexagonal architecture
Coder sans peur du changement avec la meme pas mal hexagonal architectureCoder sans peur du changement avec la meme pas mal hexagonal architecture
Coder sans peur du changement avec la meme pas mal hexagonal architecture
 
Ddd reboot (english version)
Ddd reboot (english version)Ddd reboot (english version)
Ddd reboot (english version)
 
Async await...oh wait!
Async await...oh wait!Async await...oh wait!
Async await...oh wait!
 
Culture craft humantalks
Culture craft humantalksCulture craft humantalks
Culture craft humantalks
 
A Pattern Language for Microservices
A Pattern Language for MicroservicesA Pattern Language for Microservices
A Pattern Language for Microservices
 
Windows Containers and Docker: Why You Should Care
Windows Containers and Docker: Why You Should CareWindows Containers and Docker: Why You Should Care
Windows Containers and Docker: Why You Should Care
 
CQRS without event sourcing
CQRS without event sourcingCQRS without event sourcing
CQRS without event sourcing
 
Solving distributed data management problems in a microservice architecture (...
Solving distributed data management problems in a microservice architecture (...Solving distributed data management problems in a microservice architecture (...
Solving distributed data management problems in a microservice architecture (...
 
Building and deploying microservices with event sourcing, CQRS and Docker (Be...
Building and deploying microservices with event sourcing, CQRS and Docker (Be...Building and deploying microservices with event sourcing, CQRS and Docker (Be...
Building and deploying microservices with event sourcing, CQRS and Docker (Be...
 
Omnikron webbinar - Microservices: enabling the rapid, frequent, and reliable...
Omnikron webbinar - Microservices: enabling the rapid, frequent, and reliable...Omnikron webbinar - Microservices: enabling the rapid, frequent, and reliable...
Omnikron webbinar - Microservices: enabling the rapid, frequent, and reliable...
 
Microservices Workshop All Topics Deck 2016
Microservices Workshop All Topics Deck 2016Microservices Workshop All Topics Deck 2016
Microservices Workshop All Topics Deck 2016
 
JavaOne2017: ACID Is So Yesterday: Maintaining Data Consistency with Sagas
JavaOne2017: ACID Is So Yesterday: Maintaining Data Consistency with SagasJavaOne2017: ACID Is So Yesterday: Maintaining Data Consistency with Sagas
JavaOne2017: ACID Is So Yesterday: Maintaining Data Consistency with Sagas
 
Architecting Microservices in .Net
Architecting Microservices in .NetArchitecting Microservices in .Net
Architecting Microservices in .Net
 
Principles of microservices velocity
Principles of microservices   velocityPrinciples of microservices   velocity
Principles of microservices velocity
 
Azure tales: a real world CQRS and ES Deep Dive - Andrea Saltarello
Azure tales: a real world CQRS and ES Deep Dive - Andrea SaltarelloAzure tales: a real world CQRS and ES Deep Dive - Andrea Saltarello
Azure tales: a real world CQRS and ES Deep Dive - Andrea Saltarello
 

More from Thomas Pierrain

The scale-up, the autonomy and the nuclear submarine
The scale-up, the autonomy and the nuclear submarineThe scale-up, the autonomy and the nuclear submarine
The scale-up, the autonomy and the nuclear submarine
Thomas Pierrain
 
Hexagonal And Beyond
Hexagonal And BeyondHexagonal And Beyond
Hexagonal And Beyond
Thomas Pierrain
 
La scale-up, l'autonomie et le sous-marin nucléaire
La scale-up, l'autonomie et le sous-marin nucléaireLa scale-up, l'autonomie et le sous-marin nucléaire
La scale-up, l'autonomie et le sous-marin nucléaire
Thomas Pierrain
 
De l'autre côté du miroir
De l'autre côté du miroirDe l'autre côté du miroir
De l'autre côté du miroir
Thomas Pierrain
 
eXtreme
eXtremeeXtreme
Write Antifragile & Domain-Driven tests with ”Outside-in diamond” ◆ TDD
Write Antifragile & Domain-Driven tests with ”Outside-in diamond” ◆ TDDWrite Antifragile & Domain-Driven tests with ”Outside-in diamond” ◆ TDD
Write Antifragile & Domain-Driven tests with ”Outside-in diamond” ◆ TDD
Thomas Pierrain
 
Beyond Hexagonal architecture
Beyond Hexagonal architectureBeyond Hexagonal architecture
Beyond Hexagonal architecture
Thomas Pierrain
 
The 9 rules of debugging
The 9 rules of debuggingThe 9 rules of debugging
The 9 rules of debugging
Thomas Pierrain
 
Hexagonal architecture vs Functional core / Imperative shell
Hexagonal architecture vs Functional core / Imperative shellHexagonal architecture vs Functional core / Imperative shell
Hexagonal architecture vs Functional core / Imperative shell
Thomas Pierrain
 
Une nuit dans l'hexagone
Une nuit dans l'hexagoneUne nuit dans l'hexagone
Une nuit dans l'hexagone
Thomas Pierrain
 
Equiper sa voie
Equiper sa voieEquiper sa voie
Equiper sa voie
Thomas Pierrain
 
As time goes by (episode 2)
As time goes by (episode 2)As time goes by (episode 2)
As time goes by (episode 2)
Thomas Pierrain
 
Et si on parlait Éthique ?
Et si on parlait Éthique ?Et si on parlait Éthique ?
Et si on parlait Éthique ?
Thomas Pierrain
 
L'Agilité a grande échelle : conserver l'esprit, pas la lettre
L'Agilité a grande échelle : conserver l'esprit, pas la lettreL'Agilité a grande échelle : conserver l'esprit, pas la lettre
L'Agilité a grande échelle : conserver l'esprit, pas la lettre
Thomas Pierrain
 
Legacy club (english version)
Legacy club (english version)Legacy club (english version)
Legacy club (english version)
Thomas Pierrain
 
The art of Software Design
The art of Software DesignThe art of Software Design
The art of Software Design
Thomas Pierrain
 
Culture Craft Devoxx 2015
Culture Craft Devoxx 2015Culture Craft Devoxx 2015
Culture Craft Devoxx 2015
Thomas Pierrain
 

More from Thomas Pierrain (17)

The scale-up, the autonomy and the nuclear submarine
The scale-up, the autonomy and the nuclear submarineThe scale-up, the autonomy and the nuclear submarine
The scale-up, the autonomy and the nuclear submarine
 
Hexagonal And Beyond
Hexagonal And BeyondHexagonal And Beyond
Hexagonal And Beyond
 
La scale-up, l'autonomie et le sous-marin nucléaire
La scale-up, l'autonomie et le sous-marin nucléaireLa scale-up, l'autonomie et le sous-marin nucléaire
La scale-up, l'autonomie et le sous-marin nucléaire
 
De l'autre côté du miroir
De l'autre côté du miroirDe l'autre côté du miroir
De l'autre côté du miroir
 
eXtreme
eXtremeeXtreme
eXtreme
 
Write Antifragile & Domain-Driven tests with ”Outside-in diamond” ◆ TDD
Write Antifragile & Domain-Driven tests with ”Outside-in diamond” ◆ TDDWrite Antifragile & Domain-Driven tests with ”Outside-in diamond” ◆ TDD
Write Antifragile & Domain-Driven tests with ”Outside-in diamond” ◆ TDD
 
Beyond Hexagonal architecture
Beyond Hexagonal architectureBeyond Hexagonal architecture
Beyond Hexagonal architecture
 
The 9 rules of debugging
The 9 rules of debuggingThe 9 rules of debugging
The 9 rules of debugging
 
Hexagonal architecture vs Functional core / Imperative shell
Hexagonal architecture vs Functional core / Imperative shellHexagonal architecture vs Functional core / Imperative shell
Hexagonal architecture vs Functional core / Imperative shell
 
Une nuit dans l'hexagone
Une nuit dans l'hexagoneUne nuit dans l'hexagone
Une nuit dans l'hexagone
 
Equiper sa voie
Equiper sa voieEquiper sa voie
Equiper sa voie
 
As time goes by (episode 2)
As time goes by (episode 2)As time goes by (episode 2)
As time goes by (episode 2)
 
Et si on parlait Éthique ?
Et si on parlait Éthique ?Et si on parlait Éthique ?
Et si on parlait Éthique ?
 
L'Agilité a grande échelle : conserver l'esprit, pas la lettre
L'Agilité a grande échelle : conserver l'esprit, pas la lettreL'Agilité a grande échelle : conserver l'esprit, pas la lettre
L'Agilité a grande échelle : conserver l'esprit, pas la lettre
 
Legacy club (english version)
Legacy club (english version)Legacy club (english version)
Legacy club (english version)
 
The art of Software Design
The art of Software DesignThe art of Software Design
The art of Software Design
 
Culture Craft Devoxx 2015
Culture Craft Devoxx 2015Culture Craft Devoxx 2015
Culture Craft Devoxx 2015
 

Recently uploaded

Understanding Globus Data Transfers with NetSage
Understanding Globus Data Transfers with NetSageUnderstanding Globus Data Transfers with NetSage
Understanding Globus Data Transfers with NetSage
Globus
 
Designing for Privacy in Amazon Web Services
Designing for Privacy in Amazon Web ServicesDesigning for Privacy in Amazon Web Services
Designing for Privacy in Amazon Web Services
KrzysztofKkol1
 
Developing Distributed High-performance Computing Capabilities of an Open Sci...
Developing Distributed High-performance Computing Capabilities of an Open Sci...Developing Distributed High-performance Computing Capabilities of an Open Sci...
Developing Distributed High-performance Computing Capabilities of an Open Sci...
Globus
 
Dominate Social Media with TubeTrivia AI’s Addictive Quiz Videos.pdf
Dominate Social Media with TubeTrivia AI’s Addictive Quiz Videos.pdfDominate Social Media with TubeTrivia AI’s Addictive Quiz Videos.pdf
Dominate Social Media with TubeTrivia AI’s Addictive Quiz Videos.pdf
AMB-Review
 
How Does XfilesPro Ensure Security While Sharing Documents in Salesforce?
How Does XfilesPro Ensure Security While Sharing Documents in Salesforce?How Does XfilesPro Ensure Security While Sharing Documents in Salesforce?
How Does XfilesPro Ensure Security While Sharing Documents in Salesforce?
XfilesPro
 
Cyaniclab : Software Development Agency Portfolio.pdf
Cyaniclab : Software Development Agency Portfolio.pdfCyaniclab : Software Development Agency Portfolio.pdf
Cyaniclab : Software Development Agency Portfolio.pdf
Cyanic lab
 
Into the Box 2024 - Keynote Day 2 Slides.pdf
Into the Box 2024 - Keynote Day 2 Slides.pdfInto the Box 2024 - Keynote Day 2 Slides.pdf
Into the Box 2024 - Keynote Day 2 Slides.pdf
Ortus Solutions, Corp
 
How Recreation Management Software Can Streamline Your Operations.pptx
How Recreation Management Software Can Streamline Your Operations.pptxHow Recreation Management Software Can Streamline Your Operations.pptx
How Recreation Management Software Can Streamline Your Operations.pptx
wottaspaceseo
 
OpenFOAM solver for Helmholtz equation, helmholtzFoam / helmholtzBubbleFoam
OpenFOAM solver for Helmholtz equation, helmholtzFoam / helmholtzBubbleFoamOpenFOAM solver for Helmholtz equation, helmholtzFoam / helmholtzBubbleFoam
OpenFOAM solver for Helmholtz equation, helmholtzFoam / helmholtzBubbleFoam
takuyayamamoto1800
 
top nidhi software solution freedownload
top nidhi software solution freedownloadtop nidhi software solution freedownload
top nidhi software solution freedownload
vrstrong314
 
Visitor Management System in India- Vizman.app
Visitor Management System in India- Vizman.appVisitor Management System in India- Vizman.app
Visitor Management System in India- Vizman.app
NaapbooksPrivateLimi
 
Paketo Buildpacks : la meilleure façon de construire des images OCI? DevopsDa...
Paketo Buildpacks : la meilleure façon de construire des images OCI? DevopsDa...Paketo Buildpacks : la meilleure façon de construire des images OCI? DevopsDa...
Paketo Buildpacks : la meilleure façon de construire des images OCI? DevopsDa...
Anthony Dahanne
 
TROUBLESHOOTING 9 TYPES OF OUTOFMEMORYERROR
TROUBLESHOOTING 9 TYPES OF OUTOFMEMORYERRORTROUBLESHOOTING 9 TYPES OF OUTOFMEMORYERROR
TROUBLESHOOTING 9 TYPES OF OUTOFMEMORYERROR
Tier1 app
 
Field Employee Tracking System| MiTrack App| Best Employee Tracking Solution|...
Field Employee Tracking System| MiTrack App| Best Employee Tracking Solution|...Field Employee Tracking System| MiTrack App| Best Employee Tracking Solution|...
Field Employee Tracking System| MiTrack App| Best Employee Tracking Solution|...
informapgpstrackings
 
How to Position Your Globus Data Portal for Success Ten Good Practices
How to Position Your Globus Data Portal for Success Ten Good PracticesHow to Position Your Globus Data Portal for Success Ten Good Practices
How to Position Your Globus Data Portal for Success Ten Good Practices
Globus
 
Software Testing Exam imp Ques Notes.pdf
Software Testing Exam imp Ques Notes.pdfSoftware Testing Exam imp Ques Notes.pdf
Software Testing Exam imp Ques Notes.pdf
MayankTawar1
 
Enhancing Research Orchestration Capabilities at ORNL.pdf
Enhancing Research Orchestration Capabilities at ORNL.pdfEnhancing Research Orchestration Capabilities at ORNL.pdf
Enhancing Research Orchestration Capabilities at ORNL.pdf
Globus
 
GlobusWorld 2024 Opening Keynote session
GlobusWorld 2024 Opening Keynote sessionGlobusWorld 2024 Opening Keynote session
GlobusWorld 2024 Opening Keynote session
Globus
 
SOCRadar Research Team: Latest Activities of IntelBroker
SOCRadar Research Team: Latest Activities of IntelBrokerSOCRadar Research Team: Latest Activities of IntelBroker
SOCRadar Research Team: Latest Activities of IntelBroker
SOCRadar
 
Lecture 1 Introduction to games development
Lecture 1 Introduction to games developmentLecture 1 Introduction to games development
Lecture 1 Introduction to games development
abdulrafaychaudhry
 

Recently uploaded (20)

Understanding Globus Data Transfers with NetSage
Understanding Globus Data Transfers with NetSageUnderstanding Globus Data Transfers with NetSage
Understanding Globus Data Transfers with NetSage
 
Designing for Privacy in Amazon Web Services
Designing for Privacy in Amazon Web ServicesDesigning for Privacy in Amazon Web Services
Designing for Privacy in Amazon Web Services
 
Developing Distributed High-performance Computing Capabilities of an Open Sci...
Developing Distributed High-performance Computing Capabilities of an Open Sci...Developing Distributed High-performance Computing Capabilities of an Open Sci...
Developing Distributed High-performance Computing Capabilities of an Open Sci...
 
Dominate Social Media with TubeTrivia AI’s Addictive Quiz Videos.pdf
Dominate Social Media with TubeTrivia AI’s Addictive Quiz Videos.pdfDominate Social Media with TubeTrivia AI’s Addictive Quiz Videos.pdf
Dominate Social Media with TubeTrivia AI’s Addictive Quiz Videos.pdf
 
How Does XfilesPro Ensure Security While Sharing Documents in Salesforce?
How Does XfilesPro Ensure Security While Sharing Documents in Salesforce?How Does XfilesPro Ensure Security While Sharing Documents in Salesforce?
How Does XfilesPro Ensure Security While Sharing Documents in Salesforce?
 
Cyaniclab : Software Development Agency Portfolio.pdf
Cyaniclab : Software Development Agency Portfolio.pdfCyaniclab : Software Development Agency Portfolio.pdf
Cyaniclab : Software Development Agency Portfolio.pdf
 
Into the Box 2024 - Keynote Day 2 Slides.pdf
Into the Box 2024 - Keynote Day 2 Slides.pdfInto the Box 2024 - Keynote Day 2 Slides.pdf
Into the Box 2024 - Keynote Day 2 Slides.pdf
 
How Recreation Management Software Can Streamline Your Operations.pptx
How Recreation Management Software Can Streamline Your Operations.pptxHow Recreation Management Software Can Streamline Your Operations.pptx
How Recreation Management Software Can Streamline Your Operations.pptx
 
OpenFOAM solver for Helmholtz equation, helmholtzFoam / helmholtzBubbleFoam
OpenFOAM solver for Helmholtz equation, helmholtzFoam / helmholtzBubbleFoamOpenFOAM solver for Helmholtz equation, helmholtzFoam / helmholtzBubbleFoam
OpenFOAM solver for Helmholtz equation, helmholtzFoam / helmholtzBubbleFoam
 
top nidhi software solution freedownload
top nidhi software solution freedownloadtop nidhi software solution freedownload
top nidhi software solution freedownload
 
Visitor Management System in India- Vizman.app
Visitor Management System in India- Vizman.appVisitor Management System in India- Vizman.app
Visitor Management System in India- Vizman.app
 
Paketo Buildpacks : la meilleure façon de construire des images OCI? DevopsDa...
Paketo Buildpacks : la meilleure façon de construire des images OCI? DevopsDa...Paketo Buildpacks : la meilleure façon de construire des images OCI? DevopsDa...
Paketo Buildpacks : la meilleure façon de construire des images OCI? DevopsDa...
 
TROUBLESHOOTING 9 TYPES OF OUTOFMEMORYERROR
TROUBLESHOOTING 9 TYPES OF OUTOFMEMORYERRORTROUBLESHOOTING 9 TYPES OF OUTOFMEMORYERROR
TROUBLESHOOTING 9 TYPES OF OUTOFMEMORYERROR
 
Field Employee Tracking System| MiTrack App| Best Employee Tracking Solution|...
Field Employee Tracking System| MiTrack App| Best Employee Tracking Solution|...Field Employee Tracking System| MiTrack App| Best Employee Tracking Solution|...
Field Employee Tracking System| MiTrack App| Best Employee Tracking Solution|...
 
How to Position Your Globus Data Portal for Success Ten Good Practices
How to Position Your Globus Data Portal for Success Ten Good PracticesHow to Position Your Globus Data Portal for Success Ten Good Practices
How to Position Your Globus Data Portal for Success Ten Good Practices
 
Software Testing Exam imp Ques Notes.pdf
Software Testing Exam imp Ques Notes.pdfSoftware Testing Exam imp Ques Notes.pdf
Software Testing Exam imp Ques Notes.pdf
 
Enhancing Research Orchestration Capabilities at ORNL.pdf
Enhancing Research Orchestration Capabilities at ORNL.pdfEnhancing Research Orchestration Capabilities at ORNL.pdf
Enhancing Research Orchestration Capabilities at ORNL.pdf
 
GlobusWorld 2024 Opening Keynote session
GlobusWorld 2024 Opening Keynote sessionGlobusWorld 2024 Opening Keynote session
GlobusWorld 2024 Opening Keynote session
 
SOCRadar Research Team: Latest Activities of IntelBroker
SOCRadar Research Team: Latest Activities of IntelBrokerSOCRadar Research Team: Latest Activities of IntelBroker
SOCRadar Research Team: Latest Activities of IntelBroker
 
Lecture 1 Introduction to games development
Lecture 1 Introduction to games developmentLecture 1 Introduction to games development
Lecture 1 Introduction to games development
 

TDD is dead?!? Let's do an autospy (ncrafts.io)

  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34. t t
  • 35. t t

Editor's Notes

  1. Thomas: Hi everyone! Welcome to our autopsy session of TDD Bruno: I'm Bruno. I'm an agile coach and also a software craftsman. Currently, I transform developers as software craftsmen for a major bank. I have cofounded Learn to Craft with Jean Laurent de Morlhon. This is a specific training about software craftsmanship. Thomas: I’m Thomas. I am technical architect for a large investment bank, but also developer – including the open source- with NFluent .NET library that makes it easier to write readable assertions and "helpers" in your tests. I practice TDD-almost exclusively since 2005, when I also discovered XP (thanks to this gentleman, there next;-)
  2. The idea of ​​this talk came from an observation: all developers have probably heard -at least once- about the Red-Green-Refactor TDD mantra. (Question for the audience-QFTA) Can you please raise a hand if you already heard about it (I’m expecting to see everyone here ;-)
  3. Thomas: Ok. Let’s start with a short reminder to clarify our ubiquitous language for the session: RED It all starts with a test that is written when the code does not exist yet. In fact it brings out a skeleton for this implementation when writing our test GREEN We just wrote the code for the test to pass as quickly as possible. We can take many shortcuts here. The objective is to make it green ASAP. REFACTOR The part that is too often sacrificed: Once our has passed, we improve our code to replace all shortcuts we’ve taken, all the smells codes etc. Ok then. Everyone has heard at least once about that… but when you look around and see how many TDD practitioners you can find in the projects, when you talk with others in the various meetups, or on tweeter… Almost no one practices TDD today. (QFTA): Can you please raise your hand if you are practicing TDD on a daily basis at work? Bruno: With Thomas we think it is normal ... If you think about it, there are very few books or blogs that explain the whole TDD process. How we capture the business needs, how we feel the emergent design... TDD is a lot more than that, it is also hard at first. There are some pitfalls, false positives, and we can be very disappointed if we start in the wrong direction. Thomas: Thus, the objective of this session is to have an overview of TDD main difficulties; and for us to propose hints and tricks from the trenches to help you to retry the TDD experience … successfully this time.
  4. Why should you retry the TDD experience? Reassuring to manage complexity, to guard from regression also Efficient: because it’s a straight to the point approach, with YAGNI principle at the heart of it. We really limit ourselves to the essentials and avoid tunnel effect. It’s also really Encouraging: I don’t know for you guys, but since a developer’s day may be full of negative feedbacks (from the compiler, from the project manager, from the end users, etc), any kind of positive feedback is really welcomed to encourage me. Here, every Green light -when a test passed- is like a candy, a small victory. Very encouraging to move forward.
  5. To understand the soul of TDD, it should better to think out of the box before to go further. Don’t be afraid, we come back in few minutes. Imagine that you are at the end of the fifteen century …
  6. Imagine that you are at the end of the fifteen century … where the middle age isn’t completely terminated. At the same time, there is bunch of craftsmen, artists and intellectuals that wanted to get rid off the middle age and reinvent art and life. This new movement is … … the Renaissance. Several of these artists are still famous nowadays. But there is one, I’m really fan of. A sculptor. This guy has a amazing skill … … when he touch a block of marble, it is able to feel his nascent character through the stone. Click - Realize: the guy has just to touch A stone to feel and imagine the upcoming sculpture. Click -This guy was Michelangelo. But who was Michelangelo? Click - He was only six years old when he is loose his mother. Click - His father placed him with a family nourished stonemasons. Click - With the children of this family, he will cut the stones before he can read and write. He will confess, many years after that he had discovered a real a pleasure to break stone during his childhood with this family. After, for a while, he got a long experience through several studios where he has beaten each masters. Click -His talent allows him to join the art school of Lorenzo de Medici .He learns also poetry, literature and of course continues to improve in drawing, painting and sculpture. Click -Michelangelo spent many nights to cut human bodies to better transcend them. It was forbidden, it was hard and difficult, but it was tolerated if you were an artist and if you come only during the night.
  7. Click -Michelangelo finds its artistic peak through a giant David (4.34 m high) of white marble. He draws and sculpts it between 1501 and 1504. David, a character from the Old Testament, is featured naked young man, muscular gauging his enemy Goliath. But unlike traditional representation, where David was represented after the fight with a soldier posture. [PAUSE] . Click -Reveals the moment of inner reflection Click -It captures interiority. Click -David became the symbol of the invincibility of the Florentine Republic.
  8. That was very interesting Bruno, but what’s the link with our topic actually? I am a developer; not a brilliant artist ... Bruno: As you probably figured out, Michelangelo was a crazy workaholic ;-)
  9. Bruno: As you probably figured out, Michelangelo was a crazy workaholic ;-) Thomas: Yes, as you just explained, he started to cut stone when he was 6. That should have given him a kind of edge, comparing to the other sculptors It makes me think of the theory of 10,000 hours. (QFTA) Who already heard about this 10k hours theory? It’s a theory from a Swedish psychologist (named Ericsson) that is stating that to be an expert in any field, you have to spend at least 10 thousands hours of practice and workout. This applies to any kind of Craftsmanship, arts, sports, martial arts, or even poker. There is something funny with Poker actually. Rather than hours, the experience of Poker players is driven by the number of hands they have played. That explained why so many young poker players recently beat old and very experienced players during the World series in Las Vegas. With online poker, those 20 years old players had played more hands in their short lives, than old school poker players in their entire carrier. Indeed: online you can play whenever you want 24-7, and you can also play multiple tables simultaneously (this is called: multi-tabling) This rule also applies to DEV. Source: http://www.1000words-a-day.com/wp-content/uploads/2011/06/10khrs.jpg http://www.sculpteur-petrus.com/images/sculpture-21-2.jpg http://www.menshealth.fr/wp-content/uploads/2014/04/HITT.jpg http://www.afacsport.com/wp-content/uploads/2012/05/taichi.jpg http://www.peppermillreno.com/library/images/backgrounds/gaming_poker_cards.jpg
  10. Thomas: When we workout, when we code and do some code kata for instance, this has direct action on our brain. Repetition is changing our synapses connections & brain configuration (animation) It’s like in JAVA or .NET: the JIT compiler optimizes the execution of a method, or a piece of code based on its number of calls Our brain is somehow similar. If we master our tools and the way we code, we can then focus on what's important: the value for our domain, business and software. Bruno: The Neo character is based this idea. After a long training his brain is different. It enable to see inside the matrix and for him the bullets arrive slowly. Thomas: This Neo thing reminds me the first time I learned to drive a car with my GranPa; there have been so many things to keep in mind: the steering wheel, the right foot, the left foot, the gear lever, the reer-view miror, etc. It was on a parking lot and I couldn’t hurt my GranPa car in the tiny walls. I was overwhelmed by all those details. Now we I drive my car… Pfff ;-) Bruno A friend of mine told me that repetitions were not a good approach. If we analyze the Modern Time movie, we are not in the same posture. You decide yourself to repeat something because we are motivated by something, is different when someone force you to repeat something.
  11. As I said in introduction, I turn developers in software craftsmen. This coaching is mainly based on code kata: greenfield and brownfield. At the end, we practice some coding dojo to share their perceptions together.
  12. Pierre is friend of mine. He loves to software quality and he decide to start his new career plans in TDD. However. when he is faced with the code editor, it sometimes feels helpless and unable to produce code. He finally stopped and now says that TDD is very difficult. This is the first cause of TDD’s failure. public: Ask the public its opinion
  13. Bruno: Developers forget to be well informed on the subject before coding, forget to communicate. Reflection is undoubtedly a crucial part of TDD. Thomas: For the emerging design overwhelms us, you must prepare your brain.
  14. Thomas (the title "Why Should"?) About shoulds besides myself who practice TDD since 2005, it's true that I did not use this formulation. My name was on the test requirements, and when we discussed this both goshawks of the coffee machine there are more than a year, I thought I was going to try to follow this technique. Well I must say that the results thereof to structure very clearly what we will do / write to the next test is really super effective! Bruno (with animation "Should such a message to yourself - >>) Example of the use of the shoulds Fruitshop kata.
  15. Jean is a colleague who practices development with great professionalism, but with the TDD it did not go well. He wanted to start TDD gradually in their daily work. Very quickly, he soon realized that productivity had dropped significantly. Facing the end of his project, he preferred to stop TDD. public: Ask the public its opinion
  16. Thomas: Seriously guys? We –developers- are all LANNISTERS …  There is always a time where we pay our Debts ;-) You can test-after to let your project manager think that you’ve finished your job earlier… but you know that you will test – or worst- troubleshoot your app under production- afterwards. Some recent studies made by various MS showed that TDD was adding 15% up to 35%. I would have said 10% for me, that is doing TDD almost exclusively since 2005 https://twitter.com/Cyrdup/status/589774288904912896 http://memegenerator.net/instance/60954764
  17. Thomas: But anyway. You know what? Typing is not the bottleneck… THINKING IS the bottleneck! http://start.sbastn.com/typing-is-not-the-bottleneck
  18. Thomas: of course, without thinking, you feel faster! But it’s a lie. Right Bruno? Bruno: Click -In Public: If I say “Winter is …” you tell me… (coming). Or in french: “Une hirondelle ne fait pas le ….” (printemps) Click -Now, if I ask you 17 x 24? You tell me…. ;-) 408 Which was easier for you? … That’s normal. Indeed, our way of thinking is divided into two systems that work together but are totally different. System 1 is fast and relies on automation and various types of bias that lead us astray often, but it is quick and no tiring System 2 is slow, as it requires us to mobilize ourselves intellectually to think, to reason. He demands of energy (sugar) and we tired quickly. However the system and logic is wrong unless the system 1. Our lives are largely based on the system 1, but if we want to do TDD, you must request your system 2, which by nature is slower. TDD produces a code test in terms of behavior, so it is normal that it costs more than a little or not tested program. Source: http://www.google.fr/url?source=imglanding&ct=img&q=http://i.dailymail.co.uk/i/pix/2013/10/20/article-2469485-1753A9F8000005DC-917_634x408.jpg&sa=X&ei=EXpTVZyVFOrfywOKnIDYBw&ved=0CAkQ8wc&usg=AFQjCNHjtSbsIGjlJw3u1SJgjPjNWJBMJQ
  19. It Bruno reminds me my case. There are a few years, I was technical lead on a pricer, it was between 4 and 8 in the team and we had set some standard on our app. TDD, par, at least 80% of test coverage, test acceptance of black box, unit testing, parallel run etc. We release every 15 days, and with this device: it even happened to me releaser and go find my darling to the movies or the theater just after. In short, it was super confident in our device. And then one day, after one year of developping our pricer and our code base, we realized that we faced serious difficulties every time we would like to change or to add a new feature. Indeed, almost 10 or 20% of our tests were breaking every time.... Not the blackbox-acceptance tests, but most of our unit tests… We needed to rewrite them. Our tests were brittle/fragile and made us suffer. In short they have started to slow us down and we started to wonder what we could do to get there ... I even began to make me challenged by management who asked us to stop TDD, saying we must remain productive again at the end of the day. What did we got wrong? Was it related to the important number of tests? Was it related to the way we were written those test? We collectively thought about it, and then figure it out that it was related to how we were written our tests ;-( Our unit tests were too much implementation-oriented.
  20. The secret to avoid that kind of situation? Do not test methods or implementation details Instead, test behaviours – even at the unit test level. This is crucial to practice TDD safely. Source : http://upload.wikimedia.org/wikipedia/commons/c/c0/Behaviour_Santiago_Logo.jpg
  21. Bruno: Poor test code because it does not bring value. Both tests are procedures and not on a script
  22. Bruno: In this version of the code is simple and clean. The test covers a scenario perfectly explained through his name.
  23. Thomas: Another feedback we often hear: « I have the feeling to dedicate too much time to the writting of tests, and not enough time to write code for our app. Is TDD really efficient? »
  24. EFFICIENCY VIA MINIMALISM & SHORT FEEDBACKS Source : https://c2.staticflickr.com/8/7135/7021453805_b2b981d7c0.jpg http://blog.leanmonitor.com/wp-content/uploads/2014/08/minimum-viable-product.png KISS http://www.google.fr/imgres?imgurl=http%3A%2F%2Fpg.nooidea.com%2Fupload%2F2011%2F02%2F21%2F20110221065459-272e0930.jpg&imgrefurl=http%3A%2F%2Fwww.nooidea.com%2F2011%2F02%2Fkeep-it-simple-stupid.html&h=500&w=486&tbnid=7IRRI2o8BoLQGM%3A&zoom=1&docid=iIioXZg6ISiYxM&ei=60UiVY7LAYLvUJWdgLgC&tbm=isch&iact=rc&uact=3&dur=2630&page=2&start=25&ndsp=30&ved=0CJABEK0DMCM
  25. Thomas: When I started to practice TDD in 2005, I was practicing the CLASSIC style of TDD. Red-Green-Refactor, you start from the inside, and you rely on triangulation to improve your implementation or to add more and more behaviours from the inside by increment. This is nice, but you can also be victim of tunnel effects ... And realize too late that you arrived in a situation far from what you really need.
  26. Thomas: This is why I now practice almost exclusively the Outside-in form of TDD (also called the London school). In that form, you consider your system as a black box. An empty one a the very beginning, and … <explications>. Bruno: As Michelangelo, we shape the code at the coarse grained level, but after we shape the fine grained level.
  27. (reminder: Kent Beck’s 4 rules of simple design: It passes all the tests It minimizes duplication in all its forms It expresses its intent clearly to the reader It removes unnecessary elements)
  28. TDD can truly change your life as a developer, to make it more comfortable, reassuring, efficient
  29. Thomas: Le cas du diamonds kata illustré par Seb ROSE et que j’ai eu l’occasion de faire tout récemment, est très intéressant, l’objectif est de … Sa stratégie de recyclage de test pour décomposer l’algo en baby steps est vraiment intéressant Dabord Assert.AreEqual("AB", Diamond.Create('B')); // B_should_give_character_sequence() puis Assert.AreEqual("ABB", Diamond.Create('B')); // public void B_should_repeat_characters() Puis Assert.AreEqual("A\nBB\n", Diamond.Create('B')); // B_should_have_separate_lines() Le sudoku est une autre paire de manches… Il faut être honnête, au « moment » où vous devez coder l’algo, il devient très difficile -impossible en ce qui me concerne- de conserver des babys steps. Après moi ça ne me dérange pas plus que ça. Le TDD m’aide déjà suffisamment pour me lancer et coder toute l’infrastructure nécessaire pour le sudoku (coder les règles, le parsing des colonnes, lignes et régions…). On a un débat sur le sujet avec Bruno, il va nous falloir tenter de le faire ensemble pour vraiment voir si les petits test Un autre exemple d’algo pas vraiment possible à coder en TDD: le quick sort… (le bubble sort : ok, mais le quick sort…) Source: https://cdn3.iconfinder.com/data/icons/objects-1/100/diamond-512.png Seb Rose: http://claysnow.co.uk/recycling-tests-in-tdd/
  30. Bruno: Le TDD comprend 4 activités distinctes que le développeur se doit de maîtriser, il peut les travailler indépendamment pour progresser efficacement. Puis, au finale, les pratiquer toutes sans y penser une fois les automatismes acquis.