[发明专利]一种基于测试生成的软件崩溃重现方法及系统有效
申请号: | 201910565598.1 | 申请日: | 2019-06-27 |
公开(公告)号: | CN110413509B | 公开(公告)日: | 2021-08-03 |
发明(设计)人: | 玄跻峰;李瑶瑶 | 申请(专利权)人: | 武汉大学 |
主分类号: | G06F11/36 | 分类号: | G06F11/36 |
代理公司: | 武汉科皓知识产权代理事务所(特殊普通合伙) 42222 | 代理人: | 鲁力 |
地址: | 430072 湖*** | 国省代码: | 湖北;42 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 基于 测试 生成 软件 崩溃 重现 方法 系统 | ||
本发明公开了一种基于测试生成的软件崩溃重现方法及系统。该方法以栈踪迹的最末方法调用为起点逐步合成测试用例,以达到能够触发崩溃的特定程序状态;该方法分析引发崩溃的路径条件,并根据最末方法为最终测试用例的生成进行扩展。本发明方法的利用,能够达到自动化崩溃重现的效果。
技术领域
本发明属于软件工程学科,软件分析与测试领域,描述了一种自动化软件崩溃重现方法。该方法直接应用于软件开发,用于重现崩溃场景,进而减少程序员对代码的维护成本。
背景技术
在软件调试中,软件崩溃往往不可避免,并会造成代价高昂的损失。当软件崩溃时,崩溃信息总是被记录为运行状态的栈踪迹。程序员在收到崩溃引发的缺陷报告之后,为了修复缺陷需要设法重现软件崩溃。然而在实际软件开发中,软件崩溃重现是极为困难的。
当前的崩溃重现方法是人工编写一个测试用例去触发项目的崩溃状态。这种手工崩溃重现的方法既耗费时间又需要对崩溃项目的代码有足够的理解。人工重现崩溃的步骤大体为:人工分析栈踪迹找到崩溃发生对应的代码位置,通过分析代码人工写出测试用例,直到触发给定崩溃。借助人工重现崩溃的思路,自动化的崩溃重现是可行的,即自动生成测试用例以触发崩溃。一旦自动产生的测试用例触发了与给定的崩溃中相同的栈踪迹,可以认为自动化崩溃重现的方法是成功的。
测试用例生成的研究已经具有一定的成果。然而,直接应用测试用例生成的方法去重现目标崩溃仍旧是困难的。由于类中字段和方法的复杂结构,对象创建和方法调用序列限制了覆盖问题路径的测试用例的生成;大量条件块形成的路径组合引发的路径爆炸的问题削弱了通过创建新的测试用例覆盖特定路径的可能性。
发明内容
针对现有人工重现方案的不足,本发明提供了一种基于测试生成的崩溃重现方法,以提高崩溃重现的效果,用于修复引发软件崩溃的代码。
一种基于测试生成的软件崩溃重现方法,其特征在于,所述方法包括:
获取目标程序的异常代码信息,所述异常代码信息用于指示所述项目代码段的路径条件满足度,所述路径条件包括异常条件,控制条件,类型条件和隐含条件四种;
获取目标程序的栈踪迹信息,所述栈踪迹信息用于指示崩溃发生时栈踪迹中的最末方法,所述最末方法是相关程序崩溃前的最后一个方法调用;
进行路径条件分析,具体是根据所述异常代码信息和栈踪迹信息提取异常条件,控制条件,类型条件和隐含条件四种类型的路径条件,通过路径条件的满足度计算测试用例的适应度;所述适应度用于指导测试用例的搜索,具体是:收集路径条件和工具指导进一步的随机搜索;通过路径条件估计适应度,进而指导测试用例的搜索;测试用例的适应度计算是基于测试用例的执行日志,通过检查路径条件的满足度而计算的;适应度越低,意味着在测试执行过程中覆盖的路径条件越多,并且测试用例越接近目标栈踪迹;适应度为零的测试用例,即适应度的最小值;
进行测试用例扩展,具体是根据栈踪迹信息中提取的最末方法初始化一个测试用例,并在最末方法之前添加语句,而不考虑最末方法以后的语句;即:将一个测试用例从最末方法调用处“生长”,直到程序达到崩溃的状态;
进行测试用例清理,具体是用于删除额外的变量,并更新变量名,进而提升可读性;测试用例清理的目标是通过两个步骤获得用户友好的测试用例。
在上述的方法,所述路径条件,包括:
栈踪迹中直接造成崩溃的异常条件;
指定代码行的路径依赖造成的控制条件;
类型条件表示源代码中类型的强制转换造成的类型条件;
从源代码中推断的隐含条件。
在上述的方法,所述测试用例扩展,包括:
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于武汉大学,未经武汉大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201910565598.1/2.html,转载请声明来源钻瓜专利网。