【准则化的思想】回归测试充分准则

回归测试我们都很熟悉。比如我们现在要测一个程序的1.1版本,这个版本跟上一个版本,也就是1.0版本相比,增加了几个新功能,修改了几个已有功能,剩下大部分功能的期望没有变化。

虽然改的不多,但毕竟代码发生了变更,原来没问题的功能也可能被改出了新问题。所以,为了确保这些没变化的功能还是好用的,我们就需要做回归测试。

怎么做呢?当然是拿来主义,既然没变的功能在1.0版本里已经测过了,把对应的用例拿过来再执行一遍就好了,这些用例就构成了回归测试集。

但是V1.1只是一个中版本,留给我们的测试时间可能比较少,不够把回归测试集全执行一遍。这时候,我们就需要用到准则化的思想,做出一些取舍。

一个直接的想法就是,选择那些跟代码变更有关的用例。比如说某个用例,在1.0里的覆盖的代码,在1.1里被修改或删除了,这种用例,我们叫“游历代码变更”的用例。

“基于变更的回归测试充分准则”,就是要求回归测试集包含所有游历代码变更的用例:

然而,如果老功能被改出了新问题,这个准则并不能保证发现问题。因为导致问题的原因,既可能是代码变更,也可能是配置变更、环境变更。有的用例可能并没有游历代码变更,但是在新版本里的执行结果就是错误的。

所以这个准则预设了一些前提,其中最主要的就是“回归测试可控假设”,也就是假设“只有代码变更会影响用例执行结果”。但是这个假设经常是不成立的。因此,基于变更的回归测试充分准则,其实是一个比较粗放的准则。

还有一个更细致一点的准则,叫“基于优先级排序的回归测试充分准则”。大多数情况下,测试用例集是一个有序集,在测试执行的时候,我们需要按照某种顺序,依次来执行这些用例。合理的用例执行顺序不仅可以降低测试执行成本,还能提高缺陷检出效率。所以,“测试选择问题”其实跟空间和时间都有关,既涉及测试输入空间上的选择,也涉及用例执行顺序上的选择。

来看一个通过调整用例执行顺序降低成本的例子:比如我们要测一个拖拉机的耕地功能,测试输入变量有3个,包括犁铧类型、犁铧悬挂点高度、立柱高度。犁铧就是犁上翻土用的铲子,有三角形的,也有梯形的:

我们设计了一组用例,一共4个:

每执行一个用例之前,我们需要更换对应类型的犁铧,调整悬挂点和立柱的高度。如果按默认的t1→t2→t3→t4的顺序执行用例,需要更换3次犁铧。但是我们不想换这么多次,因为换犁铧特别麻烦。这时候,我们可以调整一下用例执行的顺序,比如t1→t3→t2→t4​,这样就只需要换1次犁铧​。

再来看一个提高缺陷检出效率的例子:测试集里有5个用例,假定我们已经知道了每个用例可以检出哪些缺陷,比如t1能检出缺陷A和E:

那么为了尽快检出所有缺陷,我们应该先执行t3和t5,其它随意。

当然,这只是一个概念化的例子,实际上我们不可能在测试选择的时候,只根据一些简单的特征,就提前确定一个用例能不能检出缺陷。就像刚才我们说的,一个用例可能并没有游历代码变更,但是也有可能检出缺陷。所以一个用例到底值不值得回归,不能只看它涉不涉及代码变更。更合理的做法,是从回归测试的根本目的出发,进行一个综合性的考量,给每个回归用例定一个优先级,按照优先级从大到小的顺序执行用例,直到资源耗尽为止。

回归测试的根本目的是什么呢?从评估质量的角度来说,回归测试要确保老功能还是好用的,特别是那些重要的老功能;从检出缺陷的角度来说,如果老功能被改出了新问题,回归测试要能发现这些问题。

所以,什么样的回归用例优先级更高呢?我们有这样几条启发式原则:

  ① 用例对应的被测对象期望越重要,则该用例的优先级应该越高。这是一个价值维度的原则,出发点是评估质量;

  ② 用例与变更的关联程度越高,则该用例的优先级应该越高。这是一个风险维度的原则,出发点是检出缺陷;

  ③ 除此之外,我们还有第3条原则:执行用例所需的成本越低,则该用例的优先级应该越高。为什么呢?因为在一定的资源约束下,用例执行成本越低,能执行的用例数量就越多,回归测试就越充分。

根据这三条启发式原则,我们可以建立这样一个回归测试用例优先级定量评估模型:

这里面,v(t)表示用例t对应期望的价值量,a(t)表示用例t和代码变更的关联程度,r(t)表示执行用例t所需的成本。

用这个模型计算每一个回归用例的优先级,然后在满足资源约束的前提下,按优先级从大到小的顺序,选择尽可能多的回归用例来执行。这就是“基于优先级排序的回归测试充分准则”

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值