读一下《符号执行研究综述》论文~
符号执行是重要的程序分析方法,为程序测试提供高覆盖率的测试用例,以触发深层的程序错误。
定义
符号执行作为一种重要的形式化方法和软件分析技术,采用抽象符号代替程序变量,程序计算的输出被表示为输入符号值的函数,根据程序的语义,遍历程序的执行空间。
历史
- 1975,King首次提出符号执行的思想,应用于程序分析。
- 经历过短暂的研究高潮后,符号执行的研究就陷入了低谷。
- 十几年间,传统符号执行——>动态符号执行——>选择性符号执行。
- 动态符号执行:(1)混合测试;(2)执行生成测试。
- 符号执行的优势:尽可能少的测试用例集达到高测试覆盖率,从而挖掘出复杂软件程序的深层错误。
- 符号执行的限制:路径爆炸问题、约束求解困难集内存建模。
各类符号执行介绍
经典符合执行
- 经典符号执行的核心思想是通过使用符号值来代替具体值作为程序输入,并用符号表达式来表示与符号值相关的程序变量的值。
- 经典符号执行并不真实地执行,而是基于解析程序,通过符号值模拟执行。
- 经典符合执行是一种静态符号执行。
- 经典符号执行原理上是可对程序路径进行全覆盖的,可针对每一路径都生成符合该路径的测试用例。
动态符号执行
- 动态符号执行结合使用了具体执行和符号执行,综合了具体执行和经典符号执行的优点,并出现了混合执行(concolic execution)