6.2.4 实验分析

更新于 2026年10月10日 版权声明
6.2.4 实验分析

1.实验环境

本节算法是在CPU为i5-4200 2.3 GHz,内存为12G DDR3的环境下运行的,算法的实现语言为Python 3.6。

2.实验内容

本节采用由Siemens Corporate Research学者们为了研究程序的数据流和控制流的覆盖准则的错误检测能力而提供的标准程序测试套件Siemens Suite[15]。在Siemens程序中有7个标准C程序(printtokens、printtokens2、replace、schedule、schedule2、tca、totinfo)和对应的测试用例集合,以及执行这些用例的shell脚本,具体信息如表6-3所示。

表6-3 Siemens测试程序的信息

图示

本节的实验旨在研究以下几个问题。

①本书方法在降低测试用例集开销方面的能力如何?

对测试用例集约简来说,开销的降低是最重要的,也是最直接的表现,本书用约简后测试子集,即RS中的总测试开销表示约简效果,本书采用约简集开销成本(Execution Cost of the Representative Set,ECRS)表示约简效果[16],公式如下。

图示

式中,Cost(i)代表第i个测试用例的开销,ECRS值越小代表约简效果越好。

②本书测试方法在不同规模测试用例集中的表现有什么差异?

③本书测试方法在不同工程的测试用例集的表现如何?

3.实验结果

以上述问题为基准,本书设计了如下实验。

首先进行测试需求的提取,本书中测试需求为Siemens Suite中7个程序的分支覆盖,采用gcov技术进行提取。本书的测试开销用的是每个测试用例执行的时间,而且是执行50次后取的平均值。(https://www.daowen.com)

每个测试程序分别进行如下操作:在保证覆盖率为100%的情况下,分别在总测试集中随机选择50个、200个、1 000个测试用例和全集组成新的测试用例集,每组随机抽取20次。

本书复现了Lin等人设计的GRE算法和贪心算法进行对比试验[17]。在实验过程中,本书分两方面进行比较:一方面统计在进行了相同次数的约简实验后,GFA、GRE算法和贪心算法3种算法表现最优的次数;另一方面统计每组实验后约简的ECRS。实验结果如表6-4所示。

表6-4 实验结果

图示

4.实验分析

(1)问题一

将GFA与GRE算法和贪心算法进行对比,分别统计3种方法的ECRS,得到ECRS分别为77.717 ms、79.846 ms和89.307 ms,GFA相对GRE算法的ECRS值减少2.7%,相对贪婪算法的ECRS减少13.0.%;从最优次数进行统计,3种算法的最优次数分别为522次、293次、20次(包括约简效果相同的情况)。从以上两方面均可以看出,GFA的约简效果最好。

(2)问题二

本书对7个被测程序的原始测试用例集随机生成大小不同的测试用例集进行约简,实验结果表明,规模为50、100、1 000和全集的情况下,FA约简得到最优效果的次数占比分别为52.86%、75.00%、65.00%和85.71%,由此可以看出,在较小的测试用例集约简中,GFA的效果比GRE算法差一些,而随着测试用例集的规模增大,GFA的效果在3个算法中最好。具体数据如表6-5所示。

表6-5 不同规模下最优次数

图示

(3)问题三

本书一共测试了7个不同的工程,对7个工程的测试结果进行统计,可以得到表6-6所示的结果。

表6-6 不同被测程序下的最优次数

图示

在7个项目中,GFA最优次数占比分别为97.5%、100%、88.75%、96.25%、85%、90%、95%,均超过了50%,且只有tca项目的最优次数小于GRE算法。因此,总体来说,GFA在不同的工程中都有着优异的表现,证明该算法有着良好的鲁棒性。

↑上一章 ↓下一章
关注公众号获取验证码
复制内容需要验证码(7.99元/天)