SlideShare ist ein Scribd-Unternehmen logo
1 von 21
TEST-DRIVEN DEVELOPMENT
1
Test-Driven Development (TDD)
• Test-driven development (TDD) is a software
development process that relies on the repetition of a very
short development cycle:
• first the developer writes an (initially failing) automated test case
that defines a desired improvement or new function,
• then produces the minimum amount of code to pass that test,
• and finally refactors the new code to acceptable standards.
• Kent Beck, who is credited with having developed or
'rediscovered' the technique, stated in 2003 that TDD
encourages simple designs and inspires confidence.
• Test-driven development is related to the test-first
programming concepts of extreme programming, begun in
1999.
2
TDD Cycle
1. Add a test
2. Run all tests to see if new one fails
3. Write some code
4. Run test
5. Refactor code
6. Repeat
3
1. Add a test
• In TDD, each new feature begins with writing a test. This
test must inevitably fail because it is written before the
feature has been implemented. To write a test, the
developer must clearly understand the feature's
specification and requirements.
• The developer can accomplish this through use cases
and user stories to cover the requirements and exception
conditions, and can write the test in whatever testing
framework is appropriate to the software environment.
This could also be a modification of an existing test.
• This is a differentiating feature of test-driven development
versus writing unit tests after the code is written: it makes
the developer focus on the requirements before writing
the code, a subtle but important difference.
4
2. Run all tests to see if new one fails
• This validates that the test harness is working correctly
and that the new test does not mistakenly pass without
requiring any new code.
• This step also tests the test itself, in the negative: it rules
out the possibility that the new test always passes, and
therefore is worthless. The new test should also fail for the
expected reason. This increases confidence (though does
not guarantee) that it is testing the right thing, and passes
only in intended cases.
5
3. Write some code
• The next step is to write some code that causes the test to
pass. The new code written at this stage is not perfect,
and may, for example, pass the test in an inelegant way.
That is acceptable because later steps improve and hone
it.
• At this point, the only purpose of the written code is to
pass the test; no further (and therefore untested)
functionality should be predicted and 'allowed for' at any
stage.
6
4. Run tests
• If all test cases now pass, the programmer can be
confident that the code meets all the tested requirements.
This is a good point from which to begin the final step of
the cycle.
7
5. Refactor code
• Now the code should be cleaned up as necessary.
Remove any duplication you can find. Make sure that
variable and method names represent their current use.
Clarify any constructs that might be misinterpreted. Use
Kent Beck's four rules of simple design to guide you, as
well as anything else you know about writing clean code.
• By re-running the test cases, the developer can be
confident that code refactoring is not damaging any
existing functionality.
• The concept of removing duplication is an important
aspect of any software design.
8
6. Repeat
• Starting with another new test, the cycle is then repeated
to push forward the functionality.
• The size of the steps should always be small. If new code
does not rapidly satisfy a new test, or other tests fail
unexpectedly, the programmer should undo or revert in
preference to excessive debugging.
9
Development style
• There are various aspects to using test-driven
development, for example the principles of "keep it simple
stupid" (KISS) and "You aren't gonna need it" (YAGNI). By
focusing on writing only the code necessary to pass tests,
designs can often be cleaner and clearer than is achieved
by other methods.
• To achieve some advanced design concept, such as a
design pattern, tests are written that generate that design.
The code may remain simpler than the target pattern, but
still pass all required tests. This can be unsettling at first
but it allows the developer to focus only on what is
important.
10
Development style
• Write the tests first. The tests should be written before the
functionality that is being tested. This has been claimed to have
many benefits. It helps ensure that the application is written for
testability, as the developers must consider how to test the
application from the outset, rather than worrying about it later. It
also ensures that tests for every feature get written.
• Additionally, writing the tests first drives a deeper and earlier
understanding of the product requirements, ensures the
effectiveness of the test code, and maintains a continual focus
on the quality of the product. When writing feature-first code,
there is a tendency by developers and the development
organisations to push the developer on to the next feature,
neglecting testing entirely. The first test might not even compile,
at first, because all of the classes and methods it requires may
not yet exist. Nevertheless, that first test functions as an
executable specification.
11
Benefits
• A 2005 study found that using TDD meant writing more tests and, in
turn, programmers who wrote more tests tended to be more
productive. Hypotheses relating to code quality and a more direct
correlation between TDD and productivity were inconclusive.
• Programmers using pure TDD on new ("greenfield") projects reported
they only rarely felt the need to invoke a debugger. Used in
conjunction with a version control system, when tests fail
unexpectedly, reverting the code to the last version that passed all
tests may often be more productive than debugging.
• Test-driven development offers more than just simple validation of
correctness, but can also drive the design of a program. By focusing
on the test cases first, one must imagine how the functionality is used
by clients. So, the programmer is concerned with the interface before
the implementation. This benefit is complementary to Design by
Contract as it approaches code through test cases rather than
through mathematical assertions or preconceptions.
12
Benefits
• Test-driven development offers the ability to take small steps when
required. It allows a programmer to focus on the task at hand as the
first goal is to make the test pass. Exceptional cases and error
handling are not considered initially, and tests to create these
extraneous circumstances are implemented separately. Test-driven
development ensures in this way that all written code is covered by at
least one test. This gives the programming team, and subsequent
users, a greater level of confidence in the code.
• While it is true that more code is required with TDD than without TDD
because of the unit test code, the total code implementation time
could be shorter. Large numbers of tests help to limit the number of
defects in the code. The early and frequent nature of the testing helps
to catch defects early in the development cycle, preventing them from
becoming endemic and expensive problems. Eliminating defects early
in the process usually avoids lengthy and tedious debugging later in
the project.
13
Benefits
• TDD can lead to more modularized, flexible, and extensible
code. This effect often comes about because the methodology
requires that the developers think of the software in terms of
small units that can be written and tested independently and
integrated together later. This leads to smaller, more cohesive
classes, looser coupling, and cleaner interfaces.
• Because no more code is written than necessary to pass a
failing test case, automated tests tend to cover every code
path. For example, for a TDD developer to add an else branch
to an existing if statement, the developer would first have to
write a failing test case that motivates the branch. As a result,
the automated tests resulting from TDD tend to be very
thorough: they detect any unexpected changes in the code's
behaviour. This detects problems that can arise where a
change later in the development cycle unexpectedly alters
other functionality.
14
Shortcomings
• Test-driven development reliance on unit tests does not
perform sufficient testing in situations where full functional tests
are required to determine success or failure.
• Examples of these are user interfaces, programs that work with
databases, and some that depend on specific network
configurations. TDD encourages developers to put the
minimum amount of code into such modules and to maximize
the logic that is in testable library code, using fakes and mocks
to represent the outside world.
• Management support is essential. Without the entire
organization believing that test-driven development is going to
improve the product, management may feel that time spent
writing tests is wasted.
15
Shortcomings
• Unit tests created in a test-driven development
environment are typically created by the developer who is
writing the code being tested. The tests may therefore
share the same blind spots with the code:
• If, for example, a developer does not realize that certain input
parameters must be checked, most likely neither the test nor the
code will verify these input parameters.
• If the developer misinterprets the requirements specification for the
module being developed, both the tests and the code will be wrong,
as giving a false sense of correctness.
• The high number of passing unit tests may bring a false
sense of security, resulting in fewer additional software
testing activities, such as integration testing and
compliance testing.
16
Shortcomings
• Tests become part of the maintenance overhead of a project.
Badly written tests are themselves prone to failure, are
expensive to maintain. There is a risk that tests that regularly
generate false failures will be ignored, so that when a real
failure occurs, it may not be detected. It is possible to write
tests for low and easy maintenance, and this should be a goal
during the code refactoring phase described above.
• Overtesting can consume time both to write the excessive
tests, and later, to rewrite the tests when requirements change.
Also, more-flexible modules (with limited tests) might accept
new requirements without the need for changing the tests. For
those reasons, testing for only extreme conditions, or a small
sample of data, can be easier to adjust than a set of highly
detailed tests.
17
Shortcomings
• The level of coverage and testing detail achieved during
repeated TDD cycles cannot easily be re-created at a
later date. Therefore these original, or early, tests become
increasingly precious as time goes by. The tactic is to fix it
early. Also, if a poor architecture, a poor design, or a poor
testing strategy leads to a late change that makes dozens
of existing tests fail, then it is important that they are
individually fixed. Merely deleting, disabling or rashly
altering them can lead to undetectable holes in the test
coverage.
18
Designing for testability
• Complex systems require an architecture that meets a range of
requirements. A key subset of these requirements includes
support for the complete and effective testing of the system.
Effective modular design yields components that share traits
essential for effective TDD.
• High Cohesion ensures each unit provides a set of related capabilities
and makes the tests of those capabilities easier to maintain.
• Low Coupling allows each unit to be effectively tested in isolation.
• Published Interfaces restrict Component access and serve as contact
points for tests, facilitating test creation and ensuring the highest
fidelity between test and production unit configuration.
19
Designing for testability
• A key technique for building effective modular architecture
is Scenario Modeling where a set of sequence charts is
constructed, each one focusing on a single system-level
execution scenario.
• The Scenario Model provides an excellent vehicle for
creating the strategy of interactions between components
in response to a specific stimulus.
• Each of these Scenario Models serves as a rich set of
requirements for the services or functions that a
component must provide, and it also dictates the order
that these components and services interact together.
Scenario modeling can greatly facilitate the construction
of TDD tests for a complex system
20
Managing tests for large systems
• In a larger system the impact of poor component quality is
magnified by the complexity of interactions.
• This magnification makes the benefits of TDD accrue even
faster in the context of larger projects. However, the complexity
of the total population of tests can become a problem in itself,
eroding potential gains. It sounds simple, but a key initial step
is to recognise that test code is also important software and
should be produced and maintained with the same rigor as the
production code.
• Creating and managing the architecture of test software within
a complex system is just as important as the core product
architecture.
21

