1 / 25

Bugs

Bugs. how to prevent them, how to find them and how to terminate them. CS100. Bugs. Programming Errors First bug A moth stuck in a Harvard Mark II mainframe in 1947. Bugs are bad. 1990 – AT&T long distance service failed for 9 hours and was traced to a single faulty line of code

nico
Download Presentation

Bugs

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


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

  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 Studentdouble averageGradeint grades[6]double weight[6]calcAverageGrade()getAverageGrade() Coursedouble averageGradedouble maxdouble mindouble sumint numOfStudentStudent students[]calcAverageGrade()getAverageGrade() LetterGradeStudentprintGrade() PassFailStudentprintGrade()

  7. Program Design : Pseudocode Average grade for studentsfor ( i = 0 .. 6) average += grade[i]*weight[i]return average Get inputget number of studentsfor 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 Average Grade for coursefor each student sum += student’s weight averagereturn sum/number of students;

  8. pass/fail ? name 6 grades create a student Program Design : Data Flow final grade get final grade Student obj calc student’s average grade average grade

  9. i = 0 i == # of students ? get nameget statusget grades increment i Program Design : Control Flow

  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” • scan from left to right • swap two adjacent elements if they are out of order • 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 034 2147483647 010 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)thrownew Error(errorMessage); }

  22. Debugging Techniques : assert() • TheError exception will cause the stack trace to be printed. java.lang.Error: data 364 is out of rangeat java.lang.Throwable.<init>at java.lang.Error.<init>at Histogram.assertat Histogram.addData at P2Q4.createHistogramat P2Q4.main

  23. Debugging Techniques :Debugger

  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

More Related