Abstract
本文认为一般测试工具只会试着覆盖正常执行路径,本文则会尝试引发已经标明可能出现的异常,由此,测试人员就能观察到程序如何处理这些异常,同时,也能增加覆盖率
Intro
本文工作:
实现了一个能够对Java源码自动插桩的工具,能够自动执行程序的exception相关路径,且能够和现有的测试工具一起使用
AN INSTRUMENTATION TECHNIQUE TO EXERCISE EXCEPTIONS
A. VerifyEx类
VerifyEx有个exception方法,传入参数是用于区别异常的标签
功能:
1. 标识异常执行顺序
2. 协助reboot-可以从程序任何位置重新启动,这样就不需要每次都从main启动,或者每次都把所有的异常路径都走一遍
B. 插桩
Step 1:查找exception的activation/deactivation
本文认为:1. 有throws某个异常这个行为的方法,且这个方法中没有一个被调用的被测函数throw这个异常的,那么这个方法就是activation
2. try block对于其catch语句所标明的异常类型来说是activation
首先,本文创建一个程序的抽象模型,里面只包含exception相关语句和exception objects的控制流图
Step 2. 确定插桩位置
位置分别是:
1. throw 命令前面
2. 会丢出异常的method的第一行
3. try block的第一行
Step3: 插桩
具体指令是通过VerifyEx实际执行得到的。
此外,还会插入Reboot相关指令。