Profs. Brewer CS 169 Lecture 13

Slides:



Advertisements
Similar presentations
Introduction to Algorithms Quicksort
Advertisements

David Luebke 1 4/22/2015 CS 332: Algorithms Quicksort.
Spring 2015 Lecture 5: QuickSort & Selection
Recursion. Objectives At the conclusion of this lesson, students should be able to Explain what recursion is Design and write functions that use recursion.
CS Main Questions Given that the computer is the Great Symbol Manipulator, there are three main questions in the field of computer science: What kinds.
CHAPTER 10 Recursion. 2 Recursive Thinking Recursion is a programming technique in which a method can call itself to solve a problem A recursive definition.
Delta Debugging CS All Windows 3.1 Windows 95 Windows 98 Windows ME Windows 2000 Windows NT Mac System 7 Mac System 7.5 Mac System Mac System.
(c) , University of Washington
1 Delta Debugging Koushik Sen EECS, UC Berkeley. 2 All Windows 3.1 Windows 95 Windows 98 Windows ME Windows 2000 Windows NT Mac System 7 Mac System 7.5.
 2005 Pearson Education, Inc. All rights reserved Searching and Sorting.
 Pearson Education, Inc. All rights reserved Searching and Sorting.
“The study of algorithms is the cornerstone of computer science.” Algorithms Fall 2011.
The Selection Problem. 2 Median and Order Statistics In this section, we will study algorithms for finding the i th smallest element in a set of n elements.
CS 61B Data Structures and Programming Methodology July 21, 2008 David Sun.
Searching and Sorting Recursion, Merge-sort, Divide & Conquer, Bucket sort, Radix sort Lecture 5.
1 Ch. 2: Getting Started. 2 About this lecture Study a few simple algorithms for sorting – Insertion Sort – Selection Sort (Exercise) – Merge Sort Show.
Searching CSE 103 Lecture 20 Wednesday, October 16, 2002 prepared by Doug Hogan.
Search Algorithms Written by J.J. Shepherd. Sequential Search Examines each element one at a time until the item searched for is found or not found Simplest.
Week 6 MondayTuesdayWednesdayThursdayFriday Testing III Reading due Group meetings Testing IVSection ZFR due ZFR demos Progress report due Readings out.
Recursion. Objectives At the conclusion of this lesson, students should be able to Explain what recursion is Design and write functions that use recursion.
CMPT 120 Topic: Searching – Part 2 and Intro to Time Complexity (Algorithm Analysis)
Chapter 15 Running Time Analysis. Topics Orders of Magnitude and Big-Oh Notation Running Time Analysis of Algorithms –Counting Statements –Evaluating.
16 Searching and Sorting.
Recursion Version 1.0.
Algorithms and Problem Solving
Growth of Functions & Algorithms
OBJECT ORIENTED PROGRAMMING II LECTURE 23 GEORGE KOUTSOGIANNAKIS
May 17th – Comparison Sorts
CSC 421: Algorithm Design & Analysis
CSC 421: Algorithm Design & Analysis
CSC 421: Algorithm Design & Analysis
Linear-Time Sorting Continued Medians and Order Statistics
Randomized Algorithms
Algorithm Analysis CSE 2011 Winter September 2018.
Teach A level Computing: Algorithms and Data Structures
Lecture 18: Uniformity Testing Monotonicity Testing
CS 3343: Analysis of Algorithms
Quicksort 1.
CS 3343: Analysis of Algorithms
Binary Search Back in the days when phone numbers weren’t stored in cell phones, you might have actually had to look them up in a phonebook. How did you.
Algorithm Analysis (not included in any exams!)
Algorithm design and Analysis
2008/12/03: Lecture 20 CMSC 104, Section 0101 John Y. Park
Quick Sort (11.2) CSE 2011 Winter November 2018.
CS 3343: Analysis of Algorithms
Unit-2 Divide and Conquer
Randomized Algorithms
Data Structures Review Session
8/04/2009 Many thanks to David Sun for some of the included slides!
Simple Sorting Methods: Bubble, Selection, Insertion, Shell
Searching, Sorting, and Asymptotic Complexity
Data Structures Sorted Arrays
CSE 2010: Algorithms and Data Structures Algorithms
Algorithms and Problem Solving
EE 312 Software Design and Implementation I
CS 3343: Analysis of Algorithms
CSC 421: Algorithm Design & Analysis
CS 1114: Sorting and selection (part two)
Ch. 2: Getting Started.
CSC 143 Java Sorting.
Math/CSE 1019N: Discrete Mathematics for Computer Science Winter 2007
State-Space Searches.
State-Space Searches.
The Selection Problem.
Quicksort and Randomized Algs
CSC 421: Algorithm Design & Analysis
State-Space Searches.
Searching and Sorting Hint at Asymptotic Complexity
Presentation transcript:

