effective and pragmatic test driven development by andrew rendell, principal consultant at valtech

36
EFFECTIVE AND PRAGMATIC TEST DRIVEN DEVELOPMENT ANDREW RENDELL, PRINCIPAL CONSULTANT

Upload: valtech-uk

Post on 23-Jan-2015

860 views

Category:

Technology


4 download

DESCRIPTION

Andrew Rendell's presentation on test driven developement.The presentation will discuss if TDD is really ubiquitous and evaluate the application of TDD on a real world project!

TRANSCRIPT

Page 1: Effective and pragmatic test driven development by Andrew Rendell, Principal Consultant at Valtech

EFFECTIVE AND PRAGMATIC TEST DRIVEN DEVELOPMENT

ANDREW RENDELL, PRINCIPAL CONSULTANT

Page 2: Effective and pragmatic test driven development by Andrew Rendell, Principal Consultant at Valtech

INTRODUCTION

IS TDD REALLY UBIQUITOUS?

EVALUATION OF THE APPLICATION OF TDD ON A REAL WORLD PROJECT

IMPEDIMENTS AND THEIR RESOLUTION

TANGIBLE BENEFITS

Page 3: Effective and pragmatic test driven development by Andrew Rendell, Principal Consultant at Valtech

PROJECT CONTEXT

T-MOBILE

MOBILE INTERNET PORTAL

WEBNWALK3

PERSONALISED EXPERIENCE

GO LIVE DATE INVARIANT

Page 4: Effective and pragmatic test driven development by Andrew Rendell, Principal Consultant at Valtech

DEVELOPMENT DYNAMIC

STRONG CUSTOMER FOCUS

COMMITMENT TO ERROR FREE USER EXPERIENCE

CARRIER GRADE SOFTWARE QUALITY

PRESSURE TO DELIVER

MARKETING DRIVEN

HIGHLY COMPETITIVE

CONFLICTING DRIVERS

RISK ADVERSE CONSERVATIVE

HIGHLY COMPETITIVE RAPID ADAPTABILITY

Page 5: Effective and pragmatic test driven development by Andrew Rendell, Principal Consultant at Valtech

“VALTECH BELIEVES THAT AGILE, AND IN PARTICULAR TEST DRIVEN DEVELOPMENT CAN HELP THESE COMPANIES DELIVER QUICKLY AND SAFELY.”

Page 6: Effective and pragmatic test driven development by Andrew Rendell, Principal Consultant at Valtech

MAKING A PROJECT TEST DRIVEN

Page 7: Effective and pragmatic test driven development by Andrew Rendell, Principal Consultant at Valtech

MAKING A PROJECT TEST DRIVEN

WHERE WE STARTED

HOW THE INTENT WAS COMMUNICATED

STRUCTURING THE APPLICATION TO STRUCTURE DEVELOPMENT ACTIVITIES

HUMAN INTERACTION WITH DEVELOPERS

Page 8: Effective and pragmatic test driven development by Andrew Rendell, Principal Consultant at Valtech

ONE OR TWO WITH TDD EXPERIENCE // MOST HAD GOOD UNDERSTANDING OF TDD THEORY // ALMOST ALL HAD USED JUNIT // MOST HIGH CALIBRE JAVA DEVELOPERS

DEVELOPERS EXPERIENCE

MAKING A PROJECT TEST DRIVEN

Page 9: Effective and pragmatic test driven development by Andrew Rendell, Principal Consultant at Valtech

EXPERTS IN MOBILE TELCO // GOOD UNDERSTANDING OF AGILE THEORY // READY TO EMBRACE NEW PRACTICES // LONG HISTORY OF WATERFALL, DOCUMENT CENTRIC

MANAGEMENT EXPERIENCE

MAKING A PROJECT TEST DRIVEN

Page 10: Effective and pragmatic test driven development by Andrew Rendell, Principal Consultant at Valtech

NO INTENT TO USE TDD

AT INCEPTION

MAKING A PROJECT TEST DRIVEN

END OF INCEPTION SOME JUNIT TESTS // DECIDE TO USE TDD // MEASURE EXISTING COVERAGE // AUDIT EXISTING USE OF TESTS

Page 11: Effective and pragmatic test driven development by Andrew Rendell, Principal Consultant at Valtech

COMMUNICATING THE INTENT

MOST IMPORTANT

INTERACTIVE SESSIONS

TEAM WAS INEXPERIENED

