se2016 ios alexander voronov "test driven development in real world"

92
@aleks_voronov TDD in Real World ALEXANDER VORONOV @aleks_voronov

Upload: inhacking

Post on 12-Jan-2017

153 views

Category:

Mobile


3 download

TRANSCRIPT

@aleks_voronov

TDD in Real WorldALEXANDER 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 FIRSTRED ‣ GREEN ‣ REFACTOR

@aleks_voronov

THINK FIRSTTHINK ‣ 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 CODEBEST CODE IS NO CODE

@aleks_voronov

RED STAGE SCHOOLTRUE 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 THANPOORLY 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 STYLESCLASSICAL & 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?