问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

自适应随机测试:通过多样化思想提升缺陷检出效率

创作时间:
2025-03-15 11:19:05
作者:
@小白创作中心

自适应随机测试:通过多样化思想提升缺陷检出效率

引用
CSDN
1.
https://blog.csdn.net/wkqyxyh/article/details/142361035

在软件测试领域,如何提高缺陷检出效率是一个永恒的话题。自适应随机测试作为一种创新的测试方法,通过调整测试用例的执行顺序,能够在更短的时间内发现缺陷。本文将详细介绍自适应随机测试的原理、步骤及其与反随机测试的区别。

我们评估一个测试设计方法的缺陷检出能力,常用的是三类指标:
① P测度,指的是用这种方法设计出来的测试集,有多大概率能检出缺陷;
② E测度,指的是预计能检出多少缺陷;
③ F测度,指的是测试执行开始以后,预计执行多少个用例,就能检出第一个缺陷。

“自适应随机测试”主要是通过调整随机测试的用例执行顺序,来提高缺陷检出效率。它的F测度要比一般随机测试低30-50%。这说明,自适应随机测试这种方法能够帮助我们,在测试执行过程中更早地发现缺陷,这样我们就能有更多的时间改善被测对象的质量。

自适应随机测试为什么能做到这一点?它的灵感来自对“缺陷连续分布现象”的洞察。软件领域的经验告诉我们,能揭示缺陷的测试输入点,经常分布在一些块状或带状的连续区域里:

既然能揭示缺陷的这些红色的点是连续分布的,那么不能揭示缺陷的这些灰色的点,就也是连续分布的。因此,如果已经执行过的用例(用加粗边框表示)都没有检出缺陷,那么紧挨着这些用例的点,能检出缺陷的机会也不大。我们在选下一个用例的时候,为了尽快命中红色的区域,就应该尽量远离这些已经执行过的用例。也就是说,应该选择跟这些已经执行过的用例尽量不一样的点。这是非常典型的多样化思想。

我们来看一下自适应随机测试的具体步骤:
① 随机生成第一个测试用例,执行这个用例,并将其加入测试集;
② 随机生成k个备选的测试输入点;
③ 针对每个点,计算它与测试集中每个用例之间的距离,选择其中最小的距离作为这个点与测试集的距离;
④ 在所有k个备选的测试输入点中,选择与测试集距离最大的点作为下一个测试用例,执行这个用例,并将其加入测试集中,忽略其它的备选测试输入点;
⑤ 重复第② ~ ④步,直到检出第一个缺陷。

我们通过一个例子进一步解释一下第②到第④步:
② 假设现在测试集里已经有四个用例,t1,t2,t3,t4。在这一步,我们随机生成了3个备选测试输入点,c1、c2和c3:
③ 接下来,我们分别求c1、c2和c3与测试集的距离,怎么求呢?比如c1,先分别求它与t1,t2,t3,t4的距离,取其中的最小值,也就是把c1→t1当做它与测试集的距离。同理,c2与测试集的距离是c2→t3,c3与测试集的距离是c3→t4:
③ 我们从c1、c2、c3中选择与测试集距离最大的点,也就是c2,作为下一个用例来执行,如果这个用例检出了缺陷,自适应随机测试的过程就可以暂时中止,如果没有检出缺陷,就将c3加入测试集中,成为t5,然后回到第2步:

到这里,我们可以来思考一个问题:自适应随机测试和反随机测试有什么不同?猛一看是很像的,都是把测试选择看做一个动态的过程,每次都选跟已有测试集距离最大的点。其实二者最重要的区别有两点:
① 首先,测试选择的范围不一样。自适应随机测试,每次都先随机生成k个点,在这里面再做选择,所以本质上仍然是随机测试,成本也比较可控;反随机测试,每次都是在整个测试输入空间里选择,所以本质上是一种确定性的测试选择方法;
② 还有一个很重要的不同,反随机测试的步骤中只做测试选择,并不牵涉测试执行;而自适应随机测试把测试选择和测试执行结合起来了。在后续的文章中,我们会进一步讨论,自适应随机测试的这种做法,体现了另外一种非常有价值的思想,也就是控制的思想。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号