SlideShare ist ein Scribd-Unternehmen logo
1 von 63
©ArnonAxelrod,E4DSolutionsLtd.
UNIT TESTING, TDD
& ATDD
Arnon Axelrod, E4D Solutions
©ArnonAxelrod,E4DSolutionsLtd.©ArnonAxelrod,E4DSolutionsLtd.
About me
©ArnonAxelrod,E4DSolutionsLtd.©ArnonAxelrod,E4DSolutionsLtd.
About you
• Position: Dev, Test, Product,
Management, other?
• TDD/Unit testing experience
©ArnonAxelrod,E4DSolutionsLtd.©ArnonAxelrod,E4DSolutionsLtd.
Why Learn TDD Today?
Adoption (% of
martket)
time
Today
ATDD
TDD
Agile
Object-
Oriented
©ArnonAxelrod,E4DSolutionsLtd.©ArnonAxelrod,E4DSolutionsLtd.
TDD?!
Photo by: Stuart Miles
©ArnonAxelrod,E4DSolutionsLtd.©ArnonAxelrod,E4DSolutionsLtd.
Learning TDD is like learning to ride a bicycle
©ArnonAxelrod,E4DSolutionsLtd.
Quality
Testing
Unit Tests
TDD
ATDD
©ArnonAxelrod,E4DSolutionsLtd.
Quality throughout the
project lifecycle
What is quality?
Why it is important?
Quality
©ArnonAxelrod,E4DSolutionsLtd.©ArnonAxelrod,E4DSolutionsLtd.
Quality
No bugs
Stability
Testing
Design
Happy, Loyal customers
User eXperience
Clean code
Maintainability
Customer feedback
©ArnonAxelrod,E4DSolutionsLtd.©ArnonAxelrod,E4DSolutionsLtd.
The Productivity Misconception
Productivity
Features
Happy customers
MaintainabilityPressure
Legend:
Positive
relationship
Negative
relationship
Increased
Decreased
Productivity
Features
Happy customers
Stability
Clean code
Testing
©ArnonAxelrod,E4DSolutionsLtd.©ArnonAxelrod,E4DSolutionsLtd.
The Productivity Misconception
Productivity
Features
Happy customers
MaintainabilityPressure
Legend:
Positive
relationship
Negative
relationship
Increased
Decreased
Stability
Clean code
Testing
©ArnonAxelrod,E4DSolutionsLtd.
Quality
Testing
Unit Tests
TDD
ATDD
©ArnonAxelrod,E4DSolutionsLtd.
Testing
Testing
©ArnonAxelrod,E4DSolutionsLtd.©ArnonAxelrod,E4DSolutionsLtd.
Types of Tests
Exploratory
Planned
Manual
Automated
White box Black box
©ArnonAxelrod,E4DSolutionsLtd.©ArnonAxelrod,E4DSolutionsLtd.
Types of Tests
End-to-End
UI
View Model
Client Logic
Server Proxy
Service Layer
Business Logic
DAL
ORM
DB
©ArnonAxelrod,E4DSolutionsLtd.©ArnonAxelrod,E4DSolutionsLtd.
Types of Tests
UI
View Model
Client Logic
Server Proxy
Service Layer
Business Logic
DAL
ORM
DB
Usability, UX
©ArnonAxelrod,E4DSolutionsLtd.©ArnonAxelrod,E4DSolutionsLtd.
Types of Tests
UI
View Model
Client Logic
Server Proxy
Service Layer
Business Logic
DAL
ORM
DB
Integration
©ArnonAxelrod,E4DSolutionsLtd.©ArnonAxelrod,E4DSolutionsLtd.
Types of Tests
UI
View Model
Client Logic
Server Proxy
Service Layer
Business Logic
DAL
ORM
DB
Functional
Mock
Mock
Mock
©ArnonAxelrod,E4DSolutionsLtd.©ArnonAxelrod,E4DSolutionsLtd.
Types of Tests
UI
View Model
Client Logic
Server Proxy
Service Layer
DAL
ORM
DB
Unit tests
Business Logic
©ArnonAxelrod,E4DSolutionsLtd.©ArnonAxelrod,E4DSolutionsLtd.
Types of tests
• Other:
– Performance
– Load (scalability)
– Install (deployment)
– Monkey testing
©ArnonAxelrod,E4DSolutionsLtd.
Quality
Testing
Unit Tests
TDD
ATDD
©ArnonAxelrod,E4DSolutionsLtd.
Unit tests basics
Unit
Tests
©ArnonAxelrod,E4DSolutionsLtd.©ArnonAxelrod,E4DSolutionsLtd.
What’s a unit test?
• What’s a unit?
– Smallest testable functionality
– any testable functionality (BDD)
• Automatic
• Gray box
©ArnonAxelrod,E4DSolutionsLtd.©ArnonAxelrod,E4DSolutionsLtd.
Benefits of Unit Tests
• Fast
• Easy to write and maintain
• Code coverage
• When fail, provide insight into the problem
©ArnonAxelrod,E4DSolutionsLtd.©ArnonAxelrod,E4DSolutionsLtd.
Unit tests should:
• Be Isolated
– Re-runnable
• No side effects
• Cleanup
– Environment agnostic
– Order doesn’t matter
• Verify functionality, not implementation
• Be straight-forward
– No conditionals, loops etc
Photo by: tongdang
©ArnonAxelrod,E4DSolutionsLtd.©ArnonAxelrod,E4DSolutionsLtd.
Unit tests should:
• Read like a story
• Verify only one thing
• Have meaningful names
• Be fast!
©ArnonAxelrod,E4DSolutionsLtd.©ArnonAxelrod,E4DSolutionsLtd.
Inventory class
+int GetAvailablePieces (Item item)
+void Reduce(Item item, int count)
- DbConnectionProvider
Doubles
(mocks)
Order class
+Items
+bool CheckAvailability (IInventory inventory)
+void Supply (IInventory inventory)
©ArnonAxelrod,E4DSolutionsLtd.©ArnonAxelrod,E4DSolutionsLtd.
Doubles
(mocks)
Order class
+Items
+bool CheckAvailability (IInventory inventory)
+void Supply (IInventory inventory)
IInventory interface
+int GetAvailablePieces (Item item)
+void Reduce(Item item, int count)
InventoryDouble
+int GetAvailablePieces (Item item)
+void Reduce(Item item, int count)
Inventory class
+int GetAvailablePieces (Item item)
+void Reduce(Item item, int count)
- DbConnectionProvider
©ArnonAxelrod,E4DSolutionsLtd.©ArnonAxelrod,E4DSolutionsLtd.
Doubles...
Double
Fake
Dummy MockStub
Detour
©ArnonAxelrod,E4DSolutionsLtd.©ArnonAxelrod,E4DSolutionsLtd.
Unit test structure
Arrange Act Assert
Given When Then
©ArnonAxelrod,E4DSolutionsLtd.©ArnonAxelrod,E4DSolutionsLtd.
Test suite
Suite Initialize
Test Initialize
Test Method 1
Test Cleanup
Suite Cleanup
Test Method 2 Test Method 3
©ArnonAxelrod,E4DSolutionsLtd.
Quality
Testing
Unit Tests
TDD
ATDD
©ArnonAxelrod,E4DSolutionsLtd.
TDD
TDD
©ArnonAxelrod,E4DSolutionsLtd.©ArnonAxelrod,E4DSolutionsLtd.
What TDD is all about?
Testing?!
Design!
©ArnonAxelrod,E4DSolutionsLtd.©ArnonAxelrod,E4DSolutionsLtd.
Why it is important to test First?
• Looking at the problem space
– vs. the solution (implementation) space
• Building decoupled code from base
• Psychological effect
• Testing the test first!
©ArnonAxelrod,E4DSolutionsLtd.©ArnonAxelrod,E4DSolutionsLtd.
Testing the Test First!
• What are the inputs?
• What are the outputs?
[TestMethod]
public void TestFibonacciFunction()
{
// arrange
...
// Act:
var result = Fibonacci(...);
// Assert:
Assert ...
}
The test we
want to test
©ArnonAxelrod,E4DSolutionsLtd.©ArnonAxelrod,E4DSolutionsLtd.
Testing the Test First!
public bool TestFibonacciFunction(Func<…> fibonacci)
{
// arrange
...
// Act:
var result = fibonacci(...);
// Assert:
return ...
}
The test we
want to test
public void TestTheTest()
{
var invalidImpl = …
var goodImpl = Fibonacci;
Assert.IsFalse(TestFibonacciFunction(invalidImpl));
Assert.IsTrue(TestFibonacciFunction(goodImpl));
}
Testing the test
©ArnonAxelrod,E4DSolutionsLtd.©ArnonAxelrod,E4DSolutionsLtd.
The way TDD works:
Write a
failing test
Write the
code to
make this
test pass
Refactor
©ArnonAxelrod,E4DSolutionsLtd.©ArnonAxelrod,E4DSolutionsLtd.
Write a
test
New
Test
Old Tests
Write
production
code
All
Tests
Refactor
All
Tests
©ArnonAxelrod,E4DSolutionsLtd.©ArnonAxelrod,E4DSolutionsLtd.
TDD and Refactoring
Photo by: Chaiwat
©ArnonAxelrod,E4DSolutionsLtd.©ArnonAxelrod,E4DSolutionsLtd.
TDD and Refactoring
public class SomeClass
{
public SomeClass()
{
//...
}
public void Foo(int someParam)
{
// use someParam...
}
}
Initial state
©ArnonAxelrod,E4DSolutionsLtd.©ArnonAxelrod,E4DSolutionsLtd.
TDD and Refactoring
public class SomeClass
{
private int _someParam;
public SomeClass(int someParam)
{
//...
_someParam = someParam;
}
public void Foo()
{
// use _someParam...
}
}
Final (desired)
state
©ArnonAxelrod,E4DSolutionsLtd.©ArnonAxelrod,E4DSolutionsLtd.
TDD and Refactoring
public class SomeClass
{
public SomeClass()
{
//...
}
public void Foo(int someParam)
{
// use someParam...
}
}
Initial state
©ArnonAxelrod,E4DSolutionsLtd.©ArnonAxelrod,E4DSolutionsLtd.
TDD and Refactoring
public class SomeClass
{
public SomeClass()
{
//...
}
private int _someParam;
public SomeClass(int someParam) : this()
{
_someParam = someParam;
}
public void Foo(int someParam)
{
//use someParam...
}
}
Step1 – Add
constructor
overload
©ArnonAxelrod,E4DSolutionsLtd.©ArnonAxelrod,E4DSolutionsLtd.
TDD and Refactoring
public class SomeClass
{
private int _someParam;
public SomeClass(int someParam)
{
//...
_someParam = someParam;
}
public void Foo(int someParam)
{
//use someParam...
}
}
Step2 –
Remove old
constructor
overload
©ArnonAxelrod,E4DSolutionsLtd.©ArnonAxelrod,E4DSolutionsLtd.
TDD and Refactoring
public class SomeClass
{
private int _someParam;
public SomeClass(int someParam)
{
//...
_someParam = someParam;
}
public void Foo(int someParam)
{
//use someParam...
}
public void Foo()
{
//use _someParam...
}
}
Step3 – Add
new overload of
Foo
©ArnonAxelrod,E4DSolutionsLtd.©ArnonAxelrod,E4DSolutionsLtd.
TDD and Refactoring
public class SomeClass
{
private int _someParam;
public SomeClass(int someParam)
{
//...
_someParam = someParam;
}
public void Foo()
{
//use _someParam...
}
}
Step4 (final) –
Remove old
overload of Foo
©ArnonAxelrod,E4DSolutionsLtd.©ArnonAxelrod,E4DSolutionsLtd.
TDD and Legacy Code
©ArnonAxelrod,E4DSolutionsLtd.
TDD and Legacy Code
Legacy code TDD (loosely-coupled)
©ArnonAxelrod,E4DSolutionsLtd.©ArnonAxelrod,E4DSolutionsLtd.
Limits of TDD
• UI
• Multi-threading
• Integration with peripheral systems, including:
– Hardware (I/O)
– Operating System
– Database
– 3rd party applications and components
©ArnonAxelrod,E4DSolutionsLtd.
Quality
Testing
Unit Tests
TDD
ATDD
©ArnonAxelrod,E4DSolutionsLtd.
ATDD
ATDD
©ArnonAxelrod,E4DSolutionsLtd.©ArnonAxelrod,E4DSolutionsLtd.
ATDD
©ArnonAxelrod,E4DSolutionsLtd.©ArnonAxelrod,E4DSolutionsLtd.
ATDD
Stands for:
Accepance-Test Driven Development
©ArnonAxelrod,E4DSolutionsLtd.©ArnonAxelrod,E4DSolutionsLtd.
ATDD
TDD is about writing the CODE RIGHT
ATDD is about writing the RIGHT CODE
©ArnonAxelrod,E4DSolutionsLtd.©ArnonAxelrod,E4DSolutionsLtd.
ATDD
ATDD is about Communication
Mainly between Product, Dev and Test
©ArnonAxelrod,E4DSolutionsLtd.©ArnonAxelrod,E4DSolutionsLtd.
ATDD is AKA:
• Agile Acceptance Testing
• Specification by Example
• Example Driven Development
• Executable Specifications
• ~= BDD (Behavior Driven Development)
©ArnonAxelrod,E4DSolutionsLtd.©ArnonAxelrod,E4DSolutionsLtd.
Problems with Waterfall
Specification
Photo by: Michal Marcol
©ArnonAxelrod,E4DSolutionsLtd.©ArnonAxelrod,E4DSolutionsLtd.
Problems with Agile Specification
©ArnonAxelrod,E4DSolutionsLtd.©ArnonAxelrod,E4DSolutionsLtd.
How ATDD works?
Specification
by Examples
Scenarios
Acceptance
tests
©ArnonAxelrod,E4DSolutionsLtd.
Quality
Testing
Unit Tests
TDD
ATDD
©ArnonAxelrod,E4DSolutionsLtd.
FitNesse Demo
ATDD
©ArnonAxelrod,E4DSolutionsLtd.©ArnonAxelrod,E4DSolutionsLtd.
Benefits of ATDD for the Business
Analyst
• Developers will actually read the specifications that you write
• You will be sure that developers and testers understand the
specifications correctly
• You will be sure that they do not skip parts of the specification
• You can track development progress easily
• You can easily identify conflicts in business rules and
requirements caused by later change requests
• You’ll save time on acceptance and smoke testing
Source: Gojko Adzic – Bridging the Communication Gap
©ArnonAxelrod,E4DSolutionsLtd.©ArnonAxelrod,E4DSolutionsLtd.
Benefits of ATDD for the Developer
• Most functional gaps and inconsistencies in
the requirements and specifications will be
flushed out before the development starts
• You will be sure that business analysts actually
understand special cases that you want to
discuss with them
Source: Gojko Adzic – Bridging the Communication Gap
©ArnonAxelrod,E4DSolutionsLtd.©ArnonAxelrod,E4DSolutionsLtd.
Benefits of ATDD for the Developer
• You will have automated tests as targets to
help you focus the development.
• It will be easier to share, hand over and take
over code
• You’ll have a safety net for refactoring, making
your code cleaner [Arnon A.]
Source: Gojko Adzic – Bridging the Communication Gap
©ArnonAxelrod,E4DSolutionsLtd.©ArnonAxelrod,E4DSolutionsLtd.
Benefits of ATDD for the Tester
• You can influence the development process and
stop developers from making the same mistakes
over and over
• You will have a much better understanding of the
domain
• You’ll delegate a lot of dull work to developers,
who will collaborate with you on automating
the verifications
Source: Gojko Adzic – Bridging the Communication Gap
©ArnonAxelrod,E4DSolutionsLtd.©ArnonAxelrod,E4DSolutionsLtd.
Benefits of ATDD for the Tester
• You can build in quality from the start by raising concerns
about possible problems before the development starts
• You’ll be able to verify business rules with a touch of a button
• You will be able to build better relationships with developers
and business people and get their respect
• You’ll spend less time doing dull work, and more time
exploring “real” bugs and testing non-functional aspects (e.g.
performance, usability, etc). [Arnon A.]
Source: Gojko Adzic – Bridging the Communication Gap
©ArnonAxelrod,E4DSolutionsLtd.
Quality
Testing
Unit Tests
TDD
ATDD
©ArnonAxelrod,E4DSolutionsLtd.
Questions?
©ArnonAxelrod,E4DSolutionsLtd.
Quality
Testing
Unit Tests
TDD
ATDD
©ArnonAxelrod,E4DSolutionsLtd.
Thank you!

