Top Banner
04/26/22 Copyright Oversee.net 2008 1 The Road To Test- The Road To Test- Driven Development Driven Development By Christopher Paulicka Software Engineering Manager
64

The Road to Test Driven Development

Jan 27, 2015

Download

Documents

Softwarecentral

 
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: The Road to Test Driven Development

04/10/23Copyright Oversee.net 20081

The Road To Test-Driven The Road To Test-Driven DevelopmentDevelopment

By Christopher PaulickaSoftware Engineering Manager

Page 2: The Road to Test Driven Development

04/10/23Copyright Oversee.net 20082

Introduction Introduction

Not just what Test-Driven Development is…

But also how to get to Test-Driven Development

Page 3: The Road to Test Driven Development

04/10/23Copyright Oversee.net 20083

AgendaAgenda

What is Test-Driven DevelopmentOne (Abstract) Road to Test-Driven

DevelopmentYour Road to Test-Driven DevelopmentMy Road to Test-Driven Development

Page 4: The Road to Test Driven Development

04/10/23Copyright Oversee.net 20084

VocabularyVocabulary

Test-Driven Development – TDDExtreme Programming - XP

Page 5: The Road to Test Driven Development

04/10/23Copyright Oversee.net 20085

ThanksThanks

Perl Mongers for showing up!Oversee.net for the nice spaceMichael Lee, Director of Engineering, for

“volunteering” meAll the development team here at Oversee

for feedback

Page 6: The Road to Test Driven Development

04/10/23Copyright Oversee.net 20086

The Three ParticipantsThe Three Participants

Christopher PaulickaOversee.netPerl Mongers

Page 7: The Road to Test Driven Development

04/10/23Copyright Oversee.net 20087

Christopher PaulickaChristopher Paulicka

Software Development – 16 yearsTesting – 10 yearsPerl – 4 yearsTest-Driven Development – 1 year

Page 8: The Road to Test Driven Development

04/10/23Copyright Oversee.net 20088

Oversee Development Oversee Development EnvironmentEnvironmentAgile/ScrumPerforceLinux/Apache/MySQL/Perl, RPMMason/Catalyst, DBITest::More, Test::MockObjectTest::Unit, Test::WWW::SeleniumModule::Build, CPAN2RPM

Page 9: The Road to Test Driven Development

04/10/23Copyright Oversee.net 20089

Perl MongersPerl Mongers

Perl aficionadosPlease ask questions at any timeWhat’s your testing experience?

Page 10: The Road to Test Driven Development

04/10/23Copyright Oversee.net 200810

What is TDDWhat is TDD

TDD is old, but kind of newTest first, but still follow requirementsPart of Agile/XP, but reusable anywhere

Page 11: The Road to Test Driven Development

04/10/23Copyright Oversee.net 200811

Important to KnowImportant to Know

History of TDD in Extreme ProgrammingHistory of Scrum at Oversee

Page 12: The Road to Test Driven Development

04/10/23Copyright Oversee.net 200812

Software Development Software Development MethodologiesMethodologiesHackWaterfallAgile

Page 13: The Road to Test Driven Development

04/10/23Copyright Oversee.net 200813

Waterfall DevelopmentWaterfall Development

RequirementsDesignImplementTestMaintain

Page 14: The Road to Test Driven Development

04/10/23Copyright Oversee.net 200814

Waterfall CostsWaterfall Costs

Rigid designHigh change costsRequires expert designers up front

Page 15: The Road to Test Driven Development

04/10/23Copyright Oversee.net 200815

Examples of Agile Examples of Agile MethodologiesMethodologiesExtreme ProgrammingScrumCrystal ClearFeature Driven DevelopmentAdaptive Software DevelopmentDSDM

Page 16: The Road to Test Driven Development

04/10/23Copyright Oversee.net 200816

Extreme ProgrammingExtreme Programming

Test-Driven DevelopmentContinuous IntegrationPair ProgrammingRefactoring

Page 17: The Road to Test Driven Development

04/10/23Copyright Oversee.net 200817

Cost of FeedbackCost of Feedback

Page 18: The Road to Test Driven Development

04/10/23Copyright Oversee.net 200818

Test-Driven DevelopmentTest-Driven Development

Pick a FeatureWrite a Test for that FeatureRun all Tests and see new Test FailWrite Code for FeatureRun all Tests and see all Tests PassRefactorRepeat

Page 19: The Road to Test Driven Development

04/10/23Copyright Oversee.net 200819

A Bit More About RefactoringA Bit More About Refactoring

Refactor the CodeRefactor the TestsRefactor the DocumentationRefactor the Design

Page 20: The Road to Test Driven Development

04/10/23Copyright Oversee.net 200820

Who owns testing?Who owns testing?

QADeploySystemsDevelopment

Page 21: The Road to Test Driven Development

04/10/23Copyright Oversee.net 200821

Types of TestingTypes of Testing

Requirements TestsIntegration TestsSystem TestsDevelopment Tests

