CSCE 315 – Programming Studio, Fall 2017 Tanzir Ahmed

Slides:



Advertisements
Similar presentations
VCE SD Theory Slideshows By Mark Kelly Vceit.com Debugging Techniques.
Advertisements

xUnit Test Patterns (Some) xUnit Test Patterns (in practice) by Adam Czepil.
Chapter 7 Introduction to Procedures. So far, all programs written in such way that all subtasks are integrated in one single large program. There is.
CSE 331 SOFTWARE DESIGN & IMPLEMENTATION DEBUGGING Autumn 2011 Bug-Date: Sept 9, 1947.
Version Control System (Sub)Version Control (SVN).
Annoucements  Next labs 9 and 10 are paired for everyone. So don’t miss the lab.  There is a review session for the quiz on Monday, November 4, at 8:00.
Debugging Mohammad Zikky, M.T. 2 Debugging Introduction (1 of 2)  Debugging is methodical process for removing mistakes in a program  So important,
Developer Testing and Debugging. Resources Code Complete by Steve McConnell Code Complete by Steve McConnell Safari Books Online Safari Books Online Google.
Chapter 3.5 Debugging Games
Interactive Media and Game Development Debugging.
Software Quality Assurance Inspection by Ross Simmerman Software developers follow a method of software quality assurance and try to eliminate bugs prior.
Race Conditions. Isolated & Non-Isolated Processes Isolated: Do not share state with other processes –The output of process is unaffected by run of other.
Debugging Introduction to Computing Science and Programming I.
Interactive Media and Game Development Debugging.
Debugging CPSC 315 – Programming Studio Fall 2008.
Interactive Media and Game Development Debugging.
2/9/2007EECS150 Lab Lecture #41 Debugging EECS150 Spring2007 – Lab Lecture #4 Laura Pelton Greg Gibeling.
SM3121 Software Technology Mark Green School of Creative Media.
02/10/06EECS150 Lab Lecture #41 Debugging EECS150 Spring 2006 – Lab Lecture #4 Philip Godoy Greg Gibeling.
CODING Research Data Management. Research Data Management Coding When writing software or analytical code it is important that others and your future.
Unit Testing & Defensive Programming. F-22 Raptor Fighter.
CSE 486/586 CSE 486/586 Distributed Systems PA Best Practices Steve Ko Computer Sciences and Engineering University at Buffalo.
Structured programming 4 Day 34 LING Computational Linguistics Harry Howard Tulane University.
Testing, Bug Fixing and Debugging the Code Yordan Dimitrov Telerik Corporation
Errors And How to Handle Them. GIGO There is a saying in computer science: “Garbage in, garbage out.” Is this true, or is it just an excuse for bad programming?
Debugging Chapter 23. Outline  Overview of Debugging  Finding a Defect  Fixing a Defect  Psychological Considerations in Debugging  Debugging Tools—Obvious.
Introduction to Software Testing. Types of Software Testing Unit Testing Strategies – Equivalence Class Testing – Boundary Value Testing – Output Testing.
DEBUGGING. BUG A software bug is an error, flaw, failure, or fault in a computer program or system that causes it to produce an incorrect or unexpected.
Chapter 22 Developer testing Peter J. Lane. Testing can be difficult for developers to follow  Testing’s goal runs counter to the goals of the other.
Testing and Debugging Session 9 LBSC 790 / INFM 718B Building the Human-Computer Interface.
What is Testing? Testing is the process of finding errors in the system implementation. –The intent of testing is to find problems with the system.
The Information School of the University of Washington 13-Oct-2004cse debug1 Debugging and Troubleshooting INFO/CSE 100, Spring 2005 Fluency in Information.
Debugging of # P. Hristov 04/03/2013. Introduction Difficult problem – The behavior is “random” and depends on the “history” – The debugger doesn’t.
Fixing the Defect CEN4072 – Software Testing. From Defect to Failure How a defect becomes a failure: 1. The programmer creates a defect 2. The defect.
Error messages 25-Apr-17.
David Streader Computer Science Victoria University of Wellington Copyright: David Streader, Victoria University of Wellington Debugging COMP T1.
Version Control and SVN ECE 297. Why Do We Need Version Control?
The single most important skill for a computer programmer is problem solving Problem solving means the ability to formulate problems, think creatively.
Outline Announcements: –HW I key online this afternoon –HW II due Friday –Sign up to discuss projects Debugging Testging for correctness.
INF3110 Group 2 EXAM 2013 SOLUTIONS AND HINTS. But first, an example of compile-time and run-time type checking Imagine we have the following code. What.
Error Analysis Logic Errors.
FOP: Multi-Screen Apps
Unit Testing.
Mobile Testing - Bug Report
14 Compilers, Interpreters and Debuggers
User-Written Functions
Debugging Intermittent Issues
Testing and Debugging PPT By :Dr. R. Mall.
What to do when a test fails
C++ coding standard suggestion… Separate reasoning from action, in every block. Hi, this talk is to suggest a rule (or guideline) to simplify C++ code.
Testing UW CSE 160 Winter 2017.
Debugging Intermittent Issues
Computer Science 209 Testing With JUnit.
Title of your science project
Chapter 18 Software Testing Strategies
Sentinel logic, flags, break Taken from notes by Dr. Neil Moore
TRANSLATORS AND IDEs Key Revision Points.
Testing UW CSE 160 Winter 2016.
Michael Ernst CSE 140 University of Washington
EECS150 Fall 2007 – Lab Lecture #4 Shah Bawany
CPSC 315 – Programming Studio
Debugging EECS150 Fall Lab Lecture #4 Sarah Swisher
Debugging “Why you were up till 2AM”
Debugging EECS150 Fall Lab Lecture #4 Sarah Swisher
Debug Logs for the Business Analyst
CS 240 – Advanced Programming Concepts
An Introduction to Debugging
For Tutors Introduce yourself.
Arrays.
Review of Previous Lesson
Presentation transcript:

CSCE 315 – Programming Studio, Fall 2017 Tanzir Ahmed Debugging CSCE 315 – Programming Studio, Fall 2017 Tanzir Ahmed

About Debugging (the point of this lecture) Debugging is NOT a random process You can approach debugging systematically

Bugs Term has been around a long time Mistake made by programmers Edison Mark I – moth in machine Mistake made by programmers Also (and maybe better) called: Errors Defects Faults

Sources of Bugs Bad Design Insufficient Isolation Typos Wrong/incorrect solution to problem Insufficient Isolation Changes in one area affect another Typos Entered wrong text, chose wrong variable Specially relevant in languages that are not strongly-typed Later changes/fixes that aren’t complete Especially problem with insufficient isolation Change process gets interrupted, or not all effects are considered

Debugging – Is it Worth Learning? Programming speed has high correlation to debugging speed Best debuggers can go up to 20 times faster Faster finding bugs Find more bugs Introduce fewer new bugs

Ways NOT to Debug Guess at what’s causing it Don’t try to understand what’s causing it Fix the symptom instead of the cause Special case code Blame it on someone else’s code Only after extensive testing/proof Blame it on the compiler/computer Yes, it happens, but almost never is this the real cause

Student Debugging (what I’ve heard and seen) Something’s not working I don’t know why my code’s not working I tried changing x and y and it seemed to make it work, but this other part’s broken My code keeps giving me the wrong thing here and I don’t understand why I didn’t really understand that part of the code

An Orderly Approach to Debugging Stabilize the error Locate the source Fix the defect Test the fix Look for similar errors Goal: Figure out why it occurs and fix it completely

1. Stabilize the Error Find a simple test case to reliably produce the error Narrow it to as simple a case as possible Some errors are intermittent as they resist this Failure to initialize Pointer problems Timing issues

1. Stabilizing the Error Converge on the actual (limited) error Bad: “It crashes when I enter data” Better: “It crashes when I enter data in non- sorted order” Best: “It crashes when I enter something that needs to be first in sorted order” Create hypothesis for cause If 10 things in conjunction (even after simplification) causes the error, start with suspected subset Then test hypothesis to see if it’s accurate

2. Locate the Source This is where good code design helps Good design will easily lead to the source Again, hypothesize where things are going wrong in code itself Then, test to see if there are errors coming in there Simple test cases make it easier to check

When it’s Tough to Find Source Create multiple test cases that cause same error But, from different “directions” Refine existing test cases to simpler ones Try to find source that encompasses all errors Could be multiple ones, but less likely Brainstorm for sources, and keep list to check Talk to others Take a break

Finding Error Locations Process of elimination Identify cases that work/failed hypotheses Narrow the regions of code you need to check Use unit tests to verify smaller sections Process of expansion: Be suspicious of: areas that previously had errors code that changed recently Expand from suspicious areas of code

Alternative to Finding Specific Source Brute Force Debugging “Guaranteed” to find bug Examples: Rewrite code from scratch Automated test suite Full design/code review Fully output step-by-step status Don’t spend more time trying to do a “quick” debug than it would take to brute-force it.

3. Fix the Defect Make sure you understand the problem Don’t fix only the symptom Understand what’s happening in the program, not just the place the error occurred Understand interactions and dependencies Save the original code Be able to “back out” of change

Fixing the Code Change only code that you have a good reason to change Don’t just try things till they work Make one change at a time

4. Check Your Fix After making the change, check that it works on test cases that caused errors Then, make sure it still works on other cases Regression test Add the error case to the test suite

5. Look for Similar Errors There’s a good chance similar errors occurred in other parts of program Before moving on, think about rest of program Similar routines, functions, copied code Fix those areas immediately

Preventing Bugs Or Finding Difficult Ones Good Design Self-Checking code Assert statements Output options Print statements can be your friend…

Debugging Tools Debuggers Don’t use debuggers to do “blind probing” Often integrated Can examine state in great detail Don’t use debuggers to do “blind probing” Can be far less productive than thinking harder and adding output statements Use as “last resort” to identify sources, if you can’t understand another way

Non-traditional Debugging Tools Source code comparators (diff) Compiler warning messages Extended syntax/logic checkers Profilers Test frameworks