Weitere ähnliche Inhalte

Was ist angesagt?

Software testing and quality assurance
Software testing and quality assuranceSoftware testing and quality assurance
Software testing and quality assuranceBenjamin Baumann
 
Agile Software Development with XP
Agile Software Development with XPAgile Software Development with XP
Agile Software Development with XPVashira Ravipanich
 
Introduction To Extreme Programming
Introduction To Extreme ProgrammingIntroduction To Extreme Programming
Introduction To Extreme ProgrammingJoe Drumgoole
 
A Not-So-Serious Introduction to Test Driven Development (TDD)
A Not-So-Serious Introduction to Test Driven Development (TDD) A Not-So-Serious Introduction to Test Driven Development (TDD)
A Not-So-Serious Introduction to Test Driven Development (TDD) CodeOps Technologies LLP
 
Unit 1 basic concepts of testing & quality
Unit 1   basic concepts of testing & qualityUnit 1   basic concepts of testing & quality
Unit 1 basic concepts of testing & qualityravikhimani1984
 
Test Driven Development (TDD)
Test Driven Development (TDD)Test Driven Development (TDD)
Test Driven Development (TDD)David Ehringer
 
John Fodeh Adventures in Test Automation - EuroSTAR 2013
John Fodeh Adventures in Test Automation - EuroSTAR 2013John Fodeh Adventures in Test Automation - EuroSTAR 2013
John Fodeh Adventures in Test Automation - EuroSTAR 2013TEST Huddle
 
