CSSE490 - The art and science of debugging
Rose-Hulman Institute of Technology
Computer Science and Software Engineering Department
Spring 2018-2019
Course description
Introduction to debugging. Systematic approaches to solving problems: search space, fault tree analysis, hazard analysis, instrumentation, tool usage, engineering process. Specific topics include failure stimulation, software debugging tools, problem isolation, non-deterministic errors, and data collection. There are many smaller in-class debugging and programming assignments and several larger out-of-class debugging projects.
Course prerequisites
CSSE 230 and C knowledge
Technical prerequisites
Students should be able to create and use C, assembly, and Java programs.
Social prerequisites
We expect students in this course to:
- Interact with others in technical setting
- Communicate online effectively
- Maintain professional communication in course matters
Schedule
See the main course page for schedule details.
Schedule
Section 1 : MTRF 5 in O167
Instructors
Micah Taylor
Moench F205 - check my schedule
812-877-8396
taylormt@rose-hulman.edu
TAs
Addison Kremer
kremeran@rose-hulman.edu
Course objectives
This is what you will learn through this course.
- Identify common classes of bugs
- Allows shortcut to solving
- Locate and correct common classes of bugs
- Enables debugging of majority of bugs
- Use documentation to explain code design
- Describe the function of existing code
- Quickly integrate domain knowledge
- Use man pages
- Use API docs
- Quickly integrate domain knowledge
- Apply engineering techniques to improve maintenance
- Avoid creating bugs, allow fast understanding of code
- Use basic refactoring
- Use basic coupling/cohesion analysis
- Write basic test cases
- Implement in small trackable changes
- Avoid creating bugs, allow fast understanding of code
- Assess the debuggability of code
- Identify when to adjust code
- Use refactoring to make problem easier
- Identify when to adjust code
- Use debugging tools efficiently
- Tracking software
- Static analyzers
- Debuggers
- Allows repeated tests of bug state
- Find memory bugs with SA
- Find logic bugs with prog state
- Find regressions with CI
- Find dups with tracking
- Predict the actions of the runtime on given code
- Use domain knowledge to solve bug without example case
- Solve bugs that cannot be reproduced
- Solve bugs without instrumentation
- Use domain knowledge to solve bug without example case
- Apply the scientific method to isolate and correct bugs
- Use instrumentation to gather data
- Hypothesize the bug cause
- Formulate and apply correction to test hypothesis
- Goal of reproducing the bug
- Control variables
- Eliminate irrelavant variables
- Reproduce bugs effectively
- Find bugs systematically
- Eliminate working code
- Eliminate code affected by upstream failure state
- Locate bugs effectively
- Solving the bug after reproduction
- Prove fix corrects failed state
- Correct bugs effectively
Required resources
Book: Debugging, David J. Agans AMACOM, 2002
Recommended resources
Book: Why Programs Fail, 2nd edition Andreas Zeller Morgan Kaufmann, 2009
In addition, the following software tools are required for the assignments:
- Microsoft Visual Studio 2017 with C and C++ support
- Java7 and Eclipse Oxygen
- Access to a Linux installation with gdb (ARM or x86)
Out of class assignments
Reading response
There are readings assigned each week. The readings and all related materials must be completed before the discussion session.
Projects
There will be several large debugging projects. A debugging log and the corresponding code changes must be submitted for each project.
Final project
There will a large debugging project. This will be debugging an actual bug found in open-source software. A debugging log and the correcting code changes must be submitted for the project. The project will be completed in teams.
In class assignments
Discussion
A portion of this class will be discussing the content of the readings. You must participate in the weekly discussions to earn points for this assignment.
Laboratories
There are several labs that must be completed in class. Lab assignments will available on the course web site. Completed labs are submitted via verification and your code repository.
Grading
Assignment | Weight |
---|---|
Reading | 15% |
Discussion | 15% |
Labs | 20% |
Project | 20% |
Final | 30% |
Collaboration
Collaboration is encouraged on homework, quizzes, and projects. It is prohibited on labs. When you collaborate, you must properly credit your collaborators and clearly indicate the extent of the collaboration. In all cases, each individual is responsible for understanding and writing out the entire solution. For example, on homework, this means that once a group solution has been achieved, each collaborator must rework the problem and write up the solution independently. Copying is not collaboration.
Any kind of plagiarism or cheating will result in a severe penalty in the course and Student Affairs will be notified. See this page for details.
In general, any actions that reduces your or your peer's ability or opportunity to learn can be considered academic misconduct. You are here to learn!
Resources
Rose provides a number of resources to help you:
- For accessibility information, see Rose's Disability Services policies. If you need accommodation, you must contact your instructor 3 class days beforehand.
- Be aware of relevant services and policies regarding student life.
- Make sure you know the academic policies.
Concerns or Feedback
If you have any concerns about any course matters, you should find someone to contact. You can email your instructor, speak to your instructor, or leave anonymous feedback on the course page. You can also contact the [mailto:mellor@rose-hulman.edu](CSSE department head), [http://www.rose-hulman.edu/offices-and-services/student-affairs.aspx](Student Affairs), or another Rose employee you feel comfortable with.