Fuzzing and analysis techniques
Fuzzing is one of the most effective, yet extremely difficult to categorize, techniques to test software. You can imagine a kid using a computer in a very naïve way, which could be defined as fuzzing. Or, for instance, using random input directly from /dev/urandom
in Linux may be considered fuzzing too. Using the help of my grandma to interact with a computer system could also be considered an effective technique to fuzz software. Fuzzing, by definition, does not only apply to running software but it can also be technically applied to source code and compiled code. Though, if we are not running the program, the term fuzzing may not be appropriate since we will fall into the static analysis domain. We can synthesize fuzzing and dynamic and static analysis into the definition of concolic testing, where concolic is a blend of the words concrete and symbolic. The aforementioned techniques are often used by many researchers together when trying to emulate...