SlideShare a Scribd company logo
1 of 15
Download to read offline
 

AT7
Concurrent Session 
11/14/2013 2:15 PM 
 
 
 

"Test-Driven Development
for Developers:
Plain and Simple"
 
 
 

Presented by:
Rob Myers
Agile Institute
 
 
 
 
 
 
 

Brought to you by: 
 

 
 
340 Corporate Way, Suite 300, Orange Park, FL 32073 
888‐268‐8770 ∙ 904‐278‐0524 ∙ sqeinfo@sqe.com ∙ www.sqe.com
Rob Myers
Agile Institute
Rob Myers is founder of the Agile Institute and a founding member of
the Agile Cooperative. With twenty-seven years of professional experience
on software development teams, Rob has consulted for leading companies
in aerospace, government, medical, software, and financial sectors. He has
been training and coaching organizations in Scrum and Extreme
Programming (XP) management and development practices since 1999.
Rob’s courses—including Essential Test-Driven Development and
Essential Agile Principles and Practices—are a blend of enjoyable,
interactive, hands-on labs plus practical dialog toward preserving sanity in
the workplace. Rob performs short- and long-term coaching to encourage,
solidify, and improve the team's agile practices.
9/10/13	
  

Café
TDD for
Developers:
Plain & Simple
Rob Myers

for
Agile Development Practices
East
14 November 2013

10 September 2013

© Agile Institute 2008-2013

1

10 September 2013

© Agile Institute 2008-2013

2

1	
  
9/10/13	
  

Unit testing
is soooo
DEPRESSING

10 September 2013

© Agile Institute 2008-2013

3

TDD is fun,
and provides
much more than
just unit-tests!

10 September 2013

© Agile Institute 2008-2013

4

2	
  
9/10/13	
  

“The results of the case studies indicate
that the pre-release defect density of the
four products decreased between 40%
and 90% relative to similar projects that
did

not

use

the

TDD

practice.

Subjectively, the teams experienced a
15–35% increase in initial development
time after adopting TDD.”
http://research.microsoft.com/en-us/projects/esm/nagappan_tdd.pdf, Nagappan et al,
© Springer Science + Business Media, LLC 2008
10 September 2013

© Agile Institute 2008-2013

5

=
10 September 2013

© Agile Institute 2008-2013

6

3	
  
9/10/13	
  

discipline
10 September 2013

© Agile Institute 2008-2013

7

10 September 2013

© Agile Institute 2008-2013

8

4	
  
9/10/13	
  

TDD Demo

10 September 2013

© Agile Institute 2008-2013

9

no magic
import junit.framework.Assert;
import org.junit.Test;
public class SetTests {
@Test
public void setStartsOutEmpty() {
Set mySet = new Set();
Assert.assertEquals(0, mySet.size());
}
}

10 September 2013

© Agile Institute 2008-2013

10

5	
  
9/10/13	
  

requirements & conventions
import junit.framework.Assert;
import org.junit.Test;
public class SetTests {
@Test
public void setStartsOutEmpty() {
Set mySet = new Set();
Assert.assertEquals(0, mySet.size());
}
}
Expected

10 September 2013

Actual

© Agile Institute 2008-2013

11

start simple
To Do
q Empty set.
q Adding an item.
q Adding two different items.
q Adding the same item twice.

10 September 2013

© Agile Institute 2008-2013

12

6	
  
9/10/13	
  

specification, and interface
import junit.framework.Assert;
import org.junit.Test;
public class SetTests {
@Test
public void setStartsOutEmpty() {
Set mySet = new Set();
Assert.assertEquals(0, mySet.size());
}
}

Will not compile. L
10 September 2013

© Agile Institute 2008-2013

13

“Thank you, but…”
package supersets;
public class Set {
public int size() {
throw new RuntimeException("D'oh! Not yet implemented!");
}
}

10 September 2013

© Agile Institute 2008-2013

14

7	
  
9/10/13	
  

“…I want to see it fail successfully”
public class Set {
public int size() {
return -1;
}
}

10 September 2013

© Agile Institute 2008-2013

15

technique: “Fake It”
package supersets;
public class Set {
public int size() {
return 0;
}
}

10 September 2013

© Agile Institute 2008-2013

16

8	
  
9/10/13	
  

a. refactor away duplication
@Test
public void setStartsOutEmpty() {
Set mySet = new Set();
Assert.assertEquals(0, mySet.size());
}