Profs. Brewer CS 169 Lecture 13 Delta Debugging CS169 Lecture 13 Profs. Brewer CS 169 Lecture 13

Profs. Brewer CS 169 Lecture 13 Announcements Requirements due March 8 Examples now on class page Profs. Brewer CS 169 Lecture 13

Profs. Brewer CS 169 Lecture 13 Debugging Debugging is invoked when testing finds a bug Hard task, but good tools can help a lot Hard problems in debugging Find a minimal test case that reproduces the bug Minimal = Each element is relevant Locate the fault in the source code Profs. Brewer CS 169 Lecture 13

Profs. Brewer CS 169 Lecture 13 A Generic Algorithm How do people solve these problems? Binary search Cut the test case in half Iterate Brilliant idea: Why not automate this? Profs. Brewer CS 169 Lecture 13

Delta Debugging Usage Scenarios Scenario 1: program used to work, but after a number of changes it fails Find the change that is responsible for failure Scenario 2: program works on an input, but after a number of changes to the input, it fails Special case, works on empty input, fails on input I, find the smallest failing subset of I Profs. Brewer CS 169 Lecture 13

Profs. Brewer CS 169 Lecture 13 Delta Debugging Setup Program P works on input I Failure after a set of changes C to P(I) To either the program P Or the input I Find the smallest set of changes that still fail For simplicity we consider changes to program only Profs. Brewer CS 169 Lecture 13

Profs. Brewer CS 169 Lecture 13 Version I Assume There is a set of changes C There is a single change that causes failure And still causes failure when mixed with other changes Every subset of changes makes sense Any subset of changes produces a test case that either passes p or fails X Profs. Brewer CS 169 Lecture 13

Algorithm for Version I /* invariant: P succeeds and P with changes c1,…,cn fails */ DD(P,{c1,…,cn}) = if n = 1 return {c1} let P1 = P  {c1 … cn/2 } let P2 = P  {cn/2 + 1 … cn} if P1 = p then DD(P, {cn/2 + 1 … cn}) else DD(P, {c1 … cn/2}) Profs. Brewer CS 169 Lecture 13

Profs. Brewer CS 169 Lecture 13 Version I: Example Assume C = { 1, 2, 3, 4, 5, 6, 7, 8} The bug is in 7 Configuration Result 1 2 3 4 p 5 6 7 8 X 5 6 p 7 8 X 7 X Profs. Brewer CS 169 Lecture 13

Profs. Brewer CS 169 Lecture 13 Version I: Comments This is just binary search ! A very sensible algorithm to try first By hand, or automated Assumptions hold for most bugs If P © (C1 [ C2) = X then Either P © C1 = X and P © C2 = p or Or P © C2 = X and P © C1 = p It becomes interesting when this is not true … Profs. Brewer CS 169 Lecture 13

Extensions Let’s get fancy. Assume: Any subset of changes may cause the bug But no undetermined (?) tests, yet And the world is: Monotonic (failing changes are not anihilated): P © C = X ) P © (C [ C’) ¹ p Unambiguous (unique smallest set of failing changes): P © C = X Æ P © C’ = X ) P © (C Å C’) ¹ p Consistent (all changes make sense, for now) P © C ¹ ? Profs. Brewer CS 169 Lecture 13

Profs. Brewer CS 169 Lecture 13 Scenarios Try binary search: Partition changes C into C1 and C2 If P © C1 = X, recurse with C1 If P © C2 = X, recurse with C2 Notes: By consistency, only other possibilities are P © C1 = X and P © C2 = X P © C1 = p Æ P © C2 = p What happens in these cases? Profs. Brewer CS 169 Lecture 13

Multiple Failing Changes If P © C1 = X and P © C2 = X (This would be ruled out by unambiguity) There exist a subset of C1 that fails And another subset inside C2 We can simply continue to search inside C1 And then inside C2 And we’ll find two separate subsets that reproduce the failure Choose the smallest one of the two Profs. Brewer CS 169 Lecture 13

Profs. Brewer CS 169 Lecture 13 Interference By monotonicity, if P © C1 = p Æ P © C2 = p then no subset of C1 or C2 causes failure So the failure must be a combination of elements from C1 and C2 This is called interference Profs. Brewer CS 169 Lecture 13