Test Driven Development
Test Driven DevelopmentTest Driven Development
Test Driven Developmentguestc8093a6
 
Types of Software Testing: Definition, Objectives and Advantages
Types of Software Testing: Definition, Objectives and AdvantagesTypes of Software Testing: Definition, Objectives and Advantages
Types of Software Testing: Definition, Objectives and AdvantagesSimform
 

Was ist angesagt? (15)

Software testing and quality assurance
Software testing and quality assuranceSoftware testing and quality assurance
Software testing and quality assurance
 
Test Driven Development
Test Driven DevelopmentTest Driven Development
Test Driven Development
 
Agile Software Development with XP
Agile Software Development with XPAgile Software Development with XP
Agile Software Development with XP
 
Introduction To Extreme Programming
Introduction To Extreme ProgrammingIntroduction To Extreme Programming
Introduction To Extreme Programming
 
Ian Cooper webinar for DDD Iran: Kent beck style tdd seven years after
Ian Cooper webinar for DDD Iran: Kent beck style tdd   seven years afterIan Cooper webinar for DDD Iran: Kent beck style tdd   seven years after
Ian Cooper webinar for DDD Iran: Kent beck style tdd seven years after
 
A Not-So-Serious Introduction to Test Driven Development (TDD)
A Not-So-Serious Introduction to Test Driven Development (TDD) A Not-So-Serious Introduction to Test Driven Development (TDD)
A Not-So-Serious Introduction to Test Driven Development (TDD)
 
Test Driven Development
Test Driven DevelopmentTest Driven Development
Test Driven Development
 
Manual Testing.
Manual Testing.Manual Testing.
Manual Testing.
 
Unit 1 basic concepts of testing & quality
Unit 1   basic concepts of testing & qualityUnit 1   basic concepts of testing & quality
Unit 1 basic concepts of testing & quality
 
Test Driven Development (TDD)
Test Driven Development (TDD)Test Driven Development (TDD)
Test Driven Development (TDD)
 
John Fodeh Adventures in Test Automation - EuroSTAR 2013
John Fodeh Adventures in Test Automation - EuroSTAR 2013John Fodeh Adventures in Test Automation - EuroSTAR 2013
John Fodeh Adventures in Test Automation - EuroSTAR 2013
 
