113
A Love Story @nellshamrell Test Driven Development Tuesday, April 16, 13

Test Driven Development: A Love Story

Embed Size (px)

Citation preview

Page 1: Test Driven Development: A Love Story

A Love Story

@nellshamrell

Test Driven Development

Tuesday, April 16, 13

Page 2: Test Driven Development: A Love Story

Code

Tuesday, April 16, 13

Page 3: Test Driven Development: A Love Story

Legacy Code

Tuesday, April 16, 13

Page 4: Test Driven Development: A Love Story

Tuesday, April 16, 13

Page 5: Test Driven Development: A Love Story

Tuesday, April 16, 13

Page 6: Test Driven Development: A Love Story

Tuesday, April 16, 13

Page 7: Test Driven Development: A Love Story

Grief

Tuesday, April 16, 13

Page 8: Test Driven Development: A Love Story

Stages of GriefDenialAnger

BargainingDepressionAcceptance

Tuesday, April 16, 13

Page 9: Test Driven Development: A Love Story

Grief

Tuesday, April 16, 13

Page 10: Test Driven Development: A Love Story

Test Driven Development is the key

TDD

Tuesday, April 16, 13

Page 11: Test Driven Development: A Love Story

Tuesday, April 16, 13

Page 12: Test Driven Development: A Love Story

Denial

Tuesday, April 16, 13

Page 13: Test Driven Development: A Love Story

I will write tests when I have time

Tuesday, April 16, 13

Page 14: Test Driven Development: A Love Story

Changed Class

Tuesday, April 16, 13

Page 15: Test Driven Development: A Love Story

Changed Class

Unrelated Class

Unrelated Class

Tuesday, April 16, 13

Page 16: Test Driven Development: A Love Story

Changed Class

Unrelated Class

Unrelated Class

Unrelated Class

Tuesday, April 16, 13

Page 17: Test Driven Development: A Love Story

Changed Class

Unrelated Class

Unrelated Class

Unrelated Class

Unrelated Class

Unrelated Class

Unrelated Class

Unrelated Class

Unrelated Class

Unrelated Class

Unrelated Class

Tuesday, April 16, 13

Page 18: Test Driven Development: A Love Story

Deploying without tests is flying blind

Tuesday, April 16, 13

Page 19: Test Driven Development: A Love Story

A magical, better time in the future never comes

Tuesday, April 16, 13

Page 20: Test Driven Development: A Love Story

The more stress you feel, the less testing

you will do...- Kent Beck

Tuesday, April 16, 13

Page 21: Test Driven Development: A Love Story

The less testing you do, the more errors

you will make- Kent Beck

Tuesday, April 16, 13

Page 22: Test Driven Development: A Love Story

The ideal time to write tests is now

Tuesday, April 16, 13

Page 23: Test Driven Development: A Love Story

But...where do I start?

Tuesday, April 16, 13

Page 24: Test Driven Development: A Love Story

Tuesday, April 16, 13

Page 25: Test Driven Development: A Love Story

Anger

Tuesday, April 16, 13

Page 26: Test Driven Development: A Love Story

What were they thinking?!

Tuesday, April 16, 13

Page 27: Test Driven Development: A Love Story

I cannot change past actions

Tuesday, April 16, 13

Page 28: Test Driven Development: A Love Story

I can only change my own actions

Tuesday, April 16, 13

Page 29: Test Driven Development: A Love Story

Adding tests to legacy code takes time

Tuesday, April 16, 13

Page 30: Test Driven Development: A Love Story

Take small steps that can be verified

- Noel Rappin

Tuesday, April 16, 13

Page 31: Test Driven Development: A Love Story

Any new code must have tests

Tuesday, April 16, 13

Page 32: Test Driven Development: A Love Story

New Code

Legacy Code

Call new testedcode from legacy

code

Tuesday, April 16, 13

Page 33: Test Driven Development: A Love Story

Bugs in code must be reproduced with a test

Tuesday, April 16, 13

Page 34: Test Driven Development: A Love Story

User Steps Test Steps

Tuesday, April 16, 13

Page 35: Test Driven Development: A Love Story

User Steps Test StepsVisit form

Tuesday, April 16, 13

Page 36: Test Driven Development: A Love Story

User Steps Test StepsVisit form

Leave field blank

Tuesday, April 16, 13

Page 37: Test Driven Development: A Love Story

User Steps Test StepsVisit form

Leave field blank

Click “Submit”

Tuesday, April 16, 13

Page 38: Test Driven Development: A Love Story

User Steps Test StepsVisit form

Leave field blank

Click “Submit”

Application crashes

Tuesday, April 16, 13

Page 39: Test Driven Development: A Love Story

User Steps Test StepsVisit form

Leave field blank

Click “Submit”