ACCEPTED INEVITABILITY OF MAKING MISTAKES

Page 12: Effective and pragmatic test driven development by Andrew Rendell, Principal Consultant at Valtech

TDD THROUGH APPLICATION STRUCTURE

WEBNWALK IS A STANDARD MVC APPLICATION

INDENTIFIED INTEGRATION PAIN POINT PRESENTATION LAYER / SERVER SIDE

DIFFERENT TEAMS, SKILLS, COMPLEXITY, TIMESCALES

RIGOROUS DEFINITION OF INTERFACE THROUGH CONTRACT

CONTRACT BECOMES STARTING POINT OF DEVELOPMENT

Page 13: Effective and pragmatic test driven development by Andrew Rendell, Principal Consultant at Valtech

XXXEmailContract

+customerNotAuthenticatedWithPartner() : EmailWidgetModel +oneReadOneUnreadEmail() : EmailWidgetModel +noUneadEmailFiveReadEmail() : EmailWidgetModel +noEmai() : EmailWidgetModel +manyEmails() : EmailWidgetModel +errorGettingEmails() : EmailWidgetModel

JUnit4 Test

XXXEmailWidgetService

XXXEmailAcceptanceTest

EmailWidgetService

Page 14: Effective and pragmatic test driven development by Andrew Rendell, Principal Consultant at Valtech

EmailWidgetServiceImpl

CustomerDAO

EmailAcceptanceTest

CustomerDAOImpl

EmailWidgetService

TOP DOWN DEVELOPMENT

Uses

CustomerDAOImplTest

EmailWidgetServiceImplTest Tests

Tests

Tests

Page 15: Effective and pragmatic test driven development by Andrew Rendell, Principal Consultant at Valtech

RESPECTING THE DEVELOPERS FREEDOM

RESPECT // EMPOWERMENT // AVOID DOGMA // IN RETROSPECT, TOO MUCH FLEXIBILITY ALLOWED, ESPECIALLY FOR LESS EXPERIENCED DEVELOPERS

Page 16: Effective and pragmatic test driven development by Andrew Rendell, Principal Consultant at Valtech

IMPEDIMENTS AND PITFALLS DISILLUSINMENT // DOGMATIC APPROACH

Page 17: Effective and pragmatic test driven development by Andrew Rendell, Principal Consultant at Valtech
Page 18: Effective and pragmatic test driven development by Andrew Rendell, Principal Consultant at Valtech
Page 19: Effective and pragmatic test driven development by Andrew Rendell, Principal Consultant at Valtech
Page 20: Effective and pragmatic test driven development by Andrew Rendell, Principal Consultant at Valtech

DISILLUSIONMENT

PATTERN SEEN ON SEVERAL PROJECTS

COMMON AMONGST NEW PRACTITIONERS

EVERYONE WENT THROUGH SOME OF THE STAGES

Page 21: Effective and pragmatic test driven development by Andrew Rendell, Principal Consultant at Valtech

DISILLUSIONMENT

TOO FOCUSED ON TDD AS AN OBJECTIVE RATHER THAN AS A VEHICLE

VELOCITY BEING MEASURED FOR FIRST TIME

HIGHLIGHTS SLIPPAGE

TDD BLAMED

Page 22: Effective and pragmatic test driven development by Andrew Rendell, Principal Consultant at Valtech

DOGMATIC APPLICATION

ALL NEWCOMERS TO TDD AFFECTED,

NOT JUST THOSE LESS EXPERIENCED IN TOOLSET

TOO FOCUSED ON THE APPLICATION OF THE TECHNIQUE

FAILURE TO PERCEIVE THE DIFFERENT IN VALUE OF DIFFERENT TESTS

Page 23: Effective and pragmatic test driven development by Andrew Rendell, Principal Consultant at Valtech

DOGMATIC APPLICATION

BEST DEVELOPERS FOCUSED ON WHY TESTS WERE BEING WRITTEN

WROTE AND REWROTE CLASSES TO EXPEDITE TESTING

VIEWED INCORRECTLY AS „FAILURE‟ BY NEW DEVELOPERS

Page 24: Effective and pragmatic test driven development by Andrew Rendell, Principal Consultant at Valtech

TRIVIAL EXAMPLE

AverageDurationAnalyserImpl.java /** * Obtains the current time. * protected so can be overridden in unit test */ protected long getCurrentTime() { return System.currentTimeMillis(); }