TestDrivenDeveloment
TestDrivenDevelomentTestDrivenDeveloment
TestDrivenDeveloment
 
Test Driven Development
Test Driven DevelopmentTest Driven Development
Test Driven Development
 
Software Testing or Quality Assurance
Software Testing or Quality AssuranceSoftware Testing or Quality Assurance
Software Testing or Quality Assurance
 
Types of Software Testing: Definition, Objectives and Advantages
Types of Software Testing: Definition, Objectives and AdvantagesTypes of Software Testing: Definition, Objectives and Advantages
Types of Software Testing: Definition, Objectives and Advantages
 

Andere mochten auch

Nlp naive bayes
Nlp naive bayesNlp naive bayes
Nlp naive bayesFraboni Ec
 
Data visualization
Data visualizationData visualization
Data visualizationFraboni Ec
 
Google mock for dummies
Google mock for dummiesGoogle mock for dummies
Google mock for dummiesFraboni Ec
 
Exception handling
Exception handlingException handling
Exception handlingFraboni Ec
 
Xml and webdata
Xml and webdataXml and webdata
Xml and webdataFraboni Ec
 
Behaviour driven development
Behaviour driven developmentBehaviour driven development
Behaviour driven developmentFraboni Ec
 
Decision analysis
Decision analysisDecision analysis
Decision analysisFraboni Ec
 
Text categorization as a graph
Text categorization as a graphText categorization as a graph
Text categorization as a graphFraboni Ec
 
Text classificationmethods
Text classificationmethodsText classificationmethods
Text classificationmethodsFraboni Ec
 
Database introduction
Database introductionDatabase introduction
Database introductionFraboni Ec
 
Sql database object
Sql database objectSql database object
Sql database objectFraboni Ec
 
Memory caching
Memory cachingMemory caching
Memory cachingFraboni Ec
 

Andere mochten auch (20)

Prolog resume
Prolog resumeProlog resume
Prolog resume
 
Html5
Html5Html5
Html5
 
Nlp naive bayes
Nlp naive bayesNlp naive bayes
Nlp naive bayes
 
Data visualization
Data visualizationData visualization
Data visualization
 
Google mock for dummies
Google mock for dummiesGoogle mock for dummies
Google mock for dummies
 
Network
NetworkNetwork
Network
 
Exception handling
Exception handlingException handling
Exception handling
 
Reflection
ReflectionReflection
Reflection
 
Exception
ExceptionException
Exception
 
Xml and webdata
Xml and webdataXml and webdata
Xml and webdata
 
Behaviour driven development
Behaviour driven developmentBehaviour driven development
Behaviour driven development
 
Decision analysis
Decision analysisDecision analysis
Decision analysis
 
Text categorization as a graph
Text categorization as a graphText categorization as a graph
Text categorization as a graph
 
Text classificationmethods
Text classificationmethodsText classificationmethods
Text classificationmethods
 
Database introduction
Database introductionDatabase introduction
Database introduction
 
Polymorphism
PolymorphismPolymorphism
Polymorphism
 
Sql database object
Sql database objectSql database object
Sql database object
 
Basic dns-mod
Basic dns-modBasic dns-mod
Basic dns-mod
 
Cryptography
CryptographyCryptography
Cryptography
 
Memory caching
Memory cachingMemory caching
Memory caching
 

Ähnlich wie Test driven development

TDD and Unit Testing in Golang
TDD and Unit Testing in GolangTDD and Unit Testing in Golang
TDD and Unit Testing in GolangSofian Hadiwijaya
 
Test-Driven Development Reference Card
Test-Driven Development Reference CardTest-Driven Development Reference Card
Test-Driven Development Reference CardSeapine Software
 
Test Driven Development
Test Driven DevelopmentTest Driven Development
Test Driven Developmentbhochhi
 
Test-Driven Development
Test-Driven DevelopmentTest-Driven Development
Test-Driven DevelopmentMeilan Ou
 
Week 14 Unit Testing.pptx
Week 14  Unit Testing.pptxWeek 14  Unit Testing.pptx
Week 14 Unit Testing.pptxmianshafa
 
Topic production code
Topic production codeTopic production code
Topic production codeKavi Kumar
 
Software Development Standard Operating Procedure
Software Development Standard Operating Procedure Software Development Standard Operating Procedure
Software Development Standard Operating Procedure rupeshchanchal
 
Test Driven Development
Test Driven DevelopmentTest Driven Development
Test Driven Developmentnikhil sreeni
 