Handling Interference The cute trick: Consider P © C1 Find minimal D2 µ C2 s.t. P © (C1 [ D2) = X Consider P © C2 Find minimal D1 µ C1 s.t. P © (C2 [ D1) = X P © ((C1 [ D2) Å (C2 [ D1)) = P © (D1 [ D2) Then by unambiguity P © (D1 [ D2) fails This is also minimal Profs. Brewer CS 169 Lecture 13

Profs. Brewer CS 169 Lecture 13 Interference Example Consider 8 changes, of which 3, 5 and 7 cause the failure, but only when applied together Configuration Result 1 2 3 4 p 5 6 7 8 p interference 1 2 5 6 7 8 p 3 4 5 6 7 8 X 3 5 6 7 8 X 1 2 3 4 5 6 p 1 2 3 4 7 8 p interference 1 2 3 4 5 7 8 X 1 2 3 4 5 6 7 X Profs. Brewer CS 169 Lecture 13

Profs. Brewer CS 169 Lecture 13 Algorithm /* invariant: P succeeds, P with changes c1,…,cn fails find the smallest subset that still fails */ DD(P, {c1,…,cn}) = if n = 1 return {c1} P1 Ã P © {c1 … cn/2) P2 Ã P © {cn/2 + 1 … cn} if P1 = X then DD(P, {c1 … cn/2 }) elseif P2 = X then DD(P, {cn/2 + 1 … cn }) else DD(P2, {c1 … cn/2 }) [ DD(P1, {cn/2 + 1 … cn },) Profs. Brewer CS 169 Lecture 13

Profs. Brewer CS 169 Lecture 13 Complexity If a single change induces the failure, then logarithmic Why? Otherwise, linear Assumes constant time per invocation Is this realistic? What is a more realistic complexity ? Profs. Brewer CS 169 Lecture 13

Revisit the Assumptions All three assumptions are suspect But consistency is egregious In practice, many inconsistent sets of changes E.g., because some changes must be made together Otherwise: build errors, execution errors Profs. Brewer CS 169 Lecture 13

Handling Inconsistency Idea Change sets closer to ; or all changes are more likely to be consistent Get information from a subset C And its complement : C If we do this with smaller C, we are more likely to stay consistent Profs. Brewer CS 169 Lecture 13

Handling Inconsistency: Cases For each C 2 { C1,…,Cn} (partition of changes) If P © C = X, recurse on C As before If P © C = p and P © :C = p, interference If P © C = ? and P © :C = p, preference C has a failure-inducing subset Possibly in interference with :C Otherwise, try again Repeat with twice as many subsets Profs. Brewer CS 169 Lecture 13

Profs. Brewer CS 169 Lecture 13 Interference Example Consider 8 changes, of which #8 causes failure, and 2, 3 and 7 must be together Configuration Result Test {1,2,3,4} 1 2 3 4 ? Test complement 5 6 7 8 ? Inconsistent Test {1,2} 1 2 ? Test complement 3 4 5 6 7 8 ? Test {3,4} 3 4 ? Test complement 1 2 5 6 7 8 ? Test { 5, 6} 5 6 p Test complement 1 2 3 4 7 8 X We dig down here … Profs. Brewer CS 169 Lecture 13

Profs. Brewer CS 169 Lecture 13 Improvement If P © R = p, then no subset of R causes failure By monotonicity Accumulate some such R and apply at every opportunity If P © C © R = p and P © :C © R = p, interference Why? To promote consistency Closer to original, failing program More likely to be consistent See section 5 of the paper Profs. Brewer CS 169 Lecture 13

Profs. Brewer CS 169 Lecture 13 Results This really works! Isolates problematic change in gdb After lots of work (by machine) 178,000 lines changed, grouped into 8700 groups Can do 230 builds/tests in 24 hours Would take 37 days to try 8700 groups individually The algorithm did this in 470 tests (48 hours) We can do better Doing this by hand would be a nightmare Profs. Brewer CS 169 Lecture 13

Profs. Brewer CS 169 Lecture 13 Opinions How to address the assumptions Unambiguity Just look for one set of failure-inducing changes Consistency We dealt with it already Monotonicity Deal with it next Profs. Brewer CS 169 Lecture 13

Profs. Brewer CS 169 Lecture 13 Delta Debugging ++ Drop all of the assumptions What can we do? Different problem formulation Find a set of changes that cause the failure, but removing any change causes the failure to go away This is 1-minimality Profs. Brewer CS 169 Lecture 13

Profs. Brewer CS 169 Lecture 13 Model Once again, a test either Passes p Fails X Is unresolved ? Profs. Brewer CS 169 Lecture 13

Profs. Brewer CS 169 Lecture 13 Naïve Algorithm To find a 1-minimal subset of C, simply Remove one element c from C If C – {c} = X, recurse with smaller set If C – {c} ¹ X, C is 1-minimal Profs. Brewer CS 169 Lecture 13

Profs. Brewer CS 169 Lecture 13 Analysis In the worst case, We remove one element from the set per iteration After trying every other element Work is potentially N + (N-1) + (N-2) + … This is O(N2) Profs. Brewer CS 169 Lecture 13

Work Smarter, Not Harder We can often do better Silly to start out removing 1 element at a time Try dividing change set in 2 initially Increase # of subsets if we can’t make progress If we get lucky, search will converge quickly Profs. Brewer CS 169 Lecture 13

Profs. Brewer CS 169 Lecture 13 Algorithm DD(P, {C1,…,Cn}) = if P © Ci = X then DD(P, {Ci1,Ci2}) elseif P © :Ci = X then DD(P, {C1,…,Ci-1,Ci+1 ,…,Cn}) elseif sizeof(Ci) = 1 then C1 [ … [ Cn else DD(P, {C11, C12,…,Cn1, Cn2}) where Ci1 and Ci2 are the two halves of Ci Profs. Brewer CS 169 Lecture 13

Profs. Brewer CS 169 Lecture 13 Analysis Worst case is still quadratic Subdivide until each set is of size 1 Reduced to the naïve algorithm Good news For single, monotone failure, converges in log N Binary search again Profs. Brewer CS 169 Lecture 13

Profs. Brewer CS 169 Lecture 13 A Distinction Simplification Removing any piece of the test removes the failure; every piece of the test is relevant Isolation Find at least one relevant piece of the test; removing this piece makes the failure go away Profs. Brewer CS 169 Lecture 13

Simplification vs. Isolation So far, DD does simplification Performance is inherently limited Must remove every piece of test separately to verify that it is fully simplified Performance limited by size of output Isolation, however, can be more efficient Just need to find a change that makes working test case fail Profs. Brewer CS 169 Lecture 13

Profs. Brewer CS 169 Lecture 13 Formalization Consider two test cases P © C = p P © D = X C µ D Then D – C is 1-minimal difference if For each c 2 (D – C) P © (C [ {c}) ¹ p P © (D – {c}) ¹ X Profs. Brewer CS 169 Lecture 13

Profs. Brewer CS 169 Lecture 13 1-Minimality There is always a 1-minimal pair Proof Initially original program works C = ; modified program fails D = { all changes } DD produces D’ that is minimal Now grow C with elements from D’ Profs. Brewer CS 169 Lecture 13

Profs. Brewer CS 169 Lecture 13 Algorithm DD(P, C, D, {e1,…,en}) = if P © (C [ ei) = X then DD(P, C, C [ ei, {ei1,ei2}) elseif P © (D- ei) = p then DD(P, D- ei, D, {ei1,ei2}) elseif P © (D – ei) = X then DD(P, C, D – ei, {e1,…,ei-1,ei+1,…,en}) elseif P © (C [ ei) = p then DD(P, C [ ei, D, {e1,…,ei-1,ei+1,…,en}) else DD(P, C, D, {e11, e12,…,en1, en2}) Profs. Brewer CS 169 Lecture 13

Profs. Brewer CS 169 Lecture 13 Analysis Worst case is the same Worst case example is the same Quadratic But best case has improved significantly If all tests either pass or fail, runs in log N Profs. Brewer CS 169 Lecture 13

Profs. Brewer CS 169 Lecture 13 Case Studies Famous paper showed 40% Unix utilities failed on random inputs Repeated that experiment with DD And found the same results, 10 years later! Conclusion: Nobody cares Applied delta debugging to minimize test cases Revealed buffer overrun, parsing problems Profs. Brewer CS 169 Lecture 13

The Importance of Changes Basic to delta debugging is a change We must be able to express the difference between the good and bad examples as a set of changes But notion of change is semantic Not easy to capture in a general way in a tool And notion of change is algorithmic Poor notion of change ) many unresolved tests Performance goes from linear (or sub-linear) to quadratic Profs. Brewer CS 169 Lecture 13

Profs. Brewer CS 169 Lecture 13 Notion of Change We can see this in the experiments Some gdb experiments took 48 hours Improvements came from improving notion of changes Also important to exploit correlations between changes Some subsets of changes require other changes Again, can affect asymptotic performance Profs. Brewer CS 169 Lecture 13

Profs. Brewer CS 169 Lecture 13 Opinion Delta Debugging is a technique, not a tool Bad News: Probably must be reimplemented for each significant system To exploit knowledge of changes Good News: Relatively simple algorithm, significant payoff It’s worth reimplementing Profs. Brewer CS 169 Lecture 13