Application crashes

New object

Tuesday, April 16, 13

Page 40: Test Driven Development: A Love Story

User Steps Test StepsVisit form

Leave field blank

Click “Submit”

Application crashes

New object

Leave field blank

Tuesday, April 16, 13

Page 41: Test Driven Development: A Love Story

User Steps Test StepsVisit form

Leave field blank

Click “Submit”

Application crashes

New object

Leave field blank

Save object

Tuesday, April 16, 13

Page 42: Test Driven Development: A Love Story

User Steps Test StepsVisit form

Leave field blank

Click “Submit”

Application crashes

New object

Leave field blank

Save object

Test returns exception

Tuesday, April 16, 13

Page 43: Test Driven Development: A Love Story

What should my code do?

Tuesday, April 16, 13

Page 44: Test Driven Development: A Love Story

it “returns a useful error” do

end

Tuesday, April 16, 13

Page 45: Test Driven Development: A Love Story

it “returns a useful error” do

end

new_object = Object.new

Tuesday, April 16, 13

Page 46: Test Driven Development: A Love Story

it “returns a useful error” do

end

new_object = Object.newnew_object.required = nil

Tuesday, April 16, 13

Page 47: Test Driven Development: A Love Story

it “returns a useful error” do

end

new_object = Object.newnew_object.required = nilnew_object.save!

Tuesday, April 16, 13

Page 48: Test Driven Development: A Love Story

it “returns a useful error” do

end

new_object = Object.newnew_object.required = nilnew_object.save!new_object.errors.should include (“Required field is blank”)

Tuesday, April 16, 13

Page 49: Test Driven Development: A Love Story

Use tests to learn legacy code

Tuesday, April 16, 13

Page 50: Test Driven Development: A Love Story

Tuesday, April 16, 13

Page 51: Test Driven Development: A Love Story

Bargaining

Tuesday, April 16, 13

Page 52: Test Driven Development: A Love Story

I write my code, then write my test

Tuesday, April 16, 13

Page 53: Test Driven Development: A Love Story

Write Code

Write Tests

Tuesday, April 16, 13

Page 54: Test Driven Development: A Love Story

Write Code

Tuesday, April 16, 13

Page 55: Test Driven Development: A Love Story

Write Code

Manually Test

Tuesday, April 16, 13

Page 56: Test Driven Development: A Love Story

Write Code

Manually Test

Modify Code

Tuesday, April 16, 13

Page 57: Test Driven Development: A Love Story

Write Code

Manually Test

Modify Code

Manually Test

Tuesday, April 16, 13

Page 58: Test Driven Development: A Love Story

Write Code

Manually Test

Modify Code

Manually Test

WriteTest

Tuesday, April 16, 13

Page 59: Test Driven Development: A Love Story

Write Code

Manually Test

Modify Code

Manually Test

WriteTest

Modify Code

Tuesday, April 16, 13

Page 60: Test Driven Development: A Love Story

Write Code

Manually Test

Modify Code

Manually Test

WriteTest

Modify Code

Manually Test

Tuesday, April 16, 13

Page 61: Test Driven Development: A Love Story

Write Code

Manually Test

Modify Code

Manually Test

WriteTest

Modify Code

Manually Test

ModifyTest

Tuesday, April 16, 13

Page 62: Test Driven Development: A Love Story

Testing last leaves holes in test coverage

Tuesday, April 16, 13

Page 63: Test Driven Development: A Love Story

Write FailingTest

Tuesday, April 16, 13

Page 64: Test Driven Development: A Love Story

Write FailingTest

Make Test Pass

Tuesday, April 16, 13

Page 65: Test Driven Development: A Love Story

Write FailingTest

Make Test Pass

Refactor

Tuesday, April 16, 13

Page 66: Test Driven Development: A Love Story

Write FailingTest

Make Test Pass

Refactor

Red

Tuesday, April 16, 13

Page 67: Test Driven Development: A Love Story

Write FailingTest

Make Test Pass

Refactor

Red Green

Tuesday, April 16, 13

Page 68: Test Driven Development: A Love Story

Write FailingTest

Make Test Pass

Refactor

Red Green Refactor

Tuesday, April 16, 13

Page 69: Test Driven Development: A Love Story

Never write new functionality without

a failing test- Steve Freeman

& Nat PryceTuesday, April 16, 13

Page 70: Test Driven Development: A Love Story

Testing is about trust

- Robert C. Martin

Tuesday, April 16, 13

Page 71: Test Driven Development: A Love Story

Tuesday, April 16, 13

Page 72: Test Driven Development: A Love Story

Depression

Tuesday, April 16, 13

Page 73: Test Driven Development: A Love Story

What’s the point?

Tuesday, April 16, 13

Page 74: Test Driven Development: A Love Story

