The Road To Test-Driven Development By Christopher Paulicka Software Engineering Manager Copyright Oversee.net 2008 11/6/2015
Download
Report
Transcript The Road To Test-Driven Development By Christopher Paulicka Software Engineering Manager Copyright Oversee.net 2008 11/6/2015
The Road To Test-Driven
Development
By Christopher Paulicka
Software Engineering Manager
Copyright Oversee.net 2008
1
11/6/2015
Introduction
Not just what Test-Driven Development
is…
But also how to get to Test-Driven
Development
Copyright Oversee.net 2008
2
11/6/2015
Agenda
What is Test-Driven Development
One (Abstract) Road to Test-Driven
Development
Your Road to Test-Driven Development
My Road to Test-Driven Development
Copyright Oversee.net 2008
3
11/6/2015
Vocabulary
Test-Driven Development – TDD
Extreme Programming - XP
Copyright Oversee.net 2008
4
11/6/2015
Thanks
Perl Mongers for showing up!
Oversee.net for the nice space
Michael Lee, Director of Engineering, for
“volunteering” me
All the development team here at Oversee
for feedback
Copyright Oversee.net 2008
5
11/6/2015
The Three Participants
Christopher Paulicka
Oversee.net
Perl Mongers
Copyright Oversee.net 2008
6
11/6/2015
Christopher Paulicka
Software Development – 16 years
Testing – 10 years
Perl – 4 years
Test-Driven Development – 1 year
Copyright Oversee.net 2008
7
11/6/2015
Oversee Development
Environment
Agile/Scrum
Perforce
Linux/Apache/MySQL/Perl, RPM
Mason/Catalyst, DBI
Test::More, Test::MockObject
Test::Unit, Test::WWW::Selenium
Module::Build, CPAN2RPM
Copyright Oversee.net 2008
8
11/6/2015
Perl Mongers
Perl aficionados
Please ask questions at any time
What’s your testing experience?
Copyright Oversee.net 2008
9
11/6/2015
What is TDD
TDD is old, but kind of new
Test first, but still follow requirements
Part of Agile/XP, but reusable anywhere
Copyright Oversee.net 2008
10
11/6/2015
Important to Know
History of TDD in Extreme Programming
History of Scrum at Oversee
Copyright Oversee.net 2008
11
11/6/2015
Software Development
Methodologies
Hack
Waterfall
Agile
Copyright Oversee.net 2008
12
11/6/2015
Waterfall Development
Requirements
Design
Implement
Test
Maintain
Copyright Oversee.net 2008
13
11/6/2015
Waterfall Costs
Rigid design
High change costs
Requires expert designers up front
Copyright Oversee.net 2008
14
11/6/2015
Examples of Agile
Methodologies
Extreme Programming
Scrum
Crystal Clear
Feature Driven Development
Adaptive Software Development
DSDM
Copyright Oversee.net 2008
15
11/6/2015
Extreme Programming
Test-Driven Development
Continuous Integration
Pair Programming
Refactoring
Copyright Oversee.net 2008
16
11/6/2015
Cost of Feedback
Copyright Oversee.net 2008
17
11/6/2015
Test-Driven Development
Pick a Feature
Write a Test for that Feature
Run all Tests and see new Test Fail
Write Code for Feature
Run all Tests and see all Tests Pass
Refactor
Repeat
Copyright Oversee.net 2008
18
11/6/2015
A Bit More About Refactoring
Refactor the Code
Refactor the Tests
Refactor the Documentation
Refactor the Design
Copyright Oversee.net 2008
19
11/6/2015
Who owns testing?
QA
Deploy
Systems
Development
Copyright Oversee.net 2008
20
11/6/2015
Types of Testing
Requirements Tests
Integration Tests
System Tests
Development Tests
Copyright Oversee.net 2008
21
11/6/2015
Types of Development Testing
Unit Tests
Regression Tests
Copyright Oversee.net 2008
22
11/6/2015
One Possible Road to TDD
Test to Verify
Test for Regression
Test for Design
Test-Driven Development
Copyright Oversee.net 2008
23
11/6/2015
Test To Verify
Problem arises
Write throw away test
Disposable code modifications
– Logging
– Dumping, etc
Simple and Fast
Gone forever…
Copyright Oversee.net 2008
24
11/6/2015
Why Do We Do That?
Habit
Speed
Anticipation (almost done…)
Copyright Oversee.net 2008
25
11/6/2015
Test for Regression
Problem arises
Write reusable test that duplicates problem
Keep regression test
Run regressions anytime
Copyright Oversee.net 2008
26
11/6/2015
Good, but Good enough?
Bug driven
Prevents regressions
Run tests anytime in development
Focused late in the curve
Expects test framework
Copyright Oversee.net 2008
27
11/6/2015
Test for Design
Design API
Write Code
Write Tests
Refactor
Copyright Oversee.net 2008
28
11/6/2015
Development Test Processes
Piece-wise Test Last
Lump-sum Test Last
Test First aka TDD
Copyright Oversee.net 2008
29
11/6/2015
Test-Driven Development
As Beck said in XP
– Good Rules, lead to
– Good Behavior, which give
– Good Unit Tests
Copyright Oversee.net 2008
30
11/6/2015
Rules
Write code only when test fails
Eliminate duplication afterwards
Copyright Oversee.net 2008
31
11/6/2015
Behaviors
Organic Design
Writing own tests
Rapid response
Modular Design
Copyright Oversee.net 2008
32
11/6/2015
Good Unit Tests
Run fast
Run in isolation
Easy to understand
Use real data
Incremental step (not too large)
Copyright Oversee.net 2008
33
11/6/2015
Your Road To TDD
Why TDD
Cost/Benefit Analysis
How To Start
Copyright Oversee.net 2008
34
11/6/2015
Why Test Driven Design
Tests as Use Cases
Tests as Documentation
Tests as Design
Copyright Oversee.net 2008
35
11/6/2015
Possible reasons to avoid TDD
Tests are programmer focused
May not be requirement focused
Running all tests are slow
Sprinting
Refactoring
Comparing
Copyright Oversee.net 2008
36
11/6/2015
Cost/Benefit of TDD
Industry Analysis
Personal Analysis
Copyright Oversee.net 2008
37
11/6/2015
Benefits - Industry Analysis
Reduce development lead-time
significantly
Programmers that write tests are more
productive
Rarely use a debugger
Easy to revert on test failure
…
Copyright Oversee.net 2008
38
11/6/2015
Benefits – Industry Analysis (cont)
Programmers tests interface first, then
code
Shorter implementation time
High Code coverage
Regressions
More modular code
Copyright Oversee.net 2008
39
11/6/2015
Costs – Industry Analysis
More code
– Though higher productivity with TDD
Costly test setup
– UI
– DB
– Multithreaded
Large legacy code bases
Copyright Oversee.net 2008
40
11/6/2015
Metrics – Industry Analysis
TDD code passed 18 - 50% more external
test cases than control group code
TDD code had 10 – 50% less time spent
debugging code
TDD had from 0 - 16% decrease in
productivity (in lines of non-test code)
…
Copyright Oversee.net 2008
41
11/6/2015
Metrics – Industry Analysis (cont)
TDD has 163% more asserts/module
TDD 2-3x higher test coverage
– line and condition coverage near 100%
TDD coders spent 13% less time
producing solutions that were 12% larger
then control (including tests!)
Copyright Oversee.net 2008
42
11/6/2015
Subjective – Industry Analysis
After the study, when asked:
TDD would stick with TDD
TLD would go to TDD (60%+)
No tests would go to TLD
Copyright Oversee.net 2008
43
11/6/2015
Benefits – Personal Analysis
Senior/Junior Developer Interaction
– Senior approve tests/API
– Junior implements API
– Senior code reviews, done
Tests as Use Cases
Test Documentation more stable then Code
Documentation
Copyright Oversee.net 2008
44
11/6/2015
Costs – Personal Analysis
More code
– Though happier with more feedback
Costly test setup
– UI - WWW::Mechanize
– DB – Test::MockObject
– Multithreaded - …heh…yes.
Large Legacy Codebases are painful, but
TDD may be very beneficial…it’s a start!
Copyright Oversee.net 2008
45
11/6/2015
How To Start
Believe in Testing
Test Framework
Test Coverage
Write Tests First
Copyright Oversee.net 2008
46
11/6/2015
Believe in Testing
If it's worth building, it's worth testing.
If it's not worth testing, why are you
wasting your time working on it?
Copyright Oversee.net 2008
47
11/6/2015
Test Frameworks
Perl has a lot…
Test::Simple
Test::More
Test::Unit
Copyright Oversee.net 2008
48
11/6/2015
Test Coverage
Provide metrics
Devel::Cover
Copyright Oversee.net 2008
49
11/6/2015
Write Tests First
Code review tests
Pair program tests
Always ask, “Where’s the test?”
Help make tests easier
Copyright Oversee.net 2008
50
11/6/2015
Be Aware!
You are now becoming a test expert!
TDD Antipatterns
Don’t test just to test…
Copyright Oversee.net 2008
51
11/6/2015
My Road To Test-Driven
Development
Hewlett-Packard EMSO
Idealab
– X1
– Energy Innovations
Copyright Oversee.net 2008
52
11/6/2015
Lessons from Hewlett-Packard
Tests are nowhere near perfect
Tests can prove your point
Believe in tests!
Copyright Oversee.net 2008
53
11/6/2015
Tests are nowhere near perfect
500000 lines of code
Hundreds of feature tests working
Applications run for 3 days
I knew it was broken
Copyright Oversee.net 2008
54
11/6/2015
Tests can prove your point
No one wanted to believe it
The product needed to ship
Wrote random component
creator/messenger/destroyer
Core dump in less then a millisecond
Created tests from random iterations
Fixed hundreds of memory leaks and
contention issues
Copyright Oversee.net 2008
55
11/6/2015
Lessons from X1
Good Test Framework
Keep each other honest
Copyright Oversee.net 2008
56
11/6/2015
Good Test Framework
Test::Unit
WWW::Mechanize
DBI
– No MockObjects
Copyright Oversee.net 2008
57
11/6/2015
Keep each other honest
Test First, not test eventually
Everybody Writes Tests…
…but feel free to ask for help
Copyright Oversee.net 2008
58
11/6/2015
Lessons from Energy
Innovations
Cost of Refactoring
Beware Gold Plating
It’s easy to get lazy…
Copyright Oversee.net 2008
59
11/6/2015
Summary
Learned about TDD
Learned about benefits (and costs) of TDD
Learned first steps towards TDD
Copyright Oversee.net 2008
60
11/6/2015
Q&A
Copyright Oversee.net 2008
61
11/6/2015
Bibliography
I would highly recommend “The Object Primer”
by Scott W. Ambler, now in it’s third edition.
http://www.agiledata.org/essays/tdd.html
http://en.wikipedia.org/wiki/Testdriven_development
http://en.wikipedia.org/wiki/Agile_software_dev
elopment
http://en.wikipedia.org/wiki/Continuous_integrati
on
http://en.wikipedia.org/wiki/Refactoring
…
Copyright Oversee.net 2008
62
11/6/2015
Bibliography (cont)
http://blog.james-carr.org/?p=44
http://www.ipd.uka.de/Tichy/uploads/publi
kationen/136/MuellerHoefer2007.pdf
http://www.acm.org/src/subpages/gf_entrie
s_06/DavidJanzen_src_gf06.pdf
http://utopia.csis.pace.edu/dps/2008/mcape
llan/projects/TDD/TDD_Idea_Paper_V0403.doc
…
Copyright Oversee.net 2008
63
11/6/2015
Bibliography (cont)
http://www.sciencedirect.com/science?_ob
=ArticleURL&_udi=B75H1-4FC40MJ2&_user=10&_rdoc=1&_fmt=&_orig=sea
rch&_sort=d&view=c&_acct=C00005022
1&_version=1&_urlVersion=0&_userid=1
0&md5=fbd92b394263506930dfafb31003
a916
http://aegis.sourceforge.net/
Copyright Oversee.net 2008
64
11/6/2015