2.2.4 模式到模板 。下一个步骤是将模式转化为模板 。请注意,模式只是一个有意义的输入值(如字符)的有序序列;要变为模板,我们需要决定给定模式中包含的每个值的位置 。为此我们首先收集包含了模式的测试用例,然后确定模板值出现频率最高的位置 。例如,假设具体值'X'在测试用例中的第二个索引处出现得最多 。那么,我们将输入 2 中第二个索引处的符号值 α2 替换为具体值'X' 。通过将这一规则应用于前一阶段选择的模式 P3 和 P2,我们得到以下两个模板:
文章插图
在本文的其他部分,我们也用一组具体值及它们的位置来表示一个模板 。例如,第一个模板可以表示如下:
文章插图
2.2.5 带模版的混合执行测试 。最后一步是用生成的模板(T1 和 T2)进行混合执行测试 。例如,当使用模板 T1 时我们只生成四个符号值(α3, α4, α7, α8),其余的用模板 T1 中的具体值代替 。需要注意的是,这些具体的值并不是任意的,而是通过强制程序执行沿着特定的路径(取第 4 行和第 7 行条件语句判断为真的所有分支)从而有效地引导混合执行测试到达错误发生的地点(如图 1 中第 11 行判断为真的分支) 。
在对模板进行了一段时间的混合执行测试后,我们用覆盖到的独特分支的数量来评估生成模板的质量 。作为结果,我们将图 2 中相应的模式分为好模式和坏模式,这种反馈将被排名算法在下一次算法迭代中使用 。在整个过程中,我们的算法会积累评价数据并因此排名算法能够根据这些增加的知识挑选出更有效的模式 。
三.在线学习的模板指导下的混合执行测试在本节中,我们介绍了我们的算法(算法 2),用于执行模板引导下的混合执行测试,同时在线自动生成有效模板 。算法 2 由四个主要阶段组成:常规的混合执行测试、序列模式挖掘、排名和模板引导的混合执行测试 。在第 2 行,算法从初始化数据开始 。集合 B 和 TB 分别代表传统的混合执行测试和模板引导的混合执行测试所覆盖的分支 。集合 Good 和 Bad 分别表示有效和无效的输入模式 。
文章插图
该算法有三个超参数(η1、η2 和 η3) 。第一个参数 η1 在第 6 行被使用,决定第一阶段的常规的混合执行的执行次数 。第二个参数 η2 在第 23 行被使用,表示每个模板的混合执行的执行次数 。最后一个参数 η3 表示模式 p 成为好模式(即被包含在集合 Good 中)的阈值 。在实验中,我们设置 η1=100,η2=20,η3=20 。在这项工作中,我们通过试错对这些超参数进行了手动调整并发现算法 2 的性能很大程度上取决于这些参数 。未来一个有趣的方向是在算法过程中自动寻找最优超参数 。
推荐阅读
- 开店审核需要多久 淘宝开店审核一般多久通过
- js中对字符串进行base64编码和解码
- PHP二维数组通过key去重
- 告诉你PC不能通过二层交换机实现跨网段通信的小秘密:你很难想到
- 淘宝店铺怎么通过认证 下列哪些途径可以进行淘宝开店认证?
- 春季进行性生活有好处吗?该如何进行
- 装修时如何进行墙体拆改
- 如何通过“import”语句确定在Python中导入了哪个文件?详解
- 汽车|男子通过熟人买二手豪车 结果被坑惨!保时捷、奔驰全是事故车
- 用 Linux 命令显示硬件信息