SlideShare a Scribd company logo
TDD
Test Driven Development
Software Quality
• A definition in Steve McConnell's Code
Complete divides software into two pieces:
internal and external quality
characteristics.
• External quality characteristics are those
parts of a product that face its users,
where internal quality characteristics are
those that do not.
ISO/IEC 9126-1:2001(E)
Internal and External Features
•
•
•
•
•
•

Functionality
Reliability
Usability
Efficiency
Maintainability
Portability
ISO/IEC 9126-1:2001(E)
Quality-in-use features
•
•
•
•

Effectiveness
Productivity
Safety
Customer Satisfaction

• It is the user’s view of the quality of the
software product when it is used in a specific
environment and a specific Context-Of-Use.
TDD in summary
A. First we write a test.
B. Then we write code to make the test
pass.
C. Then we find the best possible design for
what we have - refactoring (Relying on the
existing tests to keep us from breaking things
while we are at it)
TDD goals
•

TDD is a technique for improving the
software’s internal quality

Well-written code
• Good design
• A balanced division of responsibilities
• Without duplication (clones)
• Smooth evolution
• Maintainability
ATDD goals
• Acceptance TDD helps us keep our
product’s external quality on track by
giving it the correct features and
functionality.
• the system should meet what the
customer actually need.
Both sides of quality
************************************

• Then, we need to learn how to build the
thing right - TDD.
• Also, we need to learn how to build the
right thing - ATDD.
TDD and ATDD
Meeting needs with acceptance
TDD
Traditional way of
adding features
• Requirements – doc
• Implementation – sc
• Test design – tc
• Developer Test – rep.
• Acceptance test

Acceptance TDD
• Requirements – doc
• Test design – tc
• Implementation – sc
• Developer Test – rep
• Acceptance test
What is the difference?
• With ATTD we translate a requirement into a set
of executable tests and then do the
implementation against the tests rather than
against the developer’s interpretation of a verbal
requirement.
• Rather than working off of arbitrary requirements
documents, in acceptance TDD we strive for
close collaboration and defining explicit,
unambiguous tests that tell us exactly what it
means when we say a feature is “done.”
Close relationship
• TDD and acceptance TDD often go hand
in hand. On the system level, we run our
development process with acceptance
TDD; and inside the implementation step
of each feature; we employ TDD.
Benefits?
• No more long debugging sessions
– Each test case corresponds to a feature of the
system
– Test cases support refactoring

• More time for other stuff
– Reduce time of debugging sessions
– Reduce time fixing bugs
– Reduce rework due to misunderstandings
regarding requirements
Benefits?
• Feeling confident with my work
– The better your test suite is, the better the
quality of your code and the more confident
you can be about any changes you make. The
more confident you are about the changes
you make, the more changes you dare to
make. The more changes you make, the
better your internal quality becomes, the
easier it is to write tests for your code, and so
on. (a virtuous cycle)
Build it right: TDD
• TDD is a development and design
technique that helps us build up the
system incrementally, knowing that we’re
never far from a working baseline.
• A test is our way of taking that next small
step.
Build it right: TDD
• Test-Code-Refactor
Build it right: TDD
• Test-Code-Refactor

The term refactoring is used to better
communicate that the last step is about
transforming the current design toward a
better design.
First we write a test
• We are writing a test. Also, we are making
design decisions:
– We are designing the API—the interface for
accessing the functionality we’re testing.
– The test case that we design will be the first
“client” of the functionality that we are going
to implement.
– One of the fundamental lessons in designing
an interface is that we only evaluate a design
effectively and objectively when we try to use
it.
Then we write just enough code
• The second step of the TDD cycle is to
write just enough code to make the test
pass.
• You’re satisfying an explicit, unambiguous
requirement expressed by a test.
And then we refactor
• Take a step back, look at our design, and
figure out ways of making it better.
• It is all about keeping your software in
good health—at all times.
• Refactoring is about applying refactorings
on code in a controlled manner
Keeping code healthy with
refactoring
• “a disciplined technique for restructuring
an existing body of code, altering its
internal structure without changing its
external behavior” : Martin Fowler
Refactoring Example
• Replace Inheritance with Delegation
– Motivation: A subclass uses only part of a
superclass interface or does not want to
inherit data
– Summary: Create a field for the superclass,
adjust methods to delegate to the
superclass, and remove the subclassing.
Refactoring Example
Refactoring Example
•

