test-driven development in action
DESCRIPTION
A description of how test-driven development works along with some hands-on examples.TRANSCRIPT
![Page 1: Test-Driven Development In Action](https://reader036.vdocuments.us/reader036/viewer/2022062312/554f9289b4c905d25b8b52a1/html5/thumbnails/1.jpg)
Test Driven Development
In Action!by Jon Kruger
![Page 2: Test-Driven Development In Action](https://reader036.vdocuments.us/reader036/viewer/2022062312/554f9289b4c905d25b8b52a1/html5/thumbnails/2.jpg)
What is Test Driven Development?
A software development technique where you write automated unit tests before you write your implementation codeA technique for ensuring good quality and good designAwesome!
![Page 3: Test-Driven Development In Action](https://reader036.vdocuments.us/reader036/viewer/2022062312/554f9289b4c905d25b8b52a1/html5/thumbnails/3.jpg)
Example of a unit test[TestFixture]public class When_using_the_calculator{ [Test] public void Should_add_two_numbers() { int result = new Calculator().Add(2, 3); result.ShouldEqual(5); }}
![Page 4: Test-Driven Development In Action](https://reader036.vdocuments.us/reader036/viewer/2022062312/554f9289b4c905d25b8b52a1/html5/thumbnails/4.jpg)
Unit Tests vs. Integration Tests
Unit tests: Tests a small unit of functionality Mock or “fake out” external dependencies (e.g.
databases) Run fast
Integration tests: Test the whole system working together Can run slow Can be brittle
![Page 5: Test-Driven Development In Action](https://reader036.vdocuments.us/reader036/viewer/2022062312/554f9289b4c905d25b8b52a1/html5/thumbnails/5.jpg)
Unit Testing Frameworks
.NET NUnit, MSTest, MBUnit, xUnit, MSpec
Java JUnit, TestNG
Ruby RSpec, Test::Unit, Shoulda
![Page 6: Test-Driven Development In Action](https://reader036.vdocuments.us/reader036/viewer/2022062312/554f9289b4c905d25b8b52a1/html5/thumbnails/6.jpg)
The TDD Process1. Write a test (or tests) for
something. Since you haven’t written the implementation code yet, the tests should fail.
2. Write just enough code to get the test to pass.
3. Move on or refactor
“Red – Green – Refactor”
![Page 7: Test-Driven Development In Action](https://reader036.vdocuments.us/reader036/viewer/2022062312/554f9289b4c905d25b8b52a1/html5/thumbnails/7.jpg)
A Series of Translations
![Page 8: Test-Driven Development In Action](https://reader036.vdocuments.us/reader036/viewer/2022062312/554f9289b4c905d25b8b52a1/html5/thumbnails/8.jpg)
Code!
![Page 9: Test-Driven Development In Action](https://reader036.vdocuments.us/reader036/viewer/2022062312/554f9289b4c905d25b8b52a1/html5/thumbnails/9.jpg)
Benefits of TDD
We know that our code is working!
![Page 10: Test-Driven Development In Action](https://reader036.vdocuments.us/reader036/viewer/2022062312/554f9289b4c905d25b8b52a1/html5/thumbnails/10.jpg)
Benefits of TDD
We know that our code will continue to work
![Page 11: Test-Driven Development In Action](https://reader036.vdocuments.us/reader036/viewer/2022062312/554f9289b4c905d25b8b52a1/html5/thumbnails/11.jpg)
Benefits of TDD
We didn’t write bugs
![Page 12: Test-Driven Development In Action](https://reader036.vdocuments.us/reader036/viewer/2022062312/554f9289b4c905d25b8b52a1/html5/thumbnails/12.jpg)
Benefits of TDD
We know when we are done
![Page 13: Test-Driven Development In Action](https://reader036.vdocuments.us/reader036/viewer/2022062312/554f9289b4c905d25b8b52a1/html5/thumbnails/13.jpg)
Benefits of TDD
We incrementally translated the requirements
![Page 14: Test-Driven Development In Action](https://reader036.vdocuments.us/reader036/viewer/2022062312/554f9289b4c905d25b8b52a1/html5/thumbnails/14.jpg)
Behavior Driven Development
Testing the behavior of the system (not just data returned by a method)Defining what it means for your system to work correctly (not just verifying that code works)
![Page 15: Test-Driven Development In Action](https://reader036.vdocuments.us/reader036/viewer/2022062312/554f9289b4c905d25b8b52a1/html5/thumbnails/15.jpg)
Benefits of TDD
Concentrate on the requirements/tests, then
concentrate on implementation
![Page 16: Test-Driven Development In Action](https://reader036.vdocuments.us/reader036/viewer/2022062312/554f9289b4c905d25b8b52a1/html5/thumbnails/16.jpg)
Benefits of TDD
We only wrote as much code as we needed to make the tests pass
![Page 17: Test-Driven Development In Action](https://reader036.vdocuments.us/reader036/viewer/2022062312/554f9289b4c905d25b8b52a1/html5/thumbnails/17.jpg)
Benefits of TDD
Our tests helped us design our code
![Page 18: Test-Driven Development In Action](https://reader036.vdocuments.us/reader036/viewer/2022062312/554f9289b4c905d25b8b52a1/html5/thumbnails/18.jpg)
“Clean code that works is the goal of Test Driven Development.”
-- Ron Jeffries
![Page 19: Test-Driven Development In Action](https://reader036.vdocuments.us/reader036/viewer/2022062312/554f9289b4c905d25b8b52a1/html5/thumbnails/19.jpg)
Benefits of TDD
We had to write testable code
![Page 20: Test-Driven Development In Action](https://reader036.vdocuments.us/reader036/viewer/2022062312/554f9289b4c905d25b8b52a1/html5/thumbnails/20.jpg)
Benefits of TDD
Our tests are documentation of what
our code does
![Page 21: Test-Driven Development In Action](https://reader036.vdocuments.us/reader036/viewer/2022062312/554f9289b4c905d25b8b52a1/html5/thumbnails/21.jpg)
Benefits of TDD
Our tests are documentation of what our
code does
Someday someone other than you will have to understand your codeSomeday you will wonder what your code was supposed to doLiving, breathing documentation!
![Page 22: Test-Driven Development In Action](https://reader036.vdocuments.us/reader036/viewer/2022062312/554f9289b4c905d25b8b52a1/html5/thumbnails/22.jpg)
Benefits of TDD
We can quickly regression test our code
![Page 23: Test-Driven Development In Action](https://reader036.vdocuments.us/reader036/viewer/2022062312/554f9289b4c905d25b8b52a1/html5/thumbnails/23.jpg)
Benefits of TDD
We can quickly regression test our code
Fewer bugsAble to release more oftenLess time spent doing manual testingPrevent our app from becoming “legacy code”
![Page 24: Test-Driven Development In Action](https://reader036.vdocuments.us/reader036/viewer/2022062312/554f9289b4c905d25b8b52a1/html5/thumbnails/24.jpg)
Benefits of TDD
Peace of mind!
![Page 25: Test-Driven Development In Action](https://reader036.vdocuments.us/reader036/viewer/2022062312/554f9289b4c905d25b8b52a1/html5/thumbnails/25.jpg)
But I don’t have time to do TDD!
I don’t have time to fix bugsI don’t have time to constantly step through code to see if it’s all workingI don’t have time to figure out what your code is supposed to doI don’t have time to figure out if my changes will break something in your codeI don’t have time to rewrite code
Think long-term, not short-term!!
![Page 26: Test-Driven Development In Action](https://reader036.vdocuments.us/reader036/viewer/2022062312/554f9289b4c905d25b8b52a1/html5/thumbnails/26.jpg)
“If I don't need to make it work, I can go a lot faster.”
-- Kent Beck
![Page 27: Test-Driven Development In Action](https://reader036.vdocuments.us/reader036/viewer/2022062312/554f9289b4c905d25b8b52a1/html5/thumbnails/27.jpg)
The Cost of Unit Testing
Source: http://blog.typemock.com/2009/03/cost-of-test-driven-development.html
![Page 28: Test-Driven Development In Action](https://reader036.vdocuments.us/reader036/viewer/2022062312/554f9289b4c905d25b8b52a1/html5/thumbnails/28.jpg)
The Cost of Not Unit Testing
Source: http://www.riceconsulting.com/public_pdf/STBC-WM.pdf
![Page 29: Test-Driven Development In Action](https://reader036.vdocuments.us/reader036/viewer/2022062312/554f9289b4c905d25b8b52a1/html5/thumbnails/29.jpg)
Resources - Cost of unit testingMicrosoft Research – “Realizing quality improvement through test driven development: results and experiences of four industrial teams”
http://research.microsoft.com/en-us/projects/esm/nagappan_tdd.pdf
Cost of Testing, by Misko Hevery (Agile Coach/Java developer at Google)
http://misko.hevery.com/2009/10/01/cost-of-testing/
TDD Derangement Syndrome, by Uncle Bob Martin http://blog.objectmentor.com/articles/2009/10/07/tdd-dera
ngement-syndrome
![Page 30: Test-Driven Development In Action](https://reader036.vdocuments.us/reader036/viewer/2022062312/554f9289b4c905d25b8b52a1/html5/thumbnails/30.jpg)
Resources - Tools.NET
NUnit – http://nunit.org Should – http://should.codeplex.com
Java JUnit – http://junit.org TestNG – http://testng.org
Ruby RSpec – http://rspec.info, or gem install rspec
Specs2Tests – http://github.com/jonkruger/specs2tests
![Page 31: Test-Driven Development In Action](https://reader036.vdocuments.us/reader036/viewer/2022062312/554f9289b4c905d25b8b52a1/html5/thumbnails/31.jpg)
Resources – Learning TDDBehavior Driven Development
http://www.code-magazine.com/article.aspx?quickid=0805061&page=1
So How do You Introduce TDD into an Organization or Team?, by Jeremy Miller
http://codebetter.com/blogs/jeremy.miller/archive/2006/06/27/146899.aspx
How to get started with TDD, by Misko Hevery (Java examples)
http://misko.hevery.com/2009/11/17/how-to-get-started-with-tdd/
TDD Starter Kit – Sample Projects and Links (C# examples)
http://jonkruger.com/blog/2009/07/23/tdd-starter-kit-sample-projects-and-links/
Pair Programming Bot http://pairprogrammingbot.com/
![Page 32: Test-Driven Development In Action](https://reader036.vdocuments.us/reader036/viewer/2022062312/554f9289b4c905d25b8b52a1/html5/thumbnails/32.jpg)
Resources – BooksThe Art of Unit Testing
by Roy OsheroveTest Driven Development: By Example
by Kent BeckTest Driven Development: A Practical Guide
by David AstelsThe RSpec Book: Behaviour Driven Development with RSpec, Cucumber, and Friends
by David Chelimsky, Dave Astels, et. al.
![Page 33: Test-Driven Development In Action](https://reader036.vdocuments.us/reader036/viewer/2022062312/554f9289b4c905d25b8b52a1/html5/thumbnails/33.jpg)
Resources – Practice!String Calculator kata
http://osherove.com/tdd-kata-1/
Bowling Game kata http://butunclebob.com/ArticleS.UncleBob.TheBowlingG
ameKata
Prime Factors kata http://www.butunclebob.com/ArticleS.UncleBob.ThePrimeFacto
rsKata
Greed game (part of the Ruby koans) http://github.com/edgecase/ruby_koans
Katacasts (watch screencasts of people doing various katas)
http://www.katacasts.com/
![Page 34: Test-Driven Development In Action](https://reader036.vdocuments.us/reader036/viewer/2022062312/554f9289b4c905d25b8b52a1/html5/thumbnails/34.jpg)
Resources – TrainingTDD Boot Camp (.NET)
http://tddbootcamp.com
Pillar Technology (Java) http://pillartechnology.com
EdgeCase (Ruby on Rails) http://edgecase.com
![Page 35: Test-Driven Development In Action](https://reader036.vdocuments.us/reader036/viewer/2022062312/554f9289b4c905d25b8b52a1/html5/thumbnails/35.jpg)
My InfoEmail: [email protected]: @JonKrugerBlog: http://jonkruger.com/blog
These slides: http://tinyurl.com/tdd-in-action