public class Set {
public int size() {
return 0;
}
}

10 September 2013

© Agile Institute 2008-2013

17

b. triangulate

10 September 2013

© Agile Institute 2008-2013

18

9	
  
9/10/13	
  

technique: “Triangulation”
@Test
public void addingItemIncreasesCount() {
Set mySet = new Set();
mySet.add("One item");
Assert.assertEquals(1, mySet.size());
}
@Test
public void setStartsOutEmpty() {
Set mySet = new Set();
Assert.assertEquals(0, mySet.size());
}

10 September 2013

© Agile Institute 2008-2013

19

technique: “Obvious Implementation”
import java.util.ArrayList;
import java.util.List;
public class Set {
private List innerList = new ArrayList();
public int size() {
return innerList.size();
}
public void add(Object element) {
innerList.add(element);
}
}

10 September 2013

© Agile Institute 2008-2013

20

10	
  
9/10/13	
  

maintain (refactor) the tests
Set mySet;
@Before
public void initializeStuffCommonToThisTestClass() {
mySet = new Set();
}
@Test
public void addingItemIncreasesCount() {
mySet.add("One item");
Assert.assertEquals(1, mySet.size());
}
@Test
public void setStartsOutEmpty() {
Assert.assertEquals(0, mySet.size());
}

10 September 2013

© Agile Institute 2008-2013

21

now for something interesting
@Test
public void addingEquivalentItemTwiceAddsItOnlyOnce() {
String theString = "Equivalent string";
mySet.add(theString);
mySet.add(new String(theString));
Assert.assertEquals(1, mySet.size());
}

10 September 2013

© Agile Institute 2008-2013

22

11	
  
9/10/13	
  

the new behavior
public class Set {
private List innerList = new ArrayList();
public int size() {
return innerList.size();
}
public void add(Object element) {
if (!innerList.contains(element))
innerList.add(element);
}
}

10 September 2013

© Agile Institute 2008-2013

23

next?
To Do
q Empty set.
q Adding an item.
q Adding two different items.
q Adding the same item twice.

10 September 2013

© Agile Institute 2008-2013

24

12	
  
9/10/13	
  

1.  Write one unit test.

steps

2.  Build or add to the object under test
until everything compiles.

3.  Red:

Watch the test fail!

4.  Green:

Make all the tests pass by
changing the object under test.

5.  Clean:

Refactor mercilessly!

6.  Repeat.
10 September 2013

© Agile Institute 2008-2013

25

Rob.Myers@agileInstitute.com
http://PowersOfTwo.agileInstitute.com/
@agilecoach

10 September 2013

© Agile Institute 2008-2013

26

13	
  

More Related Content

Viewers also liked

Viewers also liked (11)

Demystifying the Role of Product Owner
Demystifying the Role of Product OwnerDemystifying the Role of Product Owner
Demystifying the Role of Product Owner
 
Key Test Design Techniques
Key Test Design TechniquesKey Test Design Techniques
Key Test Design Techniques
 
Keynote: The Mismeasure of Software: The Last Talk on Measurement You’ll Ever...
Keynote: The Mismeasure of Software: The Last Talk on Measurement You’ll Ever...Keynote: The Mismeasure of Software: The Last Talk on Measurement You’ll Ever...
Keynote: The Mismeasure of Software: The Last Talk on Measurement You’ll Ever...
 
W7
W7W7
W7
 
Testing with an Accent: Internationalization Testing
Testing with an Accent: Internationalization TestingTesting with an Accent: Internationalization Testing
Testing with an Accent: Internationalization Testing
 
Getting Ready for Your Agile Adventure
Getting Ready for Your Agile AdventureGetting Ready for Your Agile Adventure
Getting Ready for Your Agile Adventure
 
Leading Change—Even If You’re Not in Charge
Leading Change—Even If You’re Not in ChargeLeading Change—Even If You’re Not in Charge
Leading Change—Even If You’re Not in Charge
 
Deadlines Approaching? Budgets Cut? How to Keep Your Sanity
Deadlines Approaching? Budgets Cut? How to Keep Your SanityDeadlines Approaching? Budgets Cut? How to Keep Your Sanity
Deadlines Approaching? Budgets Cut? How to Keep Your Sanity
 
Essential Test Management and Planning
Essential Test Management and PlanningEssential Test Management and Planning
Essential Test Management and Planning
 
Collaboration Techniques: Combining New Approaches with Ancient Wisdom
Collaboration Techniques: Combining New Approaches with Ancient WisdomCollaboration Techniques: Combining New Approaches with Ancient Wisdom
Collaboration Techniques: Combining New Approaches with Ancient Wisdom
 
Implementing DevOps and Making It Stick
Implementing DevOps and Making It StickImplementing DevOps and Making It Stick
Implementing DevOps and Making It Stick
 

Similar to Test-Driven Development for Developers: Plain and Simple

Unit & Automation Testing in Android - Stanislav Gatsev, Melon
Unit & Automation Testing in Android - Stanislav Gatsev, MelonUnit & Automation Testing in Android - Stanislav Gatsev, Melon
Unit & Automation Testing in Android - Stanislav Gatsev, Melon
beITconference
 

Similar to Test-Driven Development for Developers: Plain and Simple (20)

Alien driven-development
Alien driven-developmentAlien driven-development
Alien driven-development
 
So how do I test my Sling application?
 So how do I test my Sling application? So how do I test my Sling application?
So how do I test my Sling application?
 
Test Automation on Large Agile Projects: It's Not a Cakewalk
Test Automation on Large Agile Projects: It's Not a CakewalkTest Automation on Large Agile Projects: It's Not a Cakewalk
Test Automation on Large Agile Projects: It's Not a Cakewalk
 
Hands On with Selenium and WebDriver
Hands On with Selenium and WebDriverHands On with Selenium and WebDriver
Hands On with Selenium and WebDriver
 
1 aleksandr gritsevski - attd example using
1   aleksandr gritsevski - attd example using1   aleksandr gritsevski - attd example using
1 aleksandr gritsevski - attd example using
 
PHP Unit Testing in Yii
PHP Unit Testing in YiiPHP Unit Testing in Yii
PHP Unit Testing in Yii
 
The Challenges of BIG Testing: Automation, Virtualization, Outsourcing, and More
The Challenges of BIG Testing: Automation, Virtualization, Outsourcing, and MoreThe Challenges of BIG Testing: Automation, Virtualization, Outsourcing, and More
The Challenges of BIG Testing: Automation, Virtualization, Outsourcing, and More
 
Grails Advanced
Grails Advanced Grails Advanced
Grails Advanced
 
Developer Test - Things to Know
Developer Test - Things to KnowDeveloper Test - Things to Know
Developer Test - Things to Know
 
iOS Development Methodology
iOS Development MethodologyiOS Development Methodology
iOS Development Methodology
 
2010 07-28-testing-zf-apps
2010 07-28-testing-zf-apps2010 07-28-testing-zf-apps
2010 07-28-testing-zf-apps
 
Junit and testNG
Junit and testNGJunit and testNG
Junit and testNG
 
Unit Testing in .NET Core 7.0 with XUnit.pptx
Unit Testing in .NET Core 7.0 with XUnit.pptxUnit Testing in .NET Core 7.0 with XUnit.pptx
Unit Testing in .NET Core 7.0 with XUnit.pptx
 
Unit & Automation Testing in Android - Stanislav Gatsev, Melon
Unit & Automation Testing in Android - Stanislav Gatsev, MelonUnit & Automation Testing in Android - Stanislav Gatsev, Melon
Unit & Automation Testing in Android - Stanislav Gatsev, Melon
 
Dependency Injection @ AngularJS
Dependency Injection @ AngularJSDependency Injection @ AngularJS
Dependency Injection @ AngularJS
 
Thomas Kauders - Agile Test Design And Automation of a Life-Critical Medical ...
Thomas Kauders - Agile Test Design And Automation of a Life-Critical Medical ...Thomas Kauders - Agile Test Design And Automation of a Life-Critical Medical ...
Thomas Kauders - Agile Test Design And Automation of a Life-Critical Medical ...
 
Testing with VS2010 - A Bugs Life
Testing with VS2010 - A Bugs LifeTesting with VS2010 - A Bugs Life
Testing with VS2010 - A Bugs Life
 
Developer Tests - Things to Know
Developer Tests - Things to KnowDeveloper Tests - Things to Know
Developer Tests - Things to Know
 
