【准则化的思想】绝对充分度

测试选择问题的背后,是测试目标和可用资源之间的矛盾。我们关于被测对象的价值观,决定了我们应该如何来调整测试目标,使其在资源约束下更具可行性,进而建立相应的测试充分准则,聚焦于那些在价值观中更重要的结构元素、缺陷类型——以及对应的测试输入点,以辅助我们达成测试目标。可见,价值观是准则化思想的内核

在理想与现实的对照中,基于结构覆盖的充分准则着眼于“现实”:针对我们所关注的某一种结构特征,将“未能完整覆盖被测对象结构元素”的测试定义为不充分的测试。以同一种结构特征为基础的不同充分准则之间,很可能存在包含关系。

基于缺陷的充分准则试图揭示测试输入点和缺陷之间的联系。以“确保检出某一类重要缺陷”为目标,这类准则描述了测试用例集应该具备的特征,以此来直接或间接地指导测试选择的过程。通过挖掘缺陷之间的等效或支配关系,测试选择有可能得到简化。

对于回归测试充分准则,如果仅从“检出缺陷”出发,我们可以根据缺陷与变更的关系,将准则设定为“要求测试集包含所有游历变更的用例”;如果同时考虑“检出缺陷”与“评估质量”,就需要进一步分析用例对应期望的价值量和用例执行成本,更全面地评估待选用例的优先级。

当我们决定是否要采用某个充分准则时,一方面要看其是否契合我们的测试目标,另一方面要看能否接受其实施成本。如果从已有准则中找不到合适的,那么就需要自行创立。这时,我们应该尽量在新的准则中保有一些常见准则的优良性质。

然而,就算准则具备这些性质,最终也只能实现相对的充分。就算变异得分达到1,也不能保证程序就没任何问题了。有没有一种更厉害的准则,能实现“绝对的充分”呢?

要回答这个问题,我们先来想一想,“绝对充分”的测试意味着什么?

如果你想要做到“绝对充分”的测试,你就必须要验证所有可能的情况,而且每一种情况都要验证得明明白白。如果你漏掉了任何一种情况,就肯定不是“绝对充分”了,测试充分性就会降低,假如你漏掉的还是一种非常重要的情况,那测试充分性就会降低得更多;或者你采用了自动化测试的方式,结果校验做得比较简略,并不能百分之百确定测过的情况就没有问题,那么测试充分性也会降低。

根据这样的洞见,我们可以试着建立一个指向“绝对充分”的准则。假设测试输入空间中有n个测试输入点,每一个测试输入点的价值风险水平是vi,测试集对这个点的验证置信度是ci。那么测试集的绝对充分度可以定义为:

我们来具体解释一下:

  ① 一个点的价值风险水平vi,指的是这个点代表的具体事件,对用户而言有多重要。那么,vi应该怎么评估呢?我们很容易想起一个另一个概念:被测对象期望的价值量。显然,一个点的价值风险水平,跟它所属期望的价值量是密切相关的。除此之外,我们还应该考虑这个点在用户实际使用过程中的发生概率,发生概率越高,对用户产生的影响就越大,这个点也就越重要。

  ② 一个点的验证置信度ci,指的是经过测试验证之后,我们能够在多大程度上确信,这个点上的理想和现实是相符的——是100%确信,还是80%确信,还是完全不确信:如果测试集里包含了这个点,并且结果校验做得非常彻底,那么这个点的验证置信度就是1;如果我们对这个点的结果校验不够彻底,它的验证置信度就会小于1;如果我们在测试设计中完全遗忘或放弃了这个点,它的验证置信度就是0。

只有当测试输入空间中所有点的验证置信度都为1的时候,绝对充分度才能达到100%。当然,这并不意味着我们必须把整个测试输入空间都塞入测试集​。比如通过分割测试方法,我们从一个同质子空间里只需要任意选取一个点,如果在这个点上验证置信度达到1,那么其它所有没被选择的点,验证置信度也是1。

根据绝对充分度的定义,只要某个点的验证置信度ci小于1,我们就做不到“绝对充分”,测试集的充分性就会下降。而且,这个点的价值风险水平vi越高,测试集充分性下降得就越多。​

实际上,要准确评估价值风险水平vi、验证置信度ci,都是非常难的,因此绝对充分度并不是一个实用的充分准则,就好像“绝对充分”并不是一个切合实际的测试目标。绝对充分度更像是一种理念,一座灯塔,引导我们去反省自己测试设计中的局限性,提醒我们——当我们口口声声地谈论测试充分性的时候,我们到底在谈论什么

  • 8
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值