Change will happen

Tuesday, April 16, 13

Page 75: Test Driven Development: A Love Story

Every line of tested code is reliable code

Tuesday, April 16, 13

Page 76: Test Driven Development: A Love Story

Every line of untested code is unreliable code

Tuesday, April 16, 13

Page 77: Test Driven Development: A Love Story

Do the right thing

Tuesday, April 16, 13

Page 78: Test Driven Development: A Love Story

Tuesday, April 16, 13

Page 79: Test Driven Development: A Love Story

Acceptance

Tuesday, April 16, 13

Page 80: Test Driven Development: A Love Story

Tests prevent breaking

Tuesday, April 16, 13

Page 81: Test Driven Development: A Love Story

Tests are documentation

Tuesday, April 16, 13

Page 82: Test Driven Development: A Love Story

it “returns the correct rate” do tax_rate(seattle).should == .095end

Tuesday, April 16, 13

Page 83: Test Driven Development: A Love Story

it “returns the correct rate” do tax_rate(seattle).should == .095endit “creates a new object” do get :new assigns(new_object).should_be new_recordend

Tuesday, April 16, 13

Page 84: Test Driven Development: A Love Story

it “returns the correct rate” do tax_rate(seattle).should == .095endit “creates a new object” do get :new assigns(new_object).should_be new_recordendit “saves to the database” do expect(save_method).to change{Table.count}.by(1)end

Tuesday, April 16, 13

Page 85: Test Driven Development: A Love Story

Test Driven Code is better code

Tuesday, April 16, 13

Page 86: Test Driven Development: A Love Story

ModularLoosely CoupledSmall Methods

Test Driven Code is...

Tuesday, April 16, 13

Page 87: Test Driven Development: A Love Story

Tests remove fear

Tuesday, April 16, 13

Page 88: Test Driven Development: A Love Story

Tuesday, April 16, 13

Page 89: Test Driven Development: A Love Story

Love

Tuesday, April 16, 13

Page 90: Test Driven Development: A Love Story

Test Drive an external API?

Tuesday, April 16, 13

Page 91: Test Driven Development: A Love Story

My Code API

Tuesday, April 16, 13

Page 92: Test Driven Development: A Love Story

My Code API

Calls API method

Tuesday, April 16, 13

Page 93: Test Driven Development: A Love Story

My Code API

Calls API method

Sends response

Tuesday, April 16, 13

Page 94: Test Driven Development: A Love Story

Mocks and Stubs

Tuesday, April 16, 13

Page 95: Test Driven Development: A Love Story

A stub is a stand in for an object called

by my code

Tuesday, April 16, 13

Page 96: Test Driven Development: A Love Story

My Code API Stub

Tuesday, April 16, 13

Page 97: Test Driven Development: A Love Story

My Code

Calls API method

API Stub

Tuesday, April 16, 13

Page 98: Test Driven Development: A Love Story

My Code

Calls API method

Sends scripted response

API Stub

Tuesday, April 16, 13

Page 99: Test Driven Development: A Love Story

Mocks are “stubs with attitude”

- Russ Olsen

Tuesday, April 16, 13

Page 100: Test Driven Development: A Love Story

My Code API Mock

Tuesday, April 16, 13

Page 101: Test Driven Development: A Love Story

My Code

Calls API method

API Mock

Tuesday, April 16, 13

Page 102: Test Driven Development: A Love Story

My Code

Calls API method

Sends scripted response

API Mock

Tuesday, April 16, 13

Page 103: Test Driven Development: A Love Story

My Code API Mock

Tuesday, April 16, 13

Page 104: Test Driven Development: A Love Story

My Code

Unexpected method call

API Mock

Tuesday, April 16, 13

Page 105: Test Driven Development: A Love Story

My Code

Unexpected method call

API Mock

Test FAILSX

Tuesday, April 16, 13

Page 106: Test Driven Development: A Love Story

The truth is out there(Just need to ask!)

Tuesday, April 16, 13

Page 107: Test Driven Development: A Love Story

Testing is evolving

Tuesday, April 16, 13

Page 108: Test Driven Development: A Love Story

Testing is a journey

Tuesday, April 16, 13

Page 109: Test Driven Development: A Love Story

Test Driven Development changed my code

Tuesday, April 16, 13

Page 110: Test Driven Development: A Love Story

Test Driven Development changed me

Tuesday, April 16, 13

Page 111: Test Driven Development: A Love Story

Test Driven Development is developing

beyond myself

Tuesday, April 16, 13

Page 112: Test Driven Development: A Love Story

Code

Tuesday, April 16, 13

Page 113: Test Driven Development: A Love Story

Nell Shamrell

Software Development Engineer withBlue Box Inc

@nellshamrellTuesday, April 16, 13