CN111061644A - 一种检测并定位异常抛出处理缺陷的方法和装置 - Google Patents
一种检测并定位异常抛出处理缺陷的方法和装置 Download PDFInfo
- Publication number
- CN111061644A CN111061644A CN201911352967.5A CN201911352967A CN111061644A CN 111061644 A CN111061644 A CN 111061644A CN 201911352967 A CN201911352967 A CN 201911352967A CN 111061644 A CN111061644 A CN 111061644A
- Authority
- CN
- China
- Prior art keywords
- information
- exception
- abnormal
- instrumented
- 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.)
- Granted
Links
- 238000000034 method Methods 0.000 title claims abstract description 387
- 230000002159 abnormal effect Effects 0.000 title claims abstract description 161
- 230000007547 defect Effects 0.000 title claims abstract description 30
- 238000012545 processing Methods 0.000 title claims abstract description 25
- 238000012360 testing method Methods 0.000 claims abstract description 117
- 230000001960 triggered effect Effects 0.000 claims abstract description 24
- 238000005266 casting Methods 0.000 claims description 10
- 230000005856 abnormality Effects 0.000 claims description 9
- 230000001172 regenerating effect Effects 0.000 claims description 4
- 230000002547 anomalous effect Effects 0.000 claims 1
- 238000001914 filtration Methods 0.000 abstract description 2
- 238000003780 insertion Methods 0.000 description 6
- 230000037431 insertion Effects 0.000 description 6
- 230000000694 effects Effects 0.000 description 2
- 238000005259 measurement Methods 0.000 description 1
- 230000003252 repetitive effect Effects 0.000 description 1
- 238000012795 verification Methods 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3668—Software testing
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
技术领域
本发明涉及测试技术,特别涉及异常抛出处理缺陷的测试。
背景技术
异常处理(Exception Handling),是高级编程语言里的一种机制,用来处理软件或信息系统中出现的异常状况。异常处理通常是防止未知错误产生所采取的处理措施,它为处理某一类错误提供了一个有效的方法,能够提高编程效率,提升程序的鲁棒性。安卓应用中,针对异常处理方式有两种,一种是在方法签名中用throws关键字抛出异常,另一种是使用try,catch模块来对程序中发生的异常进行处理。然而,安卓应用的异常处理模块的正确性验证是十分困难的,特别是涉及到和外部资源相关操作的异常处理代码时,衡量异常处理代码的正确性则更加困难。
发明内容
本发明所要解决的问题:快速检测异常处理模块是否存在缺陷,并就该缺陷进行定位。
为解决上述问题,本发明采用的方案如下:
根据本发明的一种检测并定位异常抛出处理缺陷的方法,该方法包括如下步骤:
S1:获取待测程序和测试脚本;所述测试脚本用于对待测程序进行测试;所述待测程序能够在所述测试脚本的控制下被机器执行;
S2:对所述待测程序进行插装处理:根据预先设定的待插装方法列表,在所述待测程序中找到被插装方法,并在所述被插装方法前插入控制代码;所插入的控制代码在所述待测程序被机器执行后能够完成以下步骤:
S21:输出当前被插装方法信息和被插装方法调用信息;所述被插装方法信息包括被插装方法名称信息和被插装方法位置信息;所述被插装方法位置信息用以表示所述被插装方法在待测程序中的位置;所述被插装方法调用信息包括被插装方法调用堆栈信息和被插装方法调用计次信息;
S22:获取异常触发配置信息集合;所述异常触发配置信息集合是异常触发配置信息的集合;所述异常触发配置信息包括异常抛出匹配信息和所抛异常类型信息;所述异常抛出匹配信息包括:被插装方法名称信息、被插装方法位置信息、被插装方法调用信息;
S23:将异常触发配置信息集合的各个异常触发配置信息中的异常抛出匹配信息与当前被插装方法信息和被插装方法调用信息进行匹配,若存在匹配的异常触发配置信息,则根据该异异常触发配置信息中的所抛异常类型信息抛出相应的异常;
S3:获取被插装方法列表,并根据被插装方法列表中的被插装方法名称信息所对应的被插装方法所能抛出的异常类型集合,组成可能触发的异常类型集合;所述被插装方法列表是所述被插装方法信息组成的列表;所述可能触发的异常类型集合为异常类型的集合;
S4:对所述可能触发的异常类型集合中的各个异常类型逐个进行对异常类型的可疑异常触发测试;在所述可疑异常触发测试中,根据对应异常类型动态构建的异常触发配置信息集合执行插装后的待测程序,然后根据待测程序的运行结果和所述控制代码的输出生成可疑方法异常信息,进而组成疑方法异常信息集合;所述可疑方法异常信息包括被插装方法信息、被插装方法调用信息以及所抛异常类型信息;
S5:对所述可疑方法异常信息集合中的各个可疑方法异常信息逐个进行对所述可疑方法异常信息的上下文组合异常触发测试;所述上下文组合异常触发测试中,根据所述可疑方法异常信息中的被插装方法位置信息,获取上下文关联的连续K个被插装方法,再根据所述连续K个被插装方法是否抛出所述可疑方法异常信息中所抛异常类型信息所对应的异常,构建出2K个异常触发配置信息集合,然后分别根据所述2K个异常触发配置信息集合执行插装后的待测程序,若待测程序运行出现错误,则根据待测程序运行的错误信息以及所述控制代码的输出生成异常抛出缺陷定位信息;所述异常抛出缺陷定位信息包括:被插装方法信息、对应的异常触发配置信息集合以及待测程序运行的错误信息;其中,K为预先设定的常数;
所述对异常类型的所述可疑异常触发测试包括以下步骤:
S41:按照所述被插装方法列表中每个能够触发所述异常类型所对应的异常的被插装方法都触发所述异常类型所对应的异常的策略,生成异常触发配置信息集合;
S42:根据异常触发配置信息集合执行插装后的待测程序,若待测程序运行出现错误,则提取该次执行插装后的待测程序的所述控制代码的输出中最后触发异常的被插装方法的被插装方法信息、被插装方法调用信息以及所抛异常类型信息组成所述可疑方法异常信息;
S43:按照所述被插装方法列表中每个未在步骤S42中抛出过异常并且能够抛出所述异常类型所对应的异常的被插装方法都触发所述异常类型所对应的异常的策略,重新生成异常触发配置信息集合后返回步骤S42,直到所述被插装方法列表中每个能够触发所述异常类型所对应的异常的被插装方法在步骤42中都被触发抛出过异常;
所述执行插装后的待测程序在所述测试脚本的控制下执行。
进一步,根据本发明的检测并定位异常抛出处理缺陷的方法,所述被插装方法列表通过执行插装后的待测程序收集所插入的控制代码所输出的被插装方法信息得到。
进一步,根据本发明的检测并定位异常抛出处理缺陷的方法,所述被插装方法列表通过对所述待测程序进行插装处理时输出得到。
根据本发明的一种检测并定位异常抛出处理缺陷的装置,该装置包括如下模块:
M1,用于:获取待测程序和测试脚本;所述测试脚本用于对待测程序进行测试;所述待测程序能够在所述测试脚本的控制下被机器执行;
M2,用于:对所述待测程序进行插装处理:根据预先设定的待插装方法列表,在所述待测程序中找到被插装方法,并在所述被插装方法前插入控制代码;所插入的控制代码在所述待测程序被机器执行后能够完成以下步骤:
S21:输出当前被插装方法信息和被插装方法调用信息;所述被插装方法信息包括被插装方法名称信息和被插装方法位置信息;所述被插装方法位置信息用以表示所述被插装方法在待测程序中的位置;所述被插装方法调用信息包括被插装方法调用堆栈信息和被插装方法调用计次信息;
S22:获取异常触发配置信息集合;所述异常触发配置信息集合是异常触发配置信息的集合;所述异常触发配置信息包括异常抛出匹配信息和所抛异常类型信息;所述异常抛出匹配信息包括:被插装方法名称信息、被插装方法位置信息、被插装方法调用信息;
S23:将异常触发配置信息集合的各个异常触发配置信息中的异常抛出匹配信息与当前被插装方法信息和被插装方法调用信息进行匹配,若存在匹配的异常触发配置信息,则根据该异异常触发配置信息中的所抛异常类型信息抛出相应的异常;
M3,用于:获取被插装方法列表,并根据被插装方法列表中的被插装方法名称信息所对应的被插装方法所能抛出的异常类型集合,组成可能触发的异常类型集合;所述被插装方法列表是所述被插装方法信息组成的列表;所述可能触发的异常类型集合为异常类型的集合;
M4,用于:对所述可能触发的异常类型集合中的各个异常类型逐个进行对异常类型的可疑异常触发测试;在所述可疑异常触发测试中,根据对应异常类型动态构建的异常触发配置信息集合执行插装后的待测程序,然后根据待测程序的运行结果和所述控制代码的输出生成可疑方法异常信息,进而组成疑方法异常信息集合;所述可疑方法异常信息包括被插装方法信息、被插装方法调用信息以及所抛异常类型信息;
M5,用于:对所述可疑方法异常信息集合中的各个可疑方法异常信息逐个进行对所述可疑方法异常信息的上下文组合异常触发测试;所述上下文组合异常触发测试中,根据所述可疑方法异常信息中的被插装方法位置信息,获取上下文关联的连续K个被插装方法,再根据所述连续K个被插装方法是否抛出所述可疑方法异常信息中所抛异常类型信息所对应的异常,构建出2K个异常触发配置信息集合,然后分别根据所述2K个异常触发配置信息集合执行插装后的待测程序,若待测程序运行出现错误,则根据待测程序运行的错误信息以及所述控制代码的输出生成异常抛出缺陷定位信息;所述异常抛出缺陷定位信息包括:被插装方法信息、对应的异常触发配置信息集合以及待测程序运行的错误信息;其中,K为预先设定的常数;
所述对异常类型的所述可疑异常触发测试包括以下模块:
M41,用于:按照所述被插装方法列表中每个能够触发所述异常类型所对应的异常的被插装方法都触发所述异常类型所对应的异常的策略,生成异常触发配置信息集合;
M42,用于:根据异常触发配置信息集合执行插装后的待测程序,若待测程序运行出现错误,则提取该次执行插装后的待测程序的所述控制代码的输出中最后触发异常的被插装方法的被插装方法信息、被插装方法调用信息以及所抛异常类型信息组成所述可疑方法异常信息;
M43,用于:按照所述被插装方法列表中每个未在模块M42中抛出过异常并且能够抛出所述异常类型所对应的异常的被插装方法都触发所述异常类型所对应的异常的策略,重新生成异常触发配置信息集合后返回模块M42,直到所述被插装方法列表中每个能够触发所述异常类型所对应的异常的被插装方法在模块M42中都被触发抛出过异常;
所述执行插装后的待测程序在所述测试脚本的控制下执行。
进一步,根据本发明的检测并定位异常抛出处理缺陷的装置,所述被插装方法列表通过执行插装后的待测程序收集所插入的控制代码所输出的被插装方法信息得到。
进一步,根据本发明的检测并定位异常抛出处理缺陷的装置,所述被插装方法列表通过对所述待测程序进行插装处理时输出得到。
本发明的技术效果如下:本发明通过可疑异常触发测试的过滤,大大缩减了异常抛出处理缺陷定位范围,从而大大提高定位效率。
具体实施方式
下面结合对本发明做进一步详细说明。
本发明的一种检测并定位异常抛出处理缺陷的方法包括如下步骤:插装处理步骤、异常类型提取步骤、可疑异常触发测试步骤和上下文组合异常触发测试步骤。前述获取待测程序和测试脚本的步骤S1表示了本发明的输入为待测程序和测试脚本。插装处理步骤、异常类型提取步骤、可疑异常触发测试步骤和上下文组合异常触发测试步骤分别对应前述步骤S2、S3、S4和S5。
测试脚本用于对待测程序进行测试。待测程序能够在测试脚本的控制下被机器执行。本领域技术人员理解,一般来说,自动化测试中,测试脚本通常对应一组测试用例,测试脚本对该组测试用例中每个测试用例进行测试需要分别执行一次待测程序,由此该测试脚本可能需要多次执行待测程序。为便于说明,本实施例中,所输入的测试脚本是针对一个测试用例的测试,由此,每次通过测试脚本的控制执行待测程序时,待测程序只执行一次,由此,也可以说明该测试脚本对应了该待测程序的某个特定的程序路径,并且,每次执行待测程序时,测试脚本完成待测程序测试环境重置,使得所述待测程序每次执行测试环境相同。但本领域技术人员可以理解,本发明在实际应用中,所输入的测试脚本也可以对应多个测试用例组成的测试用例组。此外,需要说明的是,为便于说明,本实施例中,待测程序按照测试脚本的控制所完成的执行过程未有异常抛出。由此可以保证在后续的测试过程中,待测程序抛出的异常是本发明的方法所控制的,而不是待测程序本身的原因造成。本领域技术人员理解,本发明在实际应用中,待测程序按照测试脚本的控制所完成的执行过程也可以抛出异常。
本实施例待测程序是安卓应用程序包APK文件。本领域技术人员理解,APK文件是一个包含有Java class文件和资源文件的压缩包。其中Java class文件包含有程序指令集。本领域技术人员理解,本发明在实际应用中,待测程序也可以是其他语言的程序,可以是源程序,也可以是编译后的中间代码程序或目标代码程序。
插装处理步骤,也就是前述步骤S2,对待测程序进行插装处理:根据预先设定的待插装方法列表,在待测程序中找到被插装方法,并在被插装方法前插入控制代码。所插入的控制代码在待测程序被机器执行后能够完成以下步骤S21至步骤S23:
S21:输出当前被插装方法信息和被插装方法调用信息。被插装方法信息包括被插装方法名称信息和被插装方法位置信息。被插装方法位置信息用以表示被插装方法在待测程序中的位置。被插装方法调用信息包括被插装方法调用堆栈信息和被插装方法调用计次信息。
S22:获取异常触发配置信息集合。异常触发配置信息集合是异常触发配置信息的集合。异常触发配置信息包括异常抛出匹配信息和所抛异常类型信息。异常抛出匹配信息包括:被插装方法名称信息、被插装方法位置信息、被插装方法调用信息。
S23:将异常触发配置信息集合的各个异常触发配置信息中的异常抛出匹配信息与当前被插装方法信息和被插装方法调用信息进行匹配,若存在匹配的异常触发配置信息,则根据该异异常触发配置信息中的所抛异常类型信息抛出相应的异常。
下述是一段插装的伪代码示例:
上述示例的伪代码中,方法A()是待测程序中被插装方法,方法A()之前的代码均为所插入的控制代码。方法isExecuteControlCode被执行时,通过读取测试配置信息判断是否执行控制代码。nameMethod是被插装方法A()的完全名称。nameMethod在插入控制代码时确定。aClass表示被插装方法所在的方法或包,比如java.io。fileName是该被插装方法A()所在文件的文件名,该文件名在插入控制代码时确定。lineMethod是被插装方法A()在所在文件插装前的行号,该行号在插入控制代码时确定。counter是一个全局计数器,用于表示被插装方法调用计次信息。方法getStackTrace被执行时,返回当前调用堆栈信息输出至stackInfo,该当前调用堆栈信息也就是被插装方法调用堆栈信息。也就是,stackInfo是被插装方法调用堆栈信息。方法printMethodCallInfo被执行时,输出当前被插装方法信息和被插装方法调用信息,其中的参数nameMethod,fileName,lineMethod组成了前述的被插装方法信息,其中nameMethod是被插装方法名称信息,fileName和lineMethod组成被插装方法位置信息,被插装方法调用信息包括被插装方法调用堆栈信息stackInfo和被插装方法调用计次信息counter。前述步骤S21通过方法printMethodCallInfo的执行实现。方法getThrowException被执行时,读取测试配置信息中的异常触发配置信息集合,并将该异常触发配置信息集合的各个异常触发配置信息中的异常抛出匹配信息逐个与方法getThrowException参数中的被插装方法信息和被插装方法调用信息进行匹配,如果存在匹配的异常触发配置信息,则生成该匹配的异常触发配置信息中所抛异常类型信息所对应的异常,并返回该异常,如果不存在匹配的异常触发配置信息,则返回空。如果返回的异常变量e不为空,则通过执行方法printLogThrowsException输出该异常e和并通过执行Throwe抛出该异常,也就是前述步骤S22和步骤S23。本实施例上述插装的伪代码示例中,方法printMethodCallInfo和方法printLogThrowsException所输出的内容均被输出至指定的文件中。
上述步骤中,待插装方法列表用于确定哪些方法需要插入控制代码。本实施例中,待测程序是APK文件,由此,待插装方法列表由一些与外部资源相关的方法所在的包所确定。这些与与外部资源相关的方法所在的包定义如下:
java.io
java.net
java.nio
java.util.zip
javax,net
java.crypto
java.security
android.net
android.database
android.location
android.bluetooth
android.hardware
android.nfc
上述Java包所包含的所有方法构成本实施例的待插装方法列表。本领域技术人员理解上述待插装方法列表还可以根据需要确定,特别是,若待测程序为其他语言时,需要根据其对应的语言所确定。
此外,由于本实施例所用的待测程序为APK文件包,因此在插入控制代码时,首先需要将APK文件包解压得到Java Class文件,然后对Java Class文件进行反编译。再然后对反编译后的Java源代码进行代码分析找出待插装方法列表中的被插装方法,插入控制代码,完成后再进行编译将Java源代码编译成Java Class文件,最后再打包成插装后的APK文件作为插装后的待测程序。Java语言中的编译和反编译以及进行代码分析插入控制代码为本领域技术人员所熟悉,其具体实现本说明书不再赘述。
异常类型提取步骤,也就是前述步骤S3,获取被插装方法列表,并根据被插装方法列表中的被插装方法名称信息所对应的被插装方法所能抛出的异常类型集合,组成可能触发的异常类型集合;被插装方法列表是被插装方法信息组成的列表;可能触发的异常类型集合为异常类型的集合。
获取被插装方法列表的步骤简单地,可以通过前述插装过程的输出直接获取。但根据本发明前述,待测程序在测试脚本的控制下执行,因此,测试脚本所对应的是待测程序的某条程序路径,该程序路径上的被插装方法仅仅是步骤S2所进行插装的被插装方法的少部分。而且该程序路径上的被插装方法相互之间存在调用关系次序之别。为此,本实施例另一优选的实施方式是通过执行插装后的待测程序收集所插入的控制代码所输出的被插装方法信息得到。以前述插装的伪代码示例为例,也就是,通过方法printMethodCallInfo的输出,从输出文件中手机被插装方法信息得到被插装方法列表。由此,该被插装方法列表也是测试脚本所对应的待测程序某条程序路径上被插装方法的顺序表。比如某被插装方法列表如下:{1.FA,2.FB,3.FC,4.FB,5.FC,6.FB,7.FC,8.FB,9.FC,10.FD}。该被插装方法列表省略了被插装方法位置信息。上述被插装方法列表中,FA,FB,FC,FD分别为被插装方法名称,该方法名称前面的1至10的序号表示被插装方法调用计次信息,参照前述插装的伪代码示例的计数器counter。上述被插装方法的列表中,2.FB,3.FC,4.FB,5.FC,6.FB,7.FC,8.FB,9.FC是循环路径上对被插装方法FB,FC的循环调用形成。显而易见地,直接通过插装过程输出的被插装方法列表不可能存在上述效果。当然,本领域技术人员理解,上述被插装方法列表若不考虑路径过程,不考虑被插装方法调用计次信息,也可以根据被插装方法位置信息进行重复性判断,由此最后得到的被插装方法列表如下:{FA,FB,FC,FD}。
“根据被插装方法列表中的被插装方法名称信息所对应的被插装方法所能抛出的异常类型集合”中,由于被插装方法名称是确定的,并且是现有已知的方法,因此,其对应的所能抛出的异常类型的集合也是确定的。具体到本实施例以APK文件作为待测程序中,其所用的语言为Java,而在Java中,在方法签名中用throws定义了所能抛出的异常类型的集合。由此可以通过方法签名中的关键词throws搜索得到相应的所能抛出的异常类型的集合。
“组成可能触发的异常类型集合”也就是将各个被插装方法所对应的所能抛出的异常类型的集合进行集合之间的“或”合并操作处理。
可疑异常触发测试步骤,也就是,前述步骤S4,对可能触发的异常类型集合中的各个异常类型逐个进行对异常类型的可疑异常触发测试。也就是,对可能触发的异常类型集合进行遍历,对遍历过程中的每个异常类型进行可疑异常触发测试。也就是,可疑异常触发测试输入的是某个异常类型,而可疑异常触发测试步骤则是可能触发的异常类型集合中的各个异常类型执行可疑异常触发测试的组合。
在可疑异常触发测试中,根据对应异常类型动态构建的异常触发配置信息集合执行插装后的待测程序,然后根据待测程序的运行结果和控制代码的输出生成可疑方法异常信息,进而组成疑方法异常信息集合。可疑方法异常信息包括被插装方法信息、被插装方法调用信息以及所抛异常类型信息。可疑异常触发测试具体过程如下:
步骤S41:按照被插装方法列表中每个能够触发异常类型所对应的异常的被插装方法都触发异常类型所对应的异常的策略,生成异常触发配置信息集合。以前述被插装方法列表{1.FA,2.FB,3.FC,4.FB,5.FC,6.FB,7.FC,8.FB,9.FC,10.FD}为例,其中的被插装方法FB和FC可能触发异常类型为TE的异常抛出,而被插装方法FA和FD不会触发异常类型TE的异常抛出,此时,按照步骤41的策略,也就是将2.FB,3.FC,4.FB,5.FC,6.FB,7.FC,8.FB,9.FC中每个被插装方法构建相应的抛出异常类型为TE的异常的异常触发配置信息,组成异常触发配置信息集合,然后将该异常触发配置信息集合放入测试配置信息中。本实施例中,测试配置信息是一个XML格式的文件。由此在测试脚本的控制下执行待测程序时,通过插入的控制代码,读取测试配置信息中的异常触发配置信息集合使得插装后待测程序执行时,待测程序执行至在2.FB,3.FC,4.FB,5.FC,6.FB,7.FC,8.FB,9.FC时,均抛出异常类型为TE的异常。
步骤S42:根据异常触发配置信息集合执行插装后的待测程序,若待测程序运行出现错误,则提取该次执行插装后的待测程序的控制代码的输出中最后触发异常的被插装方法的被插装方法信息、被插装方法调用信息以及所抛异常类型信息组成可疑方法异常信息。以前述被插装方法列表{1.FA,2.FB,3.FC,4.FB,5.FC,6.FB,7.FC,8.FB,9.FC,10.FD}为例,待测程序运行至6.FB时,在控制代码的控制下抛出异常类型为TE的异常后,待测程序出现崩溃的错误,则将6.FB对应的被插装方法信息和被插装方法调用信息以及异常类型TE组成可疑方法异常信息。
步骤S43:按照被插装方法列表中每个未在步骤S42中抛出过异常并且能够抛出异常类型所对应的异常的被插装方法都触发异常类型所对应的异常的策略,重新生成异常触发配置信息集合后返回步骤S42,直到被插装方法列表中每个能够触发异常类型所对应的异常的被插装方法在步骤42中都被触发抛出过异常。以前述被插装方法列表{1.FA,2.FB,3.FC,4.FB,5.FC,6.FB,7.FC,8.FB,9.FC,10.FD}为例,比如待测程序运行至2.FB时,因为抛出异常,导致后续3.FC,4.FB,5.FC,6.FB,7.FC,8.FB,9.FC,10.FD的被插装方法未能执行,也就是,3.FC,4.FB,5.FC,6.FB,7.FC,8.FB,9.FC中的异常类型为TE的异常未在步骤S42中抛出过,则为3.FC,4.FB,5.FC,6.FB,7.FC,8.FB,9.FC分别构建抛出异常类型为TE的异常的异常触发配置信息,组成异常触发配置信息集合。而2.FB因为已经抛出过异常类型为TE的异常,因此不构建异常触发配置信息。由此,在后续的步骤S42中,待测程序执行至步骤2.FB,因不抛出异常,被插装方法3.FC必然可达。若待测程序运行至2.FB时,因为抛出的异常被及时处理,后续3.FC,4.FB,5.FC,6.FB,7.FC,8.FB,9.FC均抛出异常类型为TE的异常,此时,只需要执行一次插装后的待测程序,即可完成各个被插装方法的遍历。
上下文组合异常触发测试步骤,也就是前述步骤S5,对可疑方法异常信息集合中的各个可疑方法异常信息逐个进行对可疑方法异常信息的上下文组合异常触发测试。也就是,对可疑方法异常信息集合进行遍历,对遍历过程中的每个可疑方法异常信息进行上下文组合异常触发测试。也就是,上下文组合异常触发测试输入的是某个可疑方法异常信息,而上下文组合异常触发测试步骤则是可疑方法异常信息集合中的各个可疑方法异常信息执行上下文组合异常触发测试的组合。
上下文组合异常触发测试中,根据可疑方法异常信息中的被插装方法位置信息,获取上下文关联的连续K个被插装方法,再根据连续K个被插装方法是否抛出可疑方法异常信息中所抛异常类型信息所对应的异常,构建出2K个异常触发配置信息集合,然后分别根据2K个异常触发配置信息集合执行插装后的待测程序,若待测程序运行出现错误,则根据待测程序运行的错误信息以及控制代码的输出生成异常抛出缺陷定位信息。异常抛出缺陷定位信息包括:被插装方法信息、对应的异常触发配置信息集合以及待测程序运行的错误信息。最终输出的异常抛出缺陷定位信息集合也就是本发明方法的输出。以前述被插装方法列表{1.FA,2.FB,3.FC,4.FB,5.FC,6.FB,7.FC,8.FB,9.FC,10.FD}为例,可疑方法异常信息所对应的被插装方法为6.FB,异常类型为TE,假设K为5,获取上下文关联的连续K个被插装方法,也就是在序列{1.FA,2.FB,3.FC,4.FB,5.FC,6.FB,7.FC,8.FB,9.FC,10.FD}中连续的5个被插装方法4.FB,5.FC,6.FB,7.FC,8.FB。5个被插装方法4.FB,5.FC,6.FB,7.FC,8.FB是否抛出异常共有25种组合,每种组合构建一个异常触发配置信息集合,意味着可以构建出2K个异常触发配置信息集合,但就实际应用而言,只需要2K-1个异常触发配置信息集合即可,因为其中所有被插装方法均不抛出异常无需测试,也无需构建相应的异常触发配置信息集合。
需要说明的是,本发明所指执行待测程序或执行插装后的待测程序均在测试脚本的控制下进行。根据异常触发配置信息集合执行插装后的待测程序是指将异常触发配置信息集合放入测试配置信息后执行插装后的待测程序,执行插装后的待测程序时,通过控制代码执行,读取测试配置信息中的异常触发配置信息集合,并进而根据测试配置信息中相关参数以及异常触发配置信息集合中的异常触发配置信息的匹配判断是否在被插装方法处抛出异常以及确定抛出何种异常。
Claims (6)
1.一种检测并定位异常抛出处理缺陷的方法,其特征在于,该方法包括如下步骤:
S1:获取待测程序和测试脚本;所述测试脚本用于对待测程序进行测试;所述待测程序能够在所述测试脚本的控制下被机器执行;
S2:对所述待测程序进行插装处理:根据预先设定的待插装方法列表,在所述待测程序中找到被插装方法,并在所述被插装方法前插入控制代码;所插入的控制代码在所述待测程序被机器执行后能够完成以下步骤:
S21:输出当前被插装方法信息和被插装方法调用信息;所述被插装方法信息包括被插装方法名称信息和被插装方法位置信息;所述被插装方法位置信息用以表示所述被插装方法在待测程序中的位置;所述被插装方法调用信息包括被插装方法调用堆栈信息和被插装方法调用计次信息;
S22:获取异常触发配置信息集合;所述异常触发配置信息集合是异常触发配置信息的集合;所述异常触发配置信息包括异常抛出匹配信息和所抛异常类型信息;所述异常抛出匹配信息包括:被插装方法名称信息、被插装方法位置信息、被插装方法调用信息;
S23:将异常触发配置信息集合的各个异常触发配置信息中的异常抛出匹配信息与当前被插装方法信息和被插装方法调用信息进行匹配,若存在匹配的异常触发配置信息,则根据该异异常触发配置信息中的所抛异常类型信息抛出相应的异常;
S3:获取被插装方法列表,并根据被插装方法列表中的被插装方法名称信息所对应的被插装方法所能抛出的异常类型集合,组成可能触发的异常类型集合;所述被插装方法列表是所述被插装方法信息组成的列表;所述可能触发的异常类型集合为异常类型的集合;
S4:对所述可能触发的异常类型集合中的各个异常类型逐个进行对异常类型的可疑异常触发测试;在所述可疑异常触发测试中,根据对应异常类型动态构建的异常触发配置信息集合执行插装后的待测程序,然后根据待测程序的运行结果和所述控制代码的输出生成可疑方法异常信息,进而组成疑方法异常信息集合;所述可疑方法异常信息包括被插装方法信息、被插装方法调用信息以及所抛异常类型信息;
S5:对所述可疑方法异常信息集合中的各个可疑方法异常信息逐个进行对所述可疑方法异常信息的上下文组合异常触发测试;所述上下文组合异常触发测试中,根据所述可疑方法异常信息中的被插装方法位置信息,获取上下文关联的连续K个被插装方法,再根据所述连续K个被插装方法是否抛出所述可疑方法异常信息中所抛异常类型信息所对应的异常,构建出2K个异常触发配置信息集合,然后分别根据所述2K个异常触发配置信息集合执行插装后的待测程序,若待测程序运行出现错误,则根据待测程序运行的错误信息以及所述控制代码的输出生成异常抛出缺陷定位信息;所述异常抛出缺陷定位信息包括:被插装方法信息、对应的异常触发配置信息集合以及待测程序运行的错误信息;其中,K为预先设定的常数;
所述对异常类型的所述可疑异常触发测试包括以下步骤:
S41:按照所述被插装方法列表中每个能够触发所述异常类型所对应的异常的被插装方法都触发所述异常类型所对应的异常的策略,生成异常触发配置信息集合;
S42:根据异常触发配置信息集合执行插装后的待测程序,若待测程序运行出现错误,则提取该次执行插装后的待测程序的所述控制代码的输出中最后触发异常的被插装方法的被插装方法信息、被插装方法调用信息以及所抛异常类型信息组成所述可疑方法异常信息;
S43:按照所述被插装方法列表中每个未在步骤S42中抛出过异常并且能够抛出所述异常类型所对应的异常的被插装方法都触发所述异常类型所对应的异常的策略,重新生成异常触发配置信息集合后返回步骤S42,直到所述被插装方法列表中每个能够触发所述异常类型所对应的异常的被插装方法在步骤42中都被触发抛出过异常;
所述执行插装后的待测程序在所述测试脚本的控制下执行。
2.如权利要求1所述的检测并定位异常抛出处理缺陷的方法,其特征在于,所述被插装方法列表通过执行插装后的待测程序收集所插入的控制代码所输出的被插装方法信息得到。
3.如权利要求1所述的检测并定位异常抛出处理缺陷的方法,其特征在于,所述被插装方法列表通过对所述待测程序进行插装处理时输出得到。
4.一种检测并定位异常抛出处理缺陷的装置,其特征在于,该装置包括如下模块:
M1,用于:获取待测程序和测试脚本;所述测试脚本用于对待测程序进行测试;所述待测程序能够在所述测试脚本的控制下被机器执行;
M2,用于:对所述待测程序进行插装处理:根据预先设定的待插装方法列表,在所述待测程序中找到被插装方法,并在所述被插装方法前插入控制代码;所插入的控制代码在所述待测程序被机器执行后能够完成以下步骤:
S21:输出当前被插装方法信息和被插装方法调用信息;所述被插装方法信息包括被插装方法名称信息和被插装方法位置信息;所述被插装方法位置信息用以表示所述被插装方法在待测程序中的位置;所述被插装方法调用信息包括被插装方法调用堆栈信息和被插装方法调用计次信息;
S22:获取异常触发配置信息集合;所述异常触发配置信息集合是异常触发配置信息的集合;所述异常触发配置信息包括异常抛出匹配信息和所抛异常类型信息;所述异常抛出匹配信息包括:被插装方法名称信息、被插装方法位置信息、被插装方法调用信息;
S23:将异常触发配置信息集合的各个异常触发配置信息中的异常抛出匹配信息与当前被插装方法信息和被插装方法调用信息进行匹配,若存在匹配的异常触发配置信息,则根据该异异常触发配置信息中的所抛异常类型信息抛出相应的异常;
M3,用于:获取被插装方法列表,并根据被插装方法列表中的被插装方法名称信息所对应的被插装方法所能抛出的异常类型集合,组成可能触发的异常类型集合;所述被插装方法列表是所述被插装方法信息组成的列表;所述可能触发的异常类型集合为异常类型的集合;
M4,用于:对所述可能触发的异常类型集合中的各个异常类型逐个进行对异常类型的可疑异常触发测试;在所述可疑异常触发测试中,根据对应异常类型动态构建的异常触发配置信息集合执行插装后的待测程序,然后根据待测程序的运行结果和所述控制代码的输出生成可疑方法异常信息,进而组成疑方法异常信息集合;所述可疑方法异常信息包括被插装方法信息、被插装方法调用信息以及所抛异常类型信息;
M5,用于:对所述可疑方法异常信息集合中的各个可疑方法异常信息逐个进行对所述可疑方法异常信息的上下文组合异常触发测试;所述上下文组合异常触发测试中,根据所述可疑方法异常信息中的被插装方法位置信息,获取上下文关联的连续K个被插装方法,再根据所述连续K个被插装方法是否抛出所述可疑方法异常信息中所抛异常类型信息所对应的异常,构建出2K个异常触发配置信息集合,然后分别根据所述2K个异常触发配置信息集合执行插装后的待测程序,若待测程序运行出现错误,则根据待测程序运行的错误信息以及所述控制代码的输出生成异常抛出缺陷定位信息;所述异常抛出缺陷定位信息包括:被插装方法信息、对应的异常触发配置信息集合以及待测程序运行的错误信息;其中,K为预先设定的常数;所述对异常类型的所述可疑异常触发测试包括以下模块:
M41,用于:按照所述被插装方法列表中每个能够触发所述异常类型所对应的异常的被插装方法都触发所述异常类型所对应的异常的策略,生成异常触发配置信息集合;
M42,用于:根据异常触发配置信息集合执行插装后的待测程序,若待测程序运行出现错误,则提取该次执行插装后的待测程序的所述控制代码的输出中最后触发异常的被插装方法的被插装方法信息、被插装方法调用信息以及所抛异常类型信息组成所述可疑方法异常信息;
M43,用于:按照所述被插装方法列表中每个未在模块M42中抛出过异常并且能够抛出所述异常类型所对应的异常的被插装方法都触发所述异常类型所对应的异常的策略,重新生成异常触发配置信息集合后返回模块M42,直到所述被插装方法列表中每个能够触发所述异常类型所对应的异常的被插装方法在模块M42中都被触发抛出过异常;
所述执行插装后的待测程序在所述测试脚本的控制下执行。
5.如权利要求4所述的检测并定位异常抛出处理缺陷的装置,其特征在于,所述被插装方法列表通过执行插装后的待测程序收集所插入的控制代码所输出的被插装方法信息得到。
6.如权利要求4所述的检测并定位异常抛出处理缺陷的装置,其特征在于,所述被插装方法列表通过对所述待测程序进行插装处理时输出得到。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911352967.5A CN111061644B (zh) | 2019-12-25 | 2019-12-25 | 一种检测并定位异常抛出处理缺陷的方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911352967.5A CN111061644B (zh) | 2019-12-25 | 2019-12-25 | 一种检测并定位异常抛出处理缺陷的方法和装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111061644A true CN111061644A (zh) | 2020-04-24 |
CN111061644B CN111061644B (zh) | 2021-04-30 |
Family
ID=70303653
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201911352967.5A Active CN111061644B (zh) | 2019-12-25 | 2019-12-25 | 一种检测并定位异常抛出处理缺陷的方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111061644B (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113626332A (zh) * | 2021-08-13 | 2021-11-09 | 北京百度网讯科技有限公司 | 调试方法、装置、设备、存储介质以及计算机程序产品 |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101847122A (zh) * | 2010-06-01 | 2010-09-29 | 北京邮电大学 | 应用异常控制流集的软件测试方法及系统 |
US20130198727A1 (en) * | 2012-01-26 | 2013-08-01 | Joseph D. Darcy | Error Propagation |
CN105701016A (zh) * | 2016-03-03 | 2016-06-22 | 南京大学 | 一种针对异常处理代码的测试方法 |
CN106201892A (zh) * | 2016-07-20 | 2016-12-07 | 中国航空工业集团公司航空动力控制系统研究所 | 用于嵌入式软件的异常中断源定位检测方法 |
CN106484425A (zh) * | 2016-10-19 | 2017-03-08 | 济南浪潮高新科技投资发展有限公司 | 一种基于策略配置的异常处理方法 |
CN109240886A (zh) * | 2018-09-03 | 2019-01-18 | 平安科技(深圳)有限公司 | 异常处理方法、装置、计算机设备以及存储介质 |
CN110543420A (zh) * | 2019-08-30 | 2019-12-06 | 苏州浪潮智能科技有限公司 | 一种软件测试方法、系统、终端及存储介质 |
-
2019
- 2019-12-25 CN CN201911352967.5A patent/CN111061644B/zh active Active
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101847122A (zh) * | 2010-06-01 | 2010-09-29 | 北京邮电大学 | 应用异常控制流集的软件测试方法及系统 |
US20130198727A1 (en) * | 2012-01-26 | 2013-08-01 | Joseph D. Darcy | Error Propagation |
CN105701016A (zh) * | 2016-03-03 | 2016-06-22 | 南京大学 | 一种针对异常处理代码的测试方法 |
CN106201892A (zh) * | 2016-07-20 | 2016-12-07 | 中国航空工业集团公司航空动力控制系统研究所 | 用于嵌入式软件的异常中断源定位检测方法 |
CN106484425A (zh) * | 2016-10-19 | 2017-03-08 | 济南浪潮高新科技投资发展有限公司 | 一种基于策略配置的异常处理方法 |
CN109240886A (zh) * | 2018-09-03 | 2019-01-18 | 平安科技(深圳)有限公司 | 异常处理方法、装置、计算机设备以及存储介质 |
CN110543420A (zh) * | 2019-08-30 | 2019-12-06 | 苏州浪潮智能科技有限公司 | 一种软件测试方法、系统、终端及存储介质 |
Non-Patent Citations (1)
Title |
---|
王铮然: "Java程序异常处理代码测试相关技术研究", 《中国优秀硕士学位论文全文数据库 信息科技辑》 * |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113626332A (zh) * | 2021-08-13 | 2021-11-09 | 北京百度网讯科技有限公司 | 调试方法、装置、设备、存储介质以及计算机程序产品 |
Also Published As
Publication number | Publication date |
---|---|
CN111061644B (zh) | 2021-04-30 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10621362B2 (en) | Method for automatically detecting security vulnerability based on hybrid fuzzing, and apparatus thereof | |
US8776029B2 (en) | System and method of software execution path identification | |
JP5430570B2 (ja) | システムコールカバレッジ基準による試験スイート削減のための方法 | |
US7503037B2 (en) | System and method for identifying bugs in software source code, using information from code coverage tools and source control tools to determine bugs introduced within a time or edit interval | |
CN105630463B (zh) | 用于检测jar包冲突的方法及装置 | |
US9274930B2 (en) | Debugging system using static analysis | |
US20060253837A1 (en) | Using a call stack hash to record the state of a process | |
CN110704306B (zh) | 测试中的断言处理方法、装置、设备及存储介质 | |
US20200143061A1 (en) | Method and apparatus for tracking location of input data that causes binary vulnerability | |
KR102269286B1 (ko) | 어노테이션 자동 진단 시스템 | |
CN111884876A (zh) | 一种网络协议的协议类型检测方法、装置、设备及介质 | |
CN110928777A (zh) | 测试用例的处理方法、装置、设备及存储介质 | |
CN110851352A (zh) | 一种模糊测试系统及终端设备 | |
CN111061644B (zh) | 一种检测并定位异常抛出处理缺陷的方法和装置 | |
Lee et al. | POWER: Program option-aware fuzzer for high bug detection ability | |
Mahmud et al. | Api change impact analysis for android apps | |
US7904754B2 (en) | Systems and methods for automated determination of out of memory handling | |
Abou Assi et al. | Substate profiling for effective test suite reduction | |
KR101940486B1 (ko) | 저비용 오류 기반 프로그램 테스트 장치 및 그 방법 | |
Singhal et al. | A critical review of various testing techniques in aspect-oriented software systems | |
CN110795142B (zh) | 一种配置文件的生成方法及装置 | |
KR100924519B1 (ko) | 소프트웨어 보안 테스팅을 수행하기 위한 알려지지 않은파일 포맷 분석 시스템 및 방법 | |
CN114077545A (zh) | 验证数据的获取方法、装置、设备及可读存储介质 | |
CN111367796B (zh) | 应用程序调试方法及装置 | |
Kallingal Joshy et al. | FuzzerAid: Grouping Fuzzed Crashes Based On Fault Signatures |
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 |