Page 22: The Road to Test Driven Development

04/10/23Copyright Oversee.net 200822

Types of Development TestingTypes of Development Testing

Unit TestsRegression Tests

Page 23: The Road to Test Driven Development

04/10/23Copyright Oversee.net 200823

One Possible Road to TDDOne Possible Road to TDD

Test to VerifyTest for RegressionTest for DesignTest-Driven Development

Page 24: The Road to Test Driven Development

04/10/23Copyright Oversee.net 200824

Test To VerifyTest To Verify

Problem arisesWrite throw away testDisposable code modifications

– Logging– Dumping, etc

Simple and FastGone forever…

Page 25: The Road to Test Driven Development

04/10/23Copyright Oversee.net 200825

Why Do We Do That?Why Do We Do That?

HabitSpeedAnticipation (almost done…)

Page 26: The Road to Test Driven Development

04/10/23Copyright Oversee.net 200826

Test for RegressionTest for Regression

Problem arisesWrite reusable test that duplicates problemKeep regression testRun regressions anytime

Page 27: The Road to Test Driven Development

04/10/23Copyright Oversee.net 200827

Good, but Good enough?Good, but Good enough?

Bug driven Prevents regressionsRun tests anytime in developmentFocused late in the curveExpects test framework

Page 28: The Road to Test Driven Development

04/10/23Copyright Oversee.net 200828

Test for DesignTest for Design

Design APIWrite CodeWrite TestsRefactor

Page 29: The Road to Test Driven Development

04/10/23Copyright Oversee.net 200829

Development Test ProcessesDevelopment Test Processes

Piece-wise Test LastLump-sum Test LastTest First aka TDD

Page 30: The Road to Test Driven Development

04/10/23Copyright Oversee.net 200830

Test-Driven DevelopmentTest-Driven Development

As Beck said in XP– Good Rules, lead to – Good Behavior, which give– Good Unit Tests

Page 31: The Road to Test Driven Development

04/10/23Copyright Oversee.net 200831

RulesRules

Write code only when test failsEliminate duplication afterwards

Page 32: The Road to Test Driven Development

04/10/23Copyright Oversee.net 200832

BehaviorsBehaviors

Organic DesignWriting own testsRapid responseModular Design

Page 33: The Road to Test Driven Development

04/10/23Copyright Oversee.net 200833

Good Unit TestsGood Unit Tests

Run fastRun in isolationEasy to understandUse real dataIncremental step (not too large)

Page 34: The Road to Test Driven Development

04/10/23Copyright Oversee.net 200834

Your Road To TDDYour Road To TDD

Why TDDCost/Benefit AnalysisHow To Start

Page 35: The Road to Test Driven Development

04/10/23Copyright Oversee.net 200835

Why Test Driven DesignWhy Test Driven Design

Tests as Use CasesTests as DocumentationTests as Design

Page 36: The Road to Test Driven Development

04/10/23Copyright Oversee.net 200836

Possible reasons to avoid TDDPossible reasons to avoid TDD

Tests are programmer focusedMay not be requirement focusedRunning all tests are slowSprintingRefactoringComparing

Page 37: The Road to Test Driven Development

04/10/23Copyright Oversee.net 200837

Cost/Benefit of TDDCost/Benefit of TDD

Industry AnalysisPersonal Analysis

Page 38: The Road to Test Driven Development

04/10/23Copyright Oversee.net 200838

Benefits - Industry AnalysisBenefits - Industry Analysis

Reduce development lead-time significantly

Programmers that write tests are more productive

Rarely use a debuggerEasy to revert on test failure…

Page 39: The Road to Test Driven Development

04/10/23Copyright Oversee.net 200839

Benefits – Industry Analysis (cont)Benefits – Industry Analysis (cont)

Programmers tests interface first, then code

Shorter implementation timeHigh Code coverageRegressionsMore modular code

Page 40: The Road to Test Driven Development

04/10/23Copyright Oversee.net 200840

Costs – Industry AnalysisCosts – Industry Analysis

More code– Though higher productivity with TDD

Costly test setup– UI– DB– Multithreaded

Large legacy code bases

Page 41: The Road to Test Driven Development

04/10/23Copyright Oversee.net 200841

Metrics – Industry AnalysisMetrics – 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)

Page 42: The Road to Test Driven Development

04/10/23Copyright Oversee.net 200842

Metrics – Industry Analysis (cont)Metrics – Industry Analysis (cont)

TDD has 163% more asserts/moduleTDD 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!)

Page 43: The Road to Test Driven Development

04/10/23Copyright Oversee.net 200843

Subjective – Industry AnalysisSubjective – Industry Analysis

After the study, when asked:TDD would stick with TDDTLD would go to TDD (60%+)No tests would go to TLD

Page 44: The Road to Test Driven Development

04/10/23Copyright Oversee.net 200844

Benefits – Personal AnalysisBenefits – Personal Analysis

