CN112084104A - 一种异常测试方法和装置 - Google Patents
一种异常测试方法和装置 Download PDFInfo
- Publication number
- CN112084104A CN112084104A CN201910507435.8A CN201910507435A CN112084104A CN 112084104 A CN112084104 A CN 112084104A CN 201910507435 A CN201910507435 A CN 201910507435A CN 112084104 A CN112084104 A CN 112084104A
- Authority
- CN
- China
- Prior art keywords
- exception
- code
- function
- implicit
- software
- 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.)
- Pending
Links
Images
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
- G06F11/3672—Test management
- G06F11/3684—Test 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
本申请实施例公开了一种异常测试方法和装置,针对需要测试异常的待测软件,可以获取待测软件的代码,通过对所述代码进行代码解析,获取所述代码对应的显式异常,通过对所述代码进行静态扫描,获取代码对应的隐式异常。由于显式异常可以标识代码在语法逻辑层面所体现的函数异常,隐式异常可以标识代码在运行时的函数异常,故可以精准的确定出该代码可能出现的各类潜在异常,根据显式异常和隐式异常得到函数异常库,函数异常库包括函数对应的异常信息,异常信息用于标识所对应函数在目标条件下对应的异常种类;根据函数异常库所标识的异常,对待测软件进行异常测试,所测试的异常覆盖全面,减少了软件上线后出现bug的情况。
Description
技术领域
本申请涉及数据处理领域,特别是涉及一种异常测试方法和装置。
背景技术
在软件研发中,需要对可能出现的异常进行相应的处理,例如防御性处理,使得用户在使用软件时,即使软件发生了异常,也会通过防御性处理等方式尽可能的避免用户数据因此出现损失。
故软件研发过程中的异常测试需要测试软件在不同异常情况下的响应。所测试的异常情况需要尽可能的全面,从而软件在上线后,针对各类异常情况均能合理响应,避免软件出现崩溃而丢失用户数据。
传统的异常测试方式主要还是靠人工分析潜在的异常情况,并以此进行异常测试。这导致了异常测试效果非常依赖测试人员的个人经验,测试中异常覆盖不全的可能性非常高,导致软件上线后bug较多。
发明内容
为了解决上述技术问题,本申请提供了一种异常测试方法和装置,使得所测试的异常覆盖全面,减少了软件上线后出现bug的情况。
本申请实施例公开了如下技术方案:
第一方面,本申请实施例提供了一种异常测试方法,所述方法包括:
获取待测软件的代码;
通过对所述代码进行代码解析,获取所述代码对应的显式异常;所述显式异常用于标识所述代码在语法逻辑层面所体现的函数异常;
通过对所述代码进行静态扫描,获取所述代码对应的隐式异常;所述隐式异常用于标识所述代码在运行时的函数异常;
根据所述显式异常和隐式异常得到函数异常库,所述函数异常库包括所述代码中函数对应的异常信息,所述异常信息用于标识所对应函数在目标条件下对应的异常种类;
根据所述函数异常库所标识的异常,对所述待测软件进行异常测试。
第二方面,本申请实施例提供了一种异常测试装置,所述装置包括第一获取单元、第二获取单元、第三获取单元、生成单元和测试单元:
所述第一获取单元,用于获取待测软件的代码;
所述第二获取单元,用于通过对所述代码进行代码解析,获取所述代码对应的显式异常;所述显式异常用于标识所述代码在语法逻辑层面所体现的函数异常;
所述第三获取单元,用于通过对所述代码进行静态扫描,获取所述代码对应的隐式异常;所述隐式异常用于标识所述代码在运行时的函数异常;
所述生成单元,用于根据所述显式异常和隐式异常得到函数异常库,所述函数异常库包括所述代码中函数对应的异常信息,所述异常信息用于标识所对应函数在目标条件下对应的异常种类;
所述测试单元,用于根据所述函数异常库所标识的异常,对所述待测软件进行异常测试。
第三方面,本申请实施例提供了一种用于异常测试设备,所述设备包括处理器以及存储器:
所述存储器用于存储程序代码,并将所述程序代码传输给所述处理器;
所述处理器用于根据所述程序代码中的指令执行如第一方面所述的异常测试方法。
第四方面,本申请实施例提供了一种计算机可读存储介质,所述计算机可读存储介质用于存储程序代码,所述程序代码用于执行如第一方面所述的异常测试方法。
由上述技术方案可以看出,针对需要测试异常的待测软件,可以获取待测软件的代码,通过对所述代码进行代码解析,获取所述代码对应的显式异常,通过对所述代码进行静态扫描,获取所述代码对应的隐式异常。由于显式异常可以标识所述代码在语法逻辑层面所体现的函数异常,隐式异常可以标识所述代码在运行时的函数异常,故可以精准的确定出该代码可能出现的各类潜在异常,根据所述显式异常和隐式异常得到函数异常库,所述函数异常库包括函数对应的异常信息,所述异常信息用于标识所对应函数在目标条件下对应的异常种类;根据所述函数异常库所标识的异常,对所述待测软件进行异常测试,所测试的异常覆盖全面,减少了软件上线后出现bug的情况。
附图说明
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1为本申请实施例提供的一种异常测试方法的应用场景示意图;
图2为一种JAVA开发语言对应的异常分类示意图;
图3为本申请实施例提供的一种异常测试方法流程图;
图4为本申请实施例提供的一种读函数的API文档示意图;
图5为本申请实施例提供的一种异常测试系统的结构示意图;
图6为本申请实施例提供的一种异常测试装置的结构图;
图7为本申请实施例提供的一种用于异常测试的设备的结构图;
图8为本申请实施例提供的一种服务器的结构图。
具体实施方式
下面结合附图,对本申请的实施例进行描述。
目前,主要通过人工分析软件代码中潜在的异常情况来进行异常测试。由于该种异常测试方式的效果非常依赖测试人员的个人经验,由此使得测试中异常覆盖不全的可能性非常高,导致软件上线后bug较多。
为此,本申请实施例提供了一种异常测试方法,其核心思想为:对待测软件的代码分别进行代码解析和静态扫描,以获得所述代码对应的显式异常和隐式异常,根据获取的显式异常和隐式异常得到函数异常库,从而基于得到的函数异常库进行所述代码的异常测试。由于代码中的异常主要包括代码在语法逻辑层面以及在运行时所体现的函数异常,即:显式异常和隐式异常,因此,通过该方法,可以精准的确定出该代码可能出现的各类潜在异常,从而,基于包括这些潜在异常的函数异常库以对该待测软件代码进行异常测试,可以保证所测试的异常覆盖全面,减少了软件上线后出现bug的情况。
首先,对本申请实施例的应用场景进行介绍。该方法可以应用到终端设备中,终端设备例如可以是智能终端、计算机、个人数字助理(Personal Digital Assistant,简称PDA)、平板电脑等设备。
该异常测试方法还可以应用到服务器中,所述服务器可以是仅用于异常测试的专用服务器,所述服务器也可以是还包含其它数据处理功能的公用服务器,本申请实施例不做限定。
为了便于理解本申请的技术方案,下面结合实际应用场景,以服务器为例对本申请实施例提供的异常测试方法进行介绍。
参见图1,图1为本申请实施例提供的一种异常测试方法的应用场景示意图。该应用场景中包括服务器101,所述服务器可以获取待测软件的代码。其中,所述待测软件可以是需要进行异常测试的软件。
可以理解,开发人员在开发所述待测软件时,通常会在该待测软件的代码中添加可能出现的显式异常的声明,其中,所述显式异常可以用于表示该代码在语法逻辑层面体现的函数异常,所述函数异常可以是执行函数语句时引发的异常。基于此,在获取待测软件的代码后,可以通过对所述代码进行代码解析,以获取该代码对应的显式异常。
此外,针对于所述待测软件的代码来说,在运行该代码的过程中还有可能发生异常,可以将所述代码在运行时可能出现的函数异常记为隐式异常。比如所述隐式异常可以是空指针异常、指针越界异常等。由于在代码中可能不包括这部分隐式异常的声明,因此,针对于所述待测软件的代码,可以对其进行静态扫描,以获取所述代码对应的隐式异常,即在代码运行时可能出现的函数异常。
在获取显式异常和隐式异常之后,可以根据这些异常得到函数异常库,其中,该函数异常库中包括了所述代码中的函数对应的异常信息,所述异常信息可以用于标识所对应函数在目标条件下对应的异常种类。下面对函数对应的异常信息进行举例说明:假设在基于第三方系统X运行代码中的函数语句A时,会发生异常a这一种类的异常。由此,该函数语句A对应的异常信息可以用于标识:该函数A在基于第三方系统X运行代码的条件(目标条件)下对应的异常种类a。
从而,可以基于该函数异常库中标识的异常,以对所述待测软件进行异常测试。
由此可见,该方法针对需要测试异常的待测软件,可以对其代码进行代码解析以及静态扫描,以分别获取所述代码对应的显式异常和隐式异常。由于显式异常可以标识所述代码在语法逻辑层面所体现的函数异常,隐式异常可以标识所述代码在运行时的函数异常,故可以精准的确定出该代码可能出现的各类潜在异常。根据所述显式异常和隐式异常得到函数异常库,根据所述函数异常库所标识的异常,对所述待测软件进行异常测试,所测试的异常覆盖全面,减少了软件上线后出现bug的情况。
需要说明,本申请实施例不限定所述软件代码的语言开发方式,也就是说,针对于本申请实施例所提供的异常测试方法,它可以用于对由各种开发语言平台开发的软件代码进行异常测试。
接下来,将以JAVA开发语言所开发的待测软件的代码为例,并结合附图对本申请实施例提供的异常测试方法进行介绍。
首先,对JAVA开发语言对应的异常进行简要介绍。参见图2,该图示出了JAVA开发语言对应的异常分类示意图,如图2所示,任意一个对象(Object)可以对应有可抛出(Throwable)类,其中,所述可抛出类可以是JAVA异常类型的顶级父类。可抛出类可以包括异常和错误,所述异常可以分为检查型异常(Checked Exceptions)和非检查型异常(Unchecked Exceptions)。所述错误可以包括虚拟机错误(virtual machine error)、断言错误(assertion error)等。
其中,针对于检查型异常,需要在软件代码中必须包括显式的捕获(catch)异常或者重新抛出(throws)异常;而错误或者非检查型异常可以属于隐式异常(即在代码运行时可能出现的异常),其中,针对于隐式异常,可以不需要软件代码必须对其进行处理,在实际场景中,比如可以为隐式异常增加显式的捕捉代码,或者对其不做处理。需要说明,在待测软件的异常测试中,为了避免异常遗漏而引起线上bug,仍需将隐式异常考虑在内,以尽量覆盖所有的潜在异常。
下面对本申请实施例提供的异常测试方法进行介绍,参见图3,该图示出了本申请实施例提供的一种异常测试方法流程图,所述方法包括:
S301:获取待测软件的代码。
在本申请实施例中,针对于需要进行异常测试的待测软件,可以获取它的代码。
S302:通过对所述代码进行代码解析,获取所述代码对应的显式异常。
其中,所述显式异常可以用于标识所述代码在语法逻辑层面所体现的函数异常。在获取待测软件的代码后,可以对该代码进行代码解析,以获取该代码对应的显示异常。
S303:通过对所述代码进行静态扫描,获取所述代码对应的隐式异常。
其中,所述隐式异常可以是用于标识所述代码在运行时的函数异常。可以对该代码进行静态扫描,以获取该代码对应的隐式异常。
需要说明,本申请实施例不限定S302和S303的执行顺序,即:可以先执行S302,再执行S303;或者,先执行S303,再执行S302。
在具体实现中,可以通过调用代码扫描工具(如Coverity代码静态检测工具)来对待测软件的代码进行检测,进而从扫描结果中过滤出和隐式异常相关的信息。
S304:根据所述显式异常和隐式异常得到函数异常库。
在获取显式异常和隐式异常后,可以根据所述显式异常和隐式异常,以得到函数异常库。其中,所述函数异常库可以包括该代码中函数对应的异常信息,所述异常信息可以用于标识所对应函数在目标条件下对应的异常种类。
可以理解,对于函数异常库中的每个函数,它可以仅在某一目标条件对应一个异常种类,这样,该函数对应的异常信息可以用于标识该函数在该目标条件下对应的异常种类。此外,在一种可能的实现方式中,每个函数还可以在不同目标条件下对应于不同异常种类。这样,该函数对应的异常信息可以用于标识该函数在不同目标条件下对应的不同异常种类。
举例来说:函数异常库中包括函数B和函数C,其中,该函数B可以仅在目标条件b下对应异常种类b’。该函数C可以在目标条件c下对应异常种类c’,该函数C还可以在目标条件d下对应异常种类d’。由此,函数B对应的异常信息可以用于标识该函数B在目标条件b下对应的异常种类b’。函数C对应的异常信息可以用于标识该函数C在目标条件c下对应的异常种类c’,以及,还用于标识该函数C在目标条件d下对应的异常种类d’。
可见,该方法可以使得函数对应的异常信息能够全面的标识函数在不同目标条件下对应于不同异常种类。
在具体实现中,可以基于获取的显式异常和隐式异常,将每个函数在目标条件下对应的异常种类进行总结,从而得到每个函数对应的异常信息。并将这些函数和对应的异常归为函数异常库。
其中,在该函数异常库中,可以采用键(key):值(values)的方式来存储每个函数和对应的异常信息。其中,可以将函数作为键,将该函数在一个目标条件下对应的一个异常种类作为该键对应的一个值,这样,该函数的键所对应的全部值即为该函数对应的异常信息。其中,可以将函数对应的异常信息以列表的形式保存,即:一个函数对应于一个异常列表,该异常列表中包括了该函数在不同目标条件下对应的不同异常种类。
在本申请实施例中,测试人员也可以检查该待测软件的代码中可能出现的异常,如果测试人员检查出未在S302和S303中检测出的显式异常或隐式异常,测试人员也可以基于其检测出的所述显式异常或隐式异常,以在函数异常库中添加相应函数对应的异常信息。由此,在一种可能的实现方式中,函数异常库中还可以包括人工添加的异常信息。由此,可以使得函数异常库中函数对应的异常信息更为全面、完善。
S305:根据所述函数异常库所标识的异常,对所述待测软件进行异常测试。
从而,可以根据函数异常库中标识的异常,对该待测软件进行异常测试。
在具体实现中,可以预先为待测软件生成一些自动化测试用例,其中,在执行每个测试化自动用例时,可以相应的触发待测软件代码中的部分函数。
基于此,针对于根据函数异常库所标识的异常对待测软件进行异常测试的方法可以是:首先,可以在待测软件代码中插桩,以注入函数跟踪代码。接着,可以依次执行全部自动化测试用例,在执行每个自动化测试用例时,可以记录下每个自动化测试用例触发的函数,从而得到每个自动化测试用例对应的触发函数列表。
然后,为每个自动化测试用例对应的触发函数列表中包括的每个函数,根据函数异常库中该函数的异常信息确定出该函数在目标条件下对应的异常种类。可以理解,针对于测试化用例的触发列表中的任意一个函数,如果在函数异常库中确定出该函数在不同目标条件下对应不同的异常种类,则将该函数在不同目标条件下对应不同的异常种类全部确定出来。
接下来,基于每个自动化测试用例对应的触发函数列表中的每个函数,将所述每个函数对应的异常注入至待测软件代码中。接着,反复执行自动化测试用例,以在执行自动化测试用例时,触发待测软件代码中的异常,并记录下每个测试用例的执行结果。最后,对这些执行结果进行解析,从而完成对该待测软件代码的异常测试。
由上述技术方案可以看出,针对需要测试异常的待测软件,可以获取待测软件的代码,通过对所述代码进行代码解析,获取所述代码对应的显式异常,通过对所述代码进行静态扫描,获取所述代码对应的隐式异常。由于显式异常可以标识所述代码在语法逻辑层面所体现的函数异常,隐式异常可以标识所述代码在运行时的函数异常,故可以精准的确定出该代码可能出现的各类潜在异常,根据所述显式异常和隐式异常得到函数异常库,所述函数异常库包括函数对应的异常信息,所述异常信息用于标识所对应函数在目标条件下对应的异常种类;根据所述函数异常库所标识的异常,对所述待测软件进行异常测试,所测试的异常覆盖全面,减少了软件上线后出现bug的情况。
需要说明,在S303中,是通过静态扫描的方法获取代码对应的隐式异常,然而,静态扫描的方法是基于历史经验进行的,这样,如果该待测软件的代码中包括历史经验中不存在的隐式异常,由此将导致扫描出的隐式异常不全面。
基于此,在一种可能的实现方式中,所述S303的方法包括:
S401:通过对所述代码进行静态扫描以及对应用程序编程接口文档进行解析,获取所述代码对应的隐式异常。
在本申请实施例中,除了对所述代码进行静态扫描的方法获取隐式异常外,还可以对所述代码进行应用程序编程接口(Application Programming Interface,API)文档进行解析,获取代码的隐式异常。
接下来对代码中的API文档进行举例说明,针对于JAVA语言输入/输出文件输入流(java.io.FileInputStream)类中的读(read)函数,参见图4,该图示出了本申请实施例提供的一种读函数的API文档示意图,如图4所示,从该读函数的API文档中可以得知,该读函数定义中仅声明有“抛出输入/输出异常(throws IOException)”,其中,所述抛出输入/输出异常可以是在输入/输出接口发生异常的条件下发生的。
然而,如图4所示,在API文档的文档描述中,还包括了其他两类隐式异常(运行时异常),即:“空指针异常(NullPointerException)”和“索引越界异常(IndexOutOfBoundsException)”。其中,所述空指针异常可以是在读取数据缓冲区为空值的条件下发生的;所述索引越界异常可以是在如下条件下发生的:读取数组时的起始偏移量为负值,或者,读取的最大字节数为负值,或者,和读取的数据缓冲区的长度与读取数组的起始偏移量的差值相比,所读取的最大字节数大于该差值。
可见,通过对API文档进行解析,还可以全面的获取到与API相关的函数的隐式异常。从而尽可能全面的将待测软件代码中的隐式异常全部获取出来,从而保证测试时的隐式异常覆盖全面,减少了软件上线后出现bug的情况。
针对于S302中对代码进行代码解析的方法,为了提高代码解析效率,在一种可能的实现方式中,S302的方法可以包括:
S501:通过解析所述代码生成对应的抽象语法树。
S502:从所述抽象语法树中获取所述代码对应的显式异常。
在本申请实施例中,在为待测软件的代码进行代码解析时,可以将该代码生成对应的抽象语法树,并通过解析该代码对应的抽象语法树,从该抽象语法树中提取该代码对应的显式异常。其中,代码的抽象语法树可以是对所述代码结构的一种抽象表示方式。
在具体实现中,针对于由JAVA开发语言所开发的待测软件代码,比如可以通过Eclipse平台的JAVA集成开发环境插件(Java Development Tools,JDT)中的ASTParser来对代码的抽象语法树进行解析,以获取所述代码对应的显式异常。
通过将待测软件代码生成对应的抽象语法树,从而对抽象语法数进行解析的方式来实现显式异常的获取,该方法可以提高代码解析效率,更高效的从代码中获取对应的显式异常。
基于本申请实施例提供的异常测试方法,本申请实施例还提供了一种异常测试系统,参见图5,该图示出了本申请实施例提供的一种异常测试系统的结构示意图。如图5所示,该异常测试系统中可以包括两个子系统:代码分析子系统和测试用例自动化执行子系统。
其中,所述代码分析子系统可以用于建立函数异常库,使得建立的函数异常库包括待测软件代码中各个函数对应的异常信息(以异常列表形式保存),从而保证精确覆盖待测软件代码中的各类异常。该代码分析子系统可以包括代码解析模块、静态扫描模块和API文档解析模块,所述代码解析模块可以用于对待测软件的代码进行代码解析,以获取该代码对应的显式异常;所述静态扫描模块可以用于对该待测软件的代码进行静态扫描,以获取该代码对应的隐式异常;所述API文档解析模块可以用于对待测软件代码的API文档进行解析,以获取该代码中与API相关的函数对应的隐式异常。这样,可以根据上述三个模块,以得到待测软件代码对应的显式异常和隐式异常,并根据这些显式异常和隐式异常得到函数异常库。
以及,所述测试用例自动化执行子系统可以用于基于函数异常库以向待测软件代码中注入异常,以及驱动自动化测试用例的执行等。所述测试用例自动化执行子系统可以包括用例执行引擎、代码插桩模块、异常注入模块和自动化测试用例库,所述用例执行引擎可以用于驱动整个自动化异常测试流程。所述代码插桩模块可以用于向待测软件代码中注入函数跟踪代码;所述异常注入模块可以将指定的异常注入到待测软件代码中;所述自动化测试用例库中保存有预设的自动化测试用例。
下面介绍异常测试系统对待测软件的异常测试方法,如图5所示,首先,用例执行引擎可以指示代码插桩模块对待测软件代码进行插桩,以注入函数跟踪代码。接着,用例执行引擎可以驱动自动化测试用例库中的全部自动化测试用例依次执行,其中,在执行每个自动化测试用例时,可以记录下每个自动化测试用例触发的函数,从而得到每个自动化测试用例对应的触发函数列表。
然后,用例执行引擎可以为每个自动化测试用例对应的触发函数列表中包括的每个函数,根据代码分析子系统的函数异常库中该函数的异常信息,确定出该函数在目标条件下对应的异常种类。并基于每个自动化测试用例对应的触发函数列表中的每个函数,用例执行引擎指示异常注入模块将每个函数对应的异常注入至待测软件代码中。
其中,针对于代码插桩模块和异常注入模块的实现方式,比如可以通过面向切面编程(Aspect-Oriented programming,AOP)插桩工具(比如面向切面框架(AspectJ)工具、AspectC++工具)来实现的。其中,所述AOP可以基于预编译和运行期动态代理的方式,实现在不修改代码的情况下给程序动态统一添加功能的一种技术。也就是说,代码插桩模块可以通过AOP插桩工具对待测软件代码注入函数跟踪代码,异常注入模块可以通过AOP插桩工具向待测软件代码注入指定的异常。
接着,用例执行引擎可以反复执行自动化测试用例库中的自动化测试用例,以在执行自动化测试用例时,触发待测软件代码中的异常,并记录下每个测试用例的执行结果。最后,对这些执行结果进行解析,从而完成对该待测软件代码的异常测试。
基于前述实施例提供的一种异常测试方法,本申请实施例还提供一种异常测试装置,参见图6,该图示出了本申请实施例提供的一种异常测试装置的结构示意图,所述装置600包括第一获取单元601、第二获取单元602、第三获取单元603、生成单元604和测试单元605:
所述第一获取单元601,用于获取待测软件的代码;
所述第二获取单元602,用于通过对所述代码进行代码解析,获取所述代码对应的显式异常;所述显式异常用于标识所述代码在语法逻辑层面所体现的函数异常;
所述第三获取单元603,用于通过对所述代码进行静态扫描,获取所述代码对应的隐式异常;所述隐式异常用于标识所述代码在运行时的函数异常;
所述生成单元604,用于根据所述显式异常和隐式异常得到函数异常库,所述函数异常库包括所述代码中函数对应的异常信息,所述异常信息用于标识所对应函数在目标条件下对应的异常种类;
所述测试单元605,用于根据所述函数异常库所标识的异常,对所述待测软件进行异常测试。
可选的,所述第三获取单元603,具体用于:
通过对所述代码进行静态扫描以及对应用程序编程接口文档进行解析,获取所述代码对应的隐式异常。
可选的,所述第二获取单元604,具体用于:
通过解析所述代码生成对应的抽象语法树;
从所述抽象语法树中获取所述代码对应的显式异常。
可选的,所述异常信息还用于标识所对应函数在不同目标条件下对应的不同异常种类。
可选的,所述函数异常库中还包括人工添加的异常信息。
由上述技术方案可以看出,针对需要测试异常的待测软件,可以获取待测软件的代码,通过对所述代码进行代码解析,获取所述代码对应的显式异常,通过对所述代码进行静态扫描,获取所述代码对应的隐式异常。由于显式异常可以标识所述代码在语法逻辑层面所体现的函数异常,隐式异常可以标识所述代码在运行时的函数异常,故可以精准的确定出该代码可能出现的各类潜在异常,根据所述显式异常和隐式异常得到函数异常库,所述函数异常库包括函数对应的异常信息,所述异常信息用于标识所对应函数在目标条件下对应的异常种类;根据所述函数异常库所标识的异常,对所述待测软件进行异常测试,所测试的异常覆盖全面,减少了软件上线后出现bug的情况。
本申请实施例还提供了一种用于异常测试的设备,下面结合附图对用于异常测试的设备进行介绍。请参见图7所示,本申请实施例提供了一种用于异常测试的设备700,该设备700还可以是终端设备,该终端设备可以为包括手机、平板电脑、个人数字助理(PersonalDigital Assistant,简称PDA)、销售终端(Point of Sales,简称POS)、车载电脑等任意智能终端,以终端设备为手机为例:
图7示出的是与本申请实施例提供的终端设备相关的手机的部分结构的框图。参考图7,手机包括:射频(Radio Frequency,简称RF)电路710、存储器720、输入单元830、显示单元740、传感器750、音频电路760、无线保真(wireless fidelity,简称WiFi)模块770、处理器780、以及电源790等部件。本领域技术人员可以理解,图7中示出的手机结构并不构成对手机的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。
下面结合图7对手机的各个构成部件进行具体的介绍:
RF电路710可用于收发信息或通话过程中,信号的接收和发送,特别地,将基站的下行信息接收后,给处理器780处理;另外,将设计上行的数据发送给基站。通常,RF电路710包括但不限于天线、至少一个放大器、收发信机、耦合器、低噪声放大器(Low NoiseAmplifier,简称LNA)、双工器等。此外,RF电路710还可以通过无线通信与网络和其他设备通信。上述无线通信可以使用任一通信标准或协议,包括但不限于全球移动通讯系统(Global System of Mobile communication,简称GSM)、通用分组无线服务(GeneralPacket Radio Service,简称GPRS)、码分多址(Code Division Multiple Access,简称CDMA)、宽带码分多址(Wideband Code Division Multiple Access,简称WCDMA)、长期演进(Long Term Evolution,简称LTE)、电子邮件、短消息服务(Short Messaging Service,简称SMS)等。
存储器720可用于存储软件程序以及模块,处理器780通过运行存储在存储器720的软件程序以及模块,从而执行手机的各种功能应用以及数据处理。存储器720可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序(比如声音播放功能、图像播放功能等)等;存储数据区可存储根据手机的使用所创建的数据(比如音频数据、电话本等)等。此外,存储器720可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他易失性固态存储器件。
输入单元730可用于接收输入的数字或字符信息,以及产生与手机的用户设置以及功能控制有关的键信号输入。具体地,输入单元730可包括触控面板731以及其他输入设备732。触控面板731,也称为触摸屏,可收集用户在其上或附近的触摸操作(比如用户使用手指、触笔等任何适合的物体或附件在触控面板731上或在触控面板731附近的操作),并根据预先设定的程式驱动相应的连接装置。可选的,触控面板731可包括触摸检测装置和触摸控制器两个部分。其中,触摸检测装置检测用户的触摸方位,并检测触摸操作带来的信号,将信号传送给触摸控制器;触摸控制器从触摸检测装置上接收触摸信息,并将它转换成触点坐标,再送给处理器780,并能接收处理器780发来的命令并加以执行。此外,可以采用电阻式、电容式、红外线以及表面声波等多种类型实现触控面板731。除了触控面板731,输入单元730还可以包括其他输入设备732。具体地,其他输入设备732可以包括但不限于物理键盘、功能键(比如音量控制按键、开关按键等)、轨迹球、鼠标、操作杆等中的一种或多种。
显示单元740可用于显示由用户输入的信息或提供给用户的信息以及手机的各种菜单。显示单元740可包括显示面板741,可选的,可以采用液晶显示器(Liquid CrystalDisplay,简称LCD)、有机发光二极管(Organic Light-Emitting Diode,简称OLED)等形式来配置显示面板741。进一步的,触控面板731可覆盖显示面板741,当触控面板731检测到在其上或附近的触摸操作后,传送给处理器780以确定触摸事件的类型,随后处理器780根据触摸事件的类型在显示面板741上提供相应的视觉输出。虽然在图7中,触控面板731与显示面板741是作为两个独立的部件来实现手机的输入和输入功能,但是在某些实施例中,可以将触控面板731与显示面板741集成而实现手机的输入和输出功能。
手机还可包括至少一种传感器750,比如光传感器、运动传感器以及其他传感器。具体地,光传感器可包括环境光传感器及接近传感器,其中,环境光传感器可根据环境光线的明暗来调节显示面板741的亮度,接近传感器可在手机移动到耳边时,关闭显示面板741和/或背光。作为运动传感器的一种,加速计传感器可检测各个方向上(一般为三轴)加速度的大小,静止时可检测出重力的大小及方向,可用于识别手机姿态的应用(比如横竖屏切换、相关游戏、磁力计姿态校准)、振动识别相关功能(比如计步器、敲击)等;至于手机还可配置的陀螺仪、气压计、湿度计、温度计、红外线传感器等其他传感器,在此不再赘述。
音频电路760、扬声器761,传声器762可提供用户与手机之间的音频接口。音频电路760可将接收到的音频数据转换后的电信号,传输到扬声器761,由扬声器761转换为声音信号输出;另一方面,传声器762将收集的声音信号转换为电信号,由音频电路760接收后转换为音频数据,再将音频数据输出处理器780处理后,经RF电路710以发送给比如另一手机,或者将音频数据输出至存储器720以便进一步处理。
WiFi属于短距离无线传输技术,手机通过WiFi模块770可以帮助用户收发电子邮件、浏览网页和访问流式媒体等,它为用户提供了无线的宽带互联网访问。虽然图7示出了WiFi模块770,但是可以理解的是,其并不属于手机的必须构成,完全可以根据需要在不改变发明的本质的范围内而省略。
处理器780是手机的控制中心,利用各种接口和线路连接整个手机的各个部分,通过运行或执行存储在存储器720内的软件程序和/或模块,以及调用存储在存储器720内的数据,执行手机的各种功能和处理数据,从而对手机进行整体监控。可选的,处理器780可包括一个或多个处理单元;优选的,处理器780可集成应用处理器和调制解调处理器,其中,应用处理器主要处理操作系统、用户界面和应用程序等,调制解调处理器主要处理无线通信。可以理解的是,上述调制解调处理器也可以不集成到处理器780中。
手机还包括给各个部件供电的电源790(比如电池),优选的,电源可以通过电源管理系统与处理器780逻辑相连,从而通过电源管理系统实现管理充电、放电、以及功耗管理等功能。
尽管未示出,手机还可以包括摄像头、蓝牙模块等,在此不再赘述。
在本实施例中,该终端设备所包括的处理器780还具有以下功能:
获取待测软件的代码;
通过对所述代码进行代码解析,获取所述代码对应的显式异常;所述显式异常用于标识所述代码在语法逻辑层面所体现的函数异常;
通过对所述代码进行静态扫描,获取所述代码对应的隐式异常;所述隐式异常用于标识所述代码在运行时的函数异常;
根据所述显式异常和隐式异常得到函数异常库,所述函数异常库包括所述代码中函数对应的异常信息,所述异常信息用于标识所对应函数在目标条件下对应的异常种类;
根据所述函数异常库所标识的异常,对所述待测软件进行异常测试。
本申请实施例提供的用于用户界面的测试设备可以是服务器,请参见图8所示,图8为本申请实施例提供的服务器800的结构图,服务器800可因配置或性能不同而产生比较大的差异,可以包括一个或一个以上中央处理器(Central Processing Units,简称CPU)822(例如,一个或一个以上处理器)和存储器832,一个或一个以上存储应用程序842或数据844的存储介质830(例如一个或一个以上海量存储设备)。其中,存储器832和存储介质830可以是短暂存储或持久存储。存储在存储介质830的程序可以包括一个或一个以上模块(图示没标出),每个模块可以包括对服务器中的一系列指令操作。更进一步地,中央处理器822可以设置为与存储介质830通信,在服务器800上执行存储介质830中的一系列指令操作。
服务器800还可以包括一个或一个以上电源826,一个或一个以上有线或无线网络接口850,一个或一个以上输入输出接口858,和/或,一个或一个以上操作系统841,例如Windows ServerTM,Mac OS XTM,UnixTM,LinuxTM,FreeBSDTM等等。
上述实施例中由服务器所执行的步骤可以基于该图8所示的服务器结构。
其中,CPU 822用于执行如下步骤:
获取待测软件的代码;
通过对所述代码进行代码解析,获取所述代码对应的显式异常;所述显式异常用于标识所述代码在语法逻辑层面所体现的函数异常;
通过对所述代码进行静态扫描,获取所述代码对应的隐式异常;所述隐式异常用于标识所述代码在运行时的函数异常;
根据所述显式异常和隐式异常得到函数异常库,所述函数异常库包括所述代码中函数对应的异常信息,所述异常信息用于标识所对应函数在目标条件下对应的异常种类;
根据所述函数异常库所标识的异常,对所述待测软件进行异常测试。
本申请的说明书及上述附图中的术语“第一”、“第二”、“第三”、“第四”等(如果存在)是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本申请的实施例例如能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
应当理解,在本申请中,“至少一个(项)”是指一个或者多个,“多个”是指两个或两个以上。“和/或”,用于描述关联对象的关联关系,表示可以存在三种关系,例如,“A和/或B”可以表示:只存在A,只存在B以及同时存在A和B三种情况,其中A,B可以是单数或者复数。字符“/”一般表示前后关联对象是一种“或”的关系。“以下至少一项(个)”或其类似表达,是指这些项中的任意组合,包括单项(个)或复数项(个)的任意组合。例如,a,b或c中的至少一项(个),可以表示:a,b,c,“a和b”,“a和c”,“b和c”,或“a和b和c”,其中a,b,c可以是单个,也可以是多个。
在本申请所提供的几个实施例中,应该理解到,所揭露的系统,装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(Read-Only Memory,简称ROM)、随机存取存储器(Random Access Memory,简称RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述,以上实施例仅用以说明本申请的技术方案,而非对其限制;尽管参照前述实施例对本申请进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本申请各实施例技术方案的精神和范围。
Claims (10)
1.一种异常测试方法,其特征在于,所述方法包括:
获取待测软件的代码;
通过对所述代码进行代码解析,获取所述代码对应的显式异常;所述显式异常用于标识所述代码在语法逻辑层面所体现的函数异常;
通过对所述代码进行静态扫描,获取所述代码对应的隐式异常;所述隐式异常用于标识所述代码在运行时的函数异常;
根据所述显式异常和隐式异常得到函数异常库,所述函数异常库包括所述代码中函数对应的异常信息,所述异常信息用于标识所对应函数在目标条件下对应的异常种类;
根据所述函数异常库所标识的异常,对所述待测软件进行异常测试。
2.根据权利要求1所述的方法,其特征在于,所述通过对所述代码进行静态扫描,获取所述代码对应的隐式异常,包括:
通过对所述代码进行静态扫描以及对应用程序编程接口文档进行解析,获取所述代码对应的隐式异常。
3.根据权利要求1所述的方法,其特征在于,所述通过对所述代码进行代码解析,获取所述代码对应的显式异常,包括:
通过解析所述代码生成对应的抽象语法树;
从所述抽象语法树中获取所述代码对应的显式异常。
4.根据权利要求1-3任意一项所述的方法,其特征在于,所述异常信息还用于标识所对应函数在不同目标条件下对应的不同异常种类。
5.根据权利要求1-3任意一项所述的方法,其特征在于,所述函数异常库中还包括人工添加的异常信息。
6.一种异常测试装置,其特征在于,所述装置包括第一获取单元、第二获取单元、第三获取单元、生成单元和测试单元:
所述第一获取单元,用于获取待测软件的代码;
所述第二获取单元,用于通过对所述代码进行代码解析,获取所述代码对应的显式异常;所述显式异常用于标识所述代码在语法逻辑层面所体现的函数异常;
所述第三获取单元,用于通过对所述代码进行静态扫描,获取所述代码对应的隐式异常;所述隐式异常用于标识所述代码在运行时的函数异常;
所述生成单元,用于根据所述显式异常和隐式异常得到函数异常库,所述函数异常库包括所述代码中函数对应的异常信息,所述异常信息用于标识所对应函数在目标条件下对应的异常种类;
所述测试单元,用于根据所述函数异常库所标识的异常,对所述待测软件进行异常测试。
7.根据权利要求6所述的装置,其特征在于,所述第三获取单元,具体用于:
通过对所述代码进行静态扫描以及对应用程序编程接口文档进行解析,获取所述代码对应的隐式异常。
8.根据权利要求6所述的装置,其特征在于,所述第二获取单元,具体用于:
通过解析所述代码生成对应的抽象语法树;
从所述抽象语法树中获取所述代码对应的显式异常。
9.根据权利要求6-8任意一项所述的装置,其特征在于,所述异常信息还用于标识所对应函数在不同目标条件下对应的不同异常种类。
10.根据权利要求6-8任意一项所述的装置,其特征在于,所述函数异常库中还包括人工添加的异常信息。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910507435.8A CN112084104A (zh) | 2019-06-12 | 2019-06-12 | 一种异常测试方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910507435.8A CN112084104A (zh) | 2019-06-12 | 2019-06-12 | 一种异常测试方法和装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN112084104A true CN112084104A (zh) | 2020-12-15 |
Family
ID=73733581
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910507435.8A Pending CN112084104A (zh) | 2019-06-12 | 2019-06-12 | 一种异常测试方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112084104A (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112597050A (zh) * | 2020-12-28 | 2021-04-02 | 上海品顺信息科技有限公司 | 关联源码与测试用例的测试方法、系统、设备及存储介质 |
CN112948726A (zh) * | 2021-03-29 | 2021-06-11 | 建信金融科技有限责任公司 | 一种处理异常信息的方法、装置和系统 |
-
2019
- 2019-06-12 CN CN201910507435.8A patent/CN112084104A/zh active Pending
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112597050A (zh) * | 2020-12-28 | 2021-04-02 | 上海品顺信息科技有限公司 | 关联源码与测试用例的测试方法、系统、设备及存储介质 |
CN112948726A (zh) * | 2021-03-29 | 2021-06-11 | 建信金融科技有限责任公司 | 一种处理异常信息的方法、装置和系统 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108415739B (zh) | 一种动态链接库函数的钩挂方法、装置和存储介质 | |
CN108021496B (zh) | 线程数据处理方法及装置 | |
CN107943683B (zh) | 一种测试脚本生成方法、装置、电子设备及存储介质 | |
CN110196795B (zh) | 检测移动终端应用运行状态的方法及相关装置 | |
CN107908952B (zh) | 识别真机和模拟器的方法、装置和终端 | |
CN104516812A (zh) | 一种软件测试方法和装置 | |
CN109086606B (zh) | 一种程序漏洞挖掘方法、装置、终端及存储介质 | |
CN108073495B (zh) | 应用程序崩溃原因的定位方法及装置 | |
CN106649126B (zh) | 一种对应用程序进行测试的方法和装置 | |
CN110895509B (zh) | 一种测试处理方法、装置、电子设备及存储介质 | |
CN106295353B (zh) | 一种引擎漏洞检测的方法以及检测装置 | |
CN109753425B (zh) | 弹窗处理方法及装置 | |
CN110378107B (zh) | 一种安装包检测的方法及相关装置 | |
CN111723002A (zh) | 一种代码调试方法、装置、电子设备及存储介质 | |
CN112084104A (zh) | 一种异常测试方法和装置 | |
CN115904950A (zh) | 一种测试用例生成方法、装置、设备及存储介质 | |
CN115269361A (zh) | 一种软件开发工具包的测试方法、装置和可读存储介质 | |
CN107967203B (zh) | 基于可执行文件的函数判定方法及装置 | |
CN111562910A (zh) | 一种封装方法及相关设备 | |
CN116303085A (zh) | 一种测试原因分析方法、装置、设备及存储介质 | |
CN110879709A (zh) | 无用代码的检测方法、装置、终端设备及存储介质 | |
CN112069079B (zh) | 一种性能测试的方法、相关装置及存储介质 | |
CN112199270B (zh) | 一种程序测试方法、装置、设备及介质 | |
CN114490307A (zh) | 一种单元测试方法、装置及存储介质 | |
CN105786712A (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 |