@aleks_voronov
TDD in Real World
ALEXANDER VORONOV
@aleks_voronov
@aleks_voronov
WHAT IS NATURAL?
@aleks_voronov
SURVIVAL OF THE FITTEST
@aleks_voronov
MANUAL TESTING
@aleks_voronov
OH YOU THINK IT'S FASTER?
@aleks_voronov
OH YOU THINK
IT'S FASTER?
@aleks_voronov
LESSONS LEARNED
@aleks_voronov
– Heraclitus
“Everything flows”
@aleks_voronov
SUCCESS!
@aleks_voronov
OR IS IT?
@aleks_voronov
FEEDBACK LOOP
@aleks_voronov
AUTOMATED TESTING
@aleks_voronov
UNIT TESTS
INTEGRATION TESTS
ACCEPTANCE TESTS
MANUAL
@aleks_voronov
UNIT TESTS
INTEGRATION TESTS
ACCEPTANCE TESTS
MANUAL
@aleks_voronov
UNIT TESTS
INTEGRATION TESTS
ACCEPTANCE TESTS
MANUAL
@aleks_voronov
UNIT TESTS
INTEGRATION TESTS
ACCEPTANCE TESTS
MANUAL
@aleks_voronov
SELF-TESTING CODE
@aleks_voronov
TEST DRIVEN
DEVELOPMENT
@aleks_voronov
TDD AS A PRACTICE
DEVELOPMENT PRACTICE
@aleks_voronov
TESTS FIRST
RED ‣ GREEN ‣ REFACTOR
@aleks_voronov
THINK FIRST
THINK ‣ RED ‣ GREEN ‣ REFACTOR
@aleks_voronov
PROFIT✨
@aleks_voronov
SOUNDS LIKE
WE ACHIEVE
SAME WITH
UNIT TESTS...
@aleks_voronov
UNIT TESTING VS TDD
@aleks_voronov
ONLY NECESSARY CODE
BEST CODE IS NO CODE
@aleks_voronov
RED STAGE SCHOOL
TRUE TEST ALWAYS
REMEMBERS
WHERE IT COMES FROM
@aleks_voronov
CLEANER INTERFACES
@aleks_voronov
CLEANER INTERFACES
‣ TESTS ARE FIRST TO USE CODE
@aleks_voronov
CLEANER INTERFACES
‣ TESTS ARE FIRST TO USE CODE
‣ PLAY IN PURE SANDBOX ENVIRONMENT
@aleks_voronov
CLEANER INTERFACES
‣ TESTS ARE FIRST TO USE CODE
‣ PLAY IN PURE SANDBOX ENVIRONMENT
‣ UNBIASED DESIGNING
@aleks_voronov
CLEANER INTERFACES
‣ TESTS ARE FIRST TO USE CODE
‣ PLAY IN PURE SANDBOX ENVIRONMENT
‣ UNBIASED DESIGNING
‣ POORLY DESIGNED CODE WITH TESTS IS STILL BETTER THAN

