diff --git a/debugging.html b/debugging.html index 87fd85b..f42d8a9 100644 --- a/debugging.html +++ b/debugging.html @@ -54,7 +54,7 @@

The problems with the strategy above are numerous. First, what if you can't think of a possible cause? Second, what if your hypothesis is way off? You could spend hours generating hypotheses that are completely off base, effectively analyzing all of your code before finding the defect.

-

Another strategy is working backwards (Ko & Myers):

+

Another strategy is working backwards (Ko & Myers 2008):

  1. Observe failure
  2. @@ -63,7 +63,7 @@
  3. Repeat three recursively, analyzing all lines of code for defects along the chain of causality
-

The nice thing about this strategy is that you're guaranteed to find the defect if you can accurately identify the causes of each line of code contributing to the failure. It still requires you to analyze each line of code and potentially execute to it in order to inspect what might be wrong, but it requires potentially less work than guessing. My dissertation work investigated how to automate this strategy, allowing you to simply click on the fault output and then immediately see all upstream causes of it (Ko & Myers).

+

The nice thing about this strategy is that you're guaranteed to find the defect if you can accurately identify the causes of each line of code contributing to the failure. It still requires you to analyze each line of code and potentially execute to it in order to inspect what might be wrong, but it requires potentially less work than guessing. My dissertation work investigated how to automate this strategy, allowing you to simply click on the fault output and then immediately see all upstream causes of it (Ko & Myers 2008).

Yet another strategy called delta debugging is to compare successful and failing executions of the program (Zeller 2002):