[发明专利]基于反馈的SMT求解器性能测试用例约简方法在审
申请号: | 202110767566.7 | 申请日: | 2021-07-07 |
公开(公告)号: | CN113377675A | 公开(公告)日: | 2021-09-10 |
发明(设计)人: | 任志磊;王笑爽;范晓飞;周奕;江贺 | 申请(专利权)人: | 大连理工大学 |
主分类号: | G06F11/36 | 分类号: | G06F11/36 |
代理公司: | 大连理工大学专利中心 21200 | 代理人: | 温福雪 |
地址: | 116024 辽*** | 国省代码: | 辽宁;21 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 基于 反馈 smt 求解 性能 测试 用例约简 方法 | ||
1.一种基于反馈的SMT求解器性能测试用例约简方法,其特征在于,具体步骤如下:
步骤1:验证输入的测试用例是否可以触发性能故障;
对于待约简的测试用例,首先对测试用例进行手动验证;将测试用例输入到SMT求解器,检测其是否可以触发性能故障;如果该测试用例可以触发性能故障,对该测试用例进行约简;否则输出该测试用例不符合约简条件的信息;
步骤2:将测试用例解析为Instance类实例;
将触发性能缺陷的测试用例解析为可操作的Instance类实例;Instance类包括四个部分:set logic,declare,assert和check sat;set logic部分指定了测试用例使用的语法为字符串理论;declare部分声明了可能使用到的变量及其类型;assert部分使用一个列表存储抽象语法树,每一个语法树都是一条断言语句;check sat部分是测试用例的固定语法,让求解器检查测试用例的满足性;
步骤3:设置代码覆盖率相似度阈值,设置测试用例在SMT求解器中的执行时间;测试时间限制可由测试人员根据需求进行设置;
步骤4:使用二分搜索法约简测试用例断言数目,具体步骤如下:
步骤4.1:首先存储测试用例副本,将Dmin设置为0,Dmax设置为需要约简的测试用例断言总数;
步骤4.2:比较Dmax和Dmin,如果Dmax小于或等于Dmin的值,则此时测试用例断言数目达到了最小,结束循环并保存该测试用例;否则转到步骤4.3;
步骤4.3:从测试用例中随机取出新测试用例的断言数D=1/2(Dmax+Dmin);将新的测试用例输入求解器运行并获取代码覆盖率信息,比较新测试用例与原测试用例的覆盖率相似度,如果覆盖率相似度能达到相似度阈值,转到步骤4.4;如果覆盖率相似度小于相似度阈值,转到步骤4.5;
步骤4.4:将Dmax设置为D的值,转到步骤4.2;
步骤4.5:将Dmin值设置为D的值,转到步骤4.2;
步骤5:使用替换节点的方法约简断言数目最小化的测试用例公式嵌套深度;一个测试用例中具有多个断言,每个断言被编码为抽象语法树AST;对每个断言编码成的AST进行顺序遍历并进行节点的替换;具体步骤如下:
步骤5.1:顺序遍历测试用例中的断言,判断该断言是否为测试用例中最后一个断言;若该断言是测试用例中最后一个断言,转入步骤5.2;否则转到步骤5.3;
步骤5.2:该测试用例的公式嵌套深度达到了最小,即此时该测试用例拥有最少断言数和最小嵌套深度的断言,为最简测试用例;保存该最简测试用例并结束循环;
步骤5.3:顺序替换断言中的节点;使用节点的同类型常量替换该节点生成新的测试用例,并将该测试用例在SMT求解器中运行,收集覆盖信息;
步骤5.4:比较新测试用例覆盖率与原测试用例覆盖率相似度,若相似度达到阈值,或者该节点是AST的最后一个节点,转到步骤5.1;若没有达到相似度阈值,将该节点替换回原来的节点,并继续替换AST中的下一个节点,转到步骤5.3。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于大连理工大学,未经大连理工大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/202110767566.7/1.html,转载请声明来源钻瓜专利网。