Proj IoTDBFuzz Paper Reading: Testing Java Exceptions: An Instrumentation Technique

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实际执行得到的。

posted @ 2021-04-24 19:21  雪溯  阅读(45)  评论(0编辑  收藏  举报