Weitere ähnliche Inhalte

Was ist angesagt?

1 aleksandr gritsevski - attd example using
1   aleksandr gritsevski - attd example using1   aleksandr gritsevski - attd example using
1 aleksandr gritsevski - attd example usingIevgenii Katsan
 
10 Typical Problems in Enterprise Java Applications
10 Typical Problems in Enterprise Java Applications10 Typical Problems in Enterprise Java Applications
10 Typical Problems in Enterprise Java ApplicationsEberhard Wolff
 
TDD step patterns
TDD step patternsTDD step patterns
TDD step patternseduardomg23
 
Evolving a Clean, Pragmatic Architecture at JBCNConf 2019
Evolving a Clean, Pragmatic Architecture at JBCNConf 2019Evolving a Clean, Pragmatic Architecture at JBCNConf 2019
Evolving a Clean, Pragmatic Architecture at JBCNConf 2019Victor Rentea
 
Developer Test - Things to Know
Developer Test - Things to KnowDeveloper Test - Things to Know
Developer Test - Things to Knowvilniusjug
 
Java onguice20070426
Java onguice20070426Java onguice20070426
Java onguice20070426Ratul Ray
 
Stop (de)bugging me - ICON UK 2013
Stop (de)bugging me - ICON UK 2013Stop (de)bugging me - ICON UK 2013
Stop (de)bugging me - ICON UK 2013Mark Leusink
 
