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