Page 187 - 《软件学报》2021年第7期
P. 187
周小莉 等:基于偶然正确性概率的回归测试选择方法 2105
输出不一致,即失效.
测试不一定执行错误代码,错误代码被执行后也不一定触发错误的中间状态.即使程序执行时产生了错误
的中间状态,这个错误的中间状态也不一定能传播到输出而被测试人员观测到.只有“执行”“感染”和“传播”这 3
个条件同时被满足时才能观测到错误.
基于 PIE 模型,Masri 等人提出了强偶然正确性现象和弱偶然正确现象的概念.强偶然正确性现象是指满足
“执行”和“感染”条件,不满足“传播”条件的情况.弱偶然正确性现象是指满足“执行”同时不满足“传播”的情况,
且不考虑“感染”条件是否被满足.弱偶然正确性现象是广义上的偶然正确性现象,而强偶然正确性现象是更狭
义的概念.
许多工作都证明了偶然正确性现象在实际场景中是非常普遍的.本文在西门子程序集进行了初步实验,其
结果表明,强、弱偶然正确性现象出现的平均概率分别为 17%和 57%.这个结果验证了偶然正确性现象的普遍
性,并且弱偶然正确性现象的发生频率显著高于强偶然正确性现象.本文的回归测试选择方法是针对弱偶然正
确性现象而提出来的.
偶然正确性现象使得即使错误语句被多次覆盖,仍可能无法被发现.偶然正确性现象影响了许多测试技术
[4]
的有效性,尤其是对基于代码覆盖的测试技术产生了负面影响 .基于代码覆盖的测试技术通常包含一个隐含
的假设:错误代码没有被执行一定不会产生错误的结果,而错误代码被执行则很可能产生错误的程序输出.然
而,本文在实验中发现,弱偶然正确性现象出现的平均频率为 57%,这表明了错误代码被执行后产生错误程序输
出的概率只有 43%.已有的研究工作也证明了代码覆盖和故障的发生之间没有必然的联系.偶然正确性现象的
频繁出现,使得错误代码的执行很可能无法产生错误的程序输出,从而打破基于代码覆盖的测试技术的潜在假
设,使其有效性受到了影响.Denmat 等人 [12] 对经典的基于代码覆盖的错误定位技术 Tarantula 的局限性进行了研
究,并表明要使其有效,必须满足错误语句的执行在大多数情况下会导致程序出错,即大多数程序的执行中不会
发生偶然正确性现象.
由于判断程序执行过程中是否发生偶然正确性现象是非常困难的,消除偶然正确性现象影响的研究工作
还不是很多.已有的相关工作都集中在错误定位领域 [3,1315] ,而在回归测试选择等其他测试领域目前还没有偶
然正确性现象的相关工作.
2.2 回归测试用例选择
随着软件开发过程的迭代和演化,因移除缺陷、完善功能等原因,代码不断被修改,需要通过回归测试来保
证代码修改的正确性,以避免代码的修改给其他模块引入新的缺陷.此外,还需要针对新增功能等被修改代码设
计新的测试用例.因此,在软件持续演化过程中,测试用例集合的规模快速扩大.回归测试的开销占整个软件测
试预算的 80%以上,并占软件整体维护预算的 50%以上 [16] .
回归测试的核心问题是对测试用例的高效维护,重新执行原有的测试集合是最简单的维护策略,但是会导
致测试的开销过大、用例失效等一系列问题.针对测试用例的维护,研究人员提出了一系列的技术,包括识别失
效用例、测试选择技术、测试优先技术、测试集合缩减技术和测试用例扩充技术等.其中,测试选择技术是缩
小测试用例规模的一种有效手段,其目标是在降低测试用例集合大小的同时,将原有测试集中可能检测到故障
的用例尽可能多地选择出来,为进一步的错误定位提供足够的测试信息,提高错误定位的有效性.常用的回归测
试选择方法分为下面几类.
(1) 全部重新测试.
除了过时的测试用例,将原有的测试集合中的所有用例都在新版本程序上重新测试.
(2) 随机选择策略.
从原始的测试集合中随机地或者根据测试人员的经验选取测试用例.例如,基于风险用例的回归测试,为测
试用例设定一个风险级别,首先运行最关键和可疑的测试用例,忽略那些非关键的、优先级别低或者稳定性高
的测试用例,因为即使这些测试用例可以发现缺陷,所发现的缺陷的严重性也不高.
(3) 安全的选择策略.