A Practical Taxonomy of Bugs and How to Squash Them-Keep Ruby Weird 2016

2ed277a8bb1cc68c943fd84f3ce32782?s=47 Kylie
November 04, 2016

A Practical Taxonomy of Bugs and How to Squash Them-Keep Ruby Weird 2016

Catching software bugs is a mysterious magic, unknowable by science and untouchable by process.

False! Programming bugs, like real bugs, can be organized into a taxonomy. Come with me and I’ll show you how classification can help you build “programmer’s instinct” into a logical debugging process.

2ed277a8bb1cc68c943fd84f3ce32782?s=128

Kylie

November 04, 2016
Tweet

Transcript

  1. A PRACTICAL TAXONOMY OF BUGS AND HOW TO SQUASH THEM

  2. Instinctual Indications…2 Research Methods…9 Practical Taxonomy…12 Bohrbug…13 Schrödinbug…20 Fractalbug…24 Heisenbug…30

    Mandelbug…36 Common Patterns…43 Resources…50 Table of Contents
  3. Debugging Skills

  4. “As you familiarize yourself with the application, you’ll build up

    some debugging instincts"
  5. “Whenever I see something like this happening, the first thing

    I do is scan the logs to see if this process is completing or is sending a weird message.”
  6. Debugging Instincts “ ”

  7. None
  8. “Whenever I see #{x}, I always check #{y}”

  9. Research Methods • containment sometimes takes priority over squashing •

    we can only work with facts • we can’t squash every bug in this talk
  10. None
  11. Observable Attributes

  12. Warning: Contrived Scenarios Ahead

  13. A Practical Taxonomy of Bugs Upsettingly Observable Wildly Chaotic {

  14. How to Squash Them

  15. upsettingly observable bug #1 UPSETTINGLY OBSERVABLE

  16. Observable Attributes is the bug observable in production? can it

    be reproduced locally? does it seem to be restricted to one area?
  17. Bohrbug deterministic, highly reproducible UPSETTINGLY OBSERVABLE

  18. Bohrbug Commonly found in code,sometimes on server UPSETTINGLY OBSERVABLE

  19. Bohrbug likes to hide in complex branching in functions, classes

    or config UPSETTINGLY OBSERVABLE
  20. Bohrbug In the wild: validation UPSETTINGLY OBSERVABLE

  21. Reproduction & Resolution replicate locally and in test write the

    simple solution rewrite to be highly readable and extendable UPSETTINGLY OBSERVABLE
  22. Bohrbug UPSETTINGLY OBSERVABLE

  23. Bohrbug UPSETTINGLY OBSERVABLE

  24. upsettingly observable bug #2 UPSETTINGLY OBSERVABLE

  25. Observable Attributes how does this work? does this work? wait,

    what is this even testing? did this ever work?
  26. Schrödinbug stick-like body appendages look like twigs UPSETTINGLY OBSERVABLE

  27. Schrödinbug Likes to pretend to be working code. On close

    inspection, reveals itself to be a bug. UPSETTINGLY OBSERVABLE
  28. Schrödinbug In the wild: code that never worked UPSETTINGLY OBSERVABLE

  29. Schrödinbug In the wild: it didn’t work how you thought

    it did UPSETTINGLY OBSERVABLE
  30. Logging as Verification Tool

  31. Git Bisect Tool

  32. Reproduction & Resolution reproduce the “broken” state locally and in

    test add log statements until you can verify what causes the broken state. if the bug did work at some point, find the point at which it did work. write tests to represent the configuration and flow of the fixed state
  33. Schrödinbug UPSETTINGLY OBSERVABLE

  34. Schrödinbug UPSETTINGLY OBSERVABLE

  35. wildly chaotic bug #1 WILDLY CHAOTIC

  36. Observable Attributes Does it appear non-deterministic? Does it seem to

    disappear once you observe or debug it?
  37. Heisenbug “now you see it, now you don’t” WILDLY CHAOTIC

  38. Heisenbug WILDLY CHAOTIC In the wild: a heisenbug that lives

    in code
  39. Heisenbug WILDLY CHAOTIC In the wild: a heisenbug that lives

    in data
  40. Profiling for Verification https://kcachegrind.github.io/html/CallgrindFormat.html Tool

  41. FLAME GRAPHS http://www.brendangregg.com/FlameGraphs/cpu-mysql-updated.svg Tool

  42. Reproduction & Resolution use profiling to find the trigger state

    use the app (not fixtures or DB manipulation) to get the data in this state recreate that state in test follow borhbug instruction
  43. Heisenbug WILDLY CHAOTIC

  44. Heisenbug WILDLY CHAOTIC

  45. wildly chaotic bug #2 WILDLY CHAOTIC

  46. Observable Attributes is everything broken? all of it? send help??

  47. Mandelbug WILDLY CHAOTIC

  48. Mandelbug seems like everything is broken at once WILDLY CHAOTIC

  49. Mandelbug people are very upset with you WILDLY CHAOTIC

  50. Mandelbug likely an issue with your system, not code WILDLY

    CHAOTIC
  51. “The bug is huge and everywhere at once. SQL: could

    not connect to server: Connection refused was bubbling up all over the place. Jobs won’t run, emails won’t send, every submit button on the site fatal errored.” on-call log 24 June 2014 WILDLY CHAOTIC
  52. Disk Usage Tool df -h

  53. Reproduction & Resolution attempt to connect to server & view

    logs use df -h to find if all the storage is being used can that be restarted, rotated or killed at this time?
  54. Mandelbug WILDLY CHAOTIC

  55. Mandelbug WILDLY CHAOTIC

  56. A Practical Taxonomy of Bugs Upsettingly Observable Wildly Chaotic {

    bohrbug schrödinbug mandelbug heisenbug
  57. “Debugging Instincts”

  58. “Debugging Instincts”

  59. None
  60. Resources • “Linux Debugging Tools I Love”, Julia Evans •

    Systems Performance, Brendan Gregg • “Why Do Computers Stop and What Can Be Done About It?”, Jim Gray • “Debug Patterns for Efficient High- levelSystemC Debugging”, Frank Rogin, Erhard Fehlauer, Christian Haufe, Sebastian Ohnewald
  61. None
  62. None
  63. None
  64. None