#!/usr/bin/env python # coding: utf-8 # # Part III: Syntactic Fuzzing # # This part introduces test generation at the _syntactical_ level, that is, composing inputs from language structures. # # * [Grammars](Grammars.ipynb) provide a _specification_ of legal inputs to a program. Specifying inputs via a grammar allows for very systematic and efficient test generation, in particular for complex input formats. # # * [Efficient Grammar Fuzzing](GrammarFuzzer.ipynb) introduces tree-based grammar fuzzing algorithms, which are much faster and allow for much more control over the production of fuzz inputs. # # * [Grammar Coverage](GrammarCoverageFuzzer.ipynb) allows systematically covering elements of a grammar such that we maximize variety and do not miss out individual elements. # # * [Parsing Inputs](Parser.ipynb) shows how to use grammars to parse and decompose a given set of valid seed inputs into their corresponding derivation trees. # # * [Probabilistic Grammar Fuzzing](ProbabilisticGrammarFuzzer.ipynb) gives grammars even more power by assigning _probabilities_ to individual expansions. # # * [Fuzzing with Generators](GeneratorGrammarFuzzer.ipynb) shows how to extend grammars with _functions_ – pieces of code that get executed during grammar expansion, and that can generate, check, or change elements produced. # # * [Greybox Grammar Fuzzing](GreyboxGrammarFuzzer.ipynb) makes use of the structural representation allows us to mutate, crossover, and recombine their parts in order to generate new valid, slightly changed inputs. # # * [Reducing Failure-Inducing Inputs](Reducer.ipynb) presents techniques that _automatically reduce and simplify failure-inducing inputs to a minimum_ in order to ease debugging.