#!/usr/bin/env python # coding: utf-8 # # Part V: Domain-Specific Fuzzing # # This part discusses test generation for a number of specific domains. For all these domains, we introduce _fuzzers_ that generate inputs as well as _miners_ that analyze the input structure. # # * [Testing Configurations](ConfigurationFuzzer.ipynb) systematically _tests_ and _covers_ software configurations. By _automatically inferring configuration options_, we can apply these techniques out of the box, with no need for writing a grammar. # # * [Testing APIs](APIFuzzer.ipynb) shows how to generate inputs that go directly into individual functions, gaining flexibility and speed in the process. # # * [Carving](Carver.ipynb) takes a system test and automatically extracts a set of _unit tests_ that replicate the calls seen during the unit test. The key idea is to _record_ such calls such that we can _replay_ them later – as a whole or selectively. # # * [Testing Web Applications](WebFuzzer.ipynb) shows how to systematically explore the behavior of a Web application – first with hand-written grammars, then with grammars automatically inferred from the user interface. We also show how to conduct systematic attacks on these servers, notably with code and SQL injection. # # * [Testing Graphical User Interfaces](GUIFuzzer.ipynb) explores how to generate tests for Graphical User Interfaces (GUIs), generalizing from rich Web applications to mobile apps, and systematically exploring user interfaces through forms and navigation elements.