CN110413509B - 一种基于测试生成的软件崩溃重现方法及*** - Google Patents

一种基于测试生成的软件崩溃重现方法及*** Download PDF

Info

Publication number
CN110413509B
CN110413509B CN201910565598.1A CN201910565598A CN110413509B CN 110413509 B CN110413509 B CN 110413509B CN 201910565598 A CN201910565598 A CN 201910565598A CN 110413509 B CN110413509 B CN 110413509B
Authority
CN
China
Prior art keywords
test case
stack trace
condition
crash
last
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN201910565598.1A
Other languages
English (en)
Other versions
CN110413509A (zh
Inventor
玄跻峰
李瑶瑶
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Wuhan University WHU
Original Assignee
Wuhan University WHU
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Wuhan University WHU filed Critical Wuhan University WHU
Priority to CN201910565598.1A priority Critical patent/CN110413509B/zh
Publication of CN110413509A publication Critical patent/CN110413509A/zh
Application granted granted Critical
Publication of CN110413509B publication Critical patent/CN110413509B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/362Software debugging
    • G06F11/3636Software debugging by tracing the execution of the program
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3668Software testing
    • G06F11/3672Test management
    • G06F11/3684Test management for test design, e.g. generating new test cases

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Hardware Design (AREA)
  • Quality & Reliability (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Debugging And Monitoring (AREA)

Abstract

本发明公开了一种基于测试生成的软件崩溃重现方法及***。该方法以栈踪迹的最末方法调用为起点逐步合成测试用例,以达到能够触发崩溃的特定程序状态;该方法分析引发崩溃的路径条件,并根据最末方法为最终测试用例的生成进行扩展。本发明方法的利用,能够达到自动化崩溃重现的效果。

Description

一种基于测试生成的软件崩溃重现方法及***
技术领域
本发明属于软件工程学科,软件分析与测试领域,描述了一种自动化软件崩溃重现方法。该方法直接应用于软件开发,用于重现崩溃场景,进而减少程序员对代码的维护成本。
背景技术
在软件调试中,软件崩溃往往不可避免,并会造成代价高昂的损失。当软件崩溃时,崩溃信息总是被记录为运行状态的栈踪迹。程序员在收到崩溃引发的缺陷报告之后,为了修复缺陷需要设法重现软件崩溃。然而在实际软件开发中,软件崩溃重现是极为困难的。
当前的崩溃重现方法是人工编写一个测试用例去触发项目的崩溃状态。这种手工崩溃重现的方法既耗费时间又需要对崩溃项目的代码有足够的理解。人工重现崩溃的步骤大体为:人工分析栈踪迹找到崩溃发生对应的代码位置,通过分析代码人工写出测试用例,直到触发给定崩溃。借助人工重现崩溃的思路,自动化的崩溃重现是可行的,即自动生成测试用例以触发崩溃。一旦自动产生的测试用例触发了与给定的崩溃中相同的栈踪迹,可以认为自动化崩溃重现的方法是成功的。
测试用例生成的研究已经具有一定的成果。然而,直接应用测试用例生成的方法去重现目标崩溃仍旧是困难的。由于类中字段和方法的复杂结构,对象创建和方法调用序列限制了覆盖问题路径的测试用例的生成;大量条件块形成的路径组合引发的路径***的问题削弱了通过创建新的测试用例覆盖特定路径的可能性。
发明内容
针对现有人工重现方案的不足,本发明提供了一种基于测试生成的崩溃重现方法,以提高崩溃重现的效果,用于修复引发软件崩溃的代码。
一种基于测试生成的软件崩溃重现方法,其特征在于,所述方法包括:
获取目标程序的异常代码信息,所述异常代码信息用于指示所述项目代码段的路径条件满足度,所述路径条件包括异常条件,控制条件,类型条件和隐含条件四种;
获取目标程序的栈踪迹信息,所述栈踪迹信息用于指示崩溃发生时栈踪迹中的最末方法,所述最末方法是相关程序崩溃前的最后一个方法调用;
进行路径条件分析,具体是根据所述异常代码信息和栈踪迹信息提取异常条件,控制条件,类型条件和隐含条件四种类型的路径条件,通过路径条件的满足度计算测试用例的适应度;所述适应度用于指导测试用例的搜索,具体是:收集路径条件和工具指导进一步的随机搜索;通过路径条件估计适应度,进而指导测试用例的搜索;测试用例的适应度计算是基于测试用例的执行日志,通过检查路径条件的满足度而计算的;适应度越低,意味着在测试执行过程中覆盖的路径条件越多,并且测试用例越接近目标栈踪迹;适应度为零的测试用例,即适应度的最小值;
进行测试用例扩展,具体是根据栈踪迹信息中提取的最末方法初始化一个测试用例,并在最末方法之前添加语句,而不考虑最末方法以后的语句;即:将一个测试用例从最末方法调用处“生长”,直到程序达到崩溃的状态;
进行测试用例清理,具体是用于删除额外的变量,并更新变量名,进而提升可读性;测试用例清理的目标是通过两个步骤获得用户友好的测试用例。
在上述的方法,所述路径条件,包括:
栈踪迹中直接造成崩溃的异常条件;
指定代码行的路径依赖造成的控制条件;
类型条件表示源代码中类型的强制转换造成的类型条件;
从源代码中推断的隐含条件。
在上述的方法,所述测试用例扩展,包括:
获取栈踪迹中的最末方法初始化一个测试用例;栈踪迹中的最末方法,包括:读取所述栈踪迹中的每条信息,找到崩溃前的最后一个方法调用;
定义测试用例扩展过程中的方法,同时,一个测试用例本身也是一个方法;方法f为一个通用方法,包括子方法g、s和t,g具体表示为具有至少一个参数的方法,该方法不是可搜索的类型;s具体表示为带参数的方法,每个参数都是可搜索的类型;t具体表示为一个可执行的测试用例;方法t包括st和tc两个子方法,st具体表示为通过为s分配参数完成的测试用例,tc具体表示为最终可以出发崩溃的测试用例;
定义测试用例扩展过程中的行为,划分子类型是将通用方法f划分为g、s和t三个子类型;初始化为方法中的参数创建对象并丢弃原始对象;设置随机种子为方法设定参数值;与实例化不同,设置随机种子只处理原始值(例如整型,双精度型)和字符串类型;本地搜索针对带有随机化参数的方法,搜索邻近方法可能会获得更好的效果;恢复行为针对执行的测试用例;调用增加是对一个测试用例添加另一个方法调用,进而增加它的功能性;验收行为找到最终接受的测试用例;
通过程序对象实例化、函数调用增加和本地搜索三个步骤在栈踪迹的最末方法调用之前添加语句并生成可编译的测试用例,即:
步骤一,程序对象实例化,具体是将栈踪迹的最末方法作为初始化,分为几个子方法,对象实例化可以将子方法转换为其他子方法或可执行的测试用例;对于其中部分子方法,还可通过设置随机种子的参数值将指定子方法转换为测试用例;
步骤二,函数调用增加,具体是随机的向测试用例初始化的栈踪迹中最末方法之前添加一个方法,所述添加方法由三部分组成:方法调用所属的变量,确切的方法和添加位置;具体步骤如下:随机搜索一个候选变量;提取所有可访问的方法并过滤掉纯方法,所述纯方法表示此方法执行不会更改方法内部的任何参数或同一个类中的任何字段;对于t方法中的候选变量,收集包含变量的语句和执行时失败的位置;最终新方法调用的位置定位在变量第一次出现之后、最后一次出现之前以及之前执行时失败的位置;
步骤三,本地搜索;具体是为其他潜在的测试用例提供机会去搜索;在原始搜索向量的基础上,通过随机化方法做变换得到一系列搜索向量,再使用最低适应度的测试用例代替原始的测试用例。
在上述的方法,所述测试用例清理,包括:
清理额外的变量,所述额外的变量为从未使用过的中间变量;
根据类名更新变量名。
一种基于测试生成的崩溃重现***,其特征在于,所述工具包括:
异常代码信息获取模块,用于指示所述项目代码段的路径条件满足度;
栈踪迹信息获取模块,用于获取异常栈踪迹信息,所述异常堆栈信息用于定位崩溃发生时栈踪迹中的最末方法;所述最末方法是相关程序崩溃前的最后一个方法调用;
最末方法确定模块,用于根据栈踪迹信息确定每个崩溃发生前调用的最后一个方法;
路径条件分析模块,用于根据所述异常代码信息和栈踪迹信息提取异常条件,控制条件,类型条件和隐含条件四种类型的路径条件,并计算路径条件的满足度;所述路径条件满足度用于计算测试用例的适应度;所述测试用例适应度用于指导测试用例的搜索;
测试用例扩展模块,用于将初始化的栈踪迹中的最末方法扩展成为适应度最低并可以触发崩溃的测试用例;
测试用例清理模块,用于获得用户友好的,可读性高的测试用例。
本发明的基于测试生成的软件崩溃重现方法相较于现有技术至少有以下优点:
该发明提供了一种基于测试生成的软件崩溃重现方法,进而重现面向对象程序的崩溃;由于本方法基于随机搜索的,所以针对每一个崩溃重复使用该方法多次,最终重现面向对象程序崩溃的准确率高,并且对于每个程序崩溃,运行时间短、效率高。
附图说明
图1为本发明实施例的提供的基于测试生成的崩溃重现方法流程图;
图2为本发明实施例的异常代码摘录图;
图3为本发明实施例的栈踪迹最末方法代码摘录图;
图4为本发明实施例使用基于测试生成的崩溃重现方法自动化生成的测试用例摘录图。
具体实施方法
为使本发明的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整的描述。
一、首先介绍本发明的方法原理,技术方案如下:
第一方面,提供一种基于测试生成的崩溃重现方法。该方法生成测试用例,随机地探索搜索空间,并使用栈踪迹中提取的满足适应度的路径条件指导搜索,从而得到最终可以触发指定崩溃的测试用例。该方法的输入是程序的源代码和目标栈踪迹,输出是能重现项目崩溃的一个或多个测试用例。所述方法包括:
获取目标程序的异常代码信息,所述异常代码信息用于指示所述项目代码段的路径条件满足度。所述路径条件包括异常条件,控制条件,类型条件和隐含条件四种;异常条件表示栈踪迹中直接造成崩溃的条件,控制条件表示指定代码行的路径依赖,类型条件表示源代码中类型的强制转换,隐含条件表示从源代码中推断的条件。
获取目标程序的栈踪迹信息,所述栈踪迹信息用于指示崩溃发生时栈踪迹中的最末方法,所述最末方法是相关程序崩溃前的最后一个方法调用。
路径条件分析阶段根据所述异常代码信息和栈踪迹信息提取异常条件,控制条件,类型条件和隐含条件四种类型的路径条件,通过路径条件的满足度计算测试用例的适应度;所述适应度用于指导测试用例的搜索,其中适应度为0的测试用例,也是适应度的最小值。
测试用例扩展阶段根据栈踪迹信息中提取的最末方法初始化一个测试用例,并在最末方法之前添加语句,而不考虑最末方法以后的语句。换句话说,一个测试用例从最末方法调用处“生长”,直到程序达到崩溃的状态。
定义测试用例扩展过程中的方法,同时,一个测试用例本身也是一个方法。方法f为一个通用方法,包括子方法g、s和t,g具体表示为具有至少一个参数的方法,该方法不是可搜索的类型;s具体表示为带参数的方法,每个参数都是可搜索的类型;t具体表示为一个可执行的测试用例。方法t包括st和tc两个子方法,st具体表示为通过为s分配参数完成的测试用例,tc具体表示为最终可以出发崩溃的测试用例。
在最末方法之前添加语句需要经过程序对象实例化和设置随机种子、函数调用增加以及本地搜索等行为,最终生成可编译的适应度最低的测试用例。
对象实例化和设置随机种子用于分配函数参数的值,设置随机种子在s方法中随机分配可搜索类型的参数值,而实例化处理g方法中的其他类型;设置随机种子会使s方法转换为测试用例st,而实例化可以转换为g,s,或t方法。
所述函数调用增加随机的向测试用例t添加一个方法,所述添加方法由三部分组成:方法调用所属的变量,确切的方法和添加位置;具体步骤如下:随机搜索一个候选变量;提取所有可访问的方法并过滤掉纯方法,所述纯方法表示此方法执行不会更改方法内部的任何参数或同一个类中的任何字段;对于t方法中的候选变量,收集包含变量的语句和执行时失败的位置。最终新方法调用的位置定位在变量第一次出现之后、最后一次出现之前以及之前执行时失败的位置。
所述本地搜索是为其他潜在的测试用例提供搜索可能。在原始搜索向量的基础上,通过随机化方法做变换得到一系列的搜索向量,再通过最低适应度的测试用例代替原始的测试用例。
定义测试用例扩展过程中的行为,划分子类型是将通用方法f划分为g、s和t三个子类型;初始化为方法中的参数创建对象并丢弃原始对象;设置随机种子为方法设定参数值。与实例化不同,设置随机种子只处理原始值(例如整型,双精度型)和字符串类型;本地搜索针对带有随机化参数的方法,搜索邻近方法可能会获得更好的效果;恢复行为针对执行的测试用例;调用增加是对一个测试用例添加另一个方法调用,进而增加它的功能性;验收行为找到最终接受的测试用例。
测试用例清理阶段被用于删除额外的变量,并更新变量名,进而提升可读性。测试用例清理的目标是通过两个步骤获得用户友好的测试用例。所述删除额外变量时删除从未使用过的中间变量;所述更新变量名时根据程序类名而改变变量名。
第二方面,提供一种基于测试生成的崩溃重现工具,所述工具包括:
异常代码信息获取模块,用于指示所述项目代码段的路径条件满足度;
栈踪迹信息获取模块,用于获取异常栈踪迹信息,所述异常堆栈信息用于定位崩溃发生时栈踪迹中的最末方法;所述最末方法是相关程序崩溃前的最后一个方法调用;
最末方法确定模块,用于根据栈踪迹信息确定每个崩溃发生前调用的最后一个方法;
路径条件分析模块,用于根据所述异常代码信息和栈踪迹信息提取异常条件,控制条件,类型条件和隐含条件四种类型的路径条件,并计算路径条件的满足度;所述路径条件满足度用于计算测试用例的适应度;所述测试用例适应度用于指导测试用例的搜索;
测试用例扩展模块,用于将初始化的栈踪迹中的最末方法扩展成为适应度最低并可以触发崩溃的测试用例;
测试用例清理模块,用于获得用户友好的,可读性高的测试用例。
二、本发明实施例主要针对面向对象程序的崩溃重现问题,考虑到崩溃重现的困难和复杂性问题,提供了一种基于测试生成的崩溃重现方法,如图1所示是方法流程图,该方法包括:
步骤101,获取目标程序的异常代码信息,所述异常代码信息用于指示所述项目代码段的路径条件。
ApachAnt中的一个真实的崩溃为例,当执行目标程序的源代码时,有缺陷处触发了一个崩溃。如图2所示,一个对target类缺乏空指针检查的缺陷显示在381行。引发软件崩溃的缺陷是从上面的语句中引入的,用于决定适配器的类型。为了修复程序缺陷,程序员需要重现目标崩溃,这要求获取目标程序的异常代码信息。
步骤102,获取目标程序的栈踪迹信息,栈踪迹信息用于指示崩溃发生时栈踪迹中的最末方法,所述最末方法是相关程序崩溃前的最后一个方法调用;
如果经过步骤1判定以后,栈踪迹中已经存在崩溃的相关信息。在一个实例中,堆栈信息可以如下:
Java.lang.NullPointerException:
[...].ant.RuntimeConfigurable.maybeConfigure(RuntimeConfigurable.java:381)
[...].ant.RuntimeConfigurable.maybeConfigure(RuntimeConfigurable.java:349)
[...].ant.Task.maybeConfigure(Task.java:202)
[...].ant.Task.Perform(Taskjava:347)
[...].ant.Target.execute(Target.java:357)
[...].ant.Target.performTasks(Target.java:385)
[...].ant.Project.executeSortedTargets(Project.java:1337)
在本实施例中,栈踪迹已经触发了程序缺陷。所述栈踪迹共涉及4个类中的7个方法调用,其中包括两个名为maybeConfigure()的重载方法。
步骤103,根据所述异常代码信息和栈踪迹信息计算路径条件满足度,确定测试用例适应度,所述测试用例适应度用于指导测试用例的搜索;
步骤104,根据测试用例适应度计算方法将栈踪迹中的最末方法扩展成为适应度最低并可以触发崩溃的测试用例。
从栈踪迹中提取到最末方法,也是栈踪迹中的最后一个调用的方法。方法的代码片段如图3所示,崩溃显示在1337行。从图中可以发现源代码是复杂的,在触发崩溃之前,至少一个嵌套的循环和一个条件语句被执行;从栈踪迹中发现,剩余的6个方法也全部被执行。针对这样的复杂性问题,上述步骤103的计算路径条件满足度可以很好的解决。在测试用例的执行路径中检查路径的满足度,可以计算出测试用例的适应度,从而指导测试用例搜索。测试用例适应度越低,意味着在测试执行过程中覆盖的路径条件越多、测试用例越接近目标栈踪迹。
图3所示的方法是相关程序崩溃前最后一个方法调用,该方法通过子类型分解、实例化、设置随机种子、调用增加和本地搜索这些过程,经过中间状态并最终生成可触发崩溃的测试用例。
步骤105,将得到的测试用例清理,获得用户友好、可读性高的测试用例。
经过步骤104获得的测试用例还要经过测试用例清理的过程,进而得到对用户友好的测试用例。在额外的代码删除中,删除从未使用过的中间变量。在变量名的更新中,根据类名改变变量名。
需要说明的是,上述步骤104将栈踪迹中的最末方法扩展成为适应度最低并可以触发崩溃的测试用例过程中有多种状态转变过程,
如图4所示,通过上述步骤,自动生成一个包含13行代码的测试用例,在14行的最末方法能够触发崩溃。
综上所述,本发明实施例提供的基于测试生成的崩溃重现方法,通过获取目标程序的异常代码信息,所述异常代码信息用于指示所述项目代码段的路径条件;获取目标程序的栈踪迹信息;根据所述异常代码信息和目标程序的栈踪迹信息将栈踪迹中的最末方法扩展成为适应度最低并可以触发崩溃的测试用例。这样,解决了重现目标崩溃困难的问题,找到了可行有效的崩溃重现方法。
本发明实施例的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明实施例揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明实施例的保护范围之内。因此,本发明实施例的保护范围应以所述权利要求的保护范围为准。

Claims (3)

1.一种基于测试生成的软件崩溃重现方法,其特征在于,所述方法包括:
获取目标程序的异常代码信息,所述异常代码信息用于指示项目代码段的路径条件满足度,所述路径条件包括异常条件,控制条件,类型条件和隐含条件四种;
获取目标程序的栈踪迹信息,所述栈踪迹信息用于指示崩溃发生时栈踪迹中的最末方法,所述最末方法是相关程序崩溃前的最后一个方法调用;
进行路径条件分析,具体是根据所述异常代码信息和栈踪迹信息提取异常条件,控制条件,类型条件和隐含条件四种类型的路径条件,通过路径条件的满足度计算测试用例的适应度;所述适应度用于指导测试用例的搜索,具体是:收集路径条件和工具指导进一步的随机搜索;通过路径条件估计适应度,进而指导测试用例的搜索;测试用例的适应度计算是基于测试用例的执行日志,通过检查路径条件的满足度而计算的;适应度越低,意味着在测试执行过程中覆盖的路径条件越多,并且测试用例越接近目标栈踪迹;适应度为零的测试用例,即适应度的最小值;
进行测试用例扩展,具体是根据栈踪迹信息中提取的最末方法初始化一个测试用例,并在最末方法之前添加语句,而不考虑最末方法以后的语句;即:将一个测试用例从最末方法调用处“生长”,直到程序达到崩溃的状态;
进行测试用例清理,具体是用于删除额外的变量,并更新变量名,进而提升可读性;测试用例清理的目标是通过两个步骤获得用户友好的测试用例;
所述路径条件包括:
栈踪迹中直接造成崩溃的异常条件;
指定代码行的路径依赖造成的控制条件;
类型条件表示源代码中类型的强制转换造成的类型条件;
从源代码中推断的隐含条件;
所述测试用例扩展包括:
获取栈踪迹中的最末方法初始化一个测试用例;栈踪迹中的最末方法,包括:读取所述栈踪迹中的每条信息,找到崩溃前的最后一个方法调用;
定义测试用例扩展过程中的方法,同时,一个测试用例本身也是一个方法;方法f为一个通用方法,包括子方法g、s和t,g具体表示为具有至少一个参数的方法,该方法不是可搜索的类型;s具体表示为带参数的方法,每个参数都是可搜索的类型;t具体表示为一个可执行的测试用例;方法t包括st和tc两个子方法,st具体表示为通过为s分配参数完成的测试用例,tc具体表示最终可以触发崩溃的测试用例;
定义测试用例扩展过程中的行为,划分子类型是将通用方法f划分为g、s和t三个子类型;初始化为方法中的参数创建对象并丢弃原始对象;设置随机种子为方法设定参数值;与实例化不同,设置随机种子只处理原始值和字符串类型;本地搜索针对带有随机化参数的方法;恢复行为针对执行的测试用例;调用增加是对一个测试用例添加另一个方法调用,进而增加它的功能性;验收行为找到最终接受的测试用例;
通过程序对象实例化、函数调用增加和本地搜索三个步骤在栈踪迹的最末方法调用之前添加语句并生成可编译的测试用例,即:
步骤一,程序对象实例化,具体是将栈踪迹的最末方法作为初始化,分为几个子方法,对象实例化可以将子方法转换为其他子方法或可执行的测试用例;对于其中部分子方法,还可通过设置随机种子的参数值将指定子方法转换为测试用例;
步骤二,函数调用增加,具体是随机的向测试用例初始化的栈踪迹中最末方法之前添加一个方法,添加方法由三部分组成:方法调用所属的变量,确切的方法和添加位置;具体步骤如下:随机搜索一个候选变量;提取所有可访问的方法并过滤掉纯方法,所述纯方法表示此方法执行不会更改方法内部的任何参数或同一个类中的任何字段;对于t方法中的候选变量,收集包含变量的语句和执行时失败的位置;最终新方法调用的位置定位在变量第一次出现之后、最后一次出现之前以及之前执行时失败的位置;
步骤三,本地搜索;具体是为其他潜在的测试用例提供机会去搜索;在原始搜索向量的基础上,通过随机化方法做变换得到一系列搜索向量,再使用最低适应度的测试用例代替原始的测试用例。
2.根据权利要求1所述的方法,其特征在于,所述测试用例清理,包括:
清理额外的变量,所述额外的变量为从未使用过的中间变量;
根据类名更新变量名。
3.一种采用权利要求1所述方法的***,其特征在于,所述工具包括:
异常代码信息获取模块,用于指示所述项目代码段的路径条件满足度;
栈踪迹信息获取模块,用于获取异常栈踪迹信息,异常堆栈信息用于定位崩溃发生时栈踪迹中的最末方法;最末方法是相关程序崩溃前的最后一个方法调用;
最末方法确定模块,用于根据栈踪迹信息确定每个崩溃发生前调用的最后一个方法;
路径条件分析模块,用于根据异常代码信息和栈踪迹信息提取异常条件,控制条件,类型条件和隐含条件四种类型的路径条件,并计算路径条件的满足度;路径条件满足度用于计算测试用例的适应度;测试用例适应度用于指导测试用例的搜索;
测试用例扩展模块,用于将初始化的栈踪迹中的最末方法扩展成为适应度最低并可以触发崩溃的测试用例;
测试用例清理模块,用于获得用户友好的,可读性高的测试用例。
CN201910565598.1A 2019-06-27 2019-06-27 一种基于测试生成的软件崩溃重现方法及*** Active CN110413509B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201910565598.1A CN110413509B (zh) 2019-06-27 2019-06-27 一种基于测试生成的软件崩溃重现方法及***

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201910565598.1A CN110413509B (zh) 2019-06-27 2019-06-27 一种基于测试生成的软件崩溃重现方法及***

Publications (2)

Publication Number Publication Date
CN110413509A CN110413509A (zh) 2019-11-05
CN110413509B true CN110413509B (zh) 2021-08-03

Family

ID=68358327

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201910565598.1A Active CN110413509B (zh) 2019-06-27 2019-06-27 一种基于测试生成的软件崩溃重现方法及***

Country Status (1)

Country Link
CN (1) CN110413509B (zh)

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104598383A (zh) * 2015-02-06 2015-05-06 中国科学院软件研究所 一种基于模式的动态漏洞挖掘集成***和方法
CN104614601A (zh) * 2014-12-26 2015-05-13 惠州Tcl移动通信有限公司 一种终端故障定位方法、装置及***
CN105224463A (zh) * 2015-10-28 2016-01-06 南京大学 一种基于崩溃栈数据的软件缺陷代码定位方法
CN106294134A (zh) * 2016-07-29 2017-01-04 腾讯科技(深圳)有限公司 代码的崩溃定位方法及装置

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20110271284A1 (en) * 2010-04-29 2011-11-03 Veronika Simonian Method of Simulating, Testing, and Debugging Concurrent Software Applications

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104614601A (zh) * 2014-12-26 2015-05-13 惠州Tcl移动通信有限公司 一种终端故障定位方法、装置及***
CN104598383A (zh) * 2015-02-06 2015-05-06 中国科学院软件研究所 一种基于模式的动态漏洞挖掘集成***和方法
CN105224463A (zh) * 2015-10-28 2016-01-06 南京大学 一种基于崩溃栈数据的软件缺陷代码定位方法
CN106294134A (zh) * 2016-07-29 2017-01-04 腾讯科技(深圳)有限公司 代码的崩溃定位方法及装置

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
基于符号执行的自动利用生成***;万云鹏等;《计算机***应用》;20171031;第26卷(第10期);第44-52页 *

Also Published As

Publication number Publication date
CN110413509A (zh) 2019-11-05

Similar Documents

Publication Publication Date Title
CN109739755B (zh) 一种基于程序追踪和混合执行的模糊测试***
Li et al. ATOM: Automatic maintenance of GUI test scripts for evolving mobile applications
KR101981028B1 (ko) 바이너리 기반 보안 취약점 탐색 시스템, 그 방법 및 프로그램
US6622298B1 (en) Method and apparatus for testing software having a user interface
US20070300209A1 (en) Run into function
CN108694320B (zh) 一种多安全环境下敏感应用动态度量的方法及***
CN111008154B (zh) 一种基于强化学习的Android应用自动测试方法及***
An et al. Comparing line and AST granularity level for program repair using PyGGI
Zhou et al. Extracting configuration knowledge from build files with symbolic analysis
CN112882718A (zh) 编译处理方法、装置、设备及存储介质
CN114238154B (zh) 一种符号执行方法、单元测试方法、电子设备及存储介质
US7624381B1 (en) Portable detection of start and completion of object construction
CN114546879A (zh) 一种面向随机测试生成工具的冗余检测与去除方法
CN110413509B (zh) 一种基于测试生成的软件崩溃重现方法及***
CN109101355B (zh) 一种提取错误现场特征测试激励的处理器调试方法
CN115422865B (zh) 仿真方法及装置、计算设备、计算机可读存储介质
US9489284B2 (en) Debugging method and computer program product
Nokhbeh Zaeem et al. Repair abstractions for more efficient data structure repair
CN105912467A (zh) 一种性能测试方法及装置
JP4630489B2 (ja) ログ比較デバッグ支援装置および方法およびプログラム
Abdi et al. Test transplantation through dynamic test slicing
CN114816437A (zh) 一种逆向生成Java实体类的方法、***和设备
CN113051582A (zh) 一种计算机软件技术开发调试***
CN107368742B (zh) 基于gcc的细粒度虚函数表劫持攻击防御方法
CN113849814A (zh) 一种可配置***漏洞复现***以及复现方法

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant