improving design through test driven development (tdd)
DESCRIPTION
Improving Design Through TDD was presented at the DC Agile Engineering Conference on 12/7/2012 by Sam Brown (@SamuelBrownIV) and Mike McGarr (@jmichaelmcgarr).TRANSCRIPT
![Page 1: Improving Design Through Test Driven Development (TDD)](https://reader030.vdocuments.net/reader030/viewer/2022012922/5549fbc7b4c905e56c8b4b34/html5/thumbnails/1.jpg)
Improving Design through Test Driven Development (TDD)
Sam Brown @SamuelBrownIVMike McGarr @jmichaelmcgarr
DC Agile Engineering Conference#DCAEC12
![Page 2: Improving Design Through Test Driven Development (TDD)](https://reader030.vdocuments.net/reader030/viewer/2022012922/5549fbc7b4c905e56c8b4b34/html5/thumbnails/2.jpg)
About Us
Sam Brown• 11 years software engineer• DevOps Evangelist at Excella• Certified Scrum Master• Puppet Certified
Professional
Mike McGarr• 11 years software engineer• Directory of DevOps for
Blackboard Learn• Founder of the DC
Continuous Integration, Delivery and Deployment Meetup
![Page 3: Improving Design Through Test Driven Development (TDD)](https://reader030.vdocuments.net/reader030/viewer/2022012922/5549fbc7b4c905e56c8b4b34/html5/thumbnails/3.jpg)
Types of Tests
![Page 4: Improving Design Through Test Driven Development (TDD)](https://reader030.vdocuments.net/reader030/viewer/2022012922/5549fbc7b4c905e56c8b4b34/html5/thumbnails/4.jpg)
Unit Tests
Fast
Independent
Repeatable
Self-Verifying
Timely
![Page 5: Improving Design Through Test Driven Development (TDD)](https://reader030.vdocuments.net/reader030/viewer/2022012922/5549fbc7b4c905e56c8b4b34/html5/thumbnails/5.jpg)
Test Driven Development
http://reddevnews.com/articles/2007/11/01/testdriven-development-tdd.aspx
Golden Rule of TDD:Never write production code without a failing test
![Page 6: Improving Design Through Test Driven Development (TDD)](https://reader030.vdocuments.net/reader030/viewer/2022012922/5549fbc7b4c905e56c8b4b34/html5/thumbnails/6.jpg)
TDD improves quality
http://www.manning.com/koskela2/
anddesign
![Page 7: Improving Design Through Test Driven Development (TDD)](https://reader030.vdocuments.net/reader030/viewer/2022012922/5549fbc7b4c905e56c8b4b34/html5/thumbnails/7.jpg)
Coupling
![Page 8: Improving Design Through Test Driven Development (TDD)](https://reader030.vdocuments.net/reader030/viewer/2022012922/5549fbc7b4c905e56c8b4b34/html5/thumbnails/8.jpg)
Cohesion
![Page 9: Improving Design Through Test Driven Development (TDD)](https://reader030.vdocuments.net/reader030/viewer/2022012922/5549fbc7b4c905e56c8b4b34/html5/thumbnails/9.jpg)
Object Oriented Design Principles
Single responsibility principle (SRP)
Open/close principle (OCP)
Liskov substitution principle (LSP)
Interface segregation principle (ISP)
Dependency inversion principle (DSP)
![Page 10: Improving Design Through Test Driven Development (TDD)](https://reader030.vdocuments.net/reader030/viewer/2022012922/5549fbc7b4c905e56c8b4b34/html5/thumbnails/10.jpg)
Bowling Game• Ten Frames per game• 2 rolls per frame• Unless a strike is rolled
• Properly calculate Spares• Properly calculate Strikes
http://playcasper.com/venues/show/17
![Page 11: Improving Design Through Test Driven Development (TDD)](https://reader030.vdocuments.net/reader030/viewer/2022012922/5549fbc7b4c905e56c8b4b34/html5/thumbnails/11.jpg)
![Page 12: Improving Design Through Test Driven Development (TDD)](https://reader030.vdocuments.net/reader030/viewer/2022012922/5549fbc7b4c905e56c8b4b34/html5/thumbnails/12.jpg)
Design Decision
![Page 13: Improving Design Through Test Driven Development (TDD)](https://reader030.vdocuments.net/reader030/viewer/2022012922/5549fbc7b4c905e56c8b4b34/html5/thumbnails/13.jpg)
![Page 14: Improving Design Through Test Driven Development (TDD)](https://reader030.vdocuments.net/reader030/viewer/2022012922/5549fbc7b4c905e56c8b4b34/html5/thumbnails/14.jpg)
Design Decision
![Page 15: Improving Design Through Test Driven Development (TDD)](https://reader030.vdocuments.net/reader030/viewer/2022012922/5549fbc7b4c905e56c8b4b34/html5/thumbnails/15.jpg)
![Page 16: Improving Design Through Test Driven Development (TDD)](https://reader030.vdocuments.net/reader030/viewer/2022012922/5549fbc7b4c905e56c8b4b34/html5/thumbnails/16.jpg)
Notice the duplication in the tests. Let’s
refactor this.
![Page 17: Improving Design Through Test Driven Development (TDD)](https://reader030.vdocuments.net/reader030/viewer/2022012922/5549fbc7b4c905e56c8b4b34/html5/thumbnails/17.jpg)
![Page 18: Improving Design Through Test Driven Development (TDD)](https://reader030.vdocuments.net/reader030/viewer/2022012922/5549fbc7b4c905e56c8b4b34/html5/thumbnails/18.jpg)
![Page 19: Improving Design Through Test Driven Development (TDD)](https://reader030.vdocuments.net/reader030/viewer/2022012922/5549fbc7b4c905e56c8b4b34/html5/thumbnails/19.jpg)
![Page 20: Improving Design Through Test Driven Development (TDD)](https://reader030.vdocuments.net/reader030/viewer/2022012922/5549fbc7b4c905e56c8b4b34/html5/thumbnails/20.jpg)
More duplication
![Page 21: Improving Design Through Test Driven Development (TDD)](https://reader030.vdocuments.net/reader030/viewer/2022012922/5549fbc7b4c905e56c8b4b34/html5/thumbnails/21.jpg)
![Page 22: Improving Design Through Test Driven Development (TDD)](https://reader030.vdocuments.net/reader030/viewer/2022012922/5549fbc7b4c905e56c8b4b34/html5/thumbnails/22.jpg)
Design Problem – roll() calculates score
Let’s Refactor!
![Page 23: Improving Design Through Test Driven Development (TDD)](https://reader030.vdocuments.net/reader030/viewer/2022012922/5549fbc7b4c905e56c8b4b34/html5/thumbnails/23.jpg)
![Page 24: Improving Design Through Test Driven Development (TDD)](https://reader030.vdocuments.net/reader030/viewer/2022012922/5549fbc7b4c905e56c8b4b34/html5/thumbnails/24.jpg)
We need a concept of frames.
![Page 25: Improving Design Through Test Driven Development (TDD)](https://reader030.vdocuments.net/reader030/viewer/2022012922/5549fbc7b4c905e56c8b4b34/html5/thumbnails/25.jpg)
Ugly Code
![Page 26: Improving Design Through Test Driven Development (TDD)](https://reader030.vdocuments.net/reader030/viewer/2022012922/5549fbc7b4c905e56c8b4b34/html5/thumbnails/26.jpg)
Design Decisions
• Design client interface
• Refactor• Change design without changing behavior
• Defer to last responsible moment• Avoids “Big Upfront Design”
![Page 27: Improving Design Through Test Driven Development (TDD)](https://reader030.vdocuments.net/reader030/viewer/2022012922/5549fbc7b4c905e56c8b4b34/html5/thumbnails/27.jpg)
New Requirements!
![Page 28: Improving Design Through Test Driven Development (TDD)](https://reader030.vdocuments.net/reader030/viewer/2022012922/5549fbc7b4c905e56c8b4b34/html5/thumbnails/28.jpg)
Requested Changes
The Bowling game is becoming service oriented!
• New Requirement:– Post rolls in real-time
![Page 29: Improving Design Through Test Driven Development (TDD)](https://reader030.vdocuments.net/reader030/viewer/2022012922/5549fbc7b4c905e56c8b4b34/html5/thumbnails/29.jpg)
Collaborator
![Page 30: Improving Design Through Test Driven Development (TDD)](https://reader030.vdocuments.net/reader030/viewer/2022012922/5549fbc7b4c905e56c8b4b34/html5/thumbnails/30.jpg)
Test Doubles
• Dummy• Stubs• Fake• Mocks• Spy
![Page 31: Improving Design Through Test Driven Development (TDD)](https://reader030.vdocuments.net/reader030/viewer/2022012922/5549fbc7b4c905e56c8b4b34/html5/thumbnails/31.jpg)
![Page 32: Improving Design Through Test Driven Development (TDD)](https://reader030.vdocuments.net/reader030/viewer/2022012922/5549fbc7b4c905e56c8b4b34/html5/thumbnails/32.jpg)
![Page 33: Improving Design Through Test Driven Development (TDD)](https://reader030.vdocuments.net/reader030/viewer/2022012922/5549fbc7b4c905e56c8b4b34/html5/thumbnails/33.jpg)
![Page 34: Improving Design Through Test Driven Development (TDD)](https://reader030.vdocuments.net/reader030/viewer/2022012922/5549fbc7b4c905e56c8b4b34/html5/thumbnails/34.jpg)
![Page 35: Improving Design Through Test Driven Development (TDD)](https://reader030.vdocuments.net/reader030/viewer/2022012922/5549fbc7b4c905e56c8b4b34/html5/thumbnails/35.jpg)
![Page 36: Improving Design Through Test Driven Development (TDD)](https://reader030.vdocuments.net/reader030/viewer/2022012922/5549fbc7b4c905e56c8b4b34/html5/thumbnails/36.jpg)
NullPointerException!We need a default implementation.
![Page 37: Improving Design Through Test Driven Development (TDD)](https://reader030.vdocuments.net/reader030/viewer/2022012922/5549fbc7b4c905e56c8b4b34/html5/thumbnails/37.jpg)
![Page 38: Improving Design Through Test Driven Development (TDD)](https://reader030.vdocuments.net/reader030/viewer/2022012922/5549fbc7b4c905e56c8b4b34/html5/thumbnails/38.jpg)
Contact Us
• J. Michael McGarr• [email protected]• @jmichaelmcgarr• http://earlyandoften.wordpress.com• DC CI Meetup - http://bit.ly/YRnrwx
Sam [email protected]@SamuelBrownIVhttps://github.com/samueltbrown
Cute Baby Arrival 12/20/2012