Mechanics
1. Create a field in the subclass that refers to
an instance of the superclass. Initialize it to
this.
2. Change each method defined in the
subclass to use the delegate field.
3. Compile and test after changing each
method.
Refactoring Example
•

Mechanics
4. Remove the subclass declaration and
replace the delegate assignment with an
assignment to a new object.
5. For each superclass method used by a
client, add a simple delegating method.
6. Compile and test.
Refactorings alter internal
structure
• Many of the refactorings are very low-level
– rename method
– Rename variable

• Low-level refactorings are the fundamental
building blocks to achieving larger
refactorings
– Moving the responsibilities around in your
code
– Introducing or removing an inheritance
hierarchy
Refactorings preserve behavior
• whatever transformations you apply to the
existing code, those transformations
should only affect the code’s design and
structure—not its externally visible
behavior or functionality.
– Renaming a method that is part of a class’s
public interface - ???
– how can we be sure that our refactorings
haven’t changed the code’s external
behavior? - ???
The big picture of developing
software in small increments.
The big picture of developing
software in small increments.
Acceptance TDD
• Acceptance tests are indicators of the
completion of a requirement or feature.
• When all acceptance tests for a
requirement or feature are passing, you
know you’re done.
Advantages of ATDD
• Close collaboration
– Seeing concrete, working software
– Building trust and confidence
– Customer in control
– Evolving a shared language

• Tests as a shared language
– Tests as specification
– Specification by example
Tools for test-driven
development
• Unit-testing with xUnit
– Provides supporting code for writing unit tests,
running them, and reporting the test results.

• Test frameworks for acceptance TDD
– Tools for enhancing collaboration in software
development. (Fit and Fitnesse)
– They enable customers, testers, and programmers to
learn what their software should do, and to
automatically compare that to what it actually does
do.
– They compare customers' expectations to actual
results.
FitNesse
• FitNesse is a lightweight, open-source
framework that makes it easy for software
teams to:
– Collaboratively define Acceptance tests -- web
pages containing simple tables of inputs and
expected outputs.
– Run those tests and see the results

