Regression test selection for TizenRT

摘要

RTS:跳过不被代码变更影响的测试用例

近期相关工作开发鲁棒的RTS工具,主要面向特定语言,比如JAVA和C#,不能兼容到大型C语言项目,比如TizenRT,一个轻量级的RTOS-based平台

本文开发工具Selfection,该工具使用objdumpreadelf工具从二进制文件中静态构建依赖图和检测修改的代码元素。实验部分使用TizenRT这个项目最新的150个版本,评价指标选取reduction in the number of tests(测试用例的约减)和reduction in test execution time(执行时间的约减),和RetestAll相比较。结果显示在模拟器上选择的测试数约减到4.95%,测试时间约减到7.04%,在真实硬件环境中选择测试用例约减到5.74%,测试时间约减到26.82%。

1. 绪论

本文的工作主要解决了当前缺少对于C语言项目的RTS工具的现状

本文实现工具Selfection,它使用静态分析收集每个测试的依赖关系,在新的版本中,检测修改函数,比较函数的checksum判断函数是否修改,然后传播变更影响。

实验指标上面说了,采用两种测试环境:

  1. Qemu模拟器
  2. 真实硬件板

2. Selfection

包含3个阶段:

  1. 分析
  2. 执行
  3. 收集

2.1 Phases

分析阶段(A-Phase):该阶段目标是检测受当前变更影响的测试用例。当前实现是使用Adler32算法计算函数的checksum。检测到修改的函数后,在依赖关系上计算传递闭包。

执行阶段(E-Phase):运行选择的测试用例

收集阶段(C-Phase):收集每个测试的依赖关系。

2.2 设计/实现抉择

Source vs. binary analysis:二进制分析更具有一般性,因为任何语言变异得到同样的执行格式。源代码分析要求特定编译器平台。

Static vs. dynamic analysis:静态分析对于依赖进行上近似。动态分析时在测试用例执行时动态收集依赖关系。使用静态分析有如下原因:

  1. 动态方法需要代码插装
  2. 动态插装需要额外的内存存储依赖关系
  3. 在硬件板子上收集依赖关系会引入额外的挑战和开销

7 结论

本文实现RTS工具Selfection对C语言项目进行RTS。在TizenRT项目最新的150个版本上进行实验。结果显示,与RetestAll相比,在模拟器上选择的测试数约减到4.95%,测试时间约减到7.04%,在真实硬件环境中选择测试用例约减到5.74%,测试时间约减到26.82%。