POORLY DESIGNED CODE WITHOUT TESTS
@aleks_voronov
QUESTIONS ARISE
@aleks_voronov
WHAT IF I NEED
CODE FIRST?
@aleks_voronov
SPIKE SOLUTION
@aleks_voronov
SPIKE SOLUTION
‣ ISOLATE
@aleks_voronov
SPIKE SOLUTION
‣ ISOLATE
‣ SHORTEN FEEDBACK LOOP: REPL, PLAYGROUND, FIDDLE
@aleks_voronov
SPIKE SOLUTION
‣ ISOLATE
‣ SHORTEN FEEDBACK LOOP: REPL, PLAYGROUND, FIDDLE
‣ SETUP SANDBOX: LIBRARIES, STUBBED RESPONSES
@aleks_voronov
REFACTORING WITH TDD
@aleks_voronov
REFACTORING IS
ABOUT CODE
NOT LOGIC
@aleks_voronov
CHANGING INTERFACE
@aleks_voronov
I ❤ PROTOCOLS
@aleks_voronov
STRIVE FOR CONFIDENCE
@aleks_voronov
CHANGING IMPLEMENTATION
@aleks_voronov
DEPENDENCIES
@aleks_voronov
TEST DOUBLES
@aleks_voronov
TEST DOUBLES
‣ DUMMIES
@aleks_voronov
TEST DOUBLES
‣ DUMMIES
‣ FAKES
@aleks_voronov
TEST DOUBLES
‣ DUMMIES
‣ FAKES
‣ STUBS
@aleks_voronov
TEST DOUBLES
‣ DUMMIES
‣ FAKES
‣ STUBS
‣ SPIES
@aleks_voronov
TEST DOUBLES
‣ DUMMIES
‣ FAKES
‣ STUBS
‣ SPIES
‣ MOCKS
@aleks_voronov
TESTING STYLES
CLASSICAL & MOCKIST
@aleks_voronov
CLASSICAL TESTING
@aleks_voronov
CLASSICAL TESTING
‣ ABOUT STATE
@aleks_voronov
CLASSICAL TESTING
‣ ABOUT STATE
‣ CAN BREAK ENCAPSULATION
@aleks_voronov
CLASSICAL TESTING
‣ ABOUT STATE
‣ CAN BREAK ENCAPSULATION
‣ USE STUBS
@aleks_voronov
MOCKIST TESTING
@aleks_voronov
MOCKIST TESTING
‣ ABOUT BEHAVIOUR
@aleks_voronov
MOCKIST TESTING
‣ ABOUT BEHAVIOUR
‣ TELL, DON'T ASK
@aleks_voronov
MOCKIST TESTING
‣ ABOUT BEHAVIOUR
‣ TELL, DON'T ASK
‣ USE MOCKS
@aleks_voronov
DETECT BAD SMELL EARLY
#
@aleks_voronov
TDD FOR BETTER DESIGN
@aleks_voronov
TESTS ARE FIRST
WHO LEAVE FEEDBACK
$ %
@aleks_voronov
TESTS HELP YOU EVOLVE
@aleks_voronov
FUNCTIONAL CORE
IMPERATIVE SHELL
@aleks_voronov
INTRODUCING TDD
TO YOUR TEAM
@aleks_voronov
INTRODUCING TDD
TO YOUR TEAM
‣ JUST START WRITING TESTS
@aleks_voronov
INTRODUCING TDD
TO YOUR TEAM
‣ JUST START WRITING TESTS
‣ TEST SIMPLEST THINGS
@aleks_voronov
INTRODUCING TDD
TO YOUR TEAM
‣ JUST START WRITING TESTS
‣ TEST SIMPLEST THINGS
‣ GET USED WITH TOOLS
@aleks_voronov
INTRODUCING TDD
TO YOUR TEAM
‣ JUST START WRITING TESTS
‣ TEST SIMPLEST THINGS
‣ GET USED WITH TOOLS
‣ LET OTHERS SEE WHAT YOU DO
@aleks_voronov
INTRODUCING TDD
TO YOUR TEAM
‣ JUST START WRITING TESTS
‣ TEST SIMPLEST THINGS
‣ GET USED WITH TOOLS
‣ LET OTHERS SEE WHAT YOU DO
‣ INTRODUCE BOY SCOUT RULE
@aleks_voronov
INTRODUCING TDD
TO YOUR TEAM
‣ JUST START WRITING TESTS
‣ TEST SIMPLEST THINGS
‣ GET USED WITH TOOLS
‣ LET OTHERS SEE WHAT YOU DO
‣ INTRODUCE BOY SCOUT RULE
‣ PAIR PROGRAMMING
@aleks_voronov
HOW TO START
WRITING TESTS?
@aleks_voronov
INTRODUCING TDD
TO LEGACY PROJECT
@aleks_voronov
INTRODUCING TDD
TO LEGACY PROJECT
‣ REMEMBER BOY SCOUT RULE?
@aleks_voronov
INTRODUCING TDD
TO LEGACY PROJECT
‣ REMEMBER BOY SCOUT RULE?
‣ START WITH CRITICAL FEATURES
@aleks_voronov
INTRODUCING TDD
TO LEGACY PROJECT
‣ REMEMBER BOY SCOUT RULE?
‣ START WITH CRITICAL FEATURES
‣ FIND LOWEST POINT YOU CAN TEST
@aleks_voronov
INTRODUCING TDD
TO LEGACY PROJECT
‣ REMEMBER BOY SCOUT RULE?
‣ START WITH CRITICAL FEATURES
‣ FIND LOWEST POINT YOU CAN TEST
‣ ADD TESTS, THEN REFACTOR
@aleks_voronov
INTRODUCING TDD
TO LEGACY PROJECT
‣ REMEMBER BOY SCOUT RULE?
‣ START WITH CRITICAL FEATURES
‣ FIND LOWEST POINT YOU CAN TEST
‣ ADD TESTS, THEN REFACTOR
‣ STEP BY STEP
@aleks_voronov
INTRODUCING TDD
TO LEGACY PROJECT
‣ REMEMBER BOY SCOUT RULE?
‣ START WITH CRITICAL FEATURES
‣ FIND LOWEST POINT YOU CAN TEST
‣ ADD TESTS, THEN REFACTOR
‣ STEP BY STEP
‣ YES, IT TAKES TIME
@aleks_voronov
INTEGRATIONS
@aleks_voronov
CONTINUOUS
INTEGRATION
@aleks_voronov
WALKING SKELETON FIRST
@aleks_voronov
CI SERVICES
@aleks_voronov
SEPARATE JOB PER CONFIG
@aleks_voronov
PULL REQUESTS
& CODE REVIEW
@aleks_voronov
MAKE IT FUN AND CLEAR
@aleks_voronov
DESKTOP
OR MESSENGER
NOTIFICATIONS
@aleks_voronov
MAKE IT FUN AND CLEAR
@aleks_voronov
CONTINUOUS
DEPLOYMENT
@aleks_voronov
MAKE IT FUN AND CLEAR
@aleks_voronov
CODE COVERAGE
@aleks_voronov
THANK YOU!
QUESTIONS?

SE2016 iOS Alexander Voronov "Test driven development in real world"