Top Banner
@aleks_voronov TDD in Real World ALEXANDER VORONOV @aleks_voronov
92

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

Jan 12, 2017

Download

Mobile

Inhacking
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: SE2016 iOS Alexander Voronov "Test driven development in real world"

@aleks_voronov

TDD in Real WorldALEXANDER VORONOV

@aleks_voronov

Page 2: SE2016 iOS Alexander Voronov "Test driven development in real world"

@aleks_voronov

WHAT IS NATURAL?

Page 3: SE2016 iOS Alexander Voronov "Test driven development in real world"

@aleks_voronov

SURVIVAL OF THE FITTEST

Page 4: SE2016 iOS Alexander Voronov "Test driven development in real world"

@aleks_voronov

MANUAL TESTING

Page 5: SE2016 iOS Alexander Voronov "Test driven development in real world"

@aleks_voronov

OH YOU THINK IT'S FASTER?

Page 6: SE2016 iOS Alexander Voronov "Test driven development in real world"

@aleks_voronov

OH YOU THINK IT'S FASTER?

Page 7: SE2016 iOS Alexander Voronov "Test driven development in real world"

@aleks_voronov

LESSONS LEARNED

Page 8: SE2016 iOS Alexander Voronov "Test driven development in real world"

@aleks_voronov

– Heraclitus

“Everything flows”

Page 9: SE2016 iOS Alexander Voronov "Test driven development in real world"

@aleks_voronov

SUCCESS!

Page 10: SE2016 iOS Alexander Voronov "Test driven development in real world"

@aleks_voronov

OR IS IT?

Page 11: SE2016 iOS Alexander Voronov "Test driven development in real world"

@aleks_voronov

FEEDBACK LOOP

Page 12: SE2016 iOS Alexander Voronov "Test driven development in real world"

@aleks_voronov

AUTOMATED TESTING

Page 13: SE2016 iOS Alexander Voronov "Test driven development in real world"

@aleks_voronov

UNIT TESTS

INTEGRATION TESTS

ACCEPTANCE TESTS

MANUAL

Page 14: SE2016 iOS Alexander Voronov "Test driven development in real world"

@aleks_voronov

UNIT TESTS

INTEGRATION TESTS

ACCEPTANCE TESTS

MANUAL

Page 15: SE2016 iOS Alexander Voronov "Test driven development in real world"

@aleks_voronov

UNIT TESTS

INTEGRATION TESTS

ACCEPTANCE TESTS

MANUAL

Page 16: SE2016 iOS Alexander Voronov "Test driven development in real world"

@aleks_voronov

UNIT TESTS

INTEGRATION TESTS

ACCEPTANCE TESTS

MANUAL

Page 17: SE2016 iOS Alexander Voronov "Test driven development in real world"

@aleks_voronov

SELF-TESTING CODE

Page 18: SE2016 iOS Alexander Voronov "Test driven development in real world"

@aleks_voronov

TEST DRIVEN DEVELOPMENT

Page 19: SE2016 iOS Alexander Voronov "Test driven development in real world"

@aleks_voronov

TDD AS A PRACTICE DEVELOPMENT PRACTICE

Page 20: SE2016 iOS Alexander Voronov "Test driven development in real world"

@aleks_voronov

TESTS FIRSTRED ‣ GREEN ‣ REFACTOR

Page 21: SE2016 iOS Alexander Voronov "Test driven development in real world"

@aleks_voronov

THINK FIRSTTHINK ‣ RED ‣ GREEN ‣ REFACTOR

Page 22: SE2016 iOS Alexander Voronov "Test driven development in real world"

@aleks_voronov

PROFIT✨

Page 23: SE2016 iOS Alexander Voronov "Test driven development in real world"

@aleks_voronov

SOUNDS LIKE WE ACHIEVE SAME WITH

UNIT TESTS...

Page 24: SE2016 iOS Alexander Voronov "Test driven development in real world"

@aleks_voronov

