how failures come to be
play

How Failures Come to be Andreas Zeller 1 An F-16 fighter plane An - PDF document

How Failures Come to be Andreas Zeller 1 An F-16 fighter plane An F-16 on the northern (northern hemisphere) hemisphere. Why the northern hemisphere, you ask? 2 2 Because this is what An F-16 an F-16 on the (southern hemisphere)


  1. How Failures Come to be Andreas Zeller 1 An F-16 fighter plane An F-16 on the northern (northern hemisphere) hemisphere. Why the northern hemisphere, you ask? 2 2 Because this is what An F-16 an F-16 on the (southern hemisphere) southern hemisphere would look like. (BTW, interesting effect if you drop a bomb :-) From risks.digest, volume 3, issue 44: 3 3 o Since the F-16 is a

  2. From risks.digest, F-16 Landing Gear volume 3, issue 44: o One of the first things the Air Force test pilots tried on an early F-16 was to tell the computer to raise the landing gear while standing still on the runway. Guess what happened? Scratch one F-16. (my friend 4 4 Retrieved by a technician from the The First Bug Harvard Mark II September 9, 1947 machine on September 9, 1947. Now on display at the Smithsonian, Washington 5 5 More Bugs 6 6

  3. More bugs 7 7 Facts on Debugging • Software bugs cost ~60 bln US$/yr in US • Improvements could reduce cost by 30% • Validation (including debugging) can easily take up to 50-75% of the development time • When debugging, some people are three times as efficient than others 8 8 A Sample Program sample 9 8 7 $ Output: 7 8 9 $ sample 11 14 Output: 0 11 9 9

  4. How to Debug (Sommerville 2004) Design Repair Re-test Locate error error repair error program 10 10 The Tra ffj c Principle T rack the problem R eproduce A utomate F ind Origins F ocus I solate C orrect 11 11 The Tra ffj c Principle T rack the problem R eproduce A utomate F ind Origins F ocus I solate C orrect 12 12

  5. From Defect to Failure 1. The programmer creates a defect – an error in the code. Variables ✘ ✘ 2. When executed, the defect creates an infection – an ✘ error in the state. 3. The infection propagates. ✘ ✘ 4. The infection causes a failure. This infection chain must be ✘ t traced back – and broken. 13 13 The Curse of Testing Variables ✘ ✘ • Not every defect causes a failure! ✘ • Testing can only show the presence of errors – not ✘ ✘ their absence. (Dijkstra 1972) ✘ 14 14 Debugging • Every failure can be Variables traced back to some ✘ ✘ infection , and every ✘ infection is caused by some defect . • Debugging means to ✘ ✘ relate a given failure to the defect – and to remove the defect. ✘ 15 15

  6. Search in Space + Time variables ✔ ? ✘ t 16 16 The defect must be searched in _ space_ and _ time_ The Defect variables ✔ ✘ ✘ t 17 17 Search in Time variables ✔ ✘ t 18 18

  7. Search in Time variables ✔ ✔ ✘ ✘ t 19 19 Search in Time variables ✔ ✘ t 20 20 Search in Space variables ✔ ✔ ✔ ✘ t 21 21

  8. Search in Space variables ✔ ✔ ✔ ✔ ✘ ✘ t 22 22 Search in Space variables ✔ ✔ ✔ ✔ ✘ ✘ ✘ t 23 23 State of the GNU compiler (GCC) A Program State 42991 vertices 44290 edges - and 1 is wrong :-) An actual GCC execution has millions of these states. 24 24

  9. A Sample Program $ sample 9 8 7 Output: 7 8 9 $ sample 11 14 25 25 int main(int argc, char *argv[]) { int *a; int i; a = (int *)malloc((argc - 1) * sizeof(int)); for (i = 0; i < argc - 1; i++) a[i] = atoi(argv[i + 1]); shell_sort(a, argc); printf("Output: "); for (i = 0; i < argc - 1; i++) printf("%d ", a[i]); printf("\n"); free(a); return 0; } 26 26 Find Origins variables • The 0 printed is the value of a[0] . Where does it come from? ! • Basic idea: Track or deduce value origins time ! ! ! • Separates relevant from irrelevant values ! • We can trace back a[0] to shell_sort ! 27 27

  10. static void shell_sort(int a[], int size) { int i, j; int h = 1; do { h = h * 3 + 1; } while (h <= size); do { h /= 3; for (i = h; i < size; i++) { int v = a[i]; for (j = i; j >= h && a[j - h] > v; j -= h) a[j] = a[j - h]; if (i != j) a[j] = v; } } while (h != 1); } 28 28 FIXME: argv[0] should Observing a Run be “sample”, not “11” variables argv argv a a a argc [0] [1] [0] [1] [2] i size h a = malloc(...) 3 "11""14" ? ? ? ? i = 0 0 a[i] = atoi(argv[i + 1]) 11 i++ time 1 a[i] = atoi(argv[i + 1]) 14 i++ 2 shell_sort(a, argc) 3 ? return 0 3 "11""14" 0 11 ? 2 29 29 Specific Observation static void shell_sort(int a[], int size) { fprintf(stderr, “At shell_sort”); for (i = 0; i < size; i++) fprintf(stderr, “a[%d] = %d\n”, i, a[i]); fprintf(stderr, “size = %d\n”, size); int i, j; $ sample 11 14 int h = 1; a[0] = 11 ... a[1] = 14 } a[2] = 0 size = 3 Output: 0 11 The state is infected at the call of shell_sort ! 30 30

  11. Fixing the Program int main(int argc, char *argv[]) { int *a; int i; a = (int *)malloc((argc - 1) * sizeof(int)); for (i = 0; i < argc - 1; i++) a[i] = atoi(argv[i + 1]); shell_sort(a, argc); shell_sort(a, argc); shell_sort(a, argc - 1); $ sample 11 14 Output: 11 14 ... } 31 31 Finding Causes Infected state Sane state The difference causes the failure 32 32 Search in Space Infected state Sane state argc = 3 ✘ ✔ ? Test Mixed state 33 33

  12. Search in Time Passing run Failing run argc = 3 argc = 3 Transition from argc to a[2] a[2] = 0 t 34 34 int main(int argc, char *argv[]) { int *a; // Input array a = (int *)malloc((argc - 1) * sizeof(int)); for (int i = 0; i < argc - 1; i++) a[i] = atoi(argv[i + 1]); // Sort array Should be argc - 1 shell_sort(a, argc); // Output array printf("Output: "); for (int i = 0; i < argc - 1; i++) printf("%d ", a[i]); printf("\n"); free(a); return 0; } 35 35 36 36

  13. Concepts A failure comes to be in three stages: 1. The programmer creates a defect 2. The defect causes an infection 3. The infection causes a failure -- an externally visible error. Not every defect results in an infection, and not every infection results in a failure. 37 37 Concepts (2) To debug a program, proceed in 7 steps: T rack the problem R eproduce A utomate F ind Origins F ocus I solate C orrect 38 38 Concepts (3) A variety of tools and techniques is available to automate debugging: • Program Slicing • Observing & Watching State • Asserting Invariants • Detecting Anomalies • Isolating Cause-Effect Chains 39 39

  14. This work is licensed under the Creative Commons Attribution License. To view a copy of this license, visit http://creativecommons.org/licenses/by/1.0 or send a letter to Creative Commons, 559 Abbott Way, Stanford, California 94305, USA. 40 40

Download Presentation
Download Policy: The content available on the website is offered to you 'AS IS' for your personal information and use only. It cannot be commercialized, licensed, or distributed on other websites without prior consent from the author. To download a presentation, simply click this link. If you encounter any difficulties during the download process, it's possible that the publisher has removed the file from their server.

Recommend


More recommend