Fuzzing is a code analysis technique that attempts to discover issues by creating random sequences of transactions. Security properties are defined using invariants, assertions or a general list of vulnerabilities.
Pros
Cons
Shrinking is an advanced feature that allows fuzzers to simplify their outputs for humans. The shrinking step runs after a fuzzer has successfully completed the search for a series of transactions that violate a security property. It attempts to trim down the transaction sequence and find a shorter sequence that still triggers the invariant.
Some fuzzers (called Greybox fuzzers) are able to scan the code and select values more intelligently. For example, they can study branch conditions and select values that trigger the if and else condition of each branch to maximize line coverage during a fuzzing campaign.
Fuzzers are useful in several kinds of security reviews such as Access Control Review and Flow of Value Analysis where desired properties are easy to define. In general, where it's possible to define meaningful security properties and invariants, it's worth considering a fuzz campaign given the ease of setting up fuzzing.