Introduction to test_driven_development
-
Upload
haochenglee -
Category
Technology
-
view
1.885 -
download
0
description
Transcript of Introduction to test_driven_development
Introduction to Test-Driven Development
Hao-Cheng Lee
本著作係依據創用 CC Attribution-ShareAlike 3.0 Unported 授權條款進行授權。如欲瀏覽本授權條款之副本,請造訪 http:
//creativecommons.org/licenses/by-sa/3.0/ ,或寄信至 Creative Commons, 171 Second Street, Suite 300, San Francisco, California,
94105, USA 。
About me
● Hao-Cheng Lee● Java Engineer for 7+ years● Software Engineer @ Armorize● Interested in Java, Scala, TDD, CI● email: [email protected]● twitter: haocheng● Google+: 浩誠
Download Java 7 RC NowProject Coin Slides
Agenda
● What is TDD?
● Why use TDD?
● How to do TDD?
● Pros and Cons
● How do I start?
TDD =
TFD +
Refactoring
Not about writing tests...
TDD is about writing better
code
from http://ch.englishbaby.com/forum/LifeTalk/thread/441379
Test Myths
I have no time for testing
My code is BUG-FREE!
from http://vincentshy.pixnet.net/blog/post/5397455
QA will do the testing
Black Box Testing
from http://www.jasonser.com/marketing-black-box/
http://www.ocoee.org/Departments/HR/
Faster
from http://cllctr.com/view/c2fdb4d2625e109069c843ea1bb99e50
from Test Driven Development Tutorial by Kirrily Robert
Faster
● Shorter release cycle
● Automation saves time
● Find bugs earlier
Better
from http://www.nataliedee.com/archives/2005/sep/
Better
● Greater code coverage
● The courage to refactor
● Prevent regression bugs
● Improve your design
"I'm not a great programmer; I'm just a good programmer with great habits." - Kent Beck
Testing the Old Way
TDD
TDD
How to do TDD?
● Design: figure out what you want to do● Test: write a test to express the design
○ It should FAIL● Implement: write the code● Test again
○ It should PASS
Design
We need a method add(), which takes two parameters and add
them together, then it will return the result.
Test
java.lang.AssertionError: expected:<2> but was:<0>...at tw.idv.haocheng.play.CalculatorTest.one_plus_one_is_two(CalculatorTest.java:20)
FAIL
Implement
PASS
Write the least code to make the test pass
More Test
java.lang.AssertionError: expected:<4> but was:<2>...at tw.idv.haocheng.play.CalculatorTest.two_plus_two_is_four(CalculatorTest.java:25)
FAIL
Implement
PASS
Design
The add() method only accept positive numbers
Test
java.lang.AssertionError: IllegalArgumentException expectedat org.junit.Assert.fail(Assert.java:91)at tw.idv.haocheng.play.CalculatorTest.negative_numbers_will_throw_exception(CalculatorTest.java:32)
FAIL
Implement
PASS
from http://www.oracle.com/
Design
We need a addNewCustomer() method that will save a customer
record in Database
Test
Test
java.lang.NullPointerExceptionat tw.idv.haocheng.CustomerDAOTest.addNewCustomer(CustomerDAOTest.java:24)
FAIL
Implement
PASS
from https://www.google.com/accounts/NewAccount
Design
We hava a page that user can apply for a new account
Test
Test
wicket.markup.MarkupException: Unable to find component with id 'accountFormPanel' in [MarkupContainer ....at ngc.account.wicket.edit.CreateAccountPageTest.setUp(CreateAccountPageTest.java:49)
FAIL
Implement
PASS
Unit Test Frameworks
● Java - JUnit● Python - PyUnit● PHP - PHPUnit● Ruby - Test:Unit● Javascript - Jasmine● .Net - NUnit
There's No Silver Bullet
from http://www.penn-olson.com/2009/12/22/social-media-the-silver-bullet/
Costs
from http://ora-pl-sql.blogspot.com/2011/05/database-costs.html
It takes time...
from http://chunkeat626.blogspot.com/2010_11_01_archive.html
Need to maintain tests
from http://www.flickr.com/photos/ilike/2443295369/
TDD is not suitable for...
from http://tw.gamelet.com/game.do?code=heroes
from http://dilbert.com/
But how do I start??
from http://zekjevets.blogspot.com/2010/02/alternative-racism.html
from http://www.alexbolboaca.ro/wordpress/the-remote-pair-programming-tour
Suggestions
● Prepare tools and environments
● Learn to write Unit test
● Start from easy ones
Reading List
● The Bowling Game Kata● Unit Testing Guidelines● Why are we embarrassed to admit that we don’t know how
to write tests? (中譯版本)● "The Clean Code Talks -- Unit Testing"● Top 10 things which make your code hard to test
References - Test-Driven Development
● Test Driven Development Tutorial by Kirrily Robert● Engineer Notebook: An Extreme Programming Episode by
Robert C. Martin and Robert S. Koss● Technical Debt by Martin Fowler● InfoQ: Testing Misconceptions by Liam O'Connor● Unit Test Isolation● Erratic Test● Singletons are Evil ● RSpec 讓你愛上寫測試