• http://fitnesse.org/
Tools for test-driven
development
• Continuous integration and builds
– On the one hand, running the full test suite
often takes too long (several minutes—even
hours) for a developer to wait for the green
bar.
– On the other hand, most of the tests are
unlikely to have been affected by the
developer’s recent changes
Tools for test-driven
development
• Continuous integration and builds
Build servers galore
• Cruise-Control (http://cruisecontrol.sf.net)
• AntHill (http://www.urbancode.com)
• Continuum (
http://maven.apache.org/continuum)
• Bamboo (
http://www.atlassian.com/software/bamboo/
)
Continuous Integration references
• More about the philosophy behind
continuous integration and the associated
tools:
– http://www.martinfowler.com/articles/continuo
usIntegration.html.
– http://www.jamesshore.com.
Tools for test-driven
development
• Code coverage

– In short, code coverage is a measurement of
how thoroughly our automated tests exercise
the production code and its source code
statements, branches, and expressions.
– http://www.javaranch.com/newsletter/200401/Intro
Tools for test-driven
development
• Code coverage
– This can be especially helpful when a team is
just starting to write unit tests or adopting
TDD, because it helps pointing out areas of
the code base that are not getting tested as
thoroughly as other parts of the code.
Tools for test-driven
development
• Code coverage tools for java
– Cenqua Clover (
http://www.cenqua.com/clover)
Cobertura (http://cobertura.sf.net)
EMMA (http://emma.sf.net)

More Related Content

PPTX
(Agile) engineering best practices - What every project manager should know
PDF
Istqb Agile-tester Extension
PDF
Agile engineering practices – a short overview
PDF
Agile Testing
PPT
Agile testing
PPTX
Testing Best Practices
DOC
Complete testing@uma
PPTX
Agile Qa Framework Jacky Wu
(Agile) engineering best practices - What every project manager should know
Istqb Agile-tester Extension
Agile engineering practices – a short overview
Agile Testing
Agile testing
Testing Best Practices
Complete testing@uma
Agile Qa Framework Jacky Wu

What's hot (20)

DOCX
Tdd blog
PPTX
Testing strategy for agile projects updated
PDF
John Fodeh Adventures in Test Automation - EuroSTAR 2013
PPT
Introduction to Software Review
PPTX
Manual Testing Material by Durgasoft
PPT
Automated Testing vs Manual Testing
PPT
Scrum Testing Methodology
PPTX
Software testing
PDF
Software Engineering Overview
PPT
Software testing basic concepts
PPT
SW Testing Fundamentals
PPTX
Agile QA process
PDF
The non intuitive impact of software defects on development efforts time esti...
PDF
Interview questions and answers for quality assurance
PDF
Behavior Driven Development (BDD)
PPTX
Extreme programming
DOC
Manual testing good notes
PDF
Test Life Cycle - Presentation - Important concepts covered
PPT
AJRA Test Strategy Discussion
DOC
Manual Testing.
Tdd blog
Testing strategy for agile projects updated
John Fodeh Adventures in Test Automation - EuroSTAR 2013
Introduction to Software Review
Manual Testing Material by Durgasoft
Automated Testing vs Manual Testing
Scrum Testing Methodology
Software testing
Software Engineering Overview
Software testing basic concepts
SW Testing Fundamentals
Agile QA process
The non intuitive impact of software defects on development efforts time esti...
Interview questions and answers for quality assurance
Behavior Driven Development (BDD)
Extreme programming
Manual testing good notes
Test Life Cycle - Presentation - Important concepts covered
AJRA Test Strategy Discussion
Manual Testing.
Ad

Viewers also liked (20)

PPTX
An Introduction To Software Development - Test Driven Development, Part 1
PDF
London SDET Meetup (April 2016) - M&S Digital Test Journey
PPTX
Software architecture...Yes, on tests!
DOCX
Pratap Kumar Nallamothu SDET2
PPTX
Testing without Testers
PDF
Appium & Robot Framework
PPTX
Agile Software Development and Test Driven Development: Agil8's Dave Putman 3...
PDF
JavaOne 2016 :: Bringing Robot online with Robo4j Framework
PPTX
Belajar Postman test runner
PDF
Rf meetup 16.3.2017 tampere share
PDF
Robot framework
PDF
The Engines of Software Development: Testing and Test Driven Development
PPTX
Robot Framework
ODP
The automated tests inside Openshift
PDF
ATDD Using Robot Framework
PDF
JavaCro'14 - Test Automation using RobotFramework Libraries – Stojan Peshov
PDF
Functional Tests Automation with Robot Framework
ZIP
Robot Framework Introduction
PPTX
Fit for Work – key questions from employers
PPTX
ATAGTR2017 Expanding test horizons with Robot Framework
An Introduction To Software Development - Test Driven Development, Part 1
London SDET Meetup (April 2016) - M&S Digital Test Journey
Software architecture...Yes, on tests!
Pratap Kumar Nallamothu SDET2
Testing without Testers
Appium & Robot Framework
Agile Software Development and Test Driven Development: Agil8's Dave Putman 3...
JavaOne 2016 :: Bringing Robot online with Robo4j Framework
Belajar Postman test runner
Rf meetup 16.3.2017 tampere share
Robot framework
The Engines of Software Development: Testing and Test Driven Development
Robot Framework
The automated tests inside Openshift
ATDD Using Robot Framework
JavaCro'14 - Test Automation using RobotFramework Libraries – Stojan Peshov
Functional Tests Automation with Robot Framework
Robot Framework Introduction
Fit for Work – key questions from employers
ATAGTR2017 Expanding test horizons with Robot Framework
Ad

Similar to Test Driven Development (20)

PPTX
{10.0} Test Driven Development.pptx
PPTX
Ian Cooper webinar for DDD Iran: Kent beck style tdd seven years after
PPTX
Test driven development v1.0
PPTX
TDD - Seriously, try it! (updated '22)
PDF
PMI-ACP Lesson 06 Quality
PDF
Test Driven Development Powered by LEGO
PPTX
Test-Driven Development
PPTX
Prashant technical practices-tdd for xebia event
PPT
Test-Driven Development
PPTX
TDD - Seriously, try it! - Bucarest Tech Week
PDF
Test driven development : software process
PDF
Test Driven Development Methodology and Philosophy
PPTX
TDD - Agile
PDF
Unit Test using Test Driven Development Approach to Support Reusability
PPTX
TDD - Seriously, try it! - Trjjmiasto JUG (17th May '23)
PPTX
TDD - Seriously, try it! - Trójmiasto Java User Group (17th May '23)
PPTX
Test driven development
PPTX
Test driven development
PPTX
Test driven development
PPTX
Test driven development
{10.0} Test Driven Development.pptx
Ian Cooper webinar for DDD Iran: Kent beck style tdd seven years after
Test driven development v1.0
TDD - Seriously, try it! (updated '22)
PMI-ACP Lesson 06 Quality
Test Driven Development Powered by LEGO
Test-Driven Development
Prashant technical practices-tdd for xebia event
Test-Driven Development
TDD - Seriously, try it! - Bucarest Tech Week
Test driven development : software process
Test Driven Development Methodology and Philosophy
TDD - Agile
Unit Test using Test Driven Development Approach to Support Reusability
TDD - Seriously, try it! - Trjjmiasto JUG (17th May '23)
TDD - Seriously, try it! - Trójmiasto Java User Group (17th May '23)
Test driven development
Test driven development
Test driven development
Test driven development

Recently uploaded (20)

PDF
Diabetes mellitus diagnosis method based random forest with bat algorithm
PDF
Advanced Soft Computing BINUS July 2025.pdf
PPTX
breach-and-attack-simulation-cybersecurity-india-chennai-defenderrabbit-2025....
PDF
Review of recent advances in non-invasive hemoglobin estimation
PDF
Advanced IT Governance
PPTX
20250228 LYD VKU AI Blended-Learning.pptx
PDF
Reach Out and Touch Someone: Haptics and Empathic Computing
PPT
Teaching material agriculture food technology
PPTX
Effective Security Operations Center (SOC) A Modern, Strategic, and Threat-In...
PDF
Peak of Data & AI Encore- AI for Metadata and Smarter Workflows
PDF
Blue Purple Modern Animated Computer Science Presentation.pdf.pdf
PDF
Optimiser vos workloads AI/ML sur Amazon EC2 et AWS Graviton
PDF
KodekX | Application Modernization Development
PDF
GDG Cloud Iasi [PUBLIC] Florian Blaga - Unveiling the Evolution of Cybersecur...
PDF
Mobile App Security Testing_ A Comprehensive Guide.pdf
PDF
[발표본] 너의 과제는 클라우드에 있어_KTDS_김동현_20250524.pdf
PDF
Unlocking AI with Model Context Protocol (MCP)
DOCX
The AUB Centre for AI in Media Proposal.docx
PDF
CIFDAQ's Market Insight: SEC Turns Pro Crypto
PDF
Modernizing your data center with Dell and AMD
Diabetes mellitus diagnosis method based random forest with bat algorithm
Advanced Soft Computing BINUS July 2025.pdf
breach-and-attack-simulation-cybersecurity-india-chennai-defenderrabbit-2025....
Review of recent advances in non-invasive hemoglobin estimation
Advanced IT Governance
20250228 LYD VKU AI Blended-Learning.pptx
Reach Out and Touch Someone: Haptics and Empathic Computing
Teaching material agriculture food technology
Effective Security Operations Center (SOC) A Modern, Strategic, and Threat-In...
Peak of Data & AI Encore- AI for Metadata and Smarter Workflows
Blue Purple Modern Animated Computer Science Presentation.pdf.pdf
Optimiser vos workloads AI/ML sur Amazon EC2 et AWS Graviton
KodekX | Application Modernization Development
GDG Cloud Iasi [PUBLIC] Florian Blaga - Unveiling the Evolution of Cybersecur...
Mobile App Security Testing_ A Comprehensive Guide.pdf
[발표본] 너의 과제는 클라우드에 있어_KTDS_김동현_20250524.pdf
Unlocking AI with Model Context Protocol (MCP)
The AUB Centre for AI in Media Proposal.docx
CIFDAQ's Market Insight: SEC Turns Pro Crypto
Modernizing your data center with Dell and AMD

Test Driven Development

  • 2. Software Quality • A definition in Steve McConnell's Code Complete divides software into two pieces: internal and external quality characteristics. • External quality characteristics are those parts of a product that face its users, where internal quality characteristics are those that do not.
  • 3. ISO/IEC 9126-1:2001(E) Internal and External Features • • • • • • Functionality Reliability Usability Efficiency Maintainability Portability
  • 4. ISO/IEC 9126-1:2001(E) Quality-in-use features • • • • Effectiveness Productivity Safety Customer Satisfaction • It is the user’s view of the quality of the software product when it is used in a specific environment and a specific Context-Of-Use.
  • 5. TDD in summary A. First we write a test. B. Then we write code to make the test pass. C. Then we find the best possible design for what we have - refactoring (Relying on the existing tests to keep us from breaking things while we are at it)
  • 6. TDD goals • TDD is a technique for improving the software’s internal quality Well-written code • Good design • A balanced division of responsibilities • Without duplication (clones) • Smooth evolution • Maintainability
  • 7. ATDD goals • Acceptance TDD helps us keep our product’s external quality on track by giving it the correct features and functionality. • the system should meet what the customer actually need.
  • 8. Both sides of quality ************************************ • Then, we need to learn how to build the thing right - TDD. • Also, we need to learn how to build the right thing - ATDD.
  • 10. Meeting needs with acceptance TDD Traditional way of adding features • Requirements – doc • Implementation – sc • Test design – tc • Developer Test – rep. • Acceptance test Acceptance TDD • Requirements – doc • Test design – tc • Implementation – sc • Developer Test – rep • Acceptance test
  • 11. What is the difference? • With ATTD we translate a requirement into a set of executable tests and then do the implementation against the tests rather than against the developer’s interpretation of a verbal requirement. • Rather than working off of arbitrary requirements documents, in acceptance TDD we strive for close collaboration and defining explicit, unambiguous tests that tell us exactly what it means when we say a feature is “done.”
  • 12. Close relationship • TDD and acceptance TDD often go hand in hand. On the system level, we run our development process with acceptance TDD; and inside the implementation step of each feature; we employ TDD.
  • 13. Benefits? • No more long debugging sessions – Each test case corresponds to a feature of the system – Test cases support refactoring • More time for other stuff – Reduce time of debugging sessions – Reduce time fixing bugs – Reduce rework due to misunderstandings regarding requirements
  • 14. Benefits? • Feeling confident with my work – The better your test suite is, the better the quality of your code and the more confident you can be about any changes you make. The more confident you are about the changes you make, the more changes you dare to make. The more changes you make, the better your internal quality becomes, the easier it is to write tests for your code, and so on. (a virtuous cycle)
  • 15. Build it right: TDD • TDD is a development and design technique that helps us build up the system incrementally, knowing that we’re never far from a working baseline. • A test is our way of taking that next small step.
  • 16. Build it right: TDD • Test-Code-Refactor
  • 17. Build it right: TDD • Test-Code-Refactor The term refactoring is used to better communicate that the last step is about transforming the current design toward a better design.
  • 18. First we write a test • We are writing a test. Also, we are making design decisions: – We are designing the API—the interface for accessing the functionality we’re testing. – The test case that we design will be the first “client” of the functionality that we are going to implement. – One of the fundamental lessons in designing an interface is that we only evaluate a design effectively and objectively when we try to use it.
  • 19. Then we write just enough code • The second step of the TDD cycle is to write just enough code to make the test pass. • You’re satisfying an explicit, unambiguous requirement expressed by a test.
  • 20. And then we refactor • Take a step back, look at our design, and figure out ways of making it better. • It is all about keeping your software in good health—at all times. • Refactoring is about applying refactorings on code in a controlled manner
  • 21. Keeping code healthy with refactoring • “a disciplined technique for restructuring an existing body of code, altering its internal structure without changing its external behavior” : Martin Fowler
  • 22. Refactoring Example • Replace Inheritance with Delegation – Motivation: A subclass uses only part of a superclass interface or does not want to inherit data – Summary: Create a field for the superclass, adjust methods to delegate to the superclass, and remove the subclassing.
  • 24. Refactoring Example • Mechanics 1. Create a field in the subclass that refers to an instance of the superclass. Initialize it to this. 2. Change each method defined in the subclass to use the delegate field. 3. Compile and test after changing each method.
  • 25. Refactoring Example • Mechanics 4. Remove the subclass declaration and replace the delegate assignment with an assignment to a new object. 5. For each superclass method used by a client, add a simple delegating method. 6. Compile and test.
  • 26. Refactorings alter internal structure • Many of the refactorings are very low-level – rename method – Rename variable • Low-level refactorings are the fundamental building blocks to achieving larger refactorings – Moving the responsibilities around in your code – Introducing or removing an inheritance hierarchy
  • 27. Refactorings preserve behavior • whatever transformations you apply to the existing code, those transformations should only affect the code’s design and structure—not its externally visible behavior or functionality. – Renaming a method that is part of a class’s public interface - ??? – how can we be sure that our refactorings haven’t changed the code’s external behavior? - ???
  • 28. The big picture of developing software in small increments.
  • 29. The big picture of developing software in small increments.
  • 30. Acceptance TDD • Acceptance tests are indicators of the completion of a requirement or feature. • When all acceptance tests for a requirement or feature are passing, you know you’re done.
  • 31. Advantages of ATDD • Close collaboration – Seeing concrete, working software – Building trust and confidence – Customer in control – Evolving a shared language • Tests as a shared language – Tests as specification – Specification by example
  • 32. Tools for test-driven development • Unit-testing with xUnit – Provides supporting code for writing unit tests, running them, and reporting the test results. • Test frameworks for acceptance TDD – Tools for enhancing collaboration in software development. (Fit and Fitnesse) – They enable customers, testers, and programmers to learn what their software should do, and to automatically compare that to what it actually does do. – They compare customers' expectations to actual results.
  • 33. FitNesse • FitNesse is a lightweight, open-source framework that makes it easy for software teams to: – Collaboratively define Acceptance tests -- web pages containing simple tables of inputs and expected outputs. – Run those tests and see the results • http://fitnesse.org/
  • 34. Tools for test-driven development • Continuous integration and builds – On the one hand, running the full test suite often takes too long (several minutes—even hours) for a developer to wait for the green bar. – On the other hand, most of the tests are unlikely to have been affected by the developer’s recent changes
  • 35. Tools for test-driven development • Continuous integration and builds
  • 36. Build servers galore • Cruise-Control (http://cruisecontrol.sf.net) • AntHill (http://www.urbancode.com) • Continuum ( http://maven.apache.org/continuum) • Bamboo ( http://www.atlassian.com/software/bamboo/ )
  • 37. Continuous Integration references • More about the philosophy behind continuous integration and the associated tools: – http://www.martinfowler.com/articles/continuo usIntegration.html. – http://www.jamesshore.com.
  • 38. Tools for test-driven development • Code coverage – In short, code coverage is a measurement of how thoroughly our automated tests exercise the production code and its source code statements, branches, and expressions. – http://www.javaranch.com/newsletter/200401/Intro
  • 39. Tools for test-driven development • Code coverage – This can be especially helpful when a team is just starting to write unit tests or adopting TDD, because it helps pointing out areas of the code base that are not getting tested as thoroughly as other parts of the code.
  • 40. Tools for test-driven development • Code coverage tools for java – Cenqua Clover ( http://www.cenqua.com/clover) Cobertura (http://cobertura.sf.net) EMMA (http://emma.sf.net)