目录
5.中间表达形式 IR(intermediate representation)
1.单元测试
简单来说,单元测试可以看作脱离出来只针对某个单元进行测试。单元可以是函数、类或者其他块。如果单元内部进行了外部服务的调用,我们就可以用下面介绍的mock进行模拟返回值。
单元测试的优点不赘述,大体就是解耦合,方便测试,降低debug成本等等。
2.mock使用
第一个链接讲得挺清楚的。mock一般会用在前端调试中,不过我感觉对于本项目来说,还是用于单元测试会比较多。目前先做个简单了解,具体要用的时候再好好学习一下细节技术。
3.符号执行(symbolic execution)
符号执行我的理解更像一种方法,有点设未知数解方程那味了。其实逻辑看下来还是好理解的,只要注意分支路径假定条件要考虑完整,应该没啥大问题。
这篇文章讲得更深入一点,有时间把文中提到的论文看一看。
4.具体执行(concrete execution)
和符号执行相对的概念,即给出具体的测试值用例进行测试。
救命......怎么挖着挖着就开始有论文了......
先把论文贴这了,之后看一下
5.中间表达形式 IR(intermediate representation)
其实就是编译原理中间代码生成。参考下面文章复习一遍就好了。
6.LLVM/CLANG/KLEE区别
详解三大编译器:gcc、llvm 和 clang - 51CTO.COM
深入浅出让你理解什么是LLVM - 简书 (jianshu.com)
LLVM:low level virtual machine,但其实并不是虚拟机,笑死。
简单来说,LLVM提供了一个统一的IR,这样在需要添加新的语言编译或者需要支持新的硬件设备时候,只需要单独增加一个前端、后端就可以了。
clang是归属在LLVM架构下的一个面向C/C++/Objective-C编译器前端,clang作为前端生成到中间代码后,交给LLVM进行代码优化,并生成可执行程序。
而KLEE是一款开源的自动软件测试工具,基于LLVM编译底层基础,能够自动生成测试样例检测软件缺陷。与junit不同的地方在于,KLEE能对c程序生成字节码.bc文件,并自动生成各类缺陷,不需要再自己编写。
本周的背景知识学习就先到这里吧。感觉还是要通过实践学习来得透彻,好好把klee的几个tutorials看了吧。