Google mock for dummies
Google mock for dummiesGoogle mock for dummies
Google mock for dummiesHarry Potter
 
Sample Chapter of Practical Unit Testing with TestNG and Mockito
Sample Chapter of Practical Unit Testing with TestNG and MockitoSample Chapter of Practical Unit Testing with TestNG and Mockito
Sample Chapter of Practical Unit Testing with TestNG and MockitoTomek Kaczanowski
 
Creating Gradle Plugins - GR8Conf US
Creating Gradle Plugins - GR8Conf USCreating Gradle Plugins - GR8Conf US
Creating Gradle Plugins - GR8Conf USAnnyce Davis
 
KraQA #29 - Component level testing of react app, using enzyme
KraQA #29 - Component level testing of react app, using enzymeKraQA #29 - Component level testing of react app, using enzyme
KraQA #29 - Component level testing of react app, using enzymekraqa
 
The Art of Unit Testing - Towards a Testable Design
The Art of Unit Testing - Towards a Testable DesignThe Art of Unit Testing - Towards a Testable Design
The Art of Unit Testing - Towards a Testable DesignVictor Rentea
 
Not your father's tests
Not your father's testsNot your father's tests
Not your father's testsSean P. Floyd
 
Junit, mockito, etc
Junit, mockito, etcJunit, mockito, etc
Junit, mockito, etcYaron Karni
 
