[发明专利]一种基于测试生成的软件崩溃重现方法及系统有效
申请号: | 201910565598.1 | 申请日: | 2019-06-27 |
公开(公告)号: | CN110413509B | 公开(公告)日: | 2021-08-03 |
发明(设计)人: | 玄跻峰;李瑶瑶 | 申请(专利权)人: | 武汉大学 |
主分类号: | G06F11/36 | 分类号: | G06F11/36 |
代理公司: | 武汉科皓知识产权代理事务所(特殊普通合伙) 42222 | 代理人: | 鲁力 |
地址: | 430072 湖*** | 国省代码: | 湖北;42 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 基于 测试 生成 软件 崩溃 重现 方法 系统 | ||
1.一种基于测试生成的软件崩溃重现方法,其特征在于,所述方法包括:
获取目标程序的异常代码信息,所述异常代码信息用于指示项目代码段的路径条件满足度,所述路径条件包括异常条件,控制条件,类型条件和隐含条件四种;
获取目标程序的栈踪迹信息,所述栈踪迹信息用于指示崩溃发生时栈踪迹中的最末方法,所述最末方法是相关程序崩溃前的最后一个方法调用;
进行路径条件分析,具体是根据所述异常代码信息和栈踪迹信息提取异常条件,控制条件,类型条件和隐含条件四种类型的路径条件,通过路径条件的满足度计算测试用例的适应度;所述适应度用于指导测试用例的搜索,具体是:收集路径条件和工具指导进一步的随机搜索;通过路径条件估计适应度,进而指导测试用例的搜索;测试用例的适应度计算是基于测试用例的执行日志,通过检查路径条件的满足度而计算的;适应度越低,意味着在测试执行过程中覆盖的路径条件越多,并且测试用例越接近目标栈踪迹;适应度为零的测试用例,即适应度的最小值;
进行测试用例扩展,具体是根据栈踪迹信息中提取的最末方法初始化一个测试用例,并在最末方法之前添加语句,而不考虑最末方法以后的语句;即:将一个测试用例从最末方法调用处“生长”,直到程序达到崩溃的状态;
进行测试用例清理,具体是用于删除额外的变量,并更新变量名,进而提升可读性;测试用例清理的目标是通过两个步骤获得用户友好的测试用例;
所述路径条件包括:
栈踪迹中直接造成崩溃的异常条件;
指定代码行的路径依赖造成的控制条件;
类型条件表示源代码中类型的强制转换造成的类型条件;
从源代码中推断的隐含条件;
所述测试用例扩展包括:
获取栈踪迹中的最末方法初始化一个测试用例;栈踪迹中的最末方法,包括:读取所述栈踪迹中的每条信息,找到崩溃前的最后一个方法调用;
定义测试用例扩展过程中的方法,同时,一个测试用例本身也是一个方法;方法f为一个通用方法,包括子方法g、s和t,g具体表示为具有至少一个参数的方法,该方法不是可搜索的类型;s具体表示为带参数的方法,每个参数都是可搜索的类型;t具体表示为一个可执行的测试用例;方法t包括st和tc两个子方法,st具体表示为通过为s分配参数完成的测试用例,tc具体表示最终可以触发崩溃的测试用例;
定义测试用例扩展过程中的行为,划分子类型是将通用方法f划分为g、s和t三个子类型;初始化为方法中的参数创建对象并丢弃原始对象;设置随机种子为方法设定参数值;与实例化不同,设置随机种子只处理原始值和字符串类型;本地搜索针对带有随机化参数的方法;恢复行为针对执行的测试用例;调用增加是对一个测试用例添加另一个方法调用,进而增加它的功能性;验收行为找到最终接受的测试用例;
通过程序对象实例化、函数调用增加和本地搜索三个步骤在栈踪迹的最末方法调用之前添加语句并生成可编译的测试用例,即:
步骤一,程序对象实例化,具体是将栈踪迹的最末方法作为初始化,分为几个子方法,对象实例化可以将子方法转换为其他子方法或可执行的测试用例;对于其中部分子方法,还可通过设置随机种子的参数值将指定子方法转换为测试用例;
步骤二,函数调用增加,具体是随机的向测试用例初始化的栈踪迹中最末方法之前添加一个方法,添加方法由三部分组成:方法调用所属的变量,确切的方法和添加位置;具体步骤如下:随机搜索一个候选变量;提取所有可访问的方法并过滤掉纯方法,所述纯方法表示此方法执行不会更改方法内部的任何参数或同一个类中的任何字段;对于t方法中的候选变量,收集包含变量的语句和执行时失败的位置;最终新方法调用的位置定位在变量第一次出现之后、最后一次出现之前以及之前执行时失败的位置;
步骤三,本地搜索;具体是为其他潜在的测试用例提供机会去搜索;在原始搜索向量的基础上,通过随机化方法做变换得到一系列搜索向量,再使用最低适应度的测试用例代替原始的测试用例。
2.根据权利要求1所述的方法,其特征在于,所述测试用例清理,包括:
清理额外的变量,所述额外的变量为从未使用过的中间变量;
根据类名更新变量名。
3.一种采用权利要求1所述方法的系统,其特征在于,所述工具包括:
异常代码信息获取模块,用于指示所述项目代码段的路径条件满足度;
栈踪迹信息获取模块,用于获取异常栈踪迹信息,异常堆栈信息用于定位崩溃发生时栈踪迹中的最末方法;最末方法是相关程序崩溃前的最后一个方法调用;
最末方法确定模块,用于根据栈踪迹信息确定每个崩溃发生前调用的最后一个方法;
路径条件分析模块,用于根据异常代码信息和栈踪迹信息提取异常条件,控制条件,类型条件和隐含条件四种类型的路径条件,并计算路径条件的满足度;路径条件满足度用于计算测试用例的适应度;测试用例适应度用于指导测试用例的搜索;
测试用例扩展模块,用于将初始化的栈踪迹中的最末方法扩展成为适应度最低并可以触发崩溃的测试用例;
测试用例清理模块,用于获得用户友好的,可读性高的测试用例。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于武汉大学,未经武汉大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201910565598.1/1.html,转载请声明来源钻瓜专利网。