UNIT TESTING VS TDD

Page 25: SE2016 iOS Alexander Voronov "Test driven development in real world"

@aleks_voronov

ONLY NECESSARY CODEBEST CODE IS NO CODE

Page 26: SE2016 iOS Alexander Voronov "Test driven development in real world"

@aleks_voronov

RED STAGE SCHOOLTRUE TEST ALWAYS

REMEMBERS WHERE IT COMES FROM

Page 27: SE2016 iOS Alexander Voronov "Test driven development in real world"

@aleks_voronov

CLEANER INTERFACES

Page 28: SE2016 iOS Alexander Voronov "Test driven development in real world"

@aleks_voronov

CLEANER INTERFACES‣ TESTS ARE FIRST TO USE CODE

Page 29: SE2016 iOS Alexander Voronov "Test driven development in real world"

@aleks_voronov

CLEANER INTERFACES‣ TESTS ARE FIRST TO USE CODE

‣ PLAY IN PURE SANDBOX ENVIRONMENT

Page 30: SE2016 iOS Alexander Voronov "Test driven development in real world"

@aleks_voronov

CLEANER INTERFACES‣ TESTS ARE FIRST TO USE CODE

‣ PLAY IN PURE SANDBOX ENVIRONMENT‣ UNBIASED DESIGNING

Page 31: SE2016 iOS Alexander Voronov "Test driven development in real world"

@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 THANPOORLY DESIGNED CODE WITHOUT TESTS

Page 32: SE2016 iOS Alexander Voronov "Test driven development in real world"

@aleks_voronov

QUESTIONS ARISE

Page 33: SE2016 iOS Alexander Voronov "Test driven development in real world"

@aleks_voronov

WHAT IF I NEED CODE FIRST?

Page 34: SE2016 iOS Alexander Voronov "Test driven development in real world"

@aleks_voronov

SPIKE SOLUTION

Page 35: SE2016 iOS Alexander Voronov "Test driven development in real world"

@aleks_voronov

SPIKE SOLUTION‣ ISOLATE

Page 36: SE2016 iOS Alexander Voronov "Test driven development in real world"

@aleks_voronov

SPIKE SOLUTION‣ ISOLATE

‣ SHORTEN FEEDBACK LOOP: REPL, PLAYGROUND, FIDDLE

Page 37: SE2016 iOS Alexander Voronov "Test driven development in real world"

@aleks_voronov

SPIKE SOLUTION‣ ISOLATE

‣ SHORTEN FEEDBACK LOOP: REPL, PLAYGROUND, FIDDLE

‣ SETUP SANDBOX: LIBRARIES, STUBBED RESPONSES

Page 38: SE2016 iOS Alexander Voronov "Test driven development in real world"

@aleks_voronov

REFACTORING WITH TDD

Page 39: SE2016 iOS Alexander Voronov "Test driven development in real world"

@aleks_voronov

REFACTORING IS ABOUT CODE NOT LOGIC

Page 40: SE2016 iOS Alexander Voronov "Test driven development in real world"

@aleks_voronov

CHANGING INTERFACE

Page 41: SE2016 iOS Alexander Voronov "Test driven development in real world"

@aleks_voronov

I ❤ PROTOCOLS

Page 42: SE2016 iOS Alexander Voronov "Test driven development in real world"

@aleks_voronov

STRIVE FOR CONFIDENCE

Page 43: SE2016 iOS Alexander Voronov "Test driven development in real world"

@aleks_voronov

CHANGING IMPLEMENTATION

Page 44: SE2016 iOS Alexander Voronov "Test driven development in real world"

@aleks_voronov

DEPENDENCIES

Page 45: SE2016 iOS Alexander Voronov "Test driven development in real world"

@aleks_voronov

TEST DOUBLES

Page 46: SE2016 iOS Alexander Voronov "Test driven development in real world"

@aleks_voronov

TEST DOUBLES‣ DUMMIES