Real world dependency injection - DPC10
Real world dependency injection - DPC10Real world dependency injection - DPC10
Real world dependency injection - DPC10Stephan Hochdörfer
 

Was ist angesagt? (20)

1 aleksandr gritsevski - attd example using
1   aleksandr gritsevski - attd example using1   aleksandr gritsevski - attd example using
1 aleksandr gritsevski - attd example using
 
10 Typical Problems in Enterprise Java Applications
10 Typical Problems in Enterprise Java Applications10 Typical Problems in Enterprise Java Applications
10 Typical Problems in Enterprise Java Applications
 
TDD step patterns
TDD step patternsTDD step patterns
TDD step patterns
 
Evolving a Clean, Pragmatic Architecture at JBCNConf 2019
Evolving a Clean, Pragmatic Architecture at JBCNConf 2019Evolving a Clean, Pragmatic Architecture at JBCNConf 2019
Evolving a Clean, Pragmatic Architecture at JBCNConf 2019
 
Developer Test - Things to Know
Developer Test - Things to KnowDeveloper Test - Things to Know
Developer Test - Things to Know
 
Unit testing with java
Unit testing with javaUnit testing with java
Unit testing with java
 
Java onguice20070426
Java onguice20070426Java onguice20070426
Java onguice20070426
 
Automating Analysis with the API
Automating Analysis with the APIAutomating Analysis with the API
Automating Analysis with the API
 
Stop (de)bugging me - ICON UK 2013
Stop (de)bugging me - ICON UK 2013Stop (de)bugging me - ICON UK 2013
Stop (de)bugging me - ICON UK 2013
 
Google mock for dummies
Google mock for dummiesGoogle mock for dummies
Google mock for dummies
 
Sample Chapter of Practical Unit Testing with TestNG and Mockito
Sample Chapter of Practical Unit Testing with TestNG and MockitoSample Chapter of Practical Unit Testing with TestNG and Mockito
Sample Chapter of Practical Unit Testing with TestNG and Mockito
 
Creating Gradle Plugins - GR8Conf US
Creating Gradle Plugins - GR8Conf USCreating Gradle Plugins - GR8Conf US
Creating Gradle Plugins - GR8Conf US
 
Test driven development
Test driven developmentTest driven development
Test driven development
 
KraQA #29 - Component level testing of react app, using enzyme
KraQA #29 - Component level testing of react app, using enzymeKraQA #29 - Component level testing of react app, using enzyme
KraQA #29 - Component level testing of react app, using enzyme
 
Agile Swift
Agile SwiftAgile Swift
Agile Swift
 
The Art of Unit Testing - Towards a Testable Design
The Art of Unit Testing - Towards a Testable DesignThe Art of Unit Testing - Towards a Testable Design
The Art of Unit Testing - Towards a Testable Design
 
Not your father's tests
Not your father's testsNot your father's tests
Not your father's tests
 
TDD Training
TDD TrainingTDD Training
TDD Training
 
Junit, mockito, etc
Junit, mockito, etcJunit, mockito, etc
Junit, mockito, etc
 
Real world dependency injection - DPC10
Real world dependency injection - DPC10Real world dependency injection - DPC10
Real world dependency injection - DPC10
 

Andere mochten auch

ATDD in Practice
ATDD in PracticeATDD in Practice
ATDD in PracticeSteven Mak
 
