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

Post on 23-Jan-2015

859 Views

Category:

Technology

4 Downloads

Preview:

Click to see full reader

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

EFFECTIVE AND PRAGMATIC TEST DRIVEN DEVELOPMENT

ANDREW RENDELL, PRINCIPAL CONSULTANT

INTRODUCTION

IS TDD REALLY UBIQUITOUS?

EVALUATION OF THE APPLICATION OF TDD ON A REAL WORLD PROJECT

IMPEDIMENTS AND THEIR RESOLUTION

TANGIBLE BENEFITS

PROJECT CONTEXT

T-MOBILE

MOBILE INTERNET PORTAL

WEBNWALK3

PERSONALISED EXPERIENCE

GO LIVE DATE INVARIANT

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

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

MAKING A PROJECT TEST DRIVEN

MAKING A PROJECT TEST DRIVEN

WHERE WE STARTED

HOW THE INTENT WAS COMMUNICATED

STRUCTURING THE APPLICATION TO STRUCTURE DEVELOPMENT ACTIVITIES

HUMAN INTERACTION WITH DEVELOPERS

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

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

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

COMMUNICATING THE INTENT

MOST IMPORTANT

INTERACTIVE SESSIONS

TEAM WAS INEXPERIENED

ACCEPTED INEVITABILITY OF MAKING MISTAKES

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

XXXEmailContract

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

JUnit4 Test

XXXEmailWidgetService

XXXEmailAcceptanceTest

EmailWidgetService

EmailWidgetServiceImpl

CustomerDAO

EmailAcceptanceTest

CustomerDAOImpl

EmailWidgetService

TOP DOWN DEVELOPMENT

Uses

CustomerDAOImplTest

EmailWidgetServiceImplTest Tests

Tests

Tests

RESPECTING THE DEVELOPERS FREEDOM

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

IMPEDIMENTS AND PITFALLS DISILLUSINMENT // DOGMATIC APPROACH

DISILLUSIONMENT

PATTERN SEEN ON SEVERAL PROJECTS

COMMON AMONGST NEW PRACTITIONERS

EVERYONE WENT THROUGH SOME OF THE STAGES

DISILLUSIONMENT

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

VELOCITY BEING MEASURED FOR FIRST TIME

HIGHLIGHTS SLIPPAGE

TDD BLAMED

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

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

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 ;}}; }

MEASURABLE BENEFITS

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

MEASURABLE BENEFITS

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

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

HIGH COHESION

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

Tests AuctionWidgetModel

WidgetService Worker HttpClient

XmlAdaptor

XmlAdaptorTest

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

VIRTUOUS CIRCLE OF AGILITY

VIRTUOUS CIRCLE OF AGILITY

STAKEHOLDERS WERE INCLUDED IN TDD

INCREASED CONFIDENCE IN CORRECTNESS

COMPARED FAVOURABLY WITH PREVIOUS EXPERIENCE

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

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

Andrew.Rendell@valtech.co.uk http://twitter.com/anderew http://www.valtech.co.uk http://blog.valtech.co.uk http://twitter.com/valtech

top related