Page 47: SE2016 iOS Alexander Voronov "Test driven development in real world"

@aleks_voronov

TEST DOUBLES‣ DUMMIES‣ FAKES

Page 48: SE2016 iOS Alexander Voronov "Test driven development in real world"

@aleks_voronov

TEST DOUBLES‣ DUMMIES‣ FAKES‣ STUBS

Page 49: SE2016 iOS Alexander Voronov "Test driven development in real world"

@aleks_voronov

TEST DOUBLES‣ DUMMIES‣ FAKES‣ STUBS‣ SPIES

Page 50: SE2016 iOS Alexander Voronov "Test driven development in real world"

@aleks_voronov

TEST DOUBLES‣ DUMMIES‣ FAKES‣ STUBS‣ SPIES‣ MOCKS

Page 51: SE2016 iOS Alexander Voronov "Test driven development in real world"

@aleks_voronov

TESTING STYLESCLASSICAL & MOCKIST

Page 52: SE2016 iOS Alexander Voronov "Test driven development in real world"

@aleks_voronov

CLASSICAL TESTING

Page 53: SE2016 iOS Alexander Voronov "Test driven development in real world"

@aleks_voronov

CLASSICAL TESTING‣ ABOUT STATE

Page 54: SE2016 iOS Alexander Voronov "Test driven development in real world"

@aleks_voronov

CLASSICAL TESTING‣ ABOUT STATE

‣ CAN BREAK ENCAPSULATION

Page 55: SE2016 iOS Alexander Voronov "Test driven development in real world"

@aleks_voronov

CLASSICAL TESTING‣ ABOUT STATE

‣ CAN BREAK ENCAPSULATION

‣ USE STUBS

Page 56: SE2016 iOS Alexander Voronov "Test driven development in real world"

@aleks_voronov

MOCKIST TESTING

Page 57: SE2016 iOS Alexander Voronov "Test driven development in real world"

@aleks_voronov

MOCKIST TESTING‣ ABOUT BEHAVIOUR

Page 58: SE2016 iOS Alexander Voronov "Test driven development in real world"

@aleks_voronov

MOCKIST TESTING‣ ABOUT BEHAVIOUR

‣ TELL, DON'T ASK

Page 59: SE2016 iOS Alexander Voronov "Test driven development in real world"

@aleks_voronov

MOCKIST TESTING‣ ABOUT BEHAVIOUR

‣ TELL, DON'T ASK

‣ USE MOCKS

Page 60: SE2016 iOS Alexander Voronov "Test driven development in real world"

@aleks_voronov

DETECT BAD SMELL EARLY#

Page 61: SE2016 iOS Alexander Voronov "Test driven development in real world"

@aleks_voronov

TDD FOR BETTER DESIGN

Page 62: SE2016 iOS Alexander Voronov "Test driven development in real world"

@aleks_voronov

TESTS ARE FIRST WHO LEAVE FEEDBACK

$ %

Page 63: SE2016 iOS Alexander Voronov "Test driven development in real world"

@aleks_voronov

TESTS HELP YOU EVOLVE

Page 64: SE2016 iOS Alexander Voronov "Test driven development in real world"

@aleks_voronov

FUNCTIONAL CORE IMPERATIVE SHELL

Page 65: SE2016 iOS Alexander Voronov "Test driven development in real world"

@aleks_voronov

INTRODUCING TDD TO YOUR TEAM

Page 66: SE2016 iOS Alexander Voronov "Test driven development in real world"

@aleks_voronov

INTRODUCING TDD TO YOUR TEAM

‣ JUST START WRITING TESTS

Page 67: SE2016 iOS Alexander Voronov "Test driven development in real world"

@aleks_voronov

INTRODUCING TDD TO YOUR TEAM

‣ JUST START WRITING TESTS

‣ TEST SIMPLEST THINGS

Page 68: SE2016 iOS Alexander Voronov "Test driven development in real world"

@aleks_voronov

