Tours through the Book

While the chapters of this book can be read one after the other, there are many possible paths through the book. In this graph, an arrow $A \rightarrow B$ means that chapter $A$ is a prerequisite for chapter $B$. You can pick arbitrary paths in this graph to get to the topics that interest you most:

from IPython.display import SVG
SVG(filename='PICS/Sitemap.svg')
%3 Tracer Tracing Executions Debugger How Debuggers Work Tracer->Debugger Assertions Asserting Expectations Tracer->Assertions StatisticalDebugger Statistical Debugging Tracer->StatisticalDebugger DeltaDebugger Reducing Failure-Inducing Inputs Tracer->DeltaDebugger Repairer Repairing Code Automatically Assertions->Repairer StatisticalDebugger->Repairer ChangeDebugger Isolating Failure-Inducing Changes DeltaDebugger->ChangeDebugger Intro_Debugging Introduction to Debugging Intro_Debugging->Tracer Slicer Tracking Failure Origins Intro_Debugging->Slicer ChangeDebugger->Repairer

But since even this map can be overwhelming, here are a few tours to get you started. Each of these tours allows you to focus on a particular view, depending on whether you are a programmer, student, or researcher.

The Pragmatic Programmer Tour

You have a program to test. You want to generate tests as quickly as possible and as thorough as possible. You don't care so much how something is implemented, but it should get the job done. You want to get to the point.

  1. Start with Introduction to Testing to get the basic concepts. (You would know most of these anyway, but it can't hurt to get quick reminders).

  2. Use the simple fuzzers from the chapter on Fuzzers to test your program against the first random inputs.

  3. Get coverage from your program and use coverage information to guide test generation towards code coverage.

  4. Define an input grammar for your program and use this grammar to thoroughly fuzz your program with syntactically correct inputs. As fuzzer, we would recommend a grammar coverage fuzzer, as this ensures coverage of input elements.

  5. If you want more control over the generated inputs, consider probabilistic fuzzing and fuzzing with generator functions.

  6. If you want to deploy a large set of fuzzers, learn how to manage a large set of fuzzers.

In each of these chapters, start with the "Synopsis" parts; these will give you quick introductions on how to use things, as well as point you to relevant usage examples. With this, enough said. Get back to work and enjoy!

Lessons Learned

Creative Commons License The content of this project is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. The source code that is part of the content, as well as the source code used to format and display that content is licensed under the MIT License. Last change: 2020-10-13 15:07:16+02:00CiteImprint