Overview on TDD (Test Driven Development) & ATDD (Acceptance Test Driven Deve...
Overview on TDD (Test Driven Development) & ATDD (Acceptance Test Driven Deve...Overview on TDD (Test Driven Development) & ATDD (Acceptance Test Driven Deve...
Overview on TDD (Test Driven Development) & ATDD (Acceptance Test Driven Deve...Zohirul Alam Tiemoon
 
Acceptance Test Driven Development
Acceptance Test Driven DevelopmentAcceptance Test Driven Development
Acceptance Test Driven DevelopmentMike Douglas
 
Little productivity tools every developer should use
Little productivity tools every developer should useLittle productivity tools every developer should use
Little productivity tools every developer should useDennis Doomen
 
Automated Testing and Continuous Integration for Mobile Apps: Jenkins & Cloud...
Automated Testing and Continuous Integration for Mobile Apps: Jenkins & Cloud...Automated Testing and Continuous Integration for Mobile Apps: Jenkins & Cloud...
Automated Testing and Continuous Integration for Mobile Apps: Jenkins & Cloud...SOASTA
 
xUnit Test Patterns Chapter 20
xUnit Test Patterns Chapter 20xUnit Test Patterns Chapter 20
xUnit Test Patterns Chapter 20Hiroyuki Ohnaka
 
Garbage collected teardown
Garbage collected teardownGarbage collected teardown
Garbage collected teardownHiroyuki Ohnaka
 
Roy Osherove TDD From Scratch
Roy Osherove TDD From ScratchRoy Osherove TDD From Scratch
Roy Osherove TDD From ScratchRoy Osherove
 
TDD vs. ATDD - What, Why, Which, When & Where
TDD vs. ATDD - What, Why, Which, When & WhereTDD vs. ATDD - What, Why, Which, When & Where
TDD vs. ATDD - What, Why, Which, When & WhereDaniel Davis
 
Property based Testing - generative data & executable domain rules
Property based Testing - generative data & executable domain rulesProperty based Testing - generative data & executable domain rules
Property based Testing - generative data & executable domain rulesDebasish Ghosh
 
A Second Look at Unit Testing by Roy Osherove
A Second Look at Unit Testing by Roy OsheroveA Second Look at Unit Testing by Roy Osherove
A Second Look at Unit Testing by Roy OsheroveRoy Osherove
 
NUnit Features Presentation
NUnit Features PresentationNUnit Features Presentation
NUnit Features PresentationShir Brass
 
Model-based Testing: Taking BDD/ATDD to the Next Level
Model-based Testing: Taking BDD/ATDD to the Next LevelModel-based Testing: Taking BDD/ATDD to the Next Level
Model-based Testing: Taking BDD/ATDD to the Next LevelBob Binder
 
Getting Comfortable with BDD
Getting Comfortable with BDDGetting Comfortable with BDD
Getting Comfortable with BDDAlex Sharp
 

Andere mochten auch (20)

ATDD in Practice
ATDD in PracticeATDD in Practice
ATDD in Practice
 
Overview on TDD (Test Driven Development) & ATDD (Acceptance Test Driven Deve...
Overview on TDD (Test Driven Development) & ATDD (Acceptance Test Driven Deve...Overview on TDD (Test Driven Development) & ATDD (Acceptance Test Driven Deve...
Overview on TDD (Test Driven Development) & ATDD (Acceptance Test Driven Deve...
 
Journey of atdd
Journey of atddJourney of atdd
Journey of atdd
 
Acceptance Test Driven Development
Acceptance Test Driven DevelopmentAcceptance Test Driven Development
Acceptance Test Driven Development
 
ATDD
ATDDATDD
ATDD
 
ATDD in practice
ATDD in practiceATDD in practice
ATDD in practice
 
Atdd half day_new_1_up
Atdd half day_new_1_upAtdd half day_new_1_up
Atdd half day_new_1_up
 
Little productivity tools every developer should use
Little productivity tools every developer should useLittle productivity tools every developer should use
Little productivity tools every developer should use
 
Automated Testing and Continuous Integration for Mobile Apps: Jenkins & Cloud...
Automated Testing and Continuous Integration for Mobile Apps: Jenkins & Cloud...Automated Testing and Continuous Integration for Mobile Apps: Jenkins & Cloud...
Automated Testing and Continuous Integration for Mobile Apps: Jenkins & Cloud...
 
xUnit Test Patterns Chapter 20
xUnit Test Patterns Chapter 20xUnit Test Patterns Chapter 20
xUnit Test Patterns Chapter 20
 
Garbage collected teardown
Garbage collected teardownGarbage collected teardown
Garbage collected teardown
 
Negative Testing
Negative TestingNegative Testing
Negative Testing
 
Tips for Talking to Your Children About Cancer
Tips for Talking to Your Children About CancerTips for Talking to Your Children About Cancer
Tips for Talking to Your Children About Cancer
 
Roy Osherove TDD From Scratch
Roy Osherove TDD From ScratchRoy Osherove TDD From Scratch
Roy Osherove TDD From Scratch
 
TDD vs. ATDD - What, Why, Which, When & Where
TDD vs. ATDD - What, Why, Which, When & WhereTDD vs. ATDD - What, Why, Which, When & Where
TDD vs. ATDD - What, Why, Which, When & Where
 
Property based Testing - generative data & executable domain rules
Property based Testing - generative data & executable domain rulesProperty based Testing - generative data & executable domain rules
Property based Testing - generative data & executable domain rules
 
A Second Look at Unit Testing by Roy Osherove
A Second Look at Unit Testing by Roy OsheroveA Second Look at Unit Testing by Roy Osherove
A Second Look at Unit Testing by Roy Osherove
 
NUnit Features Presentation
NUnit Features PresentationNUnit Features Presentation
NUnit Features Presentation
 
Model-based Testing: Taking BDD/ATDD to the Next Level
Model-based Testing: Taking BDD/ATDD to the Next LevelModel-based Testing: Taking BDD/ATDD to the Next Level
Model-based Testing: Taking BDD/ATDD to the Next Level
 
Getting Comfortable with BDD
Getting Comfortable with BDDGetting Comfortable with BDD
Getting Comfortable with BDD
 

Ähnlich wie Unit Testing, TDD and ATDD

Cleaner Code - CodeStock 2019 Edition
Cleaner Code - CodeStock 2019 EditionCleaner Code - CodeStock 2019 Edition
Cleaner Code - CodeStock 2019 EditionDave Fancher
 
Cleaner Code: How Clean Code is Functional Code
Cleaner Code: How Clean Code is Functional CodeCleaner Code: How Clean Code is Functional Code
Cleaner Code: How Clean Code is Functional CodeDave Fancher
 
TDD by Controlling Dependencies
TDD by Controlling DependenciesTDD by Controlling Dependencies
TDD by Controlling DependenciesJorge Ortiz
 
A new execution model for Nashorn in Java 9
A new execution model for Nashorn in Java 9A new execution model for Nashorn in Java 9
A new execution model for Nashorn in Java 9Marcus Lagergren
 
Connect.Tech- Swift Memory Management
Connect.Tech- Swift Memory ManagementConnect.Tech- Swift Memory Management
Connect.Tech- Swift Memory Managementstable|kernel
 
Refactoring In Tdd The Missing Part
Refactoring In Tdd The Missing PartRefactoring In Tdd The Missing Part
Refactoring In Tdd The Missing PartGabriele Lana
 
Php Extensions for Dummies
Php Extensions for DummiesPhp Extensions for Dummies
Php Extensions for DummiesElizabeth Smith
 
Codestrong 2012 breakout session hacking titanium
Codestrong 2012 breakout session   hacking titaniumCodestrong 2012 breakout session   hacking titanium
Codestrong 2012 breakout session hacking titaniumAxway Appcelerator
 
2. Design patterns. part #2
2. Design patterns. part #22. Design patterns. part #2
2. Design patterns. part #2Leonid Maslov
 
Using Reflections and Automatic Code Generation
Using Reflections and Automatic Code GenerationUsing Reflections and Automatic Code Generation
Using Reflections and Automatic Code GenerationIvan Dolgushin
 
Building Concurrent WebObjects applications with Scala
Building Concurrent WebObjects applications with ScalaBuilding Concurrent WebObjects applications with Scala
Building Concurrent WebObjects applications with ScalaWO Community
 
Towards JVM Dynamic Languages Toolchain
Towards JVM Dynamic Languages ToolchainTowards JVM Dynamic Languages Toolchain
Towards JVM Dynamic Languages ToolchainAttila Szegedi
 
Android Automated Testing
Android Automated TestingAndroid Automated Testing
Android Automated Testingroisagiv
 
Lagergren jvmls-2013-final
Lagergren jvmls-2013-finalLagergren jvmls-2013-final
Lagergren jvmls-2013-finalMarcus Lagergren
 
Android Jetpack + Coroutines: To infinity and beyond
Android Jetpack + Coroutines: To infinity and beyondAndroid Jetpack + Coroutines: To infinity and beyond
Android Jetpack + Coroutines: To infinity and beyondRamon Ribeiro Rabello
 
Reactive Web-Applications @ LambdaDays
Reactive Web-Applications @ LambdaDaysReactive Web-Applications @ LambdaDays
Reactive Web-Applications @ LambdaDaysManuel Bernhardt
 
Eric Lafortune - The Jack and Jill build system
Eric Lafortune - The Jack and Jill build systemEric Lafortune - The Jack and Jill build system
Eric Lafortune - The Jack and Jill build systemGuardSquare
 

Ähnlich wie Unit Testing, TDD and ATDD (20)

Cleaner Code - CodeStock 2019 Edition
Cleaner Code - CodeStock 2019 EditionCleaner Code - CodeStock 2019 Edition
Cleaner Code - CodeStock 2019 Edition
 
Cleaner Code: How Clean Code is Functional Code
Cleaner Code: How Clean Code is Functional CodeCleaner Code: How Clean Code is Functional Code
Cleaner Code: How Clean Code is Functional Code
 
TDD by Controlling Dependencies
TDD by Controlling DependenciesTDD by Controlling Dependencies
TDD by Controlling Dependencies
 
Clean Code 2
Clean Code 2Clean Code 2
Clean Code 2
 
A new execution model for Nashorn in Java 9
A new execution model for Nashorn in Java 9A new execution model for Nashorn in Java 9
A new execution model for Nashorn in Java 9
 
Connect.Tech- Swift Memory Management
Connect.Tech- Swift Memory ManagementConnect.Tech- Swift Memory Management
Connect.Tech- Swift Memory Management
 
Refactoring In Tdd The Missing Part
Refactoring In Tdd The Missing PartRefactoring In Tdd The Missing Part
Refactoring In Tdd The Missing Part
 
Php Extensions for Dummies
Php Extensions for DummiesPhp Extensions for Dummies
Php Extensions for Dummies
 
Codestrong 2012 breakout session hacking titanium
Codestrong 2012 breakout session   hacking titaniumCodestrong 2012 breakout session   hacking titanium
Codestrong 2012 breakout session hacking titanium
 
2. Design patterns. part #2
2. Design patterns. part #22. Design patterns. part #2
2. Design patterns. part #2
 
Using Reflections and Automatic Code Generation
Using Reflections and Automatic Code GenerationUsing Reflections and Automatic Code Generation
Using Reflections and Automatic Code Generation
 
Building Concurrent WebObjects applications with Scala
Building Concurrent WebObjects applications with ScalaBuilding Concurrent WebObjects applications with Scala
Building Concurrent WebObjects applications with Scala
 
Towards JVM Dynamic Languages Toolchain
Towards JVM Dynamic Languages ToolchainTowards JVM Dynamic Languages Toolchain
Towards JVM Dynamic Languages Toolchain
 
Designing Testable Software
Designing Testable SoftwareDesigning Testable Software
Designing Testable Software
 
Android Automated Testing
Android Automated TestingAndroid Automated Testing
Android Automated Testing
 
Lagergren jvmls-2013-final
Lagergren jvmls-2013-finalLagergren jvmls-2013-final
Lagergren jvmls-2013-final
 
Android Jetpack + Coroutines: To infinity and beyond
Android Jetpack + Coroutines: To infinity and beyondAndroid Jetpack + Coroutines: To infinity and beyond
Android Jetpack + Coroutines: To infinity and beyond
 
Reactive Web-Applications @ LambdaDays
Reactive Web-Applications @ LambdaDaysReactive Web-Applications @ LambdaDays
Reactive Web-Applications @ LambdaDays
 
Eric Lafortune - The Jack and Jill build system
Eric Lafortune - The Jack and Jill build systemEric Lafortune - The Jack and Jill build system
Eric Lafortune - The Jack and Jill build system
 
Java Annotations and Pre-processing
Java  Annotations and Pre-processingJava  Annotations and Pre-processing
Java Annotations and Pre-processing
 

Mehr von Arnon Axelrod

Defect free development - QS Tag2019
Defect free development - QS Tag2019Defect free development - QS Tag2019
Defect free development - QS Tag2019Arnon Axelrod
 
Test Automation Maturity Model (Israel Test Automation meetup 12/11/2018)
Test Automation Maturity Model (Israel Test Automation meetup 12/11/2018)Test Automation Maturity Model (Israel Test Automation meetup 12/11/2018)
Test Automation Maturity Model (Israel Test Automation meetup 12/11/2018)Arnon Axelrod
 
Effective refactoring
Effective refactoringEffective refactoring
Effective refactoringArnon Axelrod
 
Test automation and architecture
Test automation and architectureTest automation and architecture
Test automation and architectureArnon Axelrod
 
Software quality - no more bugs!
Software quality - no more bugs!Software quality - no more bugs!
Software quality - no more bugs!Arnon Axelrod
 
Automation at Philips Healthcare
Automation at Philips HealthcareAutomation at Philips Healthcare
Automation at Philips HealthcareArnon Axelrod
 

Mehr von Arnon Axelrod (11)

Defect free development - QS Tag2019
Defect free development - QS Tag2019Defect free development - QS Tag2019
Defect free development - QS Tag2019
 
ATDD open house
ATDD open houseATDD open house
ATDD open house
 
Test Automation Maturity Model (Israel Test Automation meetup 12/11/2018)
Test Automation Maturity Model (Israel Test Automation meetup 12/11/2018)Test Automation Maturity Model (Israel Test Automation meetup 12/11/2018)
Test Automation Maturity Model (Israel Test Automation meetup 12/11/2018)
 
Competitive code
Competitive codeCompetitive code
Competitive code
 
Effective refactoring
Effective refactoringEffective refactoring
Effective refactoring
 
Beyond pageobjects
Beyond pageobjectsBeyond pageobjects
Beyond pageobjects
 
Test automation and architecture
Test automation and architectureTest automation and architecture
Test automation and architecture
 
Software quality - no more bugs!
Software quality - no more bugs!Software quality - no more bugs!
Software quality - no more bugs!
 
C# in depth
C# in depthC# in depth
C# in depth
 
ATDD with SpecFlow
ATDD with SpecFlowATDD with SpecFlow
ATDD with SpecFlow
 
Automation at Philips Healthcare
Automation at Philips HealthcareAutomation at Philips Healthcare
Automation at Philips Healthcare
 

Kürzlich hochgeladen

5 Signs You Need a Fashion PLM Software.pdf
5 Signs You Need a Fashion PLM Software.pdf5 Signs You Need a Fashion PLM Software.pdf
5 Signs You Need a Fashion PLM Software.pdfWave PLM
 
Define the academic and professional writing..pdf
Define the academic and professional writing..pdfDefine the academic and professional writing..pdf
Define the academic and professional writing..pdfPearlKirahMaeRagusta1
 
Direct Style Effect Systems - The Print[A] Example - A Comprehension Aid
Direct Style Effect Systems -The Print[A] Example- A Comprehension AidDirect Style Effect Systems -The Print[A] Example- A Comprehension Aid
Direct Style Effect Systems - The Print[A] Example - A Comprehension AidPhilip Schwarz
 
Software Quality Assurance Interview Questions
Software Quality Assurance Interview QuestionsSoftware Quality Assurance Interview Questions
Software Quality Assurance Interview QuestionsArshad QA
 
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️Delhi Call girls
 
AI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
AI Mastery 201: Elevating Your Workflow with Advanced LLM TechniquesAI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
AI Mastery 201: Elevating Your Workflow with Advanced LLM TechniquesVictorSzoltysek
 
Introducing Microsoft’s new Enterprise Work Management (EWM) Solution
Introducing Microsoft’s new Enterprise Work Management (EWM) SolutionIntroducing Microsoft’s new Enterprise Work Management (EWM) Solution
Introducing Microsoft’s new Enterprise Work Management (EWM) SolutionOnePlan Solutions
 
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...OnePlan Solutions
 
Unveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time ApplicationsUnveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time ApplicationsAlberto González Trastoy
 
The Guide to Integrating Generative AI into Unified Continuous Testing Platfo...
The Guide to Integrating Generative AI into Unified Continuous Testing Platfo...The Guide to Integrating Generative AI into Unified Continuous Testing Platfo...
The Guide to Integrating Generative AI into Unified Continuous Testing Platfo...kalichargn70th171
 
8257 interfacing 2 in microprocessor for btech students
8257 interfacing 2 in microprocessor for btech students8257 interfacing 2 in microprocessor for btech students
8257 interfacing 2 in microprocessor for btech studentsHimanshiGarg82
 
TECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service providerTECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service providermohitmore19
 
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...Health
 
The Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdfThe Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdfkalichargn70th171
 
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...harshavardhanraghave
 
10 Trends Likely to Shape Enterprise Technology in 2024
10 Trends Likely to Shape Enterprise Technology in 202410 Trends Likely to Shape Enterprise Technology in 2024
10 Trends Likely to Shape Enterprise Technology in 2024Mind IT Systems
 
Unlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language ModelsUnlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language Modelsaagamshah0812
 
AI & Machine Learning Presentation Template
AI & Machine Learning Presentation TemplateAI & Machine Learning Presentation Template
AI & Machine Learning Presentation TemplatePresentation.STUDIO
 

Kürzlich hochgeladen (20)

5 Signs You Need a Fashion PLM Software.pdf
5 Signs You Need a Fashion PLM Software.pdf5 Signs You Need a Fashion PLM Software.pdf
5 Signs You Need a Fashion PLM Software.pdf
 
Define the academic and professional writing..pdf
Define the academic and professional writing..pdfDefine the academic and professional writing..pdf
Define the academic and professional writing..pdf
 
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICECHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
 
Direct Style Effect Systems - The Print[A] Example - A Comprehension Aid
Direct Style Effect Systems -The Print[A] Example- A Comprehension AidDirect Style Effect Systems -The Print[A] Example- A Comprehension Aid
Direct Style Effect Systems - The Print[A] Example - A Comprehension Aid
 
Vip Call Girls Noida ➡️ Delhi ➡️ 9999965857 No Advance 24HRS Live
Vip Call Girls Noida ➡️ Delhi ➡️ 9999965857 No Advance 24HRS LiveVip Call Girls Noida ➡️ Delhi ➡️ 9999965857 No Advance 24HRS Live
Vip Call Girls Noida ➡️ Delhi ➡️ 9999965857 No Advance 24HRS Live
 
Software Quality Assurance Interview Questions
Software Quality Assurance Interview QuestionsSoftware Quality Assurance Interview Questions
Software Quality Assurance Interview Questions
 
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
 
AI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
AI Mastery 201: Elevating Your Workflow with Advanced LLM TechniquesAI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
AI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
 
Introducing Microsoft’s new Enterprise Work Management (EWM) Solution
Introducing Microsoft’s new Enterprise Work Management (EWM) SolutionIntroducing Microsoft’s new Enterprise Work Management (EWM) Solution
Introducing Microsoft’s new Enterprise Work Management (EWM) Solution
 
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
 
Unveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time ApplicationsUnveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
 
The Guide to Integrating Generative AI into Unified Continuous Testing Platfo...
The Guide to Integrating Generative AI into Unified Continuous Testing Platfo...The Guide to Integrating Generative AI into Unified Continuous Testing Platfo...
The Guide to Integrating Generative AI into Unified Continuous Testing Platfo...
 
8257 interfacing 2 in microprocessor for btech students
8257 interfacing 2 in microprocessor for btech students8257 interfacing 2 in microprocessor for btech students
8257 interfacing 2 in microprocessor for btech students
 
TECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service providerTECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service provider
 
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
 
The Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdfThe Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdf
 
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
 
10 Trends Likely to Shape Enterprise Technology in 2024
10 Trends Likely to Shape Enterprise Technology in 202410 Trends Likely to Shape Enterprise Technology in 2024
10 Trends Likely to Shape Enterprise Technology in 2024
 
Unlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language ModelsUnlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language Models
 
AI & Machine Learning Presentation Template
AI & Machine Learning Presentation TemplateAI & Machine Learning Presentation Template
AI & Machine Learning Presentation Template
 

Unit Testing, TDD and ATDD

Hinweis der Redaktion

  1. תקנים דורשים Unit tests לקוחות לא מקבלים "יש באגים"
  2. המטרה של היום הזה: לענות על שאלות וחששות... תשאלו ותתשתתפו – זה בשבילכם!
  3. גם אני למדתי ככה
  4. להגדיל
  5. להזיז שמאלה את ה-happy customers לחשוב מחדש
  6. להעלות את הכותרות יותר למעלה
  7. קידוד עד הרגע האחרון! אין סטביליזיישן
  8. לשנות צבע של המילה ולמרכז
  9. A container for multiple unit tests
  10. שקף נפרד על Testing the test first
  11. שקף נפרד על Testing the test first
  12. שקף נפרד על Testing the test first
  13. * Refactoring זה בעיקר להוריד כפילויות
  14. להחליף תמונה TDD provides a safety net Caution: If tests are bad, refactoring can be more difficult than without! On the other hand, TDD drives for good tests Small steps, climbers rule
  15. להחליף תמונה TDD provides a safety net Caution: If tests are bad, refactoring can be more difficult than without! On the other hand, TDD drives for good tests Small steps, climbers rule
  16. להחליף תמונה TDD provides a safety net Caution: If tests are bad, refactoring can be more difficult than without! On the other hand, TDD drives for good tests Small steps, climbers rule
  17. להחליף תמונה TDD provides a safety net Caution: If tests are bad, refactoring can be more difficult than without! On the other hand, TDD drives for good tests Small steps, climbers rule
  18. להחליף תמונה TDD provides a safety net Caution: If tests are bad, refactoring can be more difficult than without! On the other hand, TDD drives for good tests Small steps, climbers rule
  19. להחליף תמונה TDD provides a safety net Caution: If tests are bad, refactoring can be more difficult than without! On the other hand, TDD drives for good tests Small steps, climbers rule
  20. להחליף תמונה TDD provides a safety net Caution: If tests are bad, refactoring can be more difficult than without! On the other hand, TDD drives for good tests Small steps, climbers rule
  21. להחליף תמונה TDD provides a safety net Caution: If tests are bad, refactoring can be more difficult than without! On the other hand, TDD drives for good tests Small steps, climbers rule
  22. אין טעם להוסיף טסטים לכל הקוד שכבר כתוב Detours (Moles) יכולים לעזור, וגם Pex
  23. להעביר ATDD לפני Clean code