From 1ca15aceab999b1673afba102d6de4a1e5e87a85 Mon Sep 17 00:00:00 2001 From: "Amy J. Ko" Date: Tue, 12 Nov 2019 12:27:24 -0800 Subject: [PATCH] Added year to citation. --- debugging.html | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) 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):