Download presentation
Presentation is loading. Please wait.
Published byGeorgina Simpson Modified over 8 years ago
1
Bugs CS100 how to prevent them, how to find them and how to terminate them
2
Bugs Programming Errors First bug –A moth stuck in a Harvard Mark II mainframe in 1947.
3
Bugs are bad 1990 – AT&T long distance service failed for 9 hours and was traced to a single faulty line of code 1991 – Scud missile killed 28 soldiers because a bug caused the Patriot defense system to be off by 0.34 seconds 2000 – Y2K
4
Today’s Lecture How to prevent bugs ? –Understand the problem –Understand Java –Follow good programming practices How to find bugs ? –Testing How to kill bugs
5
Program Development Design Implement Testing
6
Program Design : Classes Student double averageGrade int grades[6] double weight[6] calcAverageGrade() getAverageGrade() LetterGradeStudent printGrade() PassFailStudent printGrade() Course double averageGrade double max double min double sum int numOfStudent Student students[] calcAverageGrade() getAverageGrade()
7
Program Design : Pseudocode Average grade for students for ( i = 0.. 6) average += grade[i]*weight[i] return average Average Grade for course for each student sum += student’s weight average return sum/number of students; Get input get number of students for i = 1.. number of students get name get enrollment status get all six grades if enroll as pass fail then create a PassFailStudent else create a LetterGradeStudent
8
Program Design : Data Flow create a student name pass/fail ? 6 grades calc student’s average grade Student obj get final grade average grade final grade
9
Program Design : Control Flow i = 0 i == # of students ? get name get status get grades increment i
10
Good Program vs. Bad Program Easy to Read –Good Comments –Meaningful Names –Properly Indented –Blank Lines Well-Designed –Covered all cases –Anticipate Changes –Reusable
11
Good Design Anticipate Changes Reusable Encapsulation Think “LEGO”
12
What if.. create histogram for data between 1.. 200 ? tally data for smaller intervals ? 1 – 5 | ** 6 – 10 | ***** 11 – 15 | * : 196 – 200 | *** draw a histogram for average grades of all students for this class ?
13
Bug Prevention code reuse –fewer lines of code to write, fewer bugs anticipate changes –fewer lines of code to change, fewer bugs encapsulation –bugs are confined to one place, easier to detect and fix.
14
Good Programs Easy to read –blank lines –indentation –comments –meaningful names Easy to read, easy to spot bugs !
15
Finding Bugs Wrong attitude : “My program works ! I am done.” Did you test it with all possible inputs ? –negative numbers ? –zero ? Did you test all possible path of execution ?
16
Component Testing Another motivation for encapsulations ! Test each component separately Make sure they worked before using them
17
Debugging Techniques : Think “high-level” 1.scan from left to right 2.swap two adjacent elements if they are out of order 3.repeat until everything is in order
18
Debugging Techniques : Printout Print out your code Spread it on a large table Walkthrough your code Draw diagrams Make notes
19
Debugging Techniques : Explain it to Someone Else Old Chinese Proverb : “Onlookers see most of the game; Players see very little”
20
Debugging Techniques : System.err.println Let you inspect the intermediate value of variables 53 2147483647 0 34 2147483647 0 10 2147483647 0 82 2147483647 0 72 2147483647 0 Can you guess what is wrong now ?
21
Debugging Techniques : assert() a method to make sure that your invariants are true. void assert(boolean condition, String errorMessage) { if (!condition) throw new Error(errorMessage); }
22
Debugging Techniques : assert() The Error exception will cause the stack trace to be printed. java.lang.Error: data 364 is out of range at java.lang.Throwable. at java.lang.Error. at Histogram.assert at Histogram.addData at P2Q4.createHistogram at P2Q4.main
23
Debugging Techniques : Debugger breakpointpause execution stepincremental execution continueresume execution watch stop if value of a variable changes call stack list currently active frames variables inspect value of variables
24
Summary Bug Prevention –understand the problem and language –design before sit in front of computer –design for change/reuse Bug Discovery –test all flow of controls –test small components separately before using it
25
Summary Bug Termination –re-think your algorithm from a higher-level –manually trace through your program –explain your program to others –System.err.print –assert() –use a Debugger
Similar presentations
© 2024 SlidePlayer.com. Inc.
All rights reserved.