In this course you will learn how to debug programs systematically using scientific methods and build several automated debugging tools in Python.
Lesson 1 How Debuggers work Theory: Scientific method and its application to debugging. Fun fact: First bug in the history of computer science. Practice: Building a simple tracer. Lesson 2 Asserting Expectations Theory: Assertions in testing and in debugging. Fun fact: The most expensive bug in history. Practice: Improving the tracer. Lesson 3 Simplifying Failures Theory: Strategy of simplifying failures. Binary search. Delta debugging principle. Fun fact: Mozilla bugathon. Practice: Building a delta debugger. Lesson 4 Tracking Origins Theory: Cause-effect chain. Deduction. Dependencies. Slices. Fun fact: Sherlock Holmes and Doctor Watson. Practice: Improving the delta debugger. Lesson 5 Reproducing Failures Theory: Types of bugs (Bohr bug, Heisenbug, Mandelbug, Schrodinbug). Systematic reproduction process. Fun fact: Mad laptop bug. Practice: Building a statistic debugging tool. Lesson 6 Learning from Mistakes Theory: Bug database management. Classifying bugs. Bug maps. Learning from mistakes. Fun fact: Programmer with the most buggy code. Practice: Improving your tools and practicing on a real world bug database.