CN115098292B - 应用程序崩溃根原因识别方法、装置及电子设备 - Google Patents

应用程序崩溃根原因识别方法、装置及电子设备 Download PDF

Info

Publication number
CN115098292B
CN115098292B CN202210792761.XA CN202210792761A CN115098292B CN 115098292 B CN115098292 B CN 115098292B CN 202210792761 A CN202210792761 A CN 202210792761A CN 115098292 B CN115098292 B CN 115098292B
Authority
CN
China
Prior art keywords
assertion
monitoring point
variable
target
application program
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
CN202210792761.XA
Other languages
English (en)
Other versions
CN115098292A (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.)
China Telecom Corp Ltd
Original Assignee
China Telecom Corp Ltd
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 China Telecom Corp Ltd filed Critical China Telecom Corp Ltd
Priority to CN202210792761.XA priority Critical patent/CN115098292B/zh
Publication of CN115098292A publication Critical patent/CN115098292A/zh
Application granted granted Critical
Publication of CN115098292B publication Critical patent/CN115098292B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/0703Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation
    • G06F11/079Root cause analysis, i.e. error or fault diagnosis
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/0703Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation
    • G06F11/0706Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation the processing taking place on a specific hardware platform or in a specific software environment
    • G06F11/0715Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation the processing taking place on a specific hardware platform or in a specific software environment in a system implementing multitasking
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/30Monitoring
    • G06F11/3003Monitoring arrangements specially adapted to the computing system or computing system component being monitored
    • G06F11/302Monitoring arrangements specially adapted to the computing system or computing system component being monitored where the computing system component is a software system
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Quality & Reliability (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computing Systems (AREA)
  • Mathematical Physics (AREA)
  • Health & Medical Sciences (AREA)
  • Biomedical Technology (AREA)
  • Debugging And Monitoring (AREA)

Abstract

本申请属于网络技术与安全领域,涉及应用程序崩溃根原因识别方法、装置及电子设备。该方法包括:获取引起应用程序崩溃的崩溃用例,基于崩溃用例生成多个正测试用例和多个负测试用例;构建与应用程序对应的控制流图,并构建与控制流图中监控点处的变量对应的断言;输入各正测试用例和各负测试用例,以获取变量与各测试用例对应的数据,根据数据计算断言中的参数值,并根据参数值对监控点进行筛选,以获取待选监控点;计算与待选监控点对应的执行等级,根据执行等级对待选监控点进行筛选,以获取指示应用程序崩溃根原因的目标监控点。本申请能够自动化实现精准定位应用程序崩溃根原因,并且可以提供表征崩溃用例的错误行为的上下文信息。

Description

应用程序崩溃根原因识别方法、装置及电子设备
技术领域
本申请涉及网络技术与安全领域,特别涉及一种应用程序崩溃根原因识别方法、应用程序崩溃根原因识别装置、计算机存储介质及电子设备。
背景技术
识别应用程序崩溃的根原因是开发应用程序中的重要一环,同时识别应用程序崩溃的根原因也是一项耗时的工作,相对底层软件故障修改,软件开发过程中开发人员花费了更多的时间用于发现程序崩溃的根本原因。
针对这个问题,业界已经提出了各种依赖于反向执行和反向污染分析等技术的方法。这些技术要么仅限于某些故障类型,要么为分析人员提供修复说明,但没有上下文信息或对潜在故障的解释,只能发现程序崩溃的地方。通常,崩溃的根原因并不位于程序崩溃的地方,它可能在位于程序的执行流程中更早的地方,开发人员需要从崩溃位置向后分析路径以找到根本原因,这需要付出巨大的努力。
需要说明的是,上述背景技术部分公开的信息仅用于加强对本申请的背景的理解。
发明内容
本申请的目的在于提供一种应用程序崩溃根原因识别方法、应用程序崩溃根原因识别装置、计算机存储介质及电子设备,进而至少在一定程度上实现自动分析并识别应用程序崩溃根原因,还可以为分析人员提供有关表征崩溃用例的错误行为的上下文信息。
本申请的其他特性和优点将通过下面的详细描述变得显然,或部分地通过本申请的实践而习得。
根据本申请的第一方面,提供一种应用程序崩溃根原因识别方法,包括:
获取引起应用程序崩溃的崩溃用例,基于所述崩溃用例生成多个正测试用例和多个负测试用例;
构建与所述应用程序对应的控制流图,并构建与所述控制流图中监控点处的变量对应的断言;
输入各所述正测试用例和各所述负测试用例,以获取所述变量与各所述测试用例对应的数据,根据所述数据计算所述断言中的参数值,并根据所述参数值对所述监控点进行筛选,以获取待选监控点;
计算与所述待选监控点对应的执行等级,根据所述执行等级对所述待选监控点进行筛选,以获取指示所述应用程序崩溃根原因的目标监控点。
根据本申请的第二方面,提供一种应用程序崩溃根原因识别装置,包括:
测试用例创建模块,用于获取引起应用程序崩溃的崩溃用例,基于所述崩溃用例生成多个正测试用例和多个负测试用例;
控制流图创建模块,用于构建与所述应用程序对应的控制流图,并构建与所述控制流图中监控点处的变量对应的断言;
第一筛选模块,用于输入各所述正测试用例和各所述负测试用例,以获取所述变量与各所述测试用例对应的数据,根据所述数据计算所述断言中的参数值,并根据所述参数值对所述监控点进行筛选,以获取待选监控点;
第二筛选模块,用于计算与所述待选监控点对应的执行等级,根据所述执行等级对所述待选监控点进行筛选,以获取指示所述应用程序崩溃根原因的目标监控点。
根据本申请的第三方面,提供一种计算机存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现上述的应用程序崩溃根原因识别方法。
根据本申请的第四方面,提供一种电子设备,其特征在于,包括:
处理器;以及
存储器,用于存储所述处理器的可执行指令;
其中,所述处理器配置为经由执行所述可执行指令来执行上述的应用程序崩溃根原因识别方法。
由上述技术方案可知,本申请示例性实施例中的应用程序崩溃根原因识别方法、应用程序崩溃根原因识别装置、计算机存储介质及电子设备至少具备以下优点和积极效果:
本申请中的应用程序崩溃根原因识别方法,在获取导致应用程序崩溃的崩溃用例后,可以基于崩溃用例构建正测试用例和负测试用例,同时构建与应用程序对应的控制流图,在控制流图中标注有节点和监控点,对于各监控点可以根据监控点处的变量构建与其对应的断言;接着输入正测试用例和负测试用例,在运行应用程序的过程中记录各监控点处各变量对应各测试用例的数据,并根据该数据得到断言中的参数值,进而根据断言中的参数值对监控点进行筛选以获取待选监控点,最后计算与待选监控点对应的执行等级,并根据执行等级对待选监控点进行筛选,以获取指示应用程序崩溃根原因的目标监控点。本申请实施例一方面能够基于控制流图和各监控点对应的断言,以自动化方式精准识别导致应用程序崩溃的根原因,另一方面能够提供表征崩溃用例的错误行为的上下文信息。
本申请应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本申请。
附图说明
此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本申请的实施例,并与说明书一起用于解释本申请的原理。显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1示意性地示出了本申请实施例中应用程序崩溃根原因识别方法的流程示意图。
图2示意性地示出了本申请实施例中控制流图的结构示意图。
图3示意性地示出了本申请实施例中获取待选监控点的流程示意图。
图4示意性地示出了本申请实施例中计算执行等级的流程示意图。
图5示意性地示出了本申请中应用程序崩溃根原因识别装置的结构框图。
图6示意性示出了适于用来实现本申请实施例的电子设备的计算机系统结构框图。
具体实施方式
现在将参考附图更全面地描述示例实施方式。然而,示例实施方式能够以多种形式实施,且不应被理解为限于在此阐述的范例;相反,提供这些实施方式使得本申请将更加全面和完整,并将示例实施方式的构思全面地传达给本领域的技术人员。
此外,所描述的特征、结构或特性可以以任何合适的方式结合在一个或更多实施例中。在下面的描述中,提供许多具体细节从而给出对本申请的实施例的充分理解。然而,本领域技术人员将意识到,可以实践本申请的技术方案而没有特定细节中的一个或更多,或者可以采用其它的方法、组元、装置、步骤等。在其它情况下,不详细示出或描述公知方法、装置、实现或者操作以避免模糊本申请的各方面。
本说明书中使用用语“一个”、“一”、“该”和“所述”用以表示存在一个或多个要素/组成部分/等;用语“包括”和“具有”用以表示开放式的包括在内的意思并且是指除了列出的要素/组成部分/等之外还可存在另外的要素/组成部分/等;用语“第一”和“第二”等仅作为标记使用,不是对其对象的数量限制。
附图中所示的方框图仅仅是功能实体,不一定必须与物理上独立的实体相对应。即,可以采用软件形式来实现这些功能实体,或在一个或多个硬件模块或集成电路中实现这些功能实体,或在不同网络和/或处理器装置和/或微控制器装置中实现这些功能实体。
附图中所示的流程图仅是示例性说明,不是必须包括所有的内容和操作/步骤,也不是必须按所描述的顺序执行。例如,有的操作/步骤还可以分解,而有的操作/步骤可以合并或部分合并,因此实际执行的顺序有可能根据实际情况改变。
在本申请的相关技术中,在对应用程序崩溃原因进行定位时,主要通过三种方法实现,第一种是对应用程序的log文件和崩溃信息进行分析,以确定导致应用程序崩溃的原因;第二种是对应用程序分段处理,根据运行情况,逐段查找程序中的漏洞;第三种是通过采样插桩的方法对应用程序崩溃进行定位。
但是,相关技术中对应用程序崩溃进行定位时,对log文件或崩溃信息的内容齐全度有较高的要求,对故障处理经验的依赖度较高,并且,相关技术中对应用程序崩溃进行定位的方法,通常是定位程序崩溃的地方,而不是崩溃的根原因。
针对相关技术中存在的问题,本申请提出了一种应用程序崩溃根原因识别方法。
在对本申请实施例中的技术方案进行详细说明之前,首先对本申请实施例中可能涉及到的技术名词进行解释和说明。
(1)控制流图:Control Flow Graph,简称CFG,也叫控制流图,是一个过程或程序的抽象表现,是用在编译器中的一个抽象数据结构,由编译器在内部维护,代表了一个程序执行过程中会遍历到的所有路径。它用图的形式表示一个过程内所有基本块执行的可能流向,也能反映一个过程的实时执行过程。
(2)断言:是一种在程序中的一阶逻辑,如:一个结果为真或假的逻辑判断式,目的为了表示与验证软件开发者预期的结果——当程序执行到断言的位置时,对应的断言应该为真。若断言不为真时,程序会中止执行,并给出错误信息。
在介绍完本申请实施例中可能涉及到的技术名词后,对本申请中的应用程序崩溃根原因识别方法进行详细说明。
本申请中的应用程序崩溃根原因识别方法可以由终端设备或服务器执行。图1示出了应用程序崩溃根原因识别方法的流程图,如图1所示,应用程序崩溃根原因识别方法包括:
步骤S110:获取引起应用程序崩溃的崩溃用例,基于所述崩溃用例生成多个正测试用例和多个负测试用例;
步骤S120:构建与所述应用程序对应的控制流图,并构建与所述控制流图中监控点处的变量对应的断言;
步骤S130:输入各所述正测试用例和各所述负测试用例,以获取所述变量与各所述测试用例对应的数据,根据所述数据计算所述断言中的参数值,并根据所述参数值对所述监控点进行筛选,以获取待选监控点;
步骤S140:计算与所述待选监控点对应的执行等级,根据所述执行等级对所述待选监控点进行筛选,以获取指示所述应用程序崩溃根原因的目标监控点。
本申请的应用程序崩溃根原因识别方法,在获取导致应用程序崩溃的崩溃用例后,可以基于崩溃用例构建正测试用例和负测试用例,同时构建与应用程序对应的控制流图,在控制流图中标注有节点和监控点,对于各监控点可以根据监控点处的变量构建与其对应的断言;接着输入正测试用例和负测试用例,在运行应用程序的过程中记录各监控点处各变量对应各测试用例的数据,并根据该数据得到断言中的参数值,进而根据断言中的参数值对监控点进行筛选以获取待选监控点,最后计算与待选监控点对应的执行等级,并根据执行等级对待选监控点进行筛选,以获取指示应用程序崩溃根原因的目标监控点。本申请实施例一方面能够基于控制流图和各监控点对应的断言,以自动化方式精准识别导致应用程序崩溃的根原因,另一方面能够提供表征崩溃用例的错误行为的上下文信息。
下面对图1所示的应用程序崩溃根原因识别方法的各个步骤进行详细说明。
在步骤S110中,获取引起应用程序崩溃的崩溃用例,基于所述崩溃用例生成多个正测试用例和多个负测试用例。
在本申请的示例性实施例中,开发人员在对应用程序进行测试时,通常会发现引起应用程序崩溃的崩溃用例,为了识别得到导致应用程序崩溃的根原因,可以基于该崩溃用例进行根原因的溯源和识别。在识别应用程序崩溃的根原因时,可以基于崩溃用例创建两组相关但不同的测试用例,一组为正测试用例,该正测试用例即为崩溃测试用例,一组为负测试用例,该负测试用例即为非崩溃测试用例。其中,崩溃测试用例可以采用变异算子对崩溃用例进行变异获取。
在本申请的示例性实施例中,通过输入正测试用例和负测试用例,并运行应用程序,可以得到在应用程序不同位置处与各测试用例对应的变量的数据。进一步地,采用该数据可以统计得到指示应用程序崩溃根原因的信息。
在步骤S120中,构建与所述应用程序对应的控制流图,并构建与所述控制流图中的监控点对应的断言。
在本申请的示例性实施例中,由于针对应用程序中的每个代码行进行应用程序崩溃根原因的识别,计算量太大,耗时久,不能为开发人员提供快速的根原因反馈,因此在本申请实施例中,可以构建与应用程序对应的控制流图,进而基于控制流图确定应用程序崩溃的根原因所在的节点。如果想进一步确定应用程序崩溃的根原因所在的代码,只需要针对确定得到的节点进行根原因识别即可,这样可以节省算力,提高识别准确率和反馈效率。
在构建控制流图时,根据控制流边的走向设置节点,并对设置的节点编号,其中起点或终点重合的多个控制流边对应同一编号的节点,同时在每个控制流边的起点位置设置监控点,并对每个监控点进行编号以区分不同的监控点,进一步地,还可以获取每个监控点处的变量,并为每个监控点的每个变量构建断言。
在本申请的示例性实施例中,断言是一个三元组,由监控点的编号、布尔表达式和评价分数组成,其中,布尔表达式具体为各个变量所对应的取值区间,评价分数用于区分崩溃和非崩溃能力。例如,针对编号5的监控点,存在两个变量a、b,有N个取值区间与变量a对应,M个取值区间与变量b对应,那么就可以构建得到与变量a对应的断言为:{5,a∈[Ca[1]min,Ca[1]max]∪[Ca[2]min,Ca[2]max]∪…∪[Ca[N]min,Ca[N]max],S1}和与变量b对应的断言{5,b∈[Cb[1]min,Cb[1]max]∪[Cb[2]min,Cb[2]max]∪…∪[Cb[M]min,Cb[M]max],S2},其中S1为与变量a对应的评价分数,S2为与变量b对应的评价分数。
图2示意性示出了控制流图的结构示意图,如图2所示,根据应用程序构建的控制流图由多条控制流边组成,根据各条控制流边的走向设置有六个节点,分别为编码为1、2、3、4、5、6的节点,同时在每个控制流边的起点处设置有监控点,具体地,在节点1处,存在两个控制流边的起点,那么可以在这两个起点处设置监控点1和监控点2,并根据监控点1处的变量设置对应的断言,根据监控点2处的变量设置对应的断言,相应地,在节点2处设置有监控点3和对应的断言,在节点3处设置有监控点4和对应的断言,在节点4处设置有监控点5和对应的断言,在节点5处设置有监控点6和对应的断言以及监控点7和对应的断言。
进一步地,在构建断言时,根据变量的类型不同,所构建的断言也不同。在本申请的实施例中,变量的类型分为数字型变量和字符串型变量两种,当变量为数字型变量时,可以产生一个断言,该断言中的布尔表达式为:R∈[C[1]min,C[1]max]∪[C[2]min,C[2]max]∪…∪[C[N]min,C[N]max];当变量为字符串型变量时,可以产生两个断言,一个断言关于字符串长度,另一个断言关于字符串包含的特殊字符个数,具体地,对应字符串长度的断言中的布尔表达式为:L∈[C[1]min,C[1]max]∪[C[2]min,C[2]max]∪…∪[C[N]min,C[N]max],对应字符串包含的特殊字符个数的断言中的布尔表达式为:LS∈[C[1]min,C[1]max]∪[C[2]min,C[2]max]∪…∪[C[N]min,C[N]max]。其中,C[i]是一个长度为N的常数序列,可以根据输入测试用例后得到的各个监测点处的变量的值计算得到。
在步骤S130中,输入各所述正测试用例和各所述负测试用例,以获取所述变量与各所述测试用例对应的数据,根据所述数据计算所述断言中的参数值,并根据所述参数值对所述监控点进行筛选,以获取待选监控点。
在本申请的示例性实施例中,在构建完成与应用程序对应的控制流图,以及与控制流图中各监控点处的变量对应的断言后,可以输入正测试用例和负测试用例,通过运行应用程序以获取在各个监控点处,每个变量与每个测试用例对应的数据型变量的数据、字符串型变量的最大长度和字符串包含的特殊字符的数量。
进一步地,根据所获取的每个变量与每个测试用例对应的数据可以计算出断言中各参数所对应的参数值,具体而言,可以根据所获取的多组变量对应的数据统计计算得出布尔表达式中的常数序列C[i],接着将常数序列C[i]置入各断言的布尔表达式中计算每个断言对崩溃的预测准确性,并基于该预测准确性计算断言中的评价分数。
在本申请的示例性实施例中,常数序列C[i]的作用是区分正负测试用例,在计算常数序列C[i]时,可以遍历各个监控点处的变量,将每一个变量作为目标变量,获取目标变量与各个测试用例对应的目标数据,通过对目标数据进行处理,以获取目标变量对应的断言所包含的布尔表达式中的常数序列C[i]。
在本申请的示例性实施例中,在对目标数据进行处理以获取与目标变量对应的断言所包含的布尔表达式中的常数序列时,从目标数据中筛选出该目标变量对应正测试用例的待处理数据;然后对该待处理数据使用聚类算法进行聚类,形成一个或多个子数据集,各个子数据集中的最小值和最大值即为布尔表达式中的C[i]min和C[i]max,其中i∈[1,2,…,N]。其中,对待处理数据进行聚类所采用的聚类算法可以是K-Means算法、canopy算法、k-medoids算法等等,当然还可以是其它的聚类算法,本申请实施例对此不作具体限定。同时,在聚类时,将待处理数据分为多少个类与待处理数据的数据量和数据相关性相关,因此在聚类时,可以根据待处理数据的数据量和数据分布设置相应地分类数。
在本申请的示例性实施例中,在获取常数序列C[i]后,可以将常数序列C[i]置入各断言的布尔表达式中,计算每个断言对崩溃的预测准确性。计算预测准确性的公式如公式(1)所示:
其中,Q为崩溃预测准确性,Cf为错误预测崩溃的数量,Ct为正确预测崩溃的数量,Nf为错误预测非崩溃的数量,Nt为正确预测非崩溃的数量。
在确定Cf、Ct、Nf、Nt时,通过将各个变量对应的数据与布尔表达式进行比对即可得到。对于正测试用例而言,当输入正测试用例获取的变量的数据在布尔表达式的数据区间时,则断言正确预测了崩溃,当输入正测试用例获取的变量的数据不在布尔表达式的数据区间时,则断言错误预测了崩溃;对于负测试用例而言,当输入负测试用例获取的变量的数据在布尔表达式的数据区间时,则断言正确预测了非崩溃,当输入负测试用例获取的变量的数据不在布尔表达式的数据区间时,则断言错误预测了非崩溃。通过统计断言正确预测崩溃的正测试用例的数量即可得到Ct,通过统计断言错误预测崩溃的正测试用例的数量即可得到Cf,通过统计断言正确预测非崩溃的负测试用例的数量即可得到Nt,通过统计断言错误预测非崩溃的负测试用例的数量即可得到Nf
在本申请的示例性实施例中,在计算得到预测准确性后,可以基于预测准确性计算得到断言的评价分数,评价分数代表了断言预测崩溃的完美程度,评价分数为0分表示断言预测崩溃最差,评价分数为1分表示断言预测崩溃最好。评价分数的计算公式如公式(2)所示:
S=2×|Q-0.5| (2)
其中,S为评价分数,Q为预测准确性。
在本申请的示例性实施例中,根据上述实施例的方法可以计算得到断言中的参数值,即布尔表达式对应的具体表达式和评价分数。接着可以根据评价分数对监控点进行筛选,以获取待选监控点。
图3示出了获取待选监控点的流程示意图,如图3所示,在步骤S301中,分别对各所述监控点对应的所有断言根据所述断言中的评价分数进行排序,以获取与各所述监控点对应的具有最高评价分数的断言;在步骤S302中,将各所述监控点对应的最高评价分数与评价分数阈值进行比较,获取所述评价分数大于或等于所述评价分数阈值的监控点作为所述待选监控点。
其中,评价分数阈值是根据实际需要设置的阈值,本申请实施例对评价分数阈值的大小不作具体限定。
在步骤S140中,计算与所述待选监控点对应的执行等级,根据所述执行等级对所述待选监控点进行筛选,以获取指示所述应用程序崩溃根原因的目标监控点。
在本申请的示例性实施例中,在确定待选监控点后,可以计算待选监控点的执行等级,并根据待选监控点的执行等级对待选监控点进行筛选,获取指示应用程序崩溃根原因的目标监控点。其中,执行等级用于指示监控点在应用程序运行过程中的时间顺序。
图4示意性示出了计算执行等级的流程示意图,如图4所示,在步骤S401中,为待选监控点对应的断言添加断点,该断点在断言为真时触发;在步骤S402中,输入多个正测试用例并运行应用程序,获取与各正测试用例对应的断点触发顺序;在步骤S403中,根据该断点触发顺序确定与各正测试用例对应的断言序列,并根据该断言序列确定与各待选监控点对应的执行等级。
其中,在步骤S403中,在计算执行等级时,首先判断某个监控点断言在各断言序列中的位置,如果输入了n个测试用例,那么可以获取n个断言观察序列,某个断言P在n个断言观察序列中的位置分别为r1、r2、……、rn,同时n个断言序列中分别包含N1、N2、……、Nn个断言,那么断言P对应的执行等级为Rank(P)=(r1/N1+r2/N2+……+rn/Nn)/n,也就是说,执行等级可以根据公式(3)计算得到:
其中,i为断言p在各断言序列中的位置,N为各断言序列中包含的断言的总量,n为所有断言序列的总量。
在本申请的示例性实施例中,如果在第一断言序列中包含目标断言,而第二断言序列中不包含目标断言,那么可以将目标断言在第二断言序列中的执行等级设置为2作为惩罚,当然还可以设置为其它值,本申请实施例对此不作具体限定,例如当在第2个正测试用例对应的断言序列中不存在断言P,那么就不存在r2,因此断言P对应的执行等级就变成了Rank(P)=(r1/N1+2+……+rn/Nn)/n。
在本申请的示例性实施例中,在计算得到执行等级后,可以按照执行等级由高到低进行排序形成目标断言序列,从目标断言序列中依次获取预设数量的断言,并将预设数量的断言所对应的待训监控点作为目标监控点。其中,预设数量可以根据实际需要设定,例如设定为1个、2个、3个等等,目标监控点选择多个可以提高应用程序崩溃根原因识别的容错性,开发人员可以通过对多个目标监控点分别进行判断,以确定最准确的导致应用程序崩溃的根原因。本申请实施例通过评价分数结合执行等级的监控点筛选方法,能够精准确定应用程序崩溃根原因所在的目标监控点,进而根据该目标监控点即可确定最有可能存在应用程序崩溃根原因的节点,该方法计算简单,而且定位精度较高。
为了使本申请的技术方案更清楚,接下来以一个具体示例进行说明。
步骤1:当对应用程序进行测试发生崩溃时,根据崩溃用例生成多个正负测试用例;
步骤2:根据应用程序构建与之对应的控制流图;
步骤3:根据各个控制流边的起点设置监控点,并根据每个监控点处的每个变量构建断言;假设被测应用程序的控制流图如图2所示;
假设在每个监控点处有a、b两个数据型变量,那么对应每个监控点可以构建分别与变量a和变量b对应的断言。断言包括监控点的编号、布尔表达式和评价分数,例如,对于监控点5可以构建断言为:{5,a∈[Ca[1]min,Ca[1]max]∪[Ca[2]min,Ca[2]max]∪…∪[Ca[N]min,Ca[N]max],S1}和{5,b∈[Cb[1]min,Cb[1]max]∪[Cb[2]min,Cb[2]max]∪…∪[Cb[N]min,Cb[N]max],S2}。
步骤4:输入正负测试用例,并运行应用程序,获取各个变量对应各测试用例的数据;
假设在步骤1中根据崩溃用例生成了两个正测试用例和两个负测试用例,在输入该些测试用例并运行应用程序时,获取的监控点5处的变量a和变量b的数据如表1所示:
表1不同测试用例对应的变量的数据
正测试用例1 正测试用例2 负测试用例1 负测试用例2
a 8 10 200 202
b 8 10 9 13
步骤5:获取输入正测试用例得到的每个变量的数据,对所获取的每个变量的数据进行聚类以生成子数据集,进而根据子数据集中的最大值和最小值确定布尔表达式中的常数序列C[i];
基于表1,可以获取变量a在输入正测试用例时对应的数据,并形成数据集{8,10},对该数据集使用聚类算法进行聚类,聚类结果为1,即只有一个子数据集{8,10},那么变量a对应的常数序列C中N=1,Ca[1]min=8,Ca[1]max=10,相应地,对应变量a的布尔表达式为:a∈[8,10],即(a>=8and a<=10)。同时,可以根据计算变量a的布尔表达式计算得到变量b的布尔表达式为:b∈[8,10],即(b>=8and b<=10)。
步骤6:基于步骤5中得到的布尔表达式和步骤4中得到的变量的数据计算断言的预测准确性和评价分数;
基于表1和步骤5中的布尔表达式,可以计算得出Qa=0,Qb=0.25;Sa=1,Sb=0.5,则与监控点5对应的断言为:{5,a∈[8,10],1},{5,b∈[8,10],0.5}。
步骤7:根据与各监控点对应的断言中的评价分数确定与各监控点对应的具有最高评价分数的断言;
与监控点5对应的断言中,变量a对应的断言中的评价分数1大于变量b对应的断言中的评价分数0.5,因此监控点5对应的具有最高评价分数的断言为{5,a∈[8,10],1}。对于其它监控点,也可以得到对应的具有最高评价分数的断言,例如{1,……,0.8},{2,……,0.7},{3,……,0.92},{4,……,0.7},{6,……,0.81},{7,……,0.95};
步骤8:根据评价分数阈值对监控点进行筛选,以获取待选监控点;
假设评价分数阈值为0.9,那么丢弃断言中评价分数低于0.9的监控点,具体为监控点1、2、4、6,得到待选监控点3、5、7,对应的断言分别为p3、p5和p7。
步骤9:计算与各待选监控点对应的执行等级;
假设有正测试用例i1和i2,在输入i1时观察到的断言观察序列为(p3,p5,p7),在输入i2时观察到的断言观察序列为(p5,p7),则可以计算得到执行等级分别为:
Rank(p3)=1/2*(1/3+2)=1.17;
Rank(p5)=1/2*(2/3+1/2)=0.58;
Rank(p7)=1/2*(3/3+2/2)=1。
步骤10:根据执行等级排序,确定应用程序崩溃根原因所在节点。
根据计算得到的执行等级Rank(p3)、Rank(p5)和Rank(p7)的大小由高到低排序,得到的目标断言序列为{p5,p7,p3},其中p5对应的节点为编号为4的节点,则可确定最有可能存在应用程序崩溃根原因的节点为节点4。当然还可以将节点4和p7对应的节点5作为最有可能存在应用程序崩溃根原因的节点进行反馈,或者将节点4、节点5和p3对应的节点2作为最有可能存在应用程序崩溃根原因的节点进行反馈。
在本申请的示例性实施例中,当变量为字符串变量时,对于每个监控点处的每个变量会有两个布尔表达式,相应地,就会有两个断言,也就是说当变量为字符串变量时,每个监控点对应的断言的数量是变量为数字型变量时每个监控点对应的断言的数量的2倍。在识别应用程序崩溃根原因对应的节点时,整体逻辑与上述实施例中应用程序崩溃根原因对应节点的识别逻辑相似,当构建完成各个监控点各变量对应的断言后,输入正负测试用例,记录各变量对应各测试用例的数据;接着对各变量对应正测试用例的数据进行聚类,以获取布尔表达式中的常数序列C[i];然后将常数序列C[i]置入布尔表达式中,计算预测准确性和评价分数,进而得到每个断言的具体表达式;紧接着根据各监控点对应的断言中的评价分数获取与各监控点对应的具有最高评价分数的断言,并根据评价分数阈值对所有的监控点进行筛选,只保留最高评价分数高于评价分数阈值的待选监控点;最后计算各个待选监控点的执行等级,按照执行等级由高到低排序,并依次从排序得到的序列中获取预设数量的监控点作为目标监控点,进而目标监控点对应的节点为应用程序崩溃根原因所在的节点。
值得注意的时,在根据各监控点对应的断言的评价分数对断言进行排序时,是根据与字符串长度和字符串包含特殊字符个数对应的所有断言中的评价分数进行排序的,因此最后保留的具有最高评价分数的断言可能是对应字符串长度的断言,也可能是对应字符串包含特殊字符个数的断言。
在本申请的示例性实施例中,在获取目标监控点对应的节点后,可以对该节点对应的代码行执行上述实施例中的应用程序崩溃根原因识别方法,以确定应用程序根原因所在代码行。
具体而言,可以针对每一个代码行中的变量构建断言,然后输入多个正负测试用例以获取代码行中各变量与各测试用例对应的数据,并根据各变量的数据计算得到断言中的布尔表达式和评价分数,进而根据评价分数对各代码行对应的断言进行筛选,以获取具有最高评价分数的断言;进一步地,根据评价分数阈值对代码行进行筛选,以获取最高评价分数大于评价分数阈值的断言所对应的待选代码行监控点;然后计算各待选代码行监控点对应的执行等级,并根据执行等级确定应用程序崩溃根原因所在的目标代码行。
本申请实施例中的应用程序崩溃根原因识别方法,在获取导致应用程序崩溃的崩溃用例后,可以基于崩溃用例构建正测试用例和负测试用例,同时构建与应用程序对应的控制流图,在控制流图中标注有节点和监控点,对于该监控点可以根据监控点处的变量构建与其对应的断言;接着输入正测试用例和负测试用例,在运行应用程序的过程中记录各监控点处各变量对应各测试用例的数据,并根据该数据得到断言中的参数值,进而根据断言中的参数值对监控点进行筛选以获取待选监控点,最后计算与待选监控点对应的执行等级,并根据执行等级对待选监控点进行筛选,以获取指示应用程序崩溃根原因的目标监控点。本申请实施例一方面能够基于控制流图和各监控点对应的断言,以自动化方式精准识别导致应用程序崩溃的根原因,另一方面能够提供表征崩溃用例的错误行为的上下文信息。
本申请还提供了一种应用程序崩溃根原因识别装置,图5示出了应用程序崩溃根原因识别装置的结构示意图,如图5所示,应用程序崩溃根原因识别装置500可以包括测试用例创建模块501、控制流图创建模块502、第一筛选模块503和第二筛选模块504。其中:
测试用例创建模块501,用于获取引起应用程序崩溃的崩溃用例,基于所述崩溃用例生成多个正测试用例和多个负测试用例;
控制流图创建模块502,用于构建与所述应用程序对应的控制流图,并构建与所述控制流图中监控点处的变量对应的断言;
第一筛选模块503,用于输入各所述正测试用例和各所述负测试用例,以获取所述变量与各所述测试用例对应的数据,根据所述数据计算所述断言中的参数值,并根据所述参数值对所述监控点进行筛选,以获取待选监控点;
第二筛选模块504,用于计算与所述待选监控点对应的执行等级,根据所述执行等级对所述待选监控点进行筛选,以获取指示所述应用程序崩溃根原因的目标监控点。
在本申请的一个实施例中,所述控制流图创建模块502配置为:
根据所述控制流图中各控制流边的走向设置节点,并对所述节点编号;
在所述控制流边的起点位置设置所述监控点,对所述监控点编号,并根据所述监控点处的变量构建所述断言。
在本申请的一个实施例中,所述断言包括与所述监控点对应的编号、布尔表达式和评价分数,所述评价分数用于指示所述断言区分崩溃与非崩溃的能力。
在本申请的一个实施例中,所述控制流图创建模块502配置为:
当所述变量为数字型变量时,生成与所述数字型变量对应的第一布尔表达式;
当所述变量为字符串型变量时,生成与字符串长度对应的第二布尔表达式和与字符串包含的特殊字符个数对应的第三布尔表达式。
在本申请的一个实施例中,所述第一布尔表达式为:R∈[C[1]min,C[1]max]∪[C[2]min,C[2]max]∪…∪[C[N]min,C[N]max];
所述第二布尔表达式为:L∈[C[1]min,C[1]max]∪[C[2]min,C[2]max]∪…∪[C[N]min,C[N]max];
所述第三布尔表达式为:LS∈[C[1]min,C[1]max]∪[C[2]min,C[2]max]∪…∪[C[N]min,C[N]max];
其中,C[i]min为常数序列C[i]中的最小值,C[i]max为常数序列C[i]中的最大值,i=1,2……N,N为正整数。
在本申请的一个实施例中,所述监控点的数量为多个;所述参数据包括布尔表达式和评价分数;所述第一筛选模块503包括:
处理单元,用于遍历各所述监控点处的变量,将每一个所述变量作为目标变量,获取所述目标变量与各所述测试用例对应的目标数据,对所述目标数据进行处理,以获取与所述目标变量对应的断言所包含的布尔表达式中的常数序列;
第一计算单元,用于将所述常数序列置入所述布尔表达式,并根据置入所述常数序列的所述布尔表达式计算与所述目标变量对应的断言的预测准确性;
第二计算单元,用于根据所述预测准确性计算所述评价分数。
在本申请的示例性实施例中,所述处理单元配置为:
从所述目标数据中获取与所述正测试用例对应的待处理数据;
对所述待处理数据进行聚类,以生成一个或多个子数据集,并根据所述子数据集中的最大值和最小值确定所述常数序列。
在本申请的示例性实施例中,所述第一计算单元配置为:
根据公式(1)计算所述预测准确性:
其中,Q为预测准确性,Cf为错误预测崩溃的数量,Ct为正确预测崩溃的数量,Nf为错误预测非崩溃的数量,Nt为正确预测非崩溃的数量。
在本申请的示例性实施例中,所述第二计算单元配置为:
根据公式(2)计算所述评价分数:
S=2×|Q-0.5| (2)
其中,S为所述评价分数,Q为所述预测准确性。
在本申请的示例性实施例中,所述监控点的数量为多个;所述第一筛选模块503配置为:
分别对各所述监控点对应的所有断言根据所述断言中的评价分数进行排序,以获取与各所述监控点对应的具有最高评价分数的断言;
将各所述监控点对应的最高评价分数与评价分数阈值进行比较,获取所述评价分数大于或等于所述评价分数阈值的监控点作为所述待选监控点。
在本申请的示例性实施例中,所述第二筛选模块504包括:
添加单元,用于为所述待选监控点对应的断言添加断点,所述断点在所述断言为真时触发;
观测单元,用于输入多个所述正测试用例并运行所述应用程序,获取与各所述正测试用例对应的断点触发顺序;
确定单元,用于根据所述断点触发顺序确定与各所述正测试用例对应的断言序列,并根据所述断言序列确定各所述待选监控点对应的执行等级。
在本申请的示例性实施例中,所述确定单元配置为:
根据公式(3)计算所述执行等级:
其中,i为断言p在各所述断言序列中的位置,N为各所述断言序列中包含的断言总量,n为所有所述断言序列的总量。
在本申请的示例性实施例中,所述应用程序崩溃根原因识别装置500还配置为:当第一断言序列包含目标断言,而第二断言序列不包含所述目标断言时,将所述目标断言在所述第二断言序列中的执行等级设置为2。
在本申请的示例性实施例中,所述第二筛选模块504还配置为:
将所述待选监控点对应的执行等级由高到低排序形成目标断言序列;
从所述目标断言序列中依次获取预设数量的断言,并将所述预设数量的断言对应的待选监控点作为所述目标监控点。
在本申请的示例性实施例中,所述应用程序崩溃根原因识别装置500还配置为:
根据所述目标监控点确定目标节点;
在所述目标节点中的每一个代码行处设置代码行监控点,并根据所述代码行包含的变量构建代码行断言;
输入各所述正测试用例和各所述负测试用例,以获取所述代码行包含的变量与各所述测试用例对应的数据,根据所述数据计算所述代码行断言中的参数值,并根据所述参数值对所述代码行监控点进行筛选,以获取待选代码行监控点;
计算与所述待选代码行监控点对应的执行等级,根据所述执行等级对所述待选代码行监控点进行筛选,以获取指示所述应用程序崩溃根原因的目标代码行。
应当注意,尽管在上文详细描述中提及了用于动作执行的设备的若干模块或者单元,但是这种划分并非强制性的。实际上,根据本申请的实施方式,上文描述的两个或更多模块或者单元的特征和功能可以在一个模块或者单元中具体化。反之,上文描述的一个模块或者单元的特征和功能可以进一步划分为由多个模块或者单元来具体化。
此外,尽管在附图中以特定顺序描述了本申请中方法的各个步骤,但是,这并非要求或者暗示必须按照该特定顺序来执行这些步骤,或是必须执行全部所示的步骤才能实现期望的结果。附加的或备选的,可以省略某些步骤,将多个步骤合并为一个步骤执行,以及/或者将一个步骤分解为多个步骤执行等。
通过以上的实施方式的描述,本领域的技术人员易于理解,这里描述的示例实施方式可以通过软件实现,也可以通过软件结合必要的硬件的方式来实现。因此,根据本申请实施方式的技术方案可以以软件产品的形式体现出来,该软件产品可以存储在一个非易失性存储介质(可以是CD-ROM,U盘,移动硬盘等)中或网络上,包括若干指令以使得一台计算设备(可以是个人计算机、服务器、移动终端、或者网络设备等)执行根据本申请实施方式的方法。
图6示意性地示出了用于实现本申请实施例的电子设备的计算机系统结构框图,该电子设备可以是设置于终端设备或服务器中。
需要说明的是,图6示出的电子设备的计算机系统600仅是一个示例,不应对本申请实施例的功能和使用范围带来任何限制。
如图6所示,计算机系统600包括中央处理器601(Central Processing Unit,CPU),其可以根据存储在只读存储器602(Read-Only Memory,ROM)中的程序或者从存储部分608加载到随机访问存储器603(Random Access Memory,RAM)中的程序而执行各种适当的动作和处理。在随机访问存储器603中,还存储有系统操作所需的各种程序和数据。中央处理器601、在只读存储器602以及随机访问存储器603通过总线604彼此相连。输入/输出接口605(Input/Output接口,即I/O接口)也连接至总线604。
在一些实施例中,以下部件连接至输入/输出接口605:包括键盘、鼠标等的输入部分606;包括诸如阴极射线管(Cathode Ray Tube,CRT)、液晶显示器(Liquid CrystalDisplay,LCD)等以及扬声器等的输出部分607;包括硬盘等的存储部分608;以及包括诸如局域网卡、调制解调器等的网络接口卡的通信部分609。通信部分609经由诸如因特网的网络执行通信处理。驱动器610也根据需要连接至输入/输出接口605。可拆卸介质66,诸如磁盘、光盘、磁光盘、半导体存储器等等,根据需要安装在驱动器610上,以便于从其上读出的计算机程序根据需要被安装入存储部分608。
特别地,根据本申请的实施例,各个方法流程图中所描述的过程可以被实现为计算机软件程序。例如,本申请的实施例包括一种计算机程序产品,其包括承载在计算机可读介质上的计算机程序,该计算机程序包含用于执行流程图所示的方法的程序代码。在这样的实施例中,该计算机程序可以通过通信部分609从网络上被下载和安装,和/或从可拆卸介质611被安装。在该计算机程序被中央处理器601执行时,执行本申请的系统中限定的各种功能。
需要说明的是,本申请实施例所示的计算机可读介质可以是计算机可读信号介质或者计算机可读介质或者是上述两者的任意组合。计算机可读介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读介质的更具体的例子可以包括但不限于:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机访问存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(Erasable Programmable Read Only Memory,EPROM)、闪存、光纤、便携式紧凑磁盘只读存储器(Compact Disc Read-Only Memory,CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本申请中,计算机可读介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。而在本申请中,计算机可读信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。计算机可读信号介质还可以是计算机可读介质以外的任何计算机可读介质,该计算机可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于:无线、有线等等,或者上述的任意合适的组合。
附图中的流程图和框图,图示了按照本申请各种实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,上述模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图或流程图中的每个方框、以及框图或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
应当注意,尽管在上文详细描述中提及了用于动作执行的设备的若干模块或者单元,但是这种划分并非强制性的。实际上,根据本申请的实施方式,上文描述的两个或更多模块或者单元的特征和功能可以在一个模块或者单元中具体化。反之,上文描述的一个模块或者单元的特征和功能可以进一步划分为由多个模块或者单元来具体化。
通过以上的实施方式的描述,本领域的技术人员易于理解,这里描述的示例实施方式可以通过软件实现,也可以通过软件结合必要的硬件的方式来实现。因此,根据本申请实施方式的技术方案可以以软件产品的形式体现出来,该软件产品可以存储在一个非易失性存储介质(可以是CD-ROM,U盘,移动硬盘等)中或网络上,包括若干指令以使得一台电子设备执行根据本申请实施方式的方法。
应当理解的是,本申请并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。本申请的范围仅由所附的权利要求来限制。

Claims (18)

1.一种应用程序崩溃根原因识别方法,其特征在于,包括:
获取引起应用程序崩溃的崩溃用例,基于所述崩溃用例生成多个正测试用例和多个负测试用例;
构建与所述应用程序对应的控制流图,并构建与所述控制流图中监控点处的变量对应的断言;
输入各所述正测试用例和各所述负测试用例,以获取所述变量与各所述测试用例对应的数据,根据所述数据计算所述断言中的布尔表达式以及评价分数,并根据所述评价分数对所述监控点进行筛选,以获取待选监控点;所述评价分数根据每个断言对崩溃的预测准确性计算得到;
计算与所述待选监控点对应的执行等级,按照所述执行等级由高到低排序,依次从排序得到的序列中获取预设数量的监控点作为指示所述应用程序崩溃根原因的目标监控点。
2.根据权利要求1所述的方法,其特征在于,所述构建与所述应用程序对应的控制流图,并构建与所述控制流图中监控点处的变量对应的断言,包括:
根据所述控制流图中各控制流边的走向设置节点,并对所述节点编号;
在所述控制流边的起点位置设置所述监控点,对所述监控点编号,并根据所述监控点处的变量构建所述断言。
3.根据权利要求1或2所述的方法,其特征在于,所述断言包括与所述监控点对应的编号、布尔表达式和评价分数,所述评价分数用于指示所述断言区分崩溃与非崩溃的能力。
4.根据权利要求1所述的方法,其特征在于,所述构建与所述控制流图中监控点处的变量对应的断言,包括:
当所述变量为数字型变量时,生成与所述数字型变量对应的第一布尔表达式;
当所述变量为字符串型变量时,生成与字符串长度对应的第二布尔表达式和与字符串包含的特殊字符个数对应的第三布尔表达式。
5.根据权利要求4中所述的方法,其特征在于,
所述第一布尔表达式为:R∈[C[1]min,C[1]max]∪[C[2]min,C[2]max]∪…∪[C[N]min,C[N]max];
所述第二布尔表达式为:L∈[C[1]min,C[1]max]∪[C[2]min,C[2]max]∪…∪[C[N]min,C[N]max];
所述第三布尔表达式为:LS∈[C[1]min,C[1]max]∪[C[2]min,C[2]max]∪…∪[C[N]min,C[N]max];
其中,C[i]min为常数序列C[i]中的最小值,C[i]max为常数序列C[i]中的最大值,i=1,2……N,N为正整数。
6.根据权利要求1所述的方法,其特征在于,所述监控点的数量为多个;
所述根据所述数据计算所述断言中的布尔表达式以及评价分数,包括:
遍历各所述监控点处的变量,将每一个所述变量作为目标变量,获取所述目标变量与各所述测试用例对应的目标数据,对所述目标数据进行处理,以获取与所述目标变量对应的断言所包含的布尔表达式中的常数序列;
将所述常数序列置入所述布尔表达式,并根据置入所述常数序列的所述布尔表达式计算与所述目标变量对应的断言的预测准确性;
根据所述预测准确性计算所述评价分数。
7.根据权利要求6所述的方法,其特征在于,所述对所述目标数据进行处理,以获取与所述目标变量对应的断言所包含的布尔表达式中的常数序列,包括:
从所述目标数据中获取与所述正测试用例对应的待处理数据;
对所述待处理数据进行聚类,以生成一个或多个子数据集,并根据所述子数据集中的最大值和最小值确定所述常数序列。
8.根据权利要求6所述的方法,其特征在于,所述根据置入所述常数序列的所述布尔表达式计算与所述目标变量对应的断言的预测准确性,包括:
根据公式(1)计算所述预测准确性:
(1)
其中,Q为预测准确性,Cf为错误预测崩溃的数量,Ct为正确预测崩溃的数量,Nf为错误预测非崩溃的数量,Nt为正确预测非崩溃的数量。
9.根据权利要求6所述的方法,其特征在于,所述根据所述预测准确性确定所述评价分数,包括:
根据公式(2)计算所述评价分数:
(2)
其中,S为所述评价分数,Q为所述预测准确性。
10.根据权利要求1所述的方法,其特征在于,所述监控点的数量为多个;
所述根据所述评价分数对所述监控点进行筛选,以获取待选监控点,包括:
分别对各所述监控点对应的所有断言根据所述断言中的评价分数进行排序,以获取与各所述监控点对应的具有最高评价分数的断言;
将各所述监控点对应的最高评价分数与评价分数阈值进行比较,获取所述评价分数大于或等于所述评价分数阈值的监控点作为所述待选监控点。
11.根据权利要求1所述的方法,其特征在于,所述计算与所述待选监控点对应的执行等级,包括:
为所述待选监控点对应的断言添加断点,所述断点在所述断言为真时触发;
输入多个所述正测试用例并运行所述应用程序,获取与各所述正测试用例对应的断点触发顺序;
根据所述断点触发顺序确定与各所述正测试用例对应的断言序列,并根据所述断言序列确定各所述待选监控点对应的执行等级。
12.根据权利要求11所述的方法,其特征在于,所述根据所述断言序列确定各所述待选监控点对应的执行等级,包括:
根据公式(3)计算所述执行等级:
(3)
其中,i为断言p在各所述断言序列中的位置,N为各所述断言序列中包含的断言总量,n为所有所述断言序列的总量。
13.根据权利要求12所述的方法,其特征在于,所述方法还包括:
当第一断言序列包含目标断言,而第二断言序列不包含所述目标断言时,将所述目标断言在所述第二断言序列中的执行等级设置为2。
14.根据权利要求1所述的方法,其特征在于,所述根据所述执行等级对所述待选监控点进行筛选,以获取指示所述应用程序崩溃根原因的目标监控点,包括:
将所述待选监控点对应的执行等级由高到低排序形成目标断言序列;
从所述目标断言序列中依次获取预设数量的断言,并将所述预设数量的断言对应的待选监控点作为所述目标监控点。
15.根据权利要求1所述的方法,其特征在于,所述方法还包括:
根据所述目标监控点确定目标节点;
在所述目标节点中的每一个代码行处设置代码行监控点,并根据所述代码行包含的变量构建代码行断言;
输入各所述正测试用例和各所述负测试用例,以获取所述代码行包含的变量与各所述测试用例对应的数据,根据所述数据计算所述代码行断言中的布尔表达式以及评价分数,并根据所述布尔表达式以及评价分数对所述代码行监控点进行筛选,以获取待选代码行监控点;
计算与所述待选代码行监控点对应的执行等级,根据所述执行等级对所述待选代码行监控点进行筛选,以获取指示所述应用程序崩溃根原因的目标代码行。
16.一种应用程序崩溃根原因识别装置,其特征在于,包括:
测试用例创建模块,用于获取引起应用程序崩溃的崩溃用例,基于所述崩溃用例生成多个正测试用例和多个负测试用例;
控制流图创建模块,用于构建与所述应用程序对应的控制流图,并构建与所述控制流图中监控点处的变量对应的断言;
第一筛选模块,用于输入各所述正测试用例和各所述负测试用例,以获取所述变量与各所述测试用例对应的数据,根据所述数据计算所述断言中的布尔表达式以及评价分数,并根据所述评价分数对所述监控点进行筛选,以获取待选监控点;所述评价分数根据每个断言对崩溃的预测准确性计算得到;
第二筛选模块,用于计算与所述待选监控点对应的执行等级,按照所述执行等级由高到低排序,依次从排序得到的序列中获取预设数量的监控点作为指示所述应用程序崩溃根原因的目标监控点。
17.一种计算机存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现权利要求1~15中任意一项所述的应用程序崩溃根原因识别方法。
18.一种电子设备,其特征在于,包括:
处理器;以及
存储器,用于存储所述处理器的可执行指令;
其中,所述处理器配置为经由执行所述可执行指令来执行权利要求 1~15中任意一项所述的应用程序崩溃根原因识别方法。
CN202210792761.XA 2022-07-05 2022-07-05 应用程序崩溃根原因识别方法、装置及电子设备 Active CN115098292B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202210792761.XA CN115098292B (zh) 2022-07-05 2022-07-05 应用程序崩溃根原因识别方法、装置及电子设备

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202210792761.XA CN115098292B (zh) 2022-07-05 2022-07-05 应用程序崩溃根原因识别方法、装置及电子设备

Publications (2)

Publication Number Publication Date
CN115098292A CN115098292A (zh) 2022-09-23
CN115098292B true CN115098292B (zh) 2023-12-08

Family

ID=83296078

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202210792761.XA Active CN115098292B (zh) 2022-07-05 2022-07-05 应用程序崩溃根原因识别方法、装置及电子设备

Country Status (1)

Country Link
CN (1) CN115098292B (zh)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN116361182B (zh) * 2023-04-03 2023-12-05 南京航空航天大学 一种错误状态引导的符号执行方法
CN116303101B (zh) * 2023-05-19 2023-08-15 建信金融科技有限责任公司 测试案例生成方法、装置和设备

Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8046751B1 (en) * 2007-01-11 2011-10-25 The Mathworks, Inc. Structuring unstructured regions in a control flow graph
WO2017219589A1 (zh) * 2016-06-19 2017-12-28 乐视控股(北京)有限公司 程序崩溃消息的处理方法及系统
CN109144882A (zh) * 2018-09-19 2019-01-04 哈尔滨工业大学 一种基于程序不变量的软件故障定位方法及装置
CN111382077A (zh) * 2020-03-13 2020-07-07 北京奇艺世纪科技有限公司 应用程序崩溃原因定位方法、装置、电子设备及存储介质
CN112199293A (zh) * 2020-10-19 2021-01-08 平安国际智慧城市科技股份有限公司 软件质量评价方法、装置、终端设备及存储介质
CN113268427A (zh) * 2021-06-15 2021-08-17 中国电子科技网络信息安全有限公司 一种针对二进制程序的崩溃分析方法及系统
CN114579466A (zh) * 2022-03-16 2022-06-03 北京沃东天骏信息技术有限公司 构建测试用例和代码测试的方法、装置、设备及介质

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9619375B2 (en) * 2014-05-23 2017-04-11 Carnegie Mellon University Methods and systems for automatically testing software

Patent Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8046751B1 (en) * 2007-01-11 2011-10-25 The Mathworks, Inc. Structuring unstructured regions in a control flow graph
WO2017219589A1 (zh) * 2016-06-19 2017-12-28 乐视控股(北京)有限公司 程序崩溃消息的处理方法及系统
CN109144882A (zh) * 2018-09-19 2019-01-04 哈尔滨工业大学 一种基于程序不变量的软件故障定位方法及装置
CN111382077A (zh) * 2020-03-13 2020-07-07 北京奇艺世纪科技有限公司 应用程序崩溃原因定位方法、装置、电子设备及存储介质
CN112199293A (zh) * 2020-10-19 2021-01-08 平安国际智慧城市科技股份有限公司 软件质量评价方法、装置、终端设备及存储介质
CN113268427A (zh) * 2021-06-15 2021-08-17 中国电子科技网络信息安全有限公司 一种针对二进制程序的崩溃分析方法及系统
CN114579466A (zh) * 2022-03-16 2022-06-03 北京沃东天骏信息技术有限公司 构建测试用例和代码测试的方法、装置、设备及介质

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
内存泄漏检测工具与评估方法;李倩;潘敏学;李宣东;;计算机科学与探索(01);全文 *

Also Published As

Publication number Publication date
CN115098292A (zh) 2022-09-23

Similar Documents

Publication Publication Date Title
CN115098292B (zh) 应用程序崩溃根原因识别方法、装置及电子设备
Liblit et al. Scalable statistical bug isolation
Kanewala et al. Predicting metamorphic relations for testing scientific software: a machine learning approach using graph kernels
CN111274126B (zh) 测试用例筛选方法、装置及介质
CN109241740B (zh) 恶意软件基准测试集生成方法及装置
Böhme STADS: Software testing as species discovery
CN114626071B (zh) 一种漏洞导向的模糊测试方法、系统和介质
CN106991325B (zh) 一种软件漏洞的防护方法和装置
CN109542783B (zh) 一种基于变量分割的扩展有限状态机测试数据生成方法
Levin et al. The co-evolution of test maintenance and code maintenance through the lens of fine-grained semantic changes
CN114491566B (zh) 一种基于代码相似性的模糊测试方法、装置及存储介质
CN112199293A (zh) 软件质量评价方法、装置、终端设备及存储介质
CN112035359A (zh) 程序测试方法、装置、电子设备及存储介质
CN110633211A (zh) 对于多接口的测试方法、装置、服务器及介质
Castelluccio et al. Automatically analyzing groups of crashes for finding correlations
CN115659335A (zh) 基于混合模糊测试的区块链智能合约漏洞检测方法及装置
CN112948193B (zh) 一种基于差异测试的fpga综合工具缺陷检测方法
KR102546108B1 (ko) 전자의무기록에서의 다변량 결측값 대체 방법
US20210286706A1 (en) Graph-based method for inductive bug localization
US11243835B1 (en) Message-based problem diagnosis and root cause analysis
Zhao et al. Suzzer: A vulnerability-guided fuzzer based on deep learning
CN111368894B (zh) 一种fcbf特征选择方法及其在网络入侵检测中的应用
CN111459797A (zh) 开源社区中开发者行为的异常检测方法、系统及介质
CN115185920B (zh) 一种日志类型的检测方法、装置及设备
Wang et al. isense2. 0: Improving completion-aware crowdtesting management with duplicate tagger and sanity checker

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