The Essentials Of Test Driven Development
The Essentials Of Test Driven Development The Essentials Of Test Driven Development
The Essentials Of Test Driven Development Rock Interview
 
Test-Driven-Development.pptx
Test-Driven-Development.pptxTest-Driven-Development.pptx
Test-Driven-Development.pptxdheeraj438799
 
{10.0} Test Driven Development.pptx
{10.0} Test Driven Development.pptx{10.0} Test Driven Development.pptx
{10.0} Test Driven Development.pptxAmalEldhose2
 
Testing, a pragmatic approach
Testing, a pragmatic approachTesting, a pragmatic approach
Testing, a pragmatic approachEnrico Da Ros
 
Android tdd
Android tddAndroid tdd
Android tddNhan Cao
 
Test Driven Development - Overview and Adoption
Test Driven Development - Overview and AdoptionTest Driven Development - Overview and Adoption
Test Driven Development - Overview and AdoptionPyxis Technologies
 

Ähnlich wie Test driven development (20)

TDD and Unit Testing in Golang
TDD and Unit Testing in GolangTDD and Unit Testing in Golang
TDD and Unit Testing in Golang
 
Tdd
TddTdd
Tdd
 
Test-Driven Development Reference Card
Test-Driven Development Reference CardTest-Driven Development Reference Card
Test-Driven Development Reference Card
 
Test Driven Development
Test Driven DevelopmentTest Driven Development
Test Driven Development
 
Lecture 21
Lecture 21Lecture 21
Lecture 21
 
Agile Testing - What is it?
Agile Testing - What is it?Agile Testing - What is it?
Agile Testing - What is it?
 
Agile Testing
Agile Testing  Agile Testing
Agile Testing
 
Test-Driven Development
Test-Driven DevelopmentTest-Driven Development
Test-Driven Development
 
Test driven development(tdd)
Test driven development(tdd)Test driven development(tdd)
Test driven development(tdd)
 
Week 14 Unit Testing.pptx
Week 14  Unit Testing.pptxWeek 14  Unit Testing.pptx
Week 14 Unit Testing.pptx
 
Topic production code
Topic production codeTopic production code
Topic production code
 
Software Development Standard Operating Procedure
Software Development Standard Operating Procedure Software Development Standard Operating Procedure
Software Development Standard Operating Procedure
 
Test Driven Development
Test Driven DevelopmentTest Driven Development
Test Driven Development
 
The Essentials Of Test Driven Development
The Essentials Of Test Driven Development The Essentials Of Test Driven Development
The Essentials Of Test Driven Development
 
Test-Driven-Development.pptx
Test-Driven-Development.pptxTest-Driven-Development.pptx
Test-Driven-Development.pptx
 
{10.0} Test Driven Development.pptx
{10.0} Test Driven Development.pptx{10.0} Test Driven Development.pptx
{10.0} Test Driven Development.pptx
 
Methodology: IT test
Methodology: IT testMethodology: IT test
Methodology: IT test
 
Testing, a pragmatic approach
Testing, a pragmatic approachTesting, a pragmatic approach
Testing, a pragmatic approach
 
Android tdd
Android tddAndroid tdd
Android tdd
 
Test Driven Development - Overview and Adoption
Test Driven Development - Overview and AdoptionTest Driven Development - Overview and Adoption
Test Driven Development - Overview and Adoption
 

Mehr von Fraboni Ec

Hardware multithreading
Hardware multithreadingHardware multithreading
Hardware multithreadingFraboni Ec
 
What is simultaneous multithreading
What is simultaneous multithreadingWhat is simultaneous multithreading
What is simultaneous multithreadingFraboni Ec
 
Directory based cache coherence
Directory based cache coherenceDirectory based cache coherence
Directory based cache coherenceFraboni Ec
 
Business analytics and data mining
Business analytics and data miningBusiness analytics and data mining
Business analytics and data miningFraboni Ec
 
Big picture of data mining
Big picture of data miningBig picture of data mining
Big picture of data miningFraboni Ec
 
Data mining and knowledge discovery
Data mining and knowledge discoveryData mining and knowledge discovery
Data mining and knowledge discoveryFraboni Ec
 
How analysis services caching works
How analysis services caching worksHow analysis services caching works
How analysis services caching worksFraboni Ec
 
Hardware managed cache
Hardware managed cacheHardware managed cache
Hardware managed cacheFraboni Ec
 
Data structures and algorithms
Data structures and algorithmsData structures and algorithms
Data structures and algorithmsFraboni Ec
 
