Slide 1

Slide 1 text

Testing Best Practices or The 5 Habits of Highly Effective Tests Noel Rappin @noelrap Wednesday, April 25, 12

Slide 2

Slide 2 text

What is an "effective" test? Wednesday, April 25, 12

Slide 3

Slide 3 text

"I get paid for code that works, not for tests" -- Kent Beck Wednesday, April 25, 12

Slide 4

Slide 4 text

Effective tests help you sustainably deliver features Wednesday, April 25, 12

Slide 5

Slide 5 text

How do you know tests are effective? Wednesday, April 25, 12

Slide 6

Slide 6 text

Shallow bugs Wednesday, April 25, 12

Slide 7

Slide 7 text

Not staring into space watching dots fly across the screen Wednesday, April 25, 12

Slide 8

Slide 8 text

Relatively little time spent fixing test problems Wednesday, April 25, 12

Slide 9

Slide 9 text

Simple, clean design Wednesday, April 25, 12

Slide 10

Slide 10 text

One thing I didn't say... Wednesday, April 25, 12

Slide 11

Slide 11 text

Coverage Wednesday, April 25, 12

Slide 12

Slide 12 text

BDD is a software design process Wednesday, April 25, 12

Slide 13

Slide 13 text

How do you know your tests aren't effective? Wednesday, April 25, 12

Slide 14

Slide 14 text

Lots of test fragility Wednesday, April 25, 12

Slide 15

Slide 15 text

Test-based slowdowns Wednesday, April 25, 12

Slide 16

Slide 16 text

No confidence in your ability to change Wednesday, April 25, 12

Slide 17

Slide 17 text

Why is testing effective? Wednesday, April 25, 12

Slide 18

Slide 18 text

Expressing requirements in code Wednesday, April 25, 12

Slide 19

Slide 19 text

Universal client Wednesday, April 25, 12

Slide 20

Slide 20 text

Rapid feedback Wednesday, April 25, 12

Slide 21

Slide 21 text

Canary Wednesday, April 25, 12

Slide 22

Slide 22 text

"More Testable" is a legitimate engineering goal Wednesday, April 25, 12

Slide 23

Slide 23 text

Test-Driven vs. Test First Wednesday, April 25, 12

Slide 24

Slide 24 text

What makes for an effective test? Wednesday, April 25, 12

Slide 25

Slide 25 text

Tests are code without tests! Wednesday, April 25, 12

Slide 26

Slide 26 text

Tests have two lives Wednesday, April 25, 12

Slide 27

Slide 27 text

1. While you are creating the feature Wednesday, April 25, 12

Slide 28

Slide 28 text

2. Until the heat death of the universe Wednesday, April 25, 12

Slide 29

Slide 29 text

All tests have costs Some tests have value Wednesday, April 25, 12

Slide 30

Slide 30 text

Simple Well-defined Independent Fast Truthful Wednesday, April 25, 12

Slide 31

Slide 31 text

Simple Wednesday, April 25, 12

Slide 32

Slide 32 text

A test is simple if its purpose is immediately clear simple Wednesday, April 25, 12

Slide 33

Slide 33 text

Fixtures Long tests Bad naming Clever simple Wednesday, April 25, 12

Slide 34

Slide 34 text

Good naming Factories Refactoring tests simple Wednesday, April 25, 12

Slide 35

Slide 35 text

If the tests can't be simple, the code is bad simple Wednesday, April 25, 12

Slide 36

Slide 36 text

Tests not written via TDD often have trouble being simple simple Wednesday, April 25, 12

Slide 37

Slide 37 text

Well-defined Wednesday, April 25, 12

Slide 38

Slide 38 text

A test is well-defined if it gives the same result every time well-defined Wednesday, April 25, 12

Slide 39

Slide 39 text

Dates Random well-defined Wednesday, April 25, 12

Slide 40

Slide 40 text

Encapsulation Mocks well-defined Wednesday, April 25, 12

Slide 41

Slide 41 text

Independent Wednesday, April 25, 12

Slide 42

Slide 42 text

A test is independent if it does not depend on external state independent Wednesday, April 25, 12

Slide 43

Slide 43 text

Global data Fixtures independent Wednesday, April 25, 12

Slide 44

Slide 44 text

Factories Teardown/ Transactions independent Wednesday, April 25, 12

Slide 45

Slide 45 text

Fast Wednesday, April 25, 12

Slide 46

Slide 46 text

A test is fast if it is fast fast Wednesday, April 25, 12

Slide 47

Slide 47 text

Too many objects Databases Third Party Frameworks fast Wednesday, April 25, 12

Slide 48

Slide 48 text

Encapsulation Unit testing fast Wednesday, April 25, 12

Slide 49

Slide 49 text

If your tests are not fast, you can not be test-driven fast Wednesday, April 25, 12

Slide 50

Slide 50 text

Truthful Wednesday, April 25, 12

Slide 51

Slide 51 text

A test is truthful if it accurately reflects the underlying code truthful Wednesday, April 25, 12

Slide 52

Slide 52 text

Too specific Mocks Surface values truthful Wednesday, April 25, 12

Slide 53

Slide 53 text

Indirect testing Defensive mocking Understanding requirements truthful Wednesday, April 25, 12

Slide 54

Slide 54 text

Test both sides of a problem Wednesday, April 25, 12

Slide 55

Slide 55 text

The testing pyramid and chains of responsibility Wednesday, April 25, 12

Slide 56

Slide 56 text

Noel Rappin @noelrap railsrx.com Wednesday, April 25, 12