effective and pragmatic test driven development by andrew rendell, principal consultant at valtech
Post on 23-Jan-2015
859 Views
Preview:
DESCRIPTION
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