SlideShare a Scribd company logo
TDD: seriously,
try it ! 😃
May ‘23
First thing first
• Review the basics around TDD
• Understand the benefits of
building code designed by tests
VS
building the tests after we write
our code
• (I hope) learn some tips
• See a { live coding } example
• … so do not run away, please!
😉
Why this session?
Nacho Cougil
• Principal Software Engineer at
Dynatrace
• TDD & clean code fan
• Started to write in Java before Y2K
• Founder of the Barcelona Java Users
Group ( BarcelonaJUG ) & co-
founder of the Java and JVM
Barcelona Conference
( JBCNConf  DevBcn )
• Java Champion
• Father, former mountain marathon
runner 😅
Who am I?
Raise your
hand at any
moment!
Ask questions at any time,
please!
Based on my
*personal*
experience
Warning
• Where it cames from?
• Advantages &
disadvantages
• Process
• Good habits
• Example
• Final Recap
Agenda
• Where it cames from?
• Advantages &
disadvantages
• Process
• Good habits
• Example
• Final Recap
Agenda
Kent Beck “rediscovered” TDD
when writing first testing
framework SUnit in 1994.
TDD became part of eXtreme
Programming (XP) book in
2000. Developed XP during his
work at Chrysler
The book Test-Driven
Development by Example was
published in 2002
A bit of history
Mockist (London)
• Entry point: acceptance test
• Design from top down
• Main focus on the
interactions between the
components of our solution
• Focus on messages we will
use with our classes. Here is
where mock objects appear
Classical (Chicago)
• Described by Kent Beck
• More emphasis on “discovering” the
internals of our code mainly by
refactoring
• The structure of our classes and
modules emerges as we evolve our
code (ex: removing duplication,
encapsulation, etc)
• Focused on changes in an state or
return values from functions
Two TDD
schools
TDD - Seriously, try it! - Bucarest Tech Week
... follows a simple process ⚙️ that
helps you to design & develop your
software in a straightforward and
incremental ♻️ way (  ⚡ feedback
loop).
… you can find defects earlier ⏱
(when running or designing your
tests)
… you can easily detect regression
errors 🔴
… your software is going to be easier
to refactor because of a safety net ✅
Imagine…
... your software guides you how a
consumer will use your component ⏛
… tests are living documentation (really
🖖 !!)
… the software you write it is likely to
have less bugs 🐛
… your development costs 💰 will be
lower
References:
- Test-driven development as a defect-reduction practice
(IEEE)
Imagine…
It is not so easy to start with 😅
(not many good places to help, majority
of people are not using it daily)
Has a high learning curve 😟
(depends directly on the complexity of
your code + your design and
engineering capabilities)
Can be a large investment 💸 in a
team (depending on the experience of
the members + requires time ⏱ & effort
🙇♀️🙇♂️)
Yes, TDD has some disadvantages
It is really easy to forget 😓 about it
It provokes resistance ☹️ (in some
people ⚔️)
Can be corrupted and lead to the
syndrome of reaching the highest
possible level of coverage 🙈
It is extremely difficult 😤 to master at it
Yes, TDD has some disadvantages
TDD - Seriously, try it! - Bucarest Tech Week
You learned how to write code time
ago,…
…and now you’d may learn a different
way of writing software. Like “learning
to ride a very different bike”,... but being
So, … how it is?
To be used in your design &
coding process , for
building better modularized
and tested software
And, what does it
seek?
• Where it cames from?
• Advantages &
disadvantages
• Process
• Good habits
• Example
• Final Recap
Agenda
The process
• Where it cames from?
• Advantages &
disadvantages
• Process
• Good habits
• Example
• Final Recap
Agenda
Start little by little: katas, POCs,
personal projects, ...
Practice...
• ... and keep practicing
• ... and keep on
• ... until you finally internalise it ⏱♀️😉
Practice with somebody else
( pair-programming )
Keep learning: online content, books,
...
Learn and practice
An Extreme Programming (XP)
Practice in which 2 developers participate
in one development effort at one
workstation.
One, the driver, writes code while the
other, the navigator or observer,
reviews the code as it is typed in. The 2
engineers switch roles frequently.
While reviewing, the observer also
considers the "strategic" direction of the
work, coming up with ideas for
Pair programming
Martin Fowler (concepts)
• https://www.martinfowler.com/bliki/TestDouble.html
• https://martinfowler.com/articles/mocksArentStubs.h
tml
• https://martinfowler.com/articles/practical-test-
pyramid.html
Dave Farley (CI, TDD, etc)
• https://www.youtube.com/ContinuousDelivery/
James Shore (TDD series)
• https://www.youtube.com/jdlshore/
Jason Gorman (Java Code Craft)
• https://www.youtube.com/parlezuml/
Recommended
content
Before you write production code,
check 👀 that your test is failing 🔴
Each test has only 1 reason to fail
Write the assertion first
Technical good habits
Tests naming convention
Describe the
expected
behaviour, not
the internals.
Our tests
should
describe
behaviour in
plain english
Ending the class name
with Should will “force “
you to start describing
an action for every test
you may create
Our tests methods will only describe
behavior. Therefore, we will have a
better understanding on what this class
does
Our tests will be more clear
If some tests fails, we can have a look
and see easily which case is failing
We don’t need to get into details on
any test to understand what are they
pursuing
The result will be focused on the
business
Test creation order
1) Name the
class
2) Name
the method
3) Define what you want to
check
4) Trigger the code
5) Do the setup
• Where it cames from?
• Advantages &
disadvantages
• Process
• Good habits
• Example
• Final Recap
Agenda
Warning – Live coding!
Requirements:
• Build a service that returns a list of films
that are associated with a particular genre
• By default, the result must be ordered
according to the average rating given to the
films by the users
• A film should contain at least an id, title a
year when it was published, one or more
tags and one or more genres
Example:
recommendationService.filmsByGenre(”science-
fiction”)
https://github.com/icougil/FilmRecommendationService
We have just started working in a startup
that sells and rents out films over the
Internet
Our product managers have told us that
they want to add new functionalities by
building a service that allows them to
recommend films to the users of the
current platform.
Kata: Film Recommendation Service
• Where it cames from?
• Advantages &
disadvantages
• Process
• Good habits
• Example
• Final Recap
Agenda
• TDD helps you to design & develop
your code in a simple and effective way
(iterative, faster & better modular design)
👌
• It is difficult to adapt to its mechanics
and sometimes is difficult 😅 to maintain
its practice...
• It worth a try 😉 (your software will have
less bugs 🐛 & it will be easier to
maintain 💰)
• There are some tips 💡
( could make your life easier )
• Try to pair, it will help 😃 you ( a lot )
• Practice, practice & practice ⏱ again
Final Recap
Questions?
nacho@cougil.com
https://nacho.cougil.com
@icougil
TDD - Seriously, try it! - Bucarest Tech Week

