Lo sfarfallio, secondo una definizione attuale di Wikipedia, è definito nel modo seguente:
Fuzzing or fuzz testing is an automated software testing technique that involves providing invalid, unexpected, or random data as inputs to a computer program. The program is then monitored for exceptions such as crashes, failing built-in code assertions, or potential memory leaks. Typically, fuzzers are used to test programs that take structured inputs.
L'esecuzione simbolica, al contrario, è definita nel modo seguente, anche prendendo da Wikipedia:
In computer science, symbolic execution (also symbolic evaluation) is a means of analyzing a program to determine what inputs cause each part of a program to execute. An interpreter follows the program, assuming symbolic values for inputs rather than obtaining actual inputs as normal execution of the program would, a case of abstract interpretation.
Quello che sto cercando di capire è la differenza funzionale tra questi due metodi. Vedo la linea che dice che l'esecuzione simbolica determina "quali input fanno sì che ogni parte di un programma venga eseguita", quindi potresti differenziare ciascun metodo dall'obiettivo che un ricercatore della sicurezza ha in mente. I documenti che ho letto hanno recentemente differenziato l'esecuzione simbolica dalla confusione dicendo che il primo ha un sovraccarico significativamente maggiore / eseguito più lentamente.
Dal mio punto di vista, l'esecuzione simbolica utilizza una forma di "fuzzing mirato" che colpisce in modo specifico determinati valori simbolici. Ho anche sentito dire che l'esecuzione simbolica è solo "una confusione più sofisticata".
Qualcuno può chiarire qual è la vera differenza tra i due e perché o quando dovremmo preferire un metodo all'altro?