# 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')


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!