![404f6423c7b5e291af5032ddbcaf1f30.png](https://img-blog.csdnimg.cn/img_convert/404f6423c7b5e291af5032ddbcaf1f30.png)
引用:Lian Yu ,Wei-Tek Tsai. "Test Case Generation for Boolean Expressions by Cell Covering". IEEE Transactions on Software Engineering (TSE), VOL. 44, NO. 1, JANUARY 2018, pp.70-99.
摘要:
本文将布尔表达式故障描述为K-map中收缩和扩展区域中拓扑结构的变化。单元覆盖是K-map中的一组单元(测试用例),通过覆盖故障区域保证能够检测到故障。最小化单元覆盖可以表示为整数线性规划(ILP)问题。通过分析约束系数矩阵的结构,可以将原始问题分解为可求解的子程序并代替原始问题,这显着减少ILP执行所需的时间。通过将单元覆盖问题与集合覆盖问题相对应,使用具有严格理论界限的有效近似算法来解决复杂的布尔表达式。将最优方法和近似方法组合成混合过程,以基于ILP松弛的分数分析来识别测试用例。所提出的方法由三组布尔表达式评估,并且比较三种主要方法的结果,结果涉及测试大小、时间消耗和故障检测能力。对于遇到的大多数布尔表达式,所提出的方法可以快速获得最优解,并为那些罕见和复杂的表达式快速生成近似最优解。
关键词:布尔表达式测试,故障表征,单元覆盖问题,近似算法
1. 介绍:
布尔表达式广泛应用于软件中,包括需求、设计和代码,用来表达应用程序中的逻辑条件。例如,布尔表达式通常出现在需求规范的业务规则中、状态机中的保护条件以及Java/C++语言的if、while语句中,通过把每个关系表达式映射到布尔变量。布尔表达式的正确性和有效性为软件应用程序的正确性和健壮性奠定了基础。
1.1 布尔表达式的故障类层次结构
图1是布尔表达式的故障类层次结构,分为“+”操作员引用错误(ORF+),术语遗漏错误(TOF),文字插入错误(LIF),表达否定错误(ENF),术语否定错误(TNF),文字否定错误(LNF),文字参考错误(LRF),“.”操作员引用错误(ORF.)和文字遗漏错误(LOF)共9类布尔表达式故障。测试用例可以检测类层次结构的上层故障,也可以检测低级故障。
![80db528624ac76a7109439a3ec5f516c.png](https://img-blog.csdnimg.cn/img_convert/80db528624ac76a7109439a3ec5f516c.png)
1.2 K-Map
K-map是布尔表达式的结构模型。K-map对应于具有n个变量的布尔表达式S的真值表。K-map中的每个单元表示n个变量值的组合,称为单元坐标。当选择一个单元来检测一种类型的故障时,该单元对应于S的测试用例则是布尔变量值的赋值。布尔表达式故障描述为K-map中收缩和扩展区域中拓扑结构的变化。单元覆盖是K-map中的一组单元(测试用例),覆盖故障区域从而保证能够检测到故障。
1.3 MUMCUT和minimal-MUMCUT
MUMCUT的测试标准由三个组成标准组成:多个唯一真实点(MUTP),多个近假点(MNFP),以及相应的唯一真实点和近假点(CUTPNFP)。Kaminski和 Ammann将minimal-MUMCUT策略描述为0-1整数规划,满足以上三个组成标准,并使用目标函数最小化具有约束的测试用例总和。
1.4 TRF-TIF
TRF-TIF(术语参考故障,术语插入故障)是仅使用包含高阶变异算子的新变异算子,它获取所有测试点的集合以检测故障层次结构中的九种类型的故障或突变体,然后从大的集合中选择一个测试点的子集,以保证检测到这些突变体。TRF-TIF使用局部最优算法来获得每个阶段的测试用例。实证分析表明,TRF-TIF不能保证产生最优解,但可以在合理的时间内逼近近似最优解。
1.5 元覆盖问题
元覆盖问题是以最大限度地减少检测LIF、LOF和LRF的测试用例数。最小的元覆盖问题是找到覆盖目标的有效区域的最小数量的单元,可以表述为整数线性规划(ILP)问题。
1.6 混合方法
本文提出了一种通过六个步骤解决单元覆盖问题的混合方法,如下图所示:
![f3427c838af5a0f51cd6a4eda5077a45.png](https://img-blog.csdnimg.cn/img_convert/f3427c838af5a0f51cd6a4eda5077a45.png)
2. 实验评估:
Minimal-MUMCUT和TRF-TIF可获得较小尺寸的测试用例,同时可检测到九种类型的单一故障并提供实证结果。理论上已证明单元覆盖方法可以保证检测到九种类型的单一故障。因此,我们围绕以下问题(RQ)设计了实验:
RQ1:与minimal-MUMCUT和TRF-TIF方法相比,单元覆盖方法能否获得最小尺寸的测试用例?
RQ2:在性能方面与minimal-MUMCUT和TRF-TIF方法相比,整数线性规划(ILP)对单元覆盖方法的不同优化能否获得更好的结果?
RQ3:单元覆盖方法和optimal Minimal-MUMCUT能否保证检测除单一故障之外的故障变量,例如故障层次中的双重故障?
3. 实验方法:
实验使用两个数据集来评估相关方法:1)从TCASII中提取的20个布尔表达式;2)由本文小组成员从三个子系统收集的25个布尔表达式。为了进一步观察这些特征,基于20个表达式和25个表达式的构造,随机生成4组布尔表达式,共88个布尔表达式:每个集合中布尔表达式的数量从20到25之间变化,布尔表达式中的变量数从2到16之间变化。在以下部分中,88个表达式被称为88个用例。
4. 评估结果:
RQ1:与minimal-MUMCUT和TRF-TIF方法相比,单元覆盖方法需要更少或至多相等数量的测试用例。
RQ2:整体而言,单元覆盖方法所花费的时间少于minimal-MUMCUT的时间,但比TRF-TIF所花费的时间更长。在性能方面与minimal-MUMCUT和TRF-TIF方法相比,整数线性规划(ILP)对单元覆盖方法的优化能获得更好的结果。
RQ3:单元覆盖方法无法检测到双重故障,另一方面,optimal Minimal-MUMCUT无法检测到双重故障。
5. 结论:
布尔表达式故障可以在K-map模型中进行表征和可视化,检测这些故障相当于覆盖K-map中的某些单元,并将检测问题表述为ILP。本文使用混合方法,以减少单元覆盖生成布尔表达式测试用例的生成时间。分析三个数据集以评估所提出的方法,来自实际项目的两个数据集和基于两个数据集的分布随机生成的一个数据集。实验结果表明,单元覆盖方法可以为大部分问题快速获得最优解,并为那些罕见和复杂的表达式快速生成近似最优解。通过求解整数线性规划(ILP)的元覆盖问题,可以获得全局最优解。
致谢
此文由南京大学软件学院2019级硕士郭超翻译转述。