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!
2. INTRODUCTION
IS TDD REALLY UBIQUITOUS?
EVALUATION OF THE APPLICATION OF TDD ON A REAL WORLD
PROJECT
IMPEDIMENTS AND THEIR RESOLUTION
TANGIBLE BENEFITS
3. PROJECT CONTEXT
T-MOBILE
MOBILE INTERNET PORTAL
WEBNWALK3
PERSONALISED EXPERIENCE
GO LIVE DATE INVARIANT
4. 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
5. “VALTECH BELIEVES
THAT AGILE, AND IN
PARTICULAR TEST
DRIVEN DEVELOPMENT
CAN HELP THESE
COMPANIES DELIVER
QUICKLY AND SAFELY.”
7. MAKING A PROJECT TEST DRIVEN
WHERE WE STARTED
HOW THE INTENT WAS COMMUNICATED
STRUCTURING THE APPLICATION TO STRUCTURE
DEVELOPMENT ACTIVITIES
HUMAN INTERACTION WITH DEVELOPERS
8. MAKING A PROJECT TEST DRIVEN
DEVELOPERS EXPERIENCE
ONE OR TWO WITH
TDD EXPERIENCE //
MOST HAD GOOD
UNDERSTANDING OF
TDD THEORY //
ALMOST ALL HAD
USED JUNIT //
MOST HIGH CALIBRE
JAVA DEVELOPERS
9. MAKING A PROJECT TEST DRIVEN
MANAGEMENT EXPERIENCE
EXPERTS IN MOBILE
TELCO // GOOD
UNDERSTANDING OF
AGILE THEORY //
READY TO EMBRACE
NEW PRACTICES //
LONG HISTORY OF
WATERFALL,
DOCUMENT CENTRIC
10. MAKING A PROJECT TEST DRIVEN
AT INCEPTION
NO INTENT TO USE
TDD
END OF INCEPTION
SOME JUNIT TESTS //
DECIDE TO USE TDD
// MEASURE
EXISTING COVERAGE
// AUDIT EXISTING
USE OF TESTS
11. COMMUNICATING THE INTENT
MOST IMPORTANT
INTERACTIVE SESSIONS
TEAM WAS INEXPERIENED
ACCEPTED INEVITABILITY OF MAKING MISTAKES
12. 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
14. TOP DOWN DEVELOPMENT
Tests
EmailAcceptanceTest EmailWidgetService
Tests
EmailWidgetServiceImplTest EmailWidgetServiceImpl
Uses
CustomerDAO
Tests
CustomerDAOImplTest CustomerDAOImpl
15. RESPECT // EMPOWERMENT // AVOID DOGMA // IN RETROSPECT, TOO
MUCH FLEXIBILITY ALLOWED, ESPECIALLY FOR LESS EXPERIENCED
DEVELOPERS
RESPECTING THE
DEVELOPERS FREEDOM
20. DISILLUSIONMENT
PATTERN SEEN ON SEVERAL PROJECTS
COMMON AMONGST NEW PRACTITIONERS
EVERYONE WENT THROUGH SOME OF THE STAGES
21. DISILLUSIONMENT
TOO FOCUSED ON TDD AS AN OBJECTIVE RATHER THAN AS A
VEHICLE
VELOCITY BEING MEASURED FOR FIRST TIME
HIGHLIGHTS SLIPPAGE
TDD BLAMED
22. 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
23. 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
24. 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 ;}};
}
27. 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
28. LOW COHESION
Logic for implementation of transformation Http Client
implemented piecemeal for several classes
AuctionWidgetModel
Tests WidgetService Worker HmlService
Tests Tests
AuctionWidgetModelTest
Tests WorkerTest Tests
+testSelling() +testCombineWatchingAndBuyingTotals()
Tests
Logic for testing data transformation HmlServiceTest
Tests
implemented in several different classes +testWatchingData()
29. HIGH COHESION
All data transformation logic encapsulated in
Xml Adaptor. All tests and test data in XmlAdaptorTest.
WidgetService Worker HttpClient
AuctionWidgetModel XmlAdaptor
Tests
XmlAdaptorTest
30. A COMMON PROBLEM // TDD ENCOURAGES FOCUS ON WHAT IS
REQUIRED // DISCOURAGES SPECULATION SEEMS PARTICULARLY TRUE
FOR COMMON INFRASTRUCTURE COMPONENTS
YAGNI:
YOU AIN‟T GOING TO
NEED IT
32. VIRTUOUS CIRCLE OF AGILITY
STAKEHOLDERS WERE INCLUDED IN TDD
INCREASED CONFIDENCE IN CORRECTNESS
COMPARED FAVOURABLY WITH PREVIOUS EXPERIENCE
33. 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
34.
35. 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