Page 84 - 《软件学报》2021年第9期
P. 84
2708 Journal of Software 软件学报 Vol.32, No.9, September 2021
成重用.而程序 Calculator1 和 Gobang_algorithm1 的测试用例规模相近,为了检验其重用效果,实验将 Gobang_
algorithm1 的测试用例处理成与 Calculator1 的测试用例长度一致.
新增实验仍采用传统算法和本文方法进行对比,传统方法测试程序的各种参数设置与第 3.3.1 节传统方法
测试冒泡排序的参数一致.本文方法利用遗传算法生成测试用例的种群进化过程引用传统方法生成的测试用
例,引用的个数为 10 个.实验种群大小均为 40 个,进化代数统一为 1 000 代,详细参数设置见表 12.
Table 12 Population size and maximum evolution times
表 12 种群规模及最大进化代数
程序编号 种群规模 最大进化代数
PG2 40 1 000
PG3 40 1 000
PG5 40 1 000
PG7 40 1 000
PG9 40 1 000
PG12 40 1 000
PG13 40 1 000
PG15 40 1 000
PG17 40 1 000
表 13 为传统遗传算法和本文方法测试程序的执行结果,可见,利用本文方法生成测试用例的效率更高.
Table 13 Results of testing under the traditional method and our method
表 13 传统方法和本文方法下程序测试的结果
被测程序 传统方法 本文方法 F 值
编号 平均迭代次数 目标路径覆盖率(%) 时间(s) 平均迭代次数 目标路径覆盖率(%) 时间(s)
PG2 736.30 30 8.71 36.13 100 7.80 40.75
PG3 121.32 91 2.68 3.96 100 2.57 18.65
PG5 462.38 64 6.84 11.2 100 3.77 12.76
PG7 600.28 43 62.90 6.14 100 62.55 44.21
PG9 141.68 90 8.30 8.94 100 8.04 16.34
PG12 259.54 79 32.60 24.84 100 32.50 34.40
PG13 244.20 82 5.48 19.37 100 5.05 28.33
PG15 297.95 75 82.38 26.55 100 78.05 29.57
PG17 589.47 45 63.15 187.01 84 61.84 42.88
下面分别从 4 个评价标准对比测试用例的生成效率.
1) 本文方法测试程序的目标路径覆盖率为 100%(注意,PG17 对应的是不相似程序);而传统方法测试程
序其目标路径覆盖率最高为 91%,测试 PG2 的路径覆盖率仅有 30%;
2) 平均迭代次数方面,本文方法测试程序的平均迭代次数均在 40 代以内;传统方法除测试 PG3 的实验
以外,其他程序测试实验的平均迭代次数均在 130 代以上,甚至超过 600 代;
3) 用时方面,利用本文方法测试程序的执行时间皆少于传统方法;
4) F 值的大小表明随机因素对实验的影响.实验结果中的 F 值皆远大于 F 界值,则说明排除了随机因素
对该实验的影响,证明了本文方法的有效性.
实验 PG17 的结果表明:虽然不相似程序之间测试用例的重用在一定程度上提高了目标个体的进化速度,
但目标路径覆盖率有所降低,还是不如相似程序间测试用例的重用效果.
由测试 PG2 的实验结果可知,本文方法有效地提高了测试用例的生成效率.可证明测试冒泡排序可以引用
快速排序已经生成的测试用例,测试快速排序也可以使用冒泡排序已经生成的测试用例.即,相似程序之间测试
用例是通用的.观察 PG9,PG12,PG13 以及 PG15 的实验结果,本文方法的前 3 个评判标准都优于传统方法,这说
明本文方法运用到回归测试是可行的.相似程序间测试用例的重用测试程序是将已经生成的测试用例重用到
相似程序测试用例的生成过程.在种群进化的过程中,种群个体不断地向引入的优秀个体学习,实验证明,本文
方法能够提高测试效率.本文方法的测试用例重用能够取得这么好的结果,其主要原因包含两个方面.
1) 利用遗传算法测试程序的过程中,引用了相似程序适应度较高的测试用例,引入的测试用例可以看作