Finding Bugs, Fixing Bugs, Preventing Bugs - Exploiting Automated Tests to In...
Finding Bugs, Fixing Bugs, Preventing Bugs - Exploiting Automated Tests to In...Finding Bugs, Fixing Bugs, Preventing Bugs - Exploiting Automated Tests to In...
Finding Bugs, Fixing Bugs, Preventing Bugs - Exploiting Automated Tests to In...
 
Open stack qa and tempest
Open stack qa and tempestOpen stack qa and tempest
Open stack qa and tempest
 

More from TechWell

More from TechWell (20)

Failing and Recovering
Failing and RecoveringFailing and Recovering
Failing and Recovering
 
Instill a DevOps Testing Culture in Your Team and Organization
Instill a DevOps Testing Culture in Your Team and Organization Instill a DevOps Testing Culture in Your Team and Organization
Instill a DevOps Testing Culture in Your Team and Organization
 
Test Design for Fully Automated Build Architecture
Test Design for Fully Automated Build ArchitectureTest Design for Fully Automated Build Architecture
Test Design for Fully Automated Build Architecture
 
System-Level Test Automation: Ensuring a Good Start
System-Level Test Automation: Ensuring a Good StartSystem-Level Test Automation: Ensuring a Good Start
System-Level Test Automation: Ensuring a Good Start
 
Build Your Mobile App Quality and Test Strategy
Build Your Mobile App Quality and Test StrategyBuild Your Mobile App Quality and Test Strategy
Build Your Mobile App Quality and Test Strategy
 
Testing Transformation: The Art and Science for Success
Testing Transformation: The Art and Science for SuccessTesting Transformation: The Art and Science for Success
Testing Transformation: The Art and Science for Success
 
Implement BDD with Cucumber and SpecFlow
Implement BDD with Cucumber and SpecFlowImplement BDD with Cucumber and SpecFlow
Implement BDD with Cucumber and SpecFlow
 
Develop WebDriver Automated Tests—and Keep Your Sanity
Develop WebDriver Automated Tests—and Keep Your SanityDevelop WebDriver Automated Tests—and Keep Your Sanity
Develop WebDriver Automated Tests—and Keep Your Sanity
 
Ma 15
Ma 15Ma 15
Ma 15
 
Eliminate Cloud Waste with a Holistic DevOps Strategy
Eliminate Cloud Waste with a Holistic DevOps StrategyEliminate Cloud Waste with a Holistic DevOps Strategy
Eliminate Cloud Waste with a Holistic DevOps Strategy
 
Transform Test Organizations for the New World of DevOps
Transform Test Organizations for the New World of DevOpsTransform Test Organizations for the New World of DevOps
Transform Test Organizations for the New World of DevOps
 
The Fourth Constraint in Project Delivery—Leadership
The Fourth Constraint in Project Delivery—LeadershipThe Fourth Constraint in Project Delivery—Leadership
The Fourth Constraint in Project Delivery—Leadership
 
Resolve the Contradiction of Specialists within Agile Teams
Resolve the Contradiction of Specialists within Agile TeamsResolve the Contradiction of Specialists within Agile Teams
Resolve the Contradiction of Specialists within Agile Teams
 
Pin the Tail on the Metric: A Field-Tested Agile Game
Pin the Tail on the Metric: A Field-Tested Agile GamePin the Tail on the Metric: A Field-Tested Agile Game
Pin the Tail on the Metric: A Field-Tested Agile Game
 
Agile Performance Holarchy (APH)—A Model for Scaling Agile Teams
Agile Performance Holarchy (APH)—A Model for Scaling Agile TeamsAgile Performance Holarchy (APH)—A Model for Scaling Agile Teams
Agile Performance Holarchy (APH)—A Model for Scaling Agile Teams
 
A Business-First Approach to DevOps Implementation
A Business-First Approach to DevOps ImplementationA Business-First Approach to DevOps Implementation
A Business-First Approach to DevOps Implementation
 
Databases in a Continuous Integration/Delivery Process
Databases in a Continuous Integration/Delivery ProcessDatabases in a Continuous Integration/Delivery Process
Databases in a Continuous Integration/Delivery Process
 
Mobile Testing: What—and What Not—to Automate
Mobile Testing: What—and What Not—to AutomateMobile Testing: What—and What Not—to Automate
Mobile Testing: What—and What Not—to Automate
 
Cultural Intelligence: A Key Skill for Success
Cultural Intelligence: A Key Skill for SuccessCultural Intelligence: A Key Skill for Success
Cultural Intelligence: A Key Skill for Success
 