INTRODUCING TDD TO YOUR TEAM

‣ JUST START WRITING TESTS

‣ TEST SIMPLEST THINGS

‣ GET USED WITH TOOLS

Page 69: SE2016 iOS Alexander Voronov "Test driven development in real world"

@aleks_voronov

INTRODUCING TDD TO YOUR TEAM

‣ JUST START WRITING TESTS

‣ TEST SIMPLEST THINGS

‣ GET USED WITH TOOLS

‣ LET OTHERS SEE WHAT YOU DO

Page 70: SE2016 iOS Alexander Voronov "Test driven development in real world"

@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

Page 71: SE2016 iOS Alexander Voronov "Test driven development in real world"

@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

Page 72: SE2016 iOS Alexander Voronov "Test driven development in real world"

@aleks_voronov

HOW TO START WRITING TESTS?

Page 73: SE2016 iOS Alexander Voronov "Test driven development in real world"

@aleks_voronov

INTRODUCING TDD TO LEGACY PROJECT

Page 74: SE2016 iOS Alexander Voronov "Test driven development in real world"

@aleks_voronov

INTRODUCING TDD TO LEGACY PROJECT

‣ REMEMBER BOY SCOUT RULE?

Page 75: SE2016 iOS Alexander Voronov "Test driven development in real world"

@aleks_voronov

INTRODUCING TDD TO LEGACY PROJECT

‣ REMEMBER BOY SCOUT RULE?

‣ START WITH CRITICAL FEATURES

Page 76: SE2016 iOS Alexander Voronov "Test driven development in real world"

@aleks_voronov

INTRODUCING TDD TO LEGACY PROJECT

‣ REMEMBER BOY SCOUT RULE?

‣ START WITH CRITICAL FEATURES

‣ FIND LOWEST POINT YOU CAN TEST

Page 77: SE2016 iOS Alexander Voronov "Test driven development in real world"

@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

Page 78: SE2016 iOS Alexander Voronov "Test driven development in real world"

@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

Page 79: SE2016 iOS Alexander Voronov "Test driven development in real world"

@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

Page 80: SE2016 iOS Alexander Voronov "Test driven development in real world"

@aleks_voronov

INTEGRATIONS

Page 81: SE2016 iOS Alexander Voronov "Test driven development in real world"

@aleks_voronov

CONTINUOUS INTEGRATION

Page 82: SE2016 iOS Alexander Voronov "Test driven development in real world"

@aleks_voronov

WALKING SKELETON FIRST

Page 83: SE2016 iOS Alexander Voronov "Test driven development in real world"

@aleks_voronov

CI SERVICES

Page 84: SE2016 iOS Alexander Voronov "Test driven development in real world"

@aleks_voronov

SEPARATE JOB PER CONFIG

Page 85: SE2016 iOS Alexander Voronov "Test driven development in real world"

@aleks_voronov

PULL REQUESTS & CODE REVIEW

Page 86: SE2016 iOS Alexander Voronov "Test driven development in real world"

@aleks_voronov

MAKE IT FUN AND CLEAR

Page 87: SE2016 iOS Alexander Voronov "Test driven development in real world"

@aleks_voronov

DESKTOP OR MESSENGER NOTIFICATIONS

Page 88: SE2016 iOS Alexander Voronov "Test driven development in real world"

@aleks_voronov

MAKE IT FUN AND CLEAR

Page 89: SE2016 iOS Alexander Voronov "Test driven development in real world"

@aleks_voronov

CONTINUOUS DEPLOYMENT

Page 90: SE2016 iOS Alexander Voronov "Test driven development in real world"

@aleks_voronov

MAKE IT FUN AND CLEAR

Page 91: SE2016 iOS Alexander Voronov "Test driven development in real world"

@aleks_voronov

CODE COVERAGE

Page 92: SE2016 iOS Alexander Voronov "Test driven development in real world"

@aleks_voronov

THANK YOU!

QUESTIONS?