More Related Content

Similar to TDD - Seriously, try it! - Bucarest Tech Week (20)

PPT
Test Driven Development - Overview and Adoption
Pyxis Technologies
 
PPTX
Test-Driven Development
Meilan Ou
 
PDF
Test Driven Development Methodology and Philosophy
Vijay Kumbhar
 
PPTX
Test Driven Development
Md. Enamul Haque Chowdhury
 
PPTX
TDD in Agile
Atish Narlawar
 
PPTX
Test Driven Development - a gentle introduction
Sergei Kukharev
 
PPTX
TDD - Agile
harinderpisces
 
PPT
Introduction to Test Driven Development
Michael Denomy
 
PDF
Test driven development : software process
Amin Taheri
 
ODP
Effective TDD - Less is more
Ben Lau
 
PPTX
Test driven development(tdd)
Omar Youssef Shiha
 
PPTX
TDD Training
Manuela Grindei
 
PDF
Tdd
Dmitry Savin
 
PPT
Test Driven Development
Sachithra Gayan
 
PPTX
TDD talk
Robert Dyball
 
PDF
An Introduction to Test Driven Development
CodeOps Technologies LLP
 
PPTX
How John started to like TDD (instead of hating it) - Talent Arena (March '25)
Nacho Cougil
 
PPTX
A Brief Introduction to Test-Driven Development
Shawn Jones
 
PDF
Test Driven iOS Development (TDD)
Babul Mirdha
 
Test Driven Development - Overview and Adoption
Pyxis Technologies
 
Test-Driven Development
Meilan Ou
 
Test Driven Development Methodology and Philosophy
Vijay Kumbhar
 
Test Driven Development
Md. Enamul Haque Chowdhury
 
TDD in Agile
Atish Narlawar
 
Test Driven Development - a gentle introduction
Sergei Kukharev
 
TDD - Agile
harinderpisces
 
Introduction to Test Driven Development
Michael Denomy
 
Test driven development : software process
Amin Taheri
 
Effective TDD - Less is more
Ben Lau
 
Test driven development(tdd)
Omar Youssef Shiha
 
TDD Training
Manuela Grindei
 
Test Driven Development
Sachithra Gayan
 
TDD talk
Robert Dyball
 
An Introduction to Test Driven Development
CodeOps Technologies LLP
 
How John started to like TDD (instead of hating it) - Talent Arena (March '25)
Nacho Cougil
 
A Brief Introduction to Test-Driven Development
Shawn Jones
 
Test Driven iOS Development (TDD)
Babul Mirdha
 

More from Nacho Cougil (13)

PPTX
How John started to like TDD (instead of hating it) (ViennaJUG, June'25)
Nacho Cougil
 
PPTX
Slack like a pro: strategies for 10x engineering teams (JCON Europe, May'25)
Nacho Cougil
 
PPTX
How John started to like TDD (instead of hating it)
Nacho Cougil
 
PPTX
All you need is fast feedback loop, fast feedback loop, fast feedback loop is...
Nacho Cougil
 
PPTX
All you need is fast feedback loop, fast feedback loop, fast feedback loop is...
Nacho Cougil
 
PPTX
Refactor your code: when, why and how (revisited)
Nacho Cougil
 
PPTX
TDD: seriously, try it! 
Nacho Cougil
 
PPTX
Refactor your code: when, why and how?
Nacho Cougil
 
PPTX
Introduction to TDD
Nacho Cougil
 
PPTX
BarcelonaJUG at GDG summit
Nacho Cougil
 
PPTX
Be clean, my friend (Clean code review by BarcelonaJUG)
Nacho Cougil
 
PPT
Gencat Notifier
Nacho Cougil
 
ODP
Seghismed - Disseny i desenvolupament d'un esquema criptogràfic per gestionar...
Nacho Cougil
 
How John started to like TDD (instead of hating it) (ViennaJUG, June'25)
Nacho Cougil
 
Slack like a pro: strategies for 10x engineering teams (JCON Europe, May'25)
Nacho Cougil
 
How John started to like TDD (instead of hating it)
Nacho Cougil
 
All you need is fast feedback loop, fast feedback loop, fast feedback loop is...
Nacho Cougil
 
All you need is fast feedback loop, fast feedback loop, fast feedback loop is...
Nacho Cougil
 
Refactor your code: when, why and how (revisited)
Nacho Cougil
 
TDD: seriously, try it! 
Nacho Cougil
 
Refactor your code: when, why and how?
Nacho Cougil
 
Introduction to TDD
Nacho Cougil
 
BarcelonaJUG at GDG summit
Nacho Cougil
 
Be clean, my friend (Clean code review by BarcelonaJUG)
Nacho Cougil
 
Gencat Notifier
Nacho Cougil
 
Seghismed - Disseny i desenvolupament d'un esquema criptogràfic per gestionar...
Nacho Cougil
 
Ad

Recently uploaded (20)

PPTX
Introduction to Flutter by Ayush Desai.pptx
ayushdesai204
 
PDF
The Future of Artificial Intelligence (AI)
Mukul
 
PDF
Market Insight : ETH Dominance Returns
CIFDAQ
 
PDF
State-Dependent Conformal Perception Bounds for Neuro-Symbolic Verification
Ivan Ruchkin
 
PDF
Structs to JSON: How Go Powers REST APIs
Emily Achieng
 
PDF
Trying to figure out MCP by actually building an app from scratch with open s...
Julien SIMON
 
PPTX
Farrell_Programming Logic and Design slides_10e_ch02_PowerPoint.pptx
bashnahara11
 
PDF
Research-Fundamentals-and-Topic-Development.pdf
ayesha butalia
 
PDF
Make GenAI investments go further with the Dell AI Factory
Principled Technologies
 
PDF
OFFOFFBOX™ – A New Era for African Film | Startup Presentation
ambaicciwalkerbrian
 
PDF
Economic Impact of Data Centres to the Malaysian Economy
flintglobalapac
 
PDF
introduction to computer hardware and sofeware
chauhanshraddha2007
 
PDF
AI Unleashed - Shaping the Future -Starting Today - AIOUG Yatra 2025 - For Co...
Sandesh Rao
 
PPTX
cloud computing vai.pptx for the project
vaibhavdobariyal79
 
PPTX
Simple and concise overview about Quantum computing..pptx
mughal641
 
PDF
RAT Builders - How to Catch Them All [DeepSec 2024]
malmoeb
 
PDF
MASTERDECK GRAPHSUMMIT SYDNEY (Public).pdf
Neo4j
 
PPTX
AI Code Generation Risks (Ramkumar Dilli, CIO, Myridius)
Priyanka Aash
 
PPTX
OA presentation.pptx OA presentation.pptx
pateldhruv002338
 
PDF
NewMind AI Weekly Chronicles – July’25, Week III
NewMind AI
 
Introduction to Flutter by Ayush Desai.pptx
ayushdesai204
 
The Future of Artificial Intelligence (AI)
Mukul
 
Market Insight : ETH Dominance Returns
CIFDAQ
 
State-Dependent Conformal Perception Bounds for Neuro-Symbolic Verification
Ivan Ruchkin
 
Structs to JSON: How Go Powers REST APIs
Emily Achieng
 
Trying to figure out MCP by actually building an app from scratch with open s...
Julien SIMON
 
Farrell_Programming Logic and Design slides_10e_ch02_PowerPoint.pptx
bashnahara11
 
Research-Fundamentals-and-Topic-Development.pdf
ayesha butalia
 
Make GenAI investments go further with the Dell AI Factory
Principled Technologies
 
OFFOFFBOX™ – A New Era for African Film | Startup Presentation
ambaicciwalkerbrian
 
Economic Impact of Data Centres to the Malaysian Economy
flintglobalapac
 
introduction to computer hardware and sofeware
chauhanshraddha2007
 
AI Unleashed - Shaping the Future -Starting Today - AIOUG Yatra 2025 - For Co...
Sandesh Rao
 
cloud computing vai.pptx for the project
vaibhavdobariyal79
 
Simple and concise overview about Quantum computing..pptx
mughal641
 
RAT Builders - How to Catch Them All [DeepSec 2024]
malmoeb
 
MASTERDECK GRAPHSUMMIT SYDNEY (Public).pdf
Neo4j
 
AI Code Generation Risks (Ramkumar Dilli, CIO, Myridius)
Priyanka Aash
 
OA presentation.pptx OA presentation.pptx
pateldhruv002338
 
NewMind AI Weekly Chronicles – July’25, Week III
NewMind AI
 
Ad

TDD - Seriously, try it! - Bucarest Tech Week

  • 1. TDD: seriously, try it ! 😃 May ‘23
  • 3. • Review the basics around TDD • Understand the benefits of building code designed by tests VS building the tests after we write our code • (I hope) learn some tips • See a { live coding } example • … so do not run away, please! 😉 Why this session?
  • 4. Nacho Cougil • Principal Software Engineer at Dynatrace • TDD & clean code fan • Started to write in Java before Y2K • Founder of the Barcelona Java Users Group ( BarcelonaJUG ) & co- founder of the Java and JVM Barcelona Conference ( JBCNConf  DevBcn ) • Java Champion • Father, former mountain marathon runner 😅 Who am I?
  • 5. Raise your hand at any moment! Ask questions at any time, please!
  • 7. • Where it cames from? • Advantages & disadvantages • Process • Good habits • Example • Final Recap Agenda
  • 8. • Where it cames from? • Advantages & disadvantages • Process • Good habits • Example • Final Recap Agenda
  • 9. Kent Beck “rediscovered” TDD when writing first testing framework SUnit in 1994. TDD became part of eXtreme Programming (XP) book in 2000. Developed XP during his work at Chrysler The book Test-Driven Development by Example was published in 2002 A bit of history
  • 10. Mockist (London) • Entry point: acceptance test • Design from top down • Main focus on the interactions between the components of our solution • Focus on messages we will use with our classes. Here is where mock objects appear Classical (Chicago) • Described by Kent Beck • More emphasis on “discovering” the internals of our code mainly by refactoring • The structure of our classes and modules emerges as we evolve our code (ex: removing duplication, encapsulation, etc) • Focused on changes in an state or return values from functions Two TDD schools
  • 12. ... follows a simple process ⚙️ that helps you to design & develop your software in a straightforward and incremental ♻️ way (  ⚡ feedback loop). … you can find defects earlier ⏱ (when running or designing your tests) … you can easily detect regression errors 🔴 … your software is going to be easier to refactor because of a safety net ✅ Imagine…
  • 13. ... your software guides you how a consumer will use your component ⏛ … tests are living documentation (really 🖖 !!) … the software you write it is likely to have less bugs 🐛 … your development costs 💰 will be lower References: - Test-driven development as a defect-reduction practice (IEEE) Imagine…
  • 14. It is not so easy to start with 😅 (not many good places to help, majority of people are not using it daily) Has a high learning curve 😟 (depends directly on the complexity of your code + your design and engineering capabilities) Can be a large investment 💸 in a team (depending on the experience of the members + requires time ⏱ & effort 🙇♀️🙇♂️) Yes, TDD has some disadvantages
  • 15. It is really easy to forget 😓 about it It provokes resistance ☹️ (in some people ⚔️) Can be corrupted and lead to the syndrome of reaching the highest possible level of coverage 🙈 It is extremely difficult 😤 to master at it Yes, TDD has some disadvantages
  • 17. You learned how to write code time ago,… …and now you’d may learn a different way of writing software. Like “learning to ride a very different bike”,... but being So, … how it is?
  • 18. To be used in your design & coding process , for building better modularized and tested software And, what does it seek?
  • 19. • Where it cames from? • Advantages & disadvantages • Process • Good habits • Example • Final Recap Agenda
  • 21. • Where it cames from? • Advantages & disadvantages • Process • Good habits • Example • Final Recap Agenda
  • 22. Start little by little: katas, POCs, personal projects, ... Practice... • ... and keep practicing • ... and keep on • ... until you finally internalise it ⏱♀️😉 Practice with somebody else ( pair-programming ) Keep learning: online content, books, ... Learn and practice
  • 23. An Extreme Programming (XP) Practice in which 2 developers participate in one development effort at one workstation. One, the driver, writes code while the other, the navigator or observer, reviews the code as it is typed in. The 2 engineers switch roles frequently. While reviewing, the observer also considers the "strategic" direction of the work, coming up with ideas for Pair programming
  • 24. Martin Fowler (concepts) • https://www.martinfowler.com/bliki/TestDouble.html • https://martinfowler.com/articles/mocksArentStubs.h tml • https://martinfowler.com/articles/practical-test- pyramid.html Dave Farley (CI, TDD, etc) • https://www.youtube.com/ContinuousDelivery/ James Shore (TDD series) • https://www.youtube.com/jdlshore/ Jason Gorman (Java Code Craft) • https://www.youtube.com/parlezuml/ Recommended content
  • 25. Before you write production code, check 👀 that your test is failing 🔴 Each test has only 1 reason to fail Write the assertion first Technical good habits
  • 26. Tests naming convention Describe the expected behaviour, not the internals. Our tests should describe behaviour in plain english Ending the class name with Should will “force “ you to start describing an action for every test you may create
  • 27. Our tests methods will only describe behavior. Therefore, we will have a better understanding on what this class does Our tests will be more clear If some tests fails, we can have a look and see easily which case is failing We don’t need to get into details on any test to understand what are they pursuing The result will be focused on the business
  • 28. Test creation order 1) Name the class 2) Name the method 3) Define what you want to check 4) Trigger the code 5) Do the setup
  • 29. • Where it cames from? • Advantages & disadvantages • Process • Good habits • Example • Final Recap Agenda
  • 30. Warning – Live coding!
  • 31. Requirements: • Build a service that returns a list of films that are associated with a particular genre • By default, the result must be ordered according to the average rating given to the films by the users • A film should contain at least an id, title a year when it was published, one or more tags and one or more genres Example: recommendationService.filmsByGenre(”science- fiction”) https://github.com/icougil/FilmRecommendationService We have just started working in a startup that sells and rents out films over the Internet Our product managers have told us that they want to add new functionalities by building a service that allows them to recommend films to the users of the current platform. Kata: Film Recommendation Service
  • 32. • Where it cames from? • Advantages & disadvantages • Process • Good habits • Example • Final Recap Agenda
  • 33. • TDD helps you to design & develop your code in a simple and effective way (iterative, faster & better modular design) 👌 • It is difficult to adapt to its mechanics and sometimes is difficult 😅 to maintain its practice... • It worth a try 😉 (your software will have less bugs 🐛 & it will be easier to maintain 💰) • There are some tips 💡 ( could make your life easier ) • Try to pair, it will help 😃 you ( a lot ) • Practice, practice & practice ⏱ again Final Recap

Editor's Notes

  • #10: “Take the input tape, manually type in the output tape you expect, then program until the actual output tape matches the expected output.”
  • #13: VS create tests after…
  • #14: IEEE = ai triple i   IEEE: case study at IBM 2003 – 40% fewer defects when using TDD The art of fearless: increased effort and/or quality effect (from IEEE) -- good collection of articles and empirical studies on TDD both in private companies and in the academic world
  • #16: - Forget : especially if you are not in an environment / team that does not encourage its use or you cannot experiment with it comfortably - Having a high level of coverage is an indirect consequence of using/applying TDD
  • #21: Specify what you want to code to do Create just enough code to satisfy the desired behaviour (just make it work!) Clean your code and test / remove duplication / make it better
  • #24: -> min 10-11' This back-and-forth between test and code, driver and navigator, can offer better/richer feedback when building a system. This is intended to free the driver to focus all of their attention on the "tactical" aspects of completing the current task, using the observer as a safety net and guide.
  • #25: GOOST >> TDD learn, understand & apply TDD by example – basic intro, idealised situation… The art of unit testing – easy to read TDD a practical guide – some examples with GUI & real examples
  • #28: -> min 8 !!!
  • #29: Nacho -
  • #31: -> min 12'
  • #32: Genre = spoke “yonra” -> min 13'