Turn the Lights On: A Power Utility Company's Agile Transformation
Turn the Lights On: A Power Utility Company's Agile TransformationTurn the Lights On: A Power Utility Company's Agile Transformation
Turn the Lights On: A Power Utility Company's Agile Transformation
 

Recently uploaded

Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
panagenda
 
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
?#DUbAI#??##{{(☎️+971_581248768%)**%*]'#abortion pills for sale in dubai@
 
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Victor Rentea
 
Architecting Cloud Native Applications
Architecting Cloud Native ApplicationsArchitecting Cloud Native Applications
Architecting Cloud Native Applications
WSO2
 

Recently uploaded (20)

ICT role in 21st century education and its challenges
ICT role in 21st century education and its challengesICT role in 21st century education and its challenges
ICT role in 21st century education and its challenges
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
 
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, AdobeApidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
 
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
 
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdfRising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
 
Corporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptxCorporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptx
 
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
 
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
 
Vector Search -An Introduction in Oracle Database 23ai.pptx
Vector Search -An Introduction in Oracle Database 23ai.pptxVector Search -An Introduction in Oracle Database 23ai.pptx
Vector Search -An Introduction in Oracle Database 23ai.pptx
 
Architecting Cloud Native Applications
Architecting Cloud Native ApplicationsArchitecting Cloud Native Applications
Architecting Cloud Native Applications
 
FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024
 
CNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In PakistanCNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In Pakistan
 
Six Myths about Ontologies: The Basics of Formal Ontology
Six Myths about Ontologies: The Basics of Formal OntologySix Myths about Ontologies: The Basics of Formal Ontology
Six Myths about Ontologies: The Basics of Formal Ontology
 
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century education
 
Elevate Developer Efficiency & build GenAI Application with Amazon Q​
Elevate Developer Efficiency & build GenAI Application with Amazon Q​Elevate Developer Efficiency & build GenAI Application with Amazon Q​
Elevate Developer Efficiency & build GenAI Application with Amazon Q​
 
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
 

