Now I am confused about symbolic execution (SE) and reachability analysis (RA). As I know, SE uses symbols to execute some code to reach each branch with branch conditions. And RA can be used to find the reachability of each branch, right? When RA is used, we may extract the branch condition for each branch. If so, what's the difference between them? Can they be swift? Are they all static analysis?
Thanks, Eve
Symbolic execution is not static and it executes the program symbolically. For the concern of performance, symbolic execution tools like klee do not solve the branch condition when encountering a branch. It uses a cheap analysis to see whether it is likely to be reachable. It will try to generate a test case when reaching an exit of the program. If the collected constraints from the starting point (main function) to the exit is satisfiable, then a test case will be given, otherwise the exit is unreachable. SE uses reachability analysis to generate a test case to cover the code.