What is random testing (aka fuzzing)?
What is the depth of a concurrency bug?
The number of ordering constraints (across threads) a schedule has to satisfy to find the bug.
NOTE: ordering constraints within a thread don’t count toward the bug depth because a thread’s control flow implicitly defines the constraints on the order in which the statements execute.
Bug depth only counts ordering constraints ACROSS threads.
A bug depth of 1-2 is generally good enough to uncover most of a program’s concurrency bugs.
Why does systematic randomization improve concurrency testing?
Fuzzing thread schedules (as Cuzz does) gives us a guaranteed probability of finding a bug of a given depth.
Why is Cuzz better than traditional stress testing?
Whatever stress testing can do, Cuzz can do better (and faster).
What are the pros and cons of random testing (fuzzing)?
Pros:
Cons:
For example:
- the lexer is very heavily tested by random inputs but later stages is much less efficient b/c most bad inputs don’t get through.
What is random testing good at?
Can random testing replace systemic, formal testing?
Effective for testing security, mobile apps, and concurrency.
No, it should be used to complement it.