Test-Driven Development for Developers: Plain and Simple

  • 1.   AT7 Concurrent Session  11/14/2013 2:15 PM        "Test-Driven Development for Developers: Plain and Simple"       Presented by: Rob Myers Agile Institute               Brought to you by:        340 Corporate Way, Suite 300, Orange Park, FL 32073  888‐268‐8770 ∙ 904‐278‐0524 ∙ sqeinfo@sqe.com ∙ www.sqe.com
  • 2. Rob Myers Agile Institute Rob Myers is founder of the Agile Institute and a founding member of the Agile Cooperative. With twenty-seven years of professional experience on software development teams, Rob has consulted for leading companies in aerospace, government, medical, software, and financial sectors. He has been training and coaching organizations in Scrum and Extreme Programming (XP) management and development practices since 1999. Rob’s courses—including Essential Test-Driven Development and Essential Agile Principles and Practices—are a blend of enjoyable, interactive, hands-on labs plus practical dialog toward preserving sanity in the workplace. Rob performs short- and long-term coaching to encourage, solidify, and improve the team's agile practices.
  • 3. 9/10/13   Café TDD for Developers: Plain & Simple Rob Myers for Agile Development Practices East 14 November 2013 10 September 2013 © Agile Institute 2008-2013 1 10 September 2013 © Agile Institute 2008-2013 2 1  
  • 4. 9/10/13   Unit testing is soooo DEPRESSING 10 September 2013 © Agile Institute 2008-2013 3 TDD is fun, and provides much more than just unit-tests! 10 September 2013 © Agile Institute 2008-2013 4 2  
  • 5. 9/10/13   “The results of the case studies indicate that the pre-release defect density of the four products decreased between 40% and 90% relative to similar projects that did not use the TDD practice. Subjectively, the teams experienced a 15–35% increase in initial development time after adopting TDD.” http://research.microsoft.com/en-us/projects/esm/nagappan_tdd.pdf, Nagappan et al, © Springer Science + Business Media, LLC 2008 10 September 2013 © Agile Institute 2008-2013 5 = 10 September 2013 © Agile Institute 2008-2013 6 3  
  • 6. 9/10/13   discipline 10 September 2013 © Agile Institute 2008-2013 7 10 September 2013 © Agile Institute 2008-2013 8 4  
  • 7. 9/10/13   TDD Demo 10 September 2013 © Agile Institute 2008-2013 9 no magic import junit.framework.Assert; import org.junit.Test; public class SetTests { @Test public void setStartsOutEmpty() { Set mySet = new Set(); Assert.assertEquals(0, mySet.size()); } } 10 September 2013 © Agile Institute 2008-2013 10 5  
  • 8. 9/10/13   requirements & conventions import junit.framework.Assert; import org.junit.Test; public class SetTests { @Test public void setStartsOutEmpty() { Set mySet = new Set(); Assert.assertEquals(0, mySet.size()); } } Expected 10 September 2013 Actual © Agile Institute 2008-2013 11 start simple To Do q Empty set. q Adding an item. q Adding two different items. q Adding the same item twice. 10 September 2013 © Agile Institute 2008-2013 12 6  
  • 9. 9/10/13   specification, and interface import junit.framework.Assert; import org.junit.Test; public class SetTests { @Test public void setStartsOutEmpty() { Set mySet = new Set(); Assert.assertEquals(0, mySet.size()); } } Will not compile. L 10 September 2013 © Agile Institute 2008-2013 13 “Thank you, but…” package supersets; public class Set { public int size() { throw new RuntimeException("D'oh! Not yet implemented!"); } } 10 September 2013 © Agile Institute 2008-2013 14 7  
  • 10. 9/10/13   “…I want to see it fail successfully” public class Set { public int size() { return -1; } } 10 September 2013 © Agile Institute 2008-2013 15 technique: “Fake It” package supersets; public class Set { public int size() { return 0; } } 10 September 2013 © Agile Institute 2008-2013 16 8  
  • 11. 9/10/13   a. refactor away duplication @Test public void setStartsOutEmpty() { Set mySet = new Set(); Assert.assertEquals(0, mySet.size()); } public class Set { public int size() { return 0; } } 10 September 2013 © Agile Institute 2008-2013 17 b. triangulate 10 September 2013 © Agile Institute 2008-2013 18 9  
  • 12. 9/10/13   technique: “Triangulation” @Test public void addingItemIncreasesCount() { Set mySet = new Set(); mySet.add("One item"); Assert.assertEquals(1, mySet.size()); } @Test public void setStartsOutEmpty() { Set mySet = new Set(); Assert.assertEquals(0, mySet.size()); } 10 September 2013 © Agile Institute 2008-2013 19 technique: “Obvious Implementation” import java.util.ArrayList; import java.util.List; public class Set { private List innerList = new ArrayList(); public int size() { return innerList.size(); } public void add(Object element) { innerList.add(element); } } 10 September 2013 © Agile Institute 2008-2013 20 10  
  • 13. 9/10/13   maintain (refactor) the tests Set mySet; @Before public void initializeStuffCommonToThisTestClass() { mySet = new Set(); } @Test public void addingItemIncreasesCount() { mySet.add("One item"); Assert.assertEquals(1, mySet.size()); } @Test public void setStartsOutEmpty() { Assert.assertEquals(0, mySet.size()); } 10 September 2013 © Agile Institute 2008-2013 21 now for something interesting @Test public void addingEquivalentItemTwiceAddsItOnlyOnce() { String theString = "Equivalent string"; mySet.add(theString); mySet.add(new String(theString)); Assert.assertEquals(1, mySet.size()); } 10 September 2013 © Agile Institute 2008-2013 22 11  
  • 14. 9/10/13   the new behavior public class Set { private List innerList = new ArrayList(); public int size() { return innerList.size(); } public void add(Object element) { if (!innerList.contains(element)) innerList.add(element); } } 10 September 2013 © Agile Institute 2008-2013 23 next? To Do q Empty set. q Adding an item. q Adding two different items. q Adding the same item twice. 10 September 2013 © Agile Institute 2008-2013 24 12  
  • 15. 9/10/13   1.  Write one unit test. steps 2.  Build or add to the object under test until everything compiles. 3.  Red: Watch the test fail! 4.  Green: Make all the tests pass by changing the object under test. 5.  Clean: Refactor mercilessly! 6.  Repeat. 10 September 2013 © Agile Institute 2008-2013 25 Rob.Myers@agileInstitute.com http://PowersOfTwo.agileInstitute.com/ @agilecoach 10 September 2013 © Agile Institute 2008-2013 26 13