One Test to Rule Them All-一种通过规范化减少语义复杂性从而简化用例集的方法

本文发表于 ISSTA 2017
原文PDF下载

简要

一种通过规范化减少语义复杂性从而简化用例集的方法

背景

软件测试中经常会编写大量冗余的用例,主要是因为:

  1. 难以准确识别和区分不同的故障
  2. 测试用例中可能存在大量的冗余信息(不同操作序列语义上可能是相同的)
  3. 无法区分测试用例中的数值是无关紧要的随机数,还是关键的输入值
    同时,对于复杂的软件系统,测试用例的长度可能很长,导致测试过程变得耗时且不可行.

论文内容

本文提出了一种规范化和泛化方法,其目的是找出一个函数f(t),其中t为测试用例

  • 如果t导致失败,则f(t)失败
  • 如果tt'是由于相同故障导致的失效,则f(t)=f(t')
  • 如果tt'是由于不同故障导致的失效,则f(t)≠f(t')

这样我们就能实现每个潜在故障都由单个测试唯一表示
但是这个函数实际上很难(精确的)实现,如果能(精确的)实现,则几乎能够实现故障自动定位和修复(软件测试领域的另一重大目标)

因此,本文的目标是通过提供一组简单的转换来接近目标:

  1. f将许多测试更改为同一测试
  2. f将两个因不同原因失败的测试更改为相同测试的概率很低
  3. f的计算成本并不高

Figure 1是一个例子,三个看上去不同测试用例,实际上是由于同一个错误导致的失败。本文的目的就是减少这样冗余的测试用例,使得可以简化为一个用例
在这里插入图片描述

最终可以形成一个规范化带有可读注释的用例
在这里插入图片描述


为此,本文引入了称之为TSTL的工具包,其中包含一种DSL(文中称之为TSTL harness )
在这里插入图片描述


随后定义了重写的规则和规范化的算法,重写可以减少步骤数量,使得整个过程是收敛的。

在这里插入图片描述

拓展知识点

本文是基于 delta-debugging背后的思想实现
其中测试步骤顺序无关化相关方法可参考:

  • J. Andrews, Y. R. Zhang, and A. Groce. Comparing automated unit testing
    strategies. Technical Report 736, Department of Computer Science, University
    of Western Ontario, December 2010
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值