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

Stop Testing, Start Storytelling (Detroit Craftsman Guild)

481a1f18bdd124c255bcf9e79a281ec3?s=47 tmikeschu
May 15, 2018
49

Stop Testing, Start Storytelling (Detroit Craftsman Guild)

May 15, 2018

481a1f18bdd124c255bcf9e79a281ec3?s=128

tmikeschu

May 15, 2018
Tweet

Transcript

  1. Stop Testing. Start Storytelling. Mike Schutte Detroit Craftsman (Artisans? Roommates?)

    Guild May 15, 2018 1/36 @tmikeschu
  2. Time Topic 1 About Me 2 Goals 7 Testing Paradigms

    20 Storytelling 10 Demo 5 Wrap-up 2/36 @tmikeschu
  3. About Me Detroit Quikly (Rails, React, Node.js, Go) environmental science

    -> sociology -> software development University of Denver -> Indiana University -> Turing -> Quikly runner, musician, reader, writer 3/36 @tmikeschu
  4. Goals 4/36 @tmikeschu

  5. Goals perspective 5/36 @tmikeschu

  6. Goals perspective confidence 6/36 @tmikeschu

  7. 7/36 @tmikeschu

  8. describe("Stop Testing, Start Storytelling", () => { before(() => {

    tmikeschu.prepareForTalk() tmikeschu.getButterfliesInFormation() meetup.garnerInterest() audience.map(showUp) }) after(() => { audience.map(goHome).map(thinkDifferently) }) it("gives people perspective on and confidence in testing", () => { const actual = audience .map(stopTestingStartStorytelling) .flat_map(takeAways).uniq const expected = ["perspective", "confidence"] expect(actual).toEqual(expected) }) }) 8/36 @tmikeschu
  9. describe "testing paradigms" do it "covers different testing paradigms" do

    actual = stop_testing_start_storytelling.testing_paradigms expected = ["test last", "test first", "test driven", "behavior driven"] expect(actual).to eq(expected) end end 9/36 @tmikeschu
  10. Testing Paradigms bonus word: para-dig-MAT-ic (adj) • a framework containing

    the basic assumptions, ways of thinking, and methodolog[ies] [for discovering new ideas] that are commonly accepted by members of a scientific community.1 1 http:/ /www.dictionary.com/browse/paradigm 10/36 @tmikeschu
  11. Test last • The thing that's supposed to happen is

    the the thing that happens. • ~> It's blue because it's blue ! . 11/36 @tmikeschu
  12. Test last 12/36 @tmikeschu

  13. 13/36 @tmikeschu

  14. Test first • Writing a test to fit an implementation

    14/36 @tmikeschu
  15. Test driven Behavior driven • Implementing code to fit a

    test • "Program to an interface, not an implementation" - GOF 15/36 @tmikeschu
  16. describe "testing paradigms" do it "covers different testing paradigms" do

    actual = stop_testing_start_storytelling.testing_paradigms expected = ["test last", "test first", "test driven", "behavior driven"] expect(actual).to eq(expected) end end 16/36 @tmikeschu
  17. Storytelling and Software Software is always means to an end

    • Function to Feature • (HINT: the end is to help users.) 17/36 @tmikeschu
  18. func TestStoryTellingAndSoftware(t *testing.T) { var ( actual []string expected []string

    ) actual = stopTestingStartStorytelling.StorytellingAndSoftware() expected = []string{"communication", "context", "abstraction", "encapsulation"} if actual != expected { t.Error("Expected talk to cover communication, context, abstraction, and encapsulation, got: ", actual) } } 18/36 @tmikeschu
  19. Storytelling and Software • communication • context • abstraction •

    encapsulation 19/36 @tmikeschu
  20. Communication Users communicate with software. Let's make good listeners. 20/36

    @tmikeschu
  21. Context • :cause && :effect • More context = more

    understanding • More understanding = more predictive power • More predictive power = more confident decision-making • More confident decision-making = more happiness! 21/36 @tmikeschu
  22. Context When we tell stories about our software, we write

    better software. 22/36 @tmikeschu
  23. Abstraction • Touching a stove • Breathing • Muscle memory

    • Literally every language 23/36 @tmikeschu
  24. Encapsulation We encapsulate our code, why not our thoughts? •

    Too many jobs makes you bad at all of them. 24/36 @tmikeschu
  25. Encapsulation Code constrains clarity and imagination. • Tests can be

    your compass home 25/36 @tmikeschu
  26. Encapsulation Meta alert! • Programs solve problems • Programming is

    a problem-solving process • Maybe the principles that make better programs can also result in better programming? 26/36 @tmikeschu
  27. func TestStoryTellingAndSoftware(t *testing.T) { var ( actual []string expected []string

    ) actual = stopTestingStartStorytelling.StorytellingAndSoftware() expected = []string{"communication", "context", "abstraction", "encapsulation"} if actual != expected { t.Error("Expected talk to cover communication, context, abstraction, and encapsulation, got: ", actual) } } 27/36 @tmikeschu
  28. Still learning the DSL? /* description: developers assert: should be

    mindful of context actual: perspective while implementing expected: developer actual should be the same as expected actual: perspective while testing expected: user actual should be the same as expected */ 28/36 @tmikeschu
  29. User <---------------------> Programmer 29/36 @tmikeschu

  30. Implementing User <-------------------X> Programmer 30/36 @tmikeschu

  31. Storytelling/testing User <X-------------------> Programmer 31/36 @tmikeschu

  32. /* description: developers assert: should be mindful of context actual:

    perspective while implementing expected: developer actual should be the same as expected actual: perspective while testing expected: user actual should be the same as expected */ 32/36 @tmikeschu
  33. Crowdsource Demo! • 3 Nouns • 1 Verb • 1

    Datatype 33/36 @tmikeschu
  34. Wrap-up • Testing is a paradigmatic process, not a product.

    • Communication: build good listeners • Context: enable confident decision making • Abstraction: you're good at it, it let's you do cool stuff. • Encapsulation: apply the same discipline to your process as you do to your code. • Storytelling keeps you closer to users 34/36 @tmikeschu
  35. Action Plan • Develop a pendulum workflow between storyteller and

    developer. 35/36 @tmikeschu
  36. describe("Stop Testing, Start Storytelling", () => { before(() => {

    tmikeschu.prepareForTalk() tmikeschu.getButterfliesInFormation() meetup.garnerInterest() audience.map(showUp) }) after(() => { audience.map(goHome).map(thinkDifferently) }) it("gives people perspective on and confidence in testing", () => { const actual = audience .map(stopTestingStartStorytelling) .flat_map(takeAways).uniq const expected = ["perspective", "confidence"] expect(actual).toEqual(expected) }) }) 36/36 @tmikeschu
  37. Thank you! 37/36 @tmikeschu