Reading Papers - Uncategorized
# Uncategorized
# Unit Testing
# ICSE'07 - RANDOOP (to-be-reread)
RANDOOP
Taxonomy : unit testing / random testing / object-oriented programs
Tag : --
# ICSE'14 - MicroX
本文提出了 micro execution 的概念,即在没有 test driver/harness 、没有测试输入的情况下快速运行单元测试的能力,提出了一种通过模拟执行环境以支持 micro execution 的方法,并实现了专用于测试的虚拟机 MicroX 。
Taxonomy : unit testing
Tag : virtual machine
本文提出了 micro execution 的概念,即在没有 test driver/harness 、没有测试输入的情况下快速运行单元测试的能力。
KEY Idea :在 VM 层的控制下,动态地识别被测代码段的 I/O 边界,透明地将其自动替换为测试输入。
在 MicroX 的 micro execution 中,开发者只需指定被测(二进制)代码的起止程序点、预设一个 memory policy 、然后外接一个 input generator ,即可对任意代码段运行单元测试。
# MicroX 工作流程
MicroX 的工作流程非常简单:
由开发者(从某个可执行文件中)选择被测代码段,然后直接在 MicroX VM 上开始执行此段代码。
VM 劫持被测程序的所有内存访问操作,并根据开发者预设的 memory policy 在被访问的地址处填充输入值,使这段被截断的执行流能够正常进行。
具体地,MicroX VM 动态执行每一条 x86 指令,将其分解为一系列 micro operation 并插入额外的 callbacks ,由此实现对内存访问指令的劫持以及对未定义内存的重写。例如:
mov eax, [ecx]
GenerateEffectiveAddress
PREMemoryAccessCallback
mov eax, [EffectiveAddress]
其中 PREMemoryAccessCallback 会检测所访问地址的当前状态,并根据 memory policy 决定应当进行的动作(例如是局部值、是需要重定义的输入、还是已重定义的地址)。
MicroX VM 在运行时维护 external memory ,其中记录了从被测程序中原本的地址到 VM 维护的虚假地址的一对一映射。由 memory policy 决定具体哪些地址需要被映射。
- external memory 对被测程序是透明的,即其存在对正常程序执行是不可见的。
# Advantages and Limitations
micro execution 具有如下显著优势:
能够以极低的成本测试任意代码段,这也是 micro execution 的核心竞争力。
高效且完全自动化。
可以与任意的测试输入生成工具相结合。
尽管如此,micro execution 也具有显著的 limitations 。
false positives (too many behaviours, unrealistic bugs) :
- micro execution 适用于那些具有 (almost) unconstrained inputs 的代码段,否则难以模拟实际的执行环境,可能会执行大量无价值的测试。
false negatives (too few behaviours, false bugs) :
memory policy 可能遗漏输入参数(例如未将一些全局变量视为输入的一部分),因而无法完整探索输入空间。
过于宽松的 memory policy 可能导致 MicroX 的虚拟环境在本该崩溃的执行中生存下来。
- 01
- Reading Papers - Kernel Concurrency06-01
- 02
- Linux Kernel - Source Code Overview05-01
- 03
- Linux Kernel - Per-CPU Storage05-01