Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Lessons Learned From 10 Years Of Testing

Lessons Learned From 10 Years Of Testing

Slides of a talk I gave at Symfony Live Berlin on October 27, 2017

Chris Hartjes

October 27, 2017
Tweet

More Decks by Chris Hartjes

Other Decks in Programming

Transcript

  1. Lessons Learned From Ten Years Of
    Testing
    © Chris Hartjes @grmpyprogrammer - Symfony Live Berlin (Oktober 27, 2017) 1

    View Slide

  2. TL;DR -- Tests are made of people!
    © Chris Hartjes @grmpyprogrammer - Symfony Live Berlin (Oktober 27, 2017) 2

    View Slide

  3. This talk contains no code or tests
    (Sorry, not sorry)
    © Chris Hartjes @grmpyprogrammer - Symfony Live Berlin (Oktober 27, 2017) 3

    View Slide

  4. December 2002
    I am six months into working on a
    poorly-constructed dating web application where he
    made most of the mistakes himself with the help of
    other people who didn't know any better
    © Chris Hartjes @grmpyprogrammer - Symfony Live Berlin (Oktober 27, 2017) 4

    View Slide

  5. Formula for burnout
    — super-long commute
    — "mandatory" overtime
    © Chris Hartjes @grmpyprogrammer - Symfony Live Berlin (Oktober 27, 2017) 5

    View Slide

  6. The Launch Crashed Hard
    — so many assumptions were wrong
    © Chris Hartjes @grmpyprogrammer - Symfony Live Berlin (Oktober 27, 2017) 6

    View Slide

  7. "Hey Chris, I think you should read this!"
    © Chris Hartjes @grmpyprogrammer - Symfony Live Berlin (Oktober 27, 2017) 7

    View Slide

  8. It was the moment that
    changed everything for me
    © Chris Hartjes @grmpyprogrammer - Symfony Live Berlin (Oktober 27, 2017) 8

    View Slide

  9. It was the moment that changed everything for me
    Not even remotely kidding
    © Chris Hartjes @grmpyprogrammer - Symfony Live Berlin (Oktober 27, 2017) 9

    View Slide

  10. So what were the tools?
    — SimpleTest
    — Lots of swearing
    © Chris Hartjes @grmpyprogrammer - Symfony Live Berlin (Oktober 27, 2017) 10

    View Slide

  11. PHPUnit hadn't even been
    released yet!
    © Chris Hartjes @grmpyprogrammer - Symfony Live Berlin (Oktober 27, 2017) 11

    View Slide

  12. So li!le PHP-specific testing info was available
    Caused much sadness
    © Chris Hartjes @grmpyprogrammer - Symfony Live Berlin (Oktober 27, 2017) 12

    View Slide

  13. Lesson Number One
    Having one person enthusiastic about writing tests
    simply isn't enough
    © Chris Hartjes @grmpyprogrammer - Symfony Live Berlin (Oktober 27, 2017) 13

    View Slide

  14. Cowboy Testing For Anger And Sadness
    You can start off being the only one writing tests...
    © Chris Hartjes @grmpyprogrammer - Symfony Live Berlin (Oktober 27, 2017) 14

    View Slide

  15. Cowboy Testing For Anger And Sadness
    ...but company culture might make you regret it
    © Chris Hartjes @grmpyprogrammer - Symfony Live Berlin (Oktober 27, 2017) 15

    View Slide

  16. Tests will continue until bugs no longer happen
    Much complaining ensued (a common theme continuing
    to present-day)
    © Chris Hartjes @grmpyprogrammer - Symfony Live Berlin (Oktober 27, 2017) 16

    View Slide

  17. Tests will continue until bugs no longer happen
    — Tests got written
    — I started getting more interested in the process
    — Lost a political struggle to get the job I wanted so I
    left
    © Chris Hartjes @grmpyprogrammer - Symfony Live Berlin (Oktober 27, 2017) 17

    View Slide

  18. Early 2006...
    My gateway into OSS...
    and tests...
    and how to be a difficult person...
    and how to deal with difficult people...
    was via the CakePHP project
    © Chris Hartjes @grmpyprogrammer - Symfony Live Berlin (Oktober 27, 2017) 18

    View Slide

  19. Lesson Number Two
    Tests for a project mean that at least somebody used to
    care at some point about what they were doing
    © Chris Hartjes @grmpyprogrammer - Symfony Live Berlin (Oktober 27, 2017) 19

    View Slide

  20. — tests provide windows into bugs
    — tests are still written by people
    — people are willing to argue about everything and
    anything
    © Chris Hartjes @grmpyprogrammer - Symfony Live Berlin (Oktober 27, 2017) 20

    View Slide

  21. Tests driven by bug fixes help find all
    the weird decisions you made but don't
    remember why
    © Chris Hartjes @grmpyprogrammer - Symfony Live Berlin (Oktober 27, 2017) 21

    View Slide

  22. They also show you how to actually use the code
    © Chris Hartjes @grmpyprogrammer - Symfony Live Berlin (Oktober 27, 2017) 22

    View Slide

  23. Think of them as stealth documentation
    © Chris Hartjes @grmpyprogrammer - Symfony Live Berlin (Oktober 27, 2017) 23

    View Slide

  24. But tests are written by people, and bad tests
    happen.
    © Chris Hartjes @grmpyprogrammer - Symfony Live Berlin (Oktober 27, 2017) 24

    View Slide

  25. Critics like to use this as evidence that tests
    don't work.
    © Chris Hartjes @grmpyprogrammer - Symfony Live Berlin (Oktober 27, 2017) 25

    View Slide

  26. They are wrong.
    © Chris Hartjes @grmpyprogrammer - Symfony Live Berlin (Oktober 27, 2017) 26

    View Slide

  27. I spent some years in the
    wilderness
    © Chris Hartjes @grmpyprogrammer - Symfony Live Berlin (Oktober 27, 2017) 27

    View Slide

  28. I started to really learn about
    testing
    © Chris Hartjes @grmpyprogrammer - Symfony Live Berlin (Oktober 27, 2017) 28

    View Slide

  29. Lesson Number 3
    People struggle to learn about testing without help
    © Chris Hartjes @grmpyprogrammer - Symfony Live Berlin (Oktober 27, 2017) 29

    View Slide

  30. — TDD examples are way too simple
    — People seek shortcuts to solutions
    — Repeating theme - people want to argue about tools
    and techniques
    © Chris Hartjes @grmpyprogrammer - Symfony Live Berlin (Oktober 27, 2017) 30

    View Slide

  31. TDD isn't simple because testing
    isn't simple
    © Chris Hartjes @grmpyprogrammer - Symfony Live Berlin (Oktober 27, 2017) 31

    View Slide

  32. And your code isn't simple
    © Chris Hartjes @grmpyprogrammer - Symfony Live Berlin (Oktober 27, 2017) 32

    View Slide

  33. It's way more important to teach
    people about tools and techniques
    © Chris Hartjes @grmpyprogrammer - Symfony Live Berlin (Oktober 27, 2017) 33

    View Slide

  34. Then they can apply them to their
    own code
    © Chris Hartjes @grmpyprogrammer - Symfony Live Berlin (Oktober 27, 2017) 34

    View Slide

  35. So you might snort at yet-another-
    FizzBuzz example
    © Chris Hartjes @grmpyprogrammer - Symfony Live Berlin (Oktober 27, 2017) 35

    View Slide

  36. But if you're not paying a!ention
    to the PROCESS you will miss out
    © Chris Hartjes @grmpyprogrammer - Symfony Live Berlin (Oktober 27, 2017) 36

    View Slide

  37. Testing is something that cannot
    be learned in isolation
    © Chris Hartjes @grmpyprogrammer - Symfony Live Berlin (Oktober 27, 2017) 37

    View Slide

  38. Testing IS code wri!en for a
    SPECIFIC PURPOSE
    © Chris Hartjes @grmpyprogrammer - Symfony Live Berlin (Oktober 27, 2017) 38

    View Slide

  39. I am changing what I teach
    © Chris Hartjes @grmpyprogrammer - Symfony Live Berlin (Oktober 27, 2017) 39

    View Slide

  40. It's no longer enough to just show
    people how to use the tools
    © Chris Hartjes @grmpyprogrammer - Symfony Live Berlin (Oktober 27, 2017) 40

    View Slide

  41. You have to show them where, and
    when, and why to use them
    © Chris Hartjes @grmpyprogrammer - Symfony Live Berlin (Oktober 27, 2017) 41

    View Slide

  42. Desperately Seeking Shortcuts
    — "I'd be finished with this task if I didn't have to write
    the tests!!!"
    © Chris Hartjes @grmpyprogrammer - Symfony Live Berlin (Oktober 27, 2017) 42

    View Slide

  43. There are no shortcuts
    © Chris Hartjes @grmpyprogrammer - Symfony Live Berlin (Oktober 27, 2017) 43

    View Slide

  44. Just lots and lots of work to
    try and create things with the
    fewest bugs possible
    © Chris Hartjes @grmpyprogrammer - Symfony Live Berlin (Oktober 27, 2017) 44

    View Slide

  45. I started writing books and
    giving lots of talks
    © Chris Hartjes @grmpyprogrammer - Symfony Live Berlin (Oktober 27, 2017) 45

    View Slide

  46. Lesson Number 4
    All these testing problems and techniques were solved
    back in the 1970's
    © Chris Hartjes @grmpyprogrammer - Symfony Live Berlin (Oktober 27, 2017) 46

    View Slide

  47. GO BUY THIS BOOK
    © Chris Hartjes @grmpyprogrammer - Symfony Live Berlin (Oktober 27, 2017) 47

    View Slide

  48. All the techniques we argue about
    today were invented in the 1970's
    and 1980's
    © Chris Hartjes @grmpyprogrammer - Symfony Live Berlin (Oktober 27, 2017) 48

    View Slide

  49. Programmer hubris led many to
    think they were the first to figure
    it out
    © Chris Hartjes @grmpyprogrammer - Symfony Live Berlin (Oktober 27, 2017) 49

    View Slide

  50. Lesson Number 5
    The problem is people
    © Chris Hartjes @grmpyprogrammer - Symfony Live Berlin (Oktober 27, 2017) 50

    View Slide

  51. Programming-related discussions
    turn toxic very easily...
    © Chris Hartjes @grmpyprogrammer - Symfony Live Berlin (Oktober 27, 2017) 51

    View Slide

  52. ...just like every other discussion
    online
    © Chris Hartjes @grmpyprogrammer - Symfony Live Berlin (Oktober 27, 2017) 52

    View Slide

  53. Your best weapon against toxicity
    is EMPATHY
    © Chris Hartjes @grmpyprogrammer - Symfony Live Berlin (Oktober 27, 2017) 53

    View Slide

  54. Testing your code requires you to
    change how you write your code
    © Chris Hartjes @grmpyprogrammer - Symfony Live Berlin (Oktober 27, 2017) 54

    View Slide

  55. People do not like this
    © Chris Hartjes @grmpyprogrammer - Symfony Live Berlin (Oktober 27, 2017) 55

    View Slide

  56. People like to change WHAT THEY
    USE but NOT HOW THEY USE IT
    © Chris Hartjes @grmpyprogrammer - Symfony Live Berlin (Oktober 27, 2017) 56

    View Slide

  57. Funny how the quest for the new
    and shiny never seems to include
    tools help them make things bug
    free
    © Chris Hartjes @grmpyprogrammer - Symfony Live Berlin (Oktober 27, 2017) 57

    View Slide

  58. Shameless Plugs
    My name is Chris Hartjes
    — Staff Test Engineer at Mozilla (focussed on services)
    — Twitter performance artist -> @grmpyprogrammer
    — Buy my stuff at https://grumpy-learning.com
    © Chris Hartjes @grmpyprogrammer - Symfony Live Berlin (Oktober 27, 2017) 58

    View Slide