AverageDurationAnalyserImplTest.java private static long RIGHT_NOW = 1000; @Before public void onSetup() { analyser = new AverageDurationAnalyserImpl(){ @Override protected long getCurrentTime() {return RIGHT_NOW ;}}; }

Page 25: Effective and pragmatic test driven development by Andrew Rendell, Principal Consultant at Valtech

MEASURABLE BENEFITS

Page 26: Effective and pragmatic test driven development by Andrew Rendell, Principal Consultant at Valtech

IMPROVED CODE STRUCTURE // LESS REDUNDANT EFFORT// VIRTUOUS CIRCLE

MEASURABLE BENEFITS

Page 27: Effective and pragmatic test driven development by Andrew Rendell, Principal Consultant at Valtech

IMPROVED COHESION

STRONG COHESION IS ONE OF THE MOST IMPORTANT ATTRIBUTES OF WELL STRUCTURED CODE

TDD NATURALLY ENCOURAGES COHESION

TOP DOWN APPROACH MEANS RESPONSIBILITY IS WELL UNDERSTOOD BEFORE CODE IS BEGUN

WRITING A TEST WHICH HAS MORE THAN ONE SET OF GOALS IS AN OBVIOUS BAD SMELL AND INDICATES TIME TO DELEGATE

Page 28: Effective and pragmatic test driven development by Andrew Rendell, Principal Consultant at Valtech

LOW COHESION

Logic for implementation of transformation implemented piecemeal for several classes

Logic for testing data transformation implemented in several different classes

Tests

Tests

Tests

AuctionWidgetModelTest

+testSelling()

Tests AuctionWidgetModel WidgetService Worker HmlService

Http Client

Tests WorkerTest

+testCombineWatchingAndBuyingTotals()

Tests HmlServiceTest

+testWatchingData()

Tests

Page 29: Effective and pragmatic test driven development by Andrew Rendell, Principal Consultant at Valtech

HIGH COHESION

All data transformation logic encapsulated in Xml Adaptor. All tests and test data in XmlAdaptorTest.

Tests AuctionWidgetModel

WidgetService Worker HttpClient

XmlAdaptor

XmlAdaptorTest

Page 30: Effective and pragmatic test driven development by Andrew Rendell, Principal Consultant at Valtech

YAGNI: YOU AIN‟T GOING TO NEED IT

A COMMON PROBLEM // TDD ENCOURAGES FOCUS ON WHAT IS REQUIRED // DISCOURAGES SPECULATION SEEMS PARTICULARLY TRUE FOR COMMON INFRASTRUCTURE COMPONENTS

Page 31: Effective and pragmatic test driven development by Andrew Rendell, Principal Consultant at Valtech

VIRTUOUS CIRCLE OF AGILITY

Page 32: Effective and pragmatic test driven development by Andrew Rendell, Principal Consultant at Valtech

VIRTUOUS CIRCLE OF AGILITY

STAKEHOLDERS WERE INCLUDED IN TDD

INCREASED CONFIDENCE IN CORRECTNESS

COMPARED FAVOURABLY WITH PREVIOUS EXPERIENCE

Page 33: Effective and pragmatic test driven development by Andrew Rendell, Principal Consultant at Valtech

EXAMPLE

IDENTIFICATION MODULE

HIGH COMPLEXITY AND RISK

ALL PARTIES INVOLVED IN ANALYSIS

TESTS VERIFY IMPLEMENTATION

HUMAN TESTER SIGNS OFF IMPLEMENTATION

SUBSEQUENT CHANGES NOT BLOCKED BY MANAGEMENT

CONFIDENCE HIGH

Page 34: Effective and pragmatic test driven development by Andrew Rendell, Principal Consultant at Valtech
Page 35: Effective and pragmatic test driven development by Andrew Rendell, Principal Consultant at Valtech

CONCLUSIONS

TEST DRIVEN DEVELOPMENT IS WIDELY KNOWN

PRACTICAL EXPERIENCE IS RARER

INTRODUCTION CAN BE DIFFICULT

THE TECHNIQUE BRINGS REWARDS

REAL DIFFERENCE TO DELIVERY OF THE WEBNWALK PLATFORM

Page 36: Effective and pragmatic test driven development by Andrew Rendell, Principal Consultant at Valtech

[email protected] http://twitter.com/anderew http://www.valtech.co.uk http://blog.valtech.co.uk http://twitter.com/valtech