Cobol, lisp, and python
Cobol, lisp, and pythonCobol, lisp, and python
Cobol, lisp, and pythonFraboni Ec
 
Abstract data types
Abstract data typesAbstract data types
Abstract data typesFraboni Ec
 
Optimizing shared caches in chip multiprocessors
Optimizing shared caches in chip multiprocessorsOptimizing shared caches in chip multiprocessors
Optimizing shared caches in chip multiprocessorsFraboni Ec
 
Abstraction file
Abstraction fileAbstraction file
Abstraction fileFraboni Ec
 
Object oriented analysis
Object oriented analysisObject oriented analysis
Object oriented analysisFraboni Ec
 
Abstract class
Abstract classAbstract class
Abstract classFraboni Ec
 
Concurrency with java
Concurrency with javaConcurrency with java
Concurrency with javaFraboni Ec
 

Mehr von Fraboni Ec (20)

Hardware multithreading
Hardware multithreadingHardware multithreading
Hardware multithreading
 
Lisp
LispLisp
Lisp
 
What is simultaneous multithreading
What is simultaneous multithreadingWhat is simultaneous multithreading
What is simultaneous multithreading
 
Directory based cache coherence
Directory based cache coherenceDirectory based cache coherence
Directory based cache coherence
 
Business analytics and data mining
Business analytics and data miningBusiness analytics and data mining
Business analytics and data mining
 
Big picture of data mining
Big picture of data miningBig picture of data mining
Big picture of data mining
 
Data mining and knowledge discovery
Data mining and knowledge discoveryData mining and knowledge discovery
Data mining and knowledge discovery
 
Cache recap
Cache recapCache recap
Cache recap
 
How analysis services caching works
How analysis services caching worksHow analysis services caching works
How analysis services caching works
 
Hardware managed cache
Hardware managed cacheHardware managed cache
Hardware managed cache
 
Data structures and algorithms
Data structures and algorithmsData structures and algorithms
Data structures and algorithms
 
Cobol, lisp, and python
Cobol, lisp, and pythonCobol, lisp, and python
Cobol, lisp, and python
 
Abstract data types
Abstract data typesAbstract data types
Abstract data types
 
Optimizing shared caches in chip multiprocessors
Optimizing shared caches in chip multiprocessorsOptimizing shared caches in chip multiprocessors
Optimizing shared caches in chip multiprocessors
 
Abstraction file
Abstraction fileAbstraction file
Abstraction file
 
Object model
Object modelObject model
Object model
 
Object oriented analysis
Object oriented analysisObject oriented analysis
Object oriented analysis
 
Abstract class
Abstract classAbstract class
Abstract class
 
Concurrency with java
Concurrency with javaConcurrency with java
Concurrency with java
 
Inheritance
InheritanceInheritance
Inheritance
 

Kürzlich hochgeladen

"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii SoldatenkoFwdays
 
What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024Stephanie Beckett
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brandgvaughan
 
From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .Alan Dix
 
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage CostLeverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage CostZilliz
 
CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):comworks
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Commit University
 
Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Mattias Andersson
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024Lorenzo Miniero
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr BaganFwdays
 
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Mark Simos
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
H2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo Day
H2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo DayH2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo Day
H2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo DaySri Ambati
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubKalema Edgar
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLScyllaDB
 
How to write a Business Continuity Plan
How to write a Business Continuity PlanHow to write a Business Continuity Plan
How to write a Business Continuity PlanDatabarracks
 
The Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsThe Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsPixlogix Infotech
 
Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Manik S Magar
 
Streamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupStreamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupFlorian Wilhelm
 

Kürzlich hochgeladen (20)

"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko
 
What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brand
 
From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .
 
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage CostLeverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
 
CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!
 
Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan
 
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
H2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo Day
H2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo DayH2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo Day
H2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo Day
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding Club
 
DMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special EditionDMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special Edition
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQL
 
How to write a Business Continuity Plan
How to write a Business Continuity PlanHow to write a Business Continuity Plan
How to write a Business Continuity Plan
 
The Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsThe Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and Cons
 
Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!
 
Streamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupStreamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project Setup
 

