Presentation is loading. Please wait.

Presentation is loading. Please wait.

Bugs CS100 how to prevent them, how to find them and how to terminate them.

Similar presentations


Presentation on theme: "Bugs CS100 how to prevent them, how to find them and how to terminate them."— Presentation transcript:

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


Download ppt "Bugs CS100 how to prevent them, how to find them and how to terminate them."

Similar presentations


Ads by Google