Senior/Junior Developer Interaction– Senior approve tests/API– Junior implements API– Senior code reviews, done

Tests as Use CasesTest Documentation more stable then

Code Documentation

Page 45: The Road to Test Driven Development

04/10/23Copyright Oversee.net 200845

Costs – Personal AnalysisCosts – 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!

Page 46: The Road to Test Driven Development

04/10/23Copyright Oversee.net 200846

How To StartHow To Start

Believe in TestingTest FrameworkTest CoverageWrite Tests First

Page 47: The Road to Test Driven Development

04/10/23Copyright Oversee.net 200847

Believe in TestingBelieve 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?

Page 48: The Road to Test Driven Development

04/10/23Copyright Oversee.net 200848

Test FrameworksTest Frameworks

Perl has a lot…Test::SimpleTest::MoreTest::Unit

Page 49: The Road to Test Driven Development

04/10/23Copyright Oversee.net 200849

Test CoverageTest Coverage

Provide metricsDevel::Cover

Page 50: The Road to Test Driven Development

04/10/23Copyright Oversee.net 200850

Write Tests FirstWrite Tests First

Code review testsPair program testsAlways ask, “Where’s the test?”Help make tests easier

Page 51: The Road to Test Driven Development

04/10/23Copyright Oversee.net 200851

Be Aware!Be Aware!

You are now becoming a test expert!TDD AntipatternsDon’t test just to test…

Page 52: The Road to Test Driven Development

04/10/23Copyright Oversee.net 200852

My Road To Test-Driven My Road To Test-Driven DevelopmentDevelopmentHewlett-Packard EMSOIdealab

– X1– Energy Innovations

Page 53: The Road to Test Driven Development

04/10/23Copyright Oversee.net 200853

Lessons from Hewlett-PackardLessons from Hewlett-Packard

Tests are nowhere near perfectTests can prove your pointBelieve in tests!

Page 54: The Road to Test Driven Development

04/10/23Copyright Oversee.net 200854

Tests are nowhere near perfectTests are nowhere near perfect

500000 lines of codeHundreds of feature tests workingApplications run for 3 daysI knew it was broken

Page 55: The Road to Test Driven Development

04/10/23Copyright Oversee.net 200855

Tests can prove your pointTests can prove your point

No one wanted to believe itThe product needed to shipWrote random component

creator/messenger/destroyerCore dump in less then a millisecondCreated tests from random iterationsFixed hundreds of memory leaks and

contention issues

Page 56: The Road to Test Driven Development

04/10/23Copyright Oversee.net 200856

Lessons from X1Lessons from X1

Good Test FrameworkKeep each other honest

Page 57: The Road to Test Driven Development

04/10/23Copyright Oversee.net 200857

Good Test FrameworkGood Test Framework

Test::UnitWWW::MechanizeDBI

– No MockObjects

Page 58: The Road to Test Driven Development

04/10/23Copyright Oversee.net 200858

Keep each other honestKeep each other honest

Test First, not test eventuallyEverybody Writes Tests……but feel free to ask for help

Page 59: The Road to Test Driven Development

04/10/23Copyright Oversee.net 200859

Lessons from Energy Lessons from Energy InnovationsInnovationsCost of RefactoringBeware Gold PlatingIt’s easy to get lazy…

Page 60: The Road to Test Driven Development

04/10/23Copyright Oversee.net 200860

SummarySummary

Learned about TDDLearned about benefits (and costs) of TDDLearned first steps towards TDD

Page 61: The Road to Test Driven Development

04/10/23Copyright Oversee.net 200861

Q&AQ&A

Page 62: The Road to Test Driven Development

04/10/23Copyright Oversee.net 200862

BibliographyBibliography 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/Test-driven_develop

ment http://en.wikipedia.org/wiki/Agile_software_dev

elopment http://en.wikipedia.org/wiki/Continuous_integrat

ion http://en.wikipedia.org/wiki/Refactoring …

Page 63: The Road to Test Driven Development

04/10/23Copyright Oversee.net 200863

Bibliography (cont)Bibliography (cont)

http://blog.james-carr.org/?p=44http://www.ipd.uka.de/Tichy/uploads/publi

kationen/136/MuellerHoefer2007.pdfhttp://www.acm.org/src/subpages/gf_entri

es_06/DavidJanzen_src_gf06.pdfhttp://utopia.csis.pace.edu/dps/2008/mcape

llan/projects/TDD/TDD_Idea_Paper_V04-03.doc

Page 64: The Road to Test Driven Development

04/10/23Copyright Oversee.net 200864

Bibliography (cont)Bibliography (cont)

http://www.sciencedirect.com/science?_ob=ArticleURL&_udi=B75H1-4FC40MJ-2&_user=10&_rdoc=1&_fmt=&_orig=search&_sort=d&view=c&_acct=C000050221&_version=1&_urlVersion=0&_userid=10&md5=fbd92b394263506930dfafb31003a916

http://aegis.sourceforge.net/