Test driven development

  • 2. Test-Driven Development (TDD) • Test-driven development (TDD) is a software development process that relies on the repetition of a very short development cycle: • first the developer writes an (initially failing) automated test case that defines a desired improvement or new function, • then produces the minimum amount of code to pass that test, • and finally refactors the new code to acceptable standards. • Kent Beck, who is credited with having developed or 'rediscovered' the technique, stated in 2003 that TDD encourages simple designs and inspires confidence. • Test-driven development is related to the test-first programming concepts of extreme programming, begun in 1999. 2
  • 3. TDD Cycle 1. Add a test 2. Run all tests to see if new one fails 3. Write some code 4. Run test 5. Refactor code 6. Repeat 3
  • 4. 1. Add a test • In TDD, each new feature begins with writing a test. This test must inevitably fail because it is written before the feature has been implemented. To write a test, the developer must clearly understand the feature's specification and requirements. • The developer can accomplish this through use cases and user stories to cover the requirements and exception conditions, and can write the test in whatever testing framework is appropriate to the software environment. This could also be a modification of an existing test. • This is a differentiating feature of test-driven development versus writing unit tests after the code is written: it makes the developer focus on the requirements before writing the code, a subtle but important difference. 4
  • 5. 2. Run all tests to see if new one fails • This validates that the test harness is working correctly and that the new test does not mistakenly pass without requiring any new code. • This step also tests the test itself, in the negative: it rules out the possibility that the new test always passes, and therefore is worthless. The new test should also fail for the expected reason. This increases confidence (though does not guarantee) that it is testing the right thing, and passes only in intended cases. 5
  • 6. 3. Write some code • The next step is to write some code that causes the test to pass. The new code written at this stage is not perfect, and may, for example, pass the test in an inelegant way. That is acceptable because later steps improve and hone it. • At this point, the only purpose of the written code is to pass the test; no further (and therefore untested) functionality should be predicted and 'allowed for' at any stage. 6
  • 7. 4. Run tests • If all test cases now pass, the programmer can be confident that the code meets all the tested requirements. This is a good point from which to begin the final step of the cycle. 7
  • 8. 5. Refactor code • Now the code should be cleaned up as necessary. Remove any duplication you can find. Make sure that variable and method names represent their current use. Clarify any constructs that might be misinterpreted. Use Kent Beck's four rules of simple design to guide you, as well as anything else you know about writing clean code. • By re-running the test cases, the developer can be confident that code refactoring is not damaging any existing functionality. • The concept of removing duplication is an important aspect of any software design. 8
  • 9. 6. Repeat • Starting with another new test, the cycle is then repeated to push forward the functionality. • The size of the steps should always be small. If new code does not rapidly satisfy a new test, or other tests fail unexpectedly, the programmer should undo or revert in preference to excessive debugging. 9
  • 10. Development style • There are various aspects to using test-driven development, for example the principles of "keep it simple stupid" (KISS) and "You aren't gonna need it" (YAGNI). By focusing on writing only the code necessary to pass tests, designs can often be cleaner and clearer than is achieved by other methods. • To achieve some advanced design concept, such as a design pattern, tests are written that generate that design. The code may remain simpler than the target pattern, but still pass all required tests. This can be unsettling at first but it allows the developer to focus only on what is important. 10
  • 11. Development style • Write the tests first. The tests should be written before the functionality that is being tested. This has been claimed to have many benefits. It helps ensure that the application is written for testability, as the developers must consider how to test the application from the outset, rather than worrying about it later. It also ensures that tests for every feature get written. • Additionally, writing the tests first drives a deeper and earlier understanding of the product requirements, ensures the effectiveness of the test code, and maintains a continual focus on the quality of the product. When writing feature-first code, there is a tendency by developers and the development organisations to push the developer on to the next feature, neglecting testing entirely. The first test might not even compile, at first, because all of the classes and methods it requires may not yet exist. Nevertheless, that first test functions as an executable specification. 11
  • 12. Benefits • A 2005 study found that using TDD meant writing more tests and, in turn, programmers who wrote more tests tended to be more productive. Hypotheses relating to code quality and a more direct correlation between TDD and productivity were inconclusive. • Programmers using pure TDD on new ("greenfield") projects reported they only rarely felt the need to invoke a debugger. Used in conjunction with a version control system, when tests fail unexpectedly, reverting the code to the last version that passed all tests may often be more productive than debugging. • Test-driven development offers more than just simple validation of correctness, but can also drive the design of a program. By focusing on the test cases first, one must imagine how the functionality is used by clients. So, the programmer is concerned with the interface before the implementation. This benefit is complementary to Design by Contract as it approaches code through test cases rather than through mathematical assertions or preconceptions. 12
  • 13. Benefits • Test-driven development offers the ability to take small steps when required. It allows a programmer to focus on the task at hand as the first goal is to make the test pass. Exceptional cases and error handling are not considered initially, and tests to create these extraneous circumstances are implemented separately. Test-driven development ensures in this way that all written code is covered by at least one test. This gives the programming team, and subsequent users, a greater level of confidence in the code. • While it is true that more code is required with TDD than without TDD because of the unit test code, the total code implementation time could be shorter. Large numbers of tests help to limit the number of defects in the code. The early and frequent nature of the testing helps to catch defects early in the development cycle, preventing them from becoming endemic and expensive problems. Eliminating defects early in the process usually avoids lengthy and tedious debugging later in the project. 13
  • 14. Benefits • TDD can lead to more modularized, flexible, and extensible code. This effect often comes about because the methodology requires that the developers think of the software in terms of small units that can be written and tested independently and integrated together later. This leads to smaller, more cohesive classes, looser coupling, and cleaner interfaces. • Because no more code is written than necessary to pass a failing test case, automated tests tend to cover every code path. For example, for a TDD developer to add an else branch to an existing if statement, the developer would first have to write a failing test case that motivates the branch. As a result, the automated tests resulting from TDD tend to be very thorough: they detect any unexpected changes in the code's behaviour. This detects problems that can arise where a change later in the development cycle unexpectedly alters other functionality. 14
  • 15. Shortcomings • Test-driven development reliance on unit tests does not perform sufficient testing in situations where full functional tests are required to determine success or failure. • Examples of these are user interfaces, programs that work with databases, and some that depend on specific network configurations. TDD encourages developers to put the minimum amount of code into such modules and to maximize the logic that is in testable library code, using fakes and mocks to represent the outside world. • Management support is essential. Without the entire organization believing that test-driven development is going to improve the product, management may feel that time spent writing tests is wasted. 15
  • 16. Shortcomings • Unit tests created in a test-driven development environment are typically created by the developer who is writing the code being tested. The tests may therefore share the same blind spots with the code: • If, for example, a developer does not realize that certain input parameters must be checked, most likely neither the test nor the code will verify these input parameters. • If the developer misinterprets the requirements specification for the module being developed, both the tests and the code will be wrong, as giving a false sense of correctness. • The high number of passing unit tests may bring a false sense of security, resulting in fewer additional software testing activities, such as integration testing and compliance testing. 16
  • 17. Shortcomings • Tests become part of the maintenance overhead of a project. Badly written tests are themselves prone to failure, are expensive to maintain. There is a risk that tests that regularly generate false failures will be ignored, so that when a real failure occurs, it may not be detected. It is possible to write tests for low and easy maintenance, and this should be a goal during the code refactoring phase described above. • Overtesting can consume time both to write the excessive tests, and later, to rewrite the tests when requirements change. Also, more-flexible modules (with limited tests) might accept new requirements without the need for changing the tests. For those reasons, testing for only extreme conditions, or a small sample of data, can be easier to adjust than a set of highly detailed tests. 17
  • 18. Shortcomings • The level of coverage and testing detail achieved during repeated TDD cycles cannot easily be re-created at a later date. Therefore these original, or early, tests become increasingly precious as time goes by. The tactic is to fix it early. Also, if a poor architecture, a poor design, or a poor testing strategy leads to a late change that makes dozens of existing tests fail, then it is important that they are individually fixed. Merely deleting, disabling or rashly altering them can lead to undetectable holes in the test coverage. 18
  • 19. Designing for testability • Complex systems require an architecture that meets a range of requirements. A key subset of these requirements includes support for the complete and effective testing of the system. Effective modular design yields components that share traits essential for effective TDD. • High Cohesion ensures each unit provides a set of related capabilities and makes the tests of those capabilities easier to maintain. • Low Coupling allows each unit to be effectively tested in isolation. • Published Interfaces restrict Component access and serve as contact points for tests, facilitating test creation and ensuring the highest fidelity between test and production unit configuration. 19
  • 20. Designing for testability • A key technique for building effective modular architecture is Scenario Modeling where a set of sequence charts is constructed, each one focusing on a single system-level execution scenario. • The Scenario Model provides an excellent vehicle for creating the strategy of interactions between components in response to a specific stimulus. • Each of these Scenario Models serves as a rich set of requirements for the services or functions that a component must provide, and it also dictates the order that these components and services interact together. Scenario modeling can greatly facilitate the construction of TDD tests for a complex system 20
  • 21. Managing tests for large systems • In a larger system the impact of poor component quality is magnified by the complexity of interactions. • This magnification makes the benefits of TDD accrue even faster in the context of larger projects. However, the complexity of the total population of tests can become a problem in itself, eroding potential gains. It sounds simple, but a key initial step is to recognise that test code is also important software and should be produced and maintained with the same rigor as the production code. • Creating and managing the architecture of test software within a complex system is just as important as the core product architecture. 21