面向搜索式单元测试与崩溃复现的基本块覆盖
软件工程
2022-03-07 v1
摘要
搜索式技术已被广泛用于白盒测试生成。许多此类方法依赖逼近层级和分支距离启发式来引导搜索过程并生成具有高行覆盖率和分支覆盖率的测试用例。尽管这两种启发式取得了积极结果,它们仅使用了与显式分支(例如由条件和循环语句指示的分支)覆盖相关的信息,而忽略了代码基本块内潜在的隐式分支。如果此类隐式分支在运行时发生(例如,在无分支方法中抛出异常),现有适应度函数无法引导搜索过程。为解决该问题,我们引入了一种新的次要目标,称为基本块覆盖(BBC),其考虑了控制流图中相关基本块的覆盖水平。我们评估了BBC对搜索式单元测试生成(使用DynaMOSA算法)和搜索式崩溃复现(使用STDistance和WeightedSum适应度函数)的影响。我们的结果表明,对于单元测试生成,BBC提升了所生成测试的分支覆盖率。尽管提升较小(约1.5%),但这种分支覆盖率的提升是系统性的,并带来了输出域覆盖率和隐式运行时异常覆盖率的提高,以及运行时状态的多样性增加。在崩溃复现方面,在STDistance和WeightedSum的组合中,BBC分别帮助每个适应度函数多复现了3个新崩溃。BBC显著减少了使用STDistance和WeightedSum复现43.5%和45.1%崩溃所需的时间。对于这些崩溃,BBC平均将消耗时间减少了71.7%(STDistance)和68.7%(WeightedSum)。
引用
@article{arxiv.2203.02337,
title = {Basic Block Coverage for Search-based Unit Testing and Crash Reproduction},
author = {Pouria Derakhshanfar and Xavier Devroey and Andy Zaidman},
journal= {arXiv preprint arXiv:2203.02337},
year = {2022}
}