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

Bugs - What are they good for

Bugs - What are they good for

Leif Gensert

December 05, 2019
Tweet

More Decks by Leif Gensert

Other Decks in Technology

Transcript

  1. 1
    Bugs
    What are they good for?

    View Slide

  2. View Slide

  3. What is a bug?

    View Slide

  4. “First actual
    case of bug
    being found”
    Grace Hopper - 1947

    View Slide

  5. “I did find a bug
    in my apparatus”
    Thomas Edison - 1878

    View Slide

  6. The Crash <> Request Scale
    Crash Change Request

    View Slide

  7. Let’s ship some products

    View Slide

  8. Numbers only?

    View Slide

  9. Nope

    View Slide

  10. “You didn’t say you wanted
    to ship stuff to the Queen”

    View Slide

  11. “Well you should know
    how addresses work”

    View Slide

  12. The Crash <> Request Scale
    Crash Change Request

    View Slide

  13. Record Investigate Fix

    View Slide

  14. View Slide

  15. Reproduce It
    Fix It
    Ship It

    View Slide

  16. Find a reproducible scenario

    View Slide

  17. Speeds up fixing process

    View Slide

  18. accepted
    Closed Won

    View Slide

  19. paid
    Closed Lost

    View Slide

  20. context 'accepted order' do
    let(:order) { build(:order, status: 'accepted') }
    it 'returns "closed won"' do
    expect(deal_stage(order)).to eq('closed won')
    end
    end
    context 'paid order' do
    let(:order) { build(:order, status: 'paid') }
    it 'returns "closed won"' do
    expect(deal_stage(order)).to eq('closed won')
    end
    end

    View Slide

  21. def deal_stage(order)
    return 'enquired' if order.nil?
    return 'quoted' if order.open?
    return 'closed won' if order.accepted?
    'closed lost'
    end

    View Slide

  22. Lets you try out different solutions

    View Slide

  23. Makes it clear what to fix

    View Slide

  24. NoMethodError: undefined
    method `date’ for nil:NilClass

    View Slide

  25. def render(order)
    {
    id: order.id,
    delivery_date: order.delivery.date
    }
    end

    View Slide

  26. def render(order)
    {
    id: order.id,
    delivery_date: order.delivery&.date
    }
    end

    View Slide

  27. GET /api/v1/orders?status=delivered
    • Order 01
    • Order 02
    • Order 03

    View Slide

  28. Confidence that bug
    has been fixed

    View Slide

  29. Continuous Integration
    Heroku Review Apps
    Create App
    Precompile Assets
    Create/Migrate Database
    Launch App
    Code

    View Slide

  30. But what about actually fixing the bugs?

    View Slide

  31. def deal_stage(order)
    puts "What's happening?: #{order.inspect}"
    return 'enquired' if order.nil?
    puts "What's happening?: #{order.inspect}"
    return 'quoted' if order.open?
    puts "What's happening?: #{order.inspect}"
    return 'closed won' if order.accepted?
    puts "What's happening?: #{order.inspect}"
    'closed lost'
    end
    Puts Debugging

    View Slide

  32. github.com/pry/pry
    def deal_stage(order)
    binding.pry
    return 'enquired' if order.nil?
    return 'quoted' if order.open?
    return 'closed won' if order.accepted?
    'closed lost'
    end

    View Slide

  33. Is it really the culprit?
    Caching
    Third Party Libraries
    Recent Changes
    User

    View Slide

  34. Push
    Continuous Integration
    Deploy
    Revert
    Continuous Integration



    View Slide

  35. Record Investigate Fix
    Now
    Depends on
    Urgency/Impact

    View Slide

  36. My Latest Bug

    View Slide

  37. View Slide

  38. View Slide

  39. View Slide

  40. View Slide

  41. Reproduce It
    Don’t jump to conclusions

    View Slide