CN114328206A - 一种能够实现高覆盖率且高效率的白盒异常测试方法 - Google Patents

一种能够实现高覆盖率且高效率的白盒异常测试方法 Download PDF

Info

Publication number
CN114328206A
CN114328206A CN202111594973.9A CN202111594973A CN114328206A CN 114328206 A CN114328206 A CN 114328206A CN 202111594973 A CN202111594973 A CN 202111594973A CN 114328206 A CN114328206 A CN 114328206A
Authority
CN
China
Prior art keywords
case
stack
exception
database
test
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
Application number
CN202111594973.9A
Other languages
English (en)
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.)
Tianjin Nankai University General Data Technologies Co ltd
Original Assignee
Tianjin Nankai University General Data Technologies Co 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 Tianjin Nankai University General Data Technologies Co ltd filed Critical Tianjin Nankai University General Data Technologies Co ltd
Priority to CN202111594973.9A priority Critical patent/CN114328206A/zh
Publication of CN114328206A publication Critical patent/CN114328206A/zh
Pending legal-status Critical Current

Links

Images

Landscapes

  • Debugging And Monitoring (AREA)

Abstract

本发明提供了一种能够实现高覆盖率且高效率的白盒异常测试方法,在数据库产品中加入白盒异常处理代码逻辑;测试人员指定数据库测试目标并开启对用例库中所有用例的测试程序;读取一条用例,为被测用例初始化一个空堆栈池;每当数据库内异常处理代码被触发时,生成被测用例当前执行点的函数调用栈,将函数调用栈存储到被测用例对应的堆栈池中,记录被测用例的堆栈池信息;测试程序对用例库中所有用例执行异常测试,将造成异常的函数调用栈对应的异常信息记录到日志中;根据日志定位此次异常测试出现的位置及问题。本发明所述的一种能够实现高覆盖率且高效率的白盒异常测试方法,遍历数据库中所有触发异常的调用堆栈,全覆盖保证测试的准确完善。

Description

一种能够实现高覆盖率且高效率的白盒异常测试方法
技术领域
本发明属于数据库异常测试领域,尤其是涉及一种能够实现高覆盖率且高效率的白盒异常测试方法。
背景技术
从GBase 8a产品在线运行情况来看,很多宕机或死锁的bug都是由外部异常所导致的。针对这类问题,目前通常的手段是通过随机的触发异常或随机的发kill信号来进行异常测试,但是由于整个测试过程是随机的,很难做到完全覆盖,而且是在黑盒下进行的,即使发现了宕机或死锁问题,研发人员也很难知道程序的内部细节,需要花费大量时间去确定到底是哪次异常引起了该次宕机或死锁。
基于上述原因,针对异常的测试,一直无法顺利开展。例如,如果想对程序中所有的内存申请进行抛异常测试,由于程序中的内存申请几乎无处不在,按照原有方法进行覆盖,效果不太理想。所以急需一种测试手段,能够自动遍历和触发程序中所有外部异常,并借此修复程序处理上的问题。
发明内容
有鉴于此,本发明旨在提出一种能够实现高覆盖率且高效率的白盒异常测试方法,以解决现有测试过程中难以做到全程覆盖,且测试是在黑盒下进行的,研发人员需要花费大量时间去确定异常具体情况,效率低的问题。
为达到上述目的,本发明的技术方案是这样实现的:
一种能够实现高覆盖率且高效率的白盒异常测试方法,具体步骤如下:
S1、在数据库产品中加入白盒异常处理代码逻辑;
S2、测试人员指定数据库测试目标,并开启用例库中所有用例的测试程序;测试程序依次执行每条用例,并采集执行该用例时出现的数据库异常处理代码被触发的异常事件,具体方法如下:每读取一条用例,为被测用例初始化一个空堆栈池;每当数据库内异常处理代码被触发时,通过数据库函数生成被测用例当前执行点的函数调用栈,将函数调用栈存储到被测用例对应的堆栈池中,将被测用例的堆栈池信息存储到被测用例对应的临时文件中;
S3、测试程序对用例库中所有用例执行异常测试,对每条用例执行异常测试的具体方法为:测试程序读取每条用例以及该用例对应的临时文件中的堆栈池信息;对被测用例中所有函数调用栈进行异常测试,将造成数据库无法正常运行的函数调用栈对应的异常信息记录到日志中;
S4、根据日志定位此次异常信息。
进一步的,所述步骤S2中,测试人员指定数据库测试目标包括内存异常测试、kill进程的异常测试。
进一步的,将函数调用栈存储到被测用例对应的堆栈池中,具体方法如下:
S21、将函数调用栈通过哈希算法转化成一条校验码;
S22、测试程序判断步骤S21中生成的校验码是否存在于当前被测用例的堆栈池中,若已存在则继续执行用例,若不存在则将校验码存入堆栈池,然后继续执行用例;
S23、测试程序重复执行步骤S21和S22,直至当前用例执行完毕;
只有不重复的校验码才会被插入当前被测用例的堆栈池,所以此时该文件内包含了当前用例异常处理这一动作的所有函数调用栈且无重复调用栈,其中每个函数调用栈被称为唯一调用栈。
进一步的,所述堆栈池信息包括用例的函数调用栈的数量。
进一步的,步骤S3中,对被测用例中所有函数调用栈进行异常测试,将造成数据库无法正常运行的函数调用栈对应的异常信息记录到日志中,具体方法如下:
S31、测试程序读取被测用例,当数据库的异常处理代码被触发时,检测是否有对应的函数调用栈出现,仅在函数调用栈出现时抛出异常,同时将该函数调用栈从被测用例对应的堆栈池中移除;
S32、当抛出异常时,测试程序检测数据库状态,若状态正常则继续执行,若出现宕机现象则记录异常信息,并重启数据库,重新执行当前用例但不重新加载被测用例对应的堆栈池;
S33、测试程序重复执行步骤S31-S32,直至当前用例的堆栈池被清空,即已覆盖被测用例中所有异常处理代码被触发的情况。
进一步的,步骤S3中,异常信息包括用例名、sql语句,抛异常的堆栈ID、宕机堆栈。
相对于现有技术,本发明所述的一种能够实现高覆盖率且高效率的白盒异常测试方法具有以下有益效果:
(1)本发明所述的一种能够实现高覆盖率且高效率的白盒异常测试方法实现测试的全覆盖,快速遍历数据库中所有触发异常的调用堆栈,将异常抛出,数据库执行出现宕机时,即可进行宕机的异常信息记录,为后续根据日志定位此次异常测试出现的位置及问题做好准备,全覆盖保证测试的准确完善。
(2)本发明所述的步骤S22中,测试程序判断步骤S21中生成的校验码是否存在于当前被测用例的堆栈池中,若已存在则继续执行用例,若不存在则将校验码存入堆栈池,然后继续执行用例;只有不重复的校验码才会被插入当前被测用例的堆栈池,所以此时该文件内包含了当前用例异常处理这一动作的所有函数调用栈且无重复调用栈,其中每个函数调用栈被称为唯一调用栈,大大减少了异常测试时调用函数调用栈的数量,实现高效率的测试目的。
附图说明
构成本发明的一部分的附图用来提供对本发明的进一步理解,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:
图1为本发明实施例所述的一种能够实现高覆盖率且高效率的白盒异常测试方法的函数调用栈生成原理图。
具体实施方式
需要说明的是,在不冲突的情况下,本发明中的实施例及实施例中的特征可以相互组合。
在本发明的描述中,需要理解的是,术语“中心”、“纵向”、“横向”、“上”、“下”、“前”、“后”、“左”、“右”、“竖直”、“水平”、“顶”、“底”、“内”、“外”等指示的方位或位置关系为基于附图所示的方位或位置关系,仅是为了便于描述本发明和简化描述,而不是指示或暗示所指的装置或元件必须具有特定的方位、以特定的方位构造和操作,因此不能理解为对本发明的限制。此外,术语“第一”、“第二”等仅用于描述目的,而不能理解为指示或暗示相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”等的特征可以明示或者隐含地包括一个或者更多个该特征。在本发明的描述中,除非另有说明,“多个”的含义是两个或两个以上。
在本发明的描述中,需要说明的是,除非另有明确的规定和限定,术语“安装”、“相连”、“连接”应做广义理解,例如,可以是固定连接,也可以是可拆卸连接,或一体地连接;可以是机械连接,也可以是电连接;可以是直接相连,也可以通过中间媒介间接相连,可以是两个元件内部的连通。对于本领域的普通技术人员而言,可以通过具体情况理解上述术语在本发明中的具体含义。
下面将参考附图并结合实施例来详细说明本发明。
如图1所示,本申请所述一种能够实现高覆盖率且高效率的白盒异常测试方法,首先在GBase 8a数据库产品加入包含白盒异常处理代码逻辑,所述异常处理代码的异常内容包括内存分配异常和kill进程异常。
有了包含异常处理逻辑的GBase 8a数据库产品后,通过异常测试工具开始执行对该产品的异常测试流程,执行流程主要分为三个阶段:
1.第一阶段:采集阶段。测试工具正常执行用例库中的回归测试用例,并记录每个用例的唯一调用栈的数量并保存。具体流程如下:
11)测试人员在数据库的配置文件中通过参数指定本次测试的目标为内存异常测试,启动数据库,并运行测试程序,开始采集模式;
12)测试程序从用例库中读取一条用例,并为其初始化一个空堆栈池;
13)测试程序执行步骤12)读取的用例时,每当数据库内部的异常处理代码被触发时,会调用数据库函数生成当前执行点的函数调用栈,并将该调用栈通过哈希算法转化成一条唯一校验码;
14)测试程序判断步骤13)生成的校验码是否存在于当前被测用例的堆栈池中,若已存在则继续执行用例,若不存在则会将校验码存入堆栈池然后继续执行用例;
15)测试程序重复执行步骤13)至14)直至当前用例库中的用例执行完毕;
16)测试程序将当前被测用例的堆栈池信息保存到一个临时文件中,由于仅有唯一不重复的校验码才会被插入堆栈池,所以每个堆栈池内包含了对应用例异常处理这一动作的所有调用栈且无重复项,其中每个调用栈被称为唯一调用栈;
17)测试程序重复执行步骤12)至16),直至用例库中所有用例执行完毕;
2.第二阶段:测试阶段。测试程序加载第一阶段所产生的唯一调用堆栈,的结果,并对所有唯一调用堆栈进行异常测试。具体流程如下所示:
21)测试人员运行测试程序,开始执行异常测试;
22)测试程序从用例库中读取一条用例,并加载之前第一阶段中步骤16)生成的与当前被测用例对应的临时文件,读取文件中记录的相关堆栈池信息。
23)测试程序执行步骤22)中读取的用例,在异常处理代码被触发时检测调用栈,仅在“唯一调用栈”出现时抛出异常,同时将该“唯一调用栈”从堆栈池中移除;
24)若步骤23)抛出异常,测试程序检测数据库状态,若状态正常则继续执行,若出现宕机现象则记录相关异常信息,并重启数据库,重新执行当前用例但不重新加载堆栈池;
25)测试程序重复执行步骤23)至24)直至当前被测用例的堆栈池被清空,即已覆盖了当前用例中所有异常处理被触发的情况;
26)测试程序重复执行步骤22)至25)直至用例库中所有用例执行完毕。
第三阶段:分析阶段。当第二阶段的测试结束后,如果测试过程中数据库发生宕机,则会在日志目录下生成相应的结果文件,文件里存放的是宕机发生时数据库的运行状态,会打印宕机时的用例名,sql语句,抛异常的堆栈ID,宕机堆栈等信息等。
第四阶段:结合宕机堆栈,用户可以定位出此次异常信息。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

Claims (6)

1.一种能够实现高覆盖率且高效率的白盒异常测试方法,其特征在于,具体步骤如下:
S1、在数据库产品中加入白盒异常处理代码逻辑;
S2、测试人员指定数据库测试目标,并开启用例库中所有用例的测试程序;测试程序依次执行每条用例,并采集执行该用例时出现的数据库异常处理代码被触发的异常事件,具体方法如下:每读取一条用例,为被测用例初始化一个空堆栈池;每当数据库内异常处理代码被触发时,通过数据库函数生成被测用例当前执行点的函数调用栈,将函数调用栈存储到被测用例对应的堆栈池中,将被测用例的堆栈池信息存储到被测用例对应的临时文件中;
S3、测试程序对用例库中所有用例执行异常测试,对每条用例执行异常测试的具体方法为:测试程序读取每条用例以及该用例对应的临时文件中的堆栈池信息;对被测用例中所有函数调用栈进行异常测试,将造成数据库无法正常运行的函数调用栈对应的异常信息记录到日志中;
S4、根据日志定位此次异常信息。
2.根据权利要求1所述的一种能够实现高覆盖率且高效率的白盒异常测试方法,其特征在于:所述步骤S2中,测试人员指定数据库测试目标包括内存异常测试、kill进程的异常测试。
3.根据权利要求1所述的一种能够实现高覆盖率且高效率的白盒异常测试方法,其特征在于,将函数调用栈存储到被测用例对应的堆栈池中,具体方法如下:
S21、将函数调用栈通过哈希算法转化成一条校验码;
S22、测试程序判断步骤S21中生成的校验码是否存在于当前被测用例的堆栈池中,若已存在则继续执行用例,若不存在则将校验码存入堆栈池,然后继续执行用例;
S23、测试程序重复执行步骤S21和S22,直至当前用例执行完毕。
4.根据权利要求3所述的一种能够实现高覆盖率且高效率的白盒异常测试方法,其特征在于:所述堆栈池信息包括用例的函数调用栈的数量。
5.根据权利要求1所述的一种能够实现高覆盖率且高效率的白盒异常测试方法,其特征在于,步骤S3中,对被测用例中所有函数调用栈进行异常测试,将造成数据库无法正常运行的函数调用栈对应的异常信息记录到日志中,具体方法如下:
S31、测试程序读取被测用例,当数据库的异常处理代码被触发时,检测是否有对应的函数调用栈出现,仅在函数调用栈出现时抛出异常,同时将该函数调用栈从被测用例对应的堆栈池中移除;
S32、当抛出异常时,测试程序检测数据库状态,若状态正常则继续执行,若出现宕机现象则记录异常信息,并重启数据库,重新执行当前用例但不重新加载被测用例对应的堆栈池;
S33、测试程序重复执行步骤S31-S32,直至当前用例的堆栈池被清空,即已覆盖被测用例中所有异常处理代码被触发的情况。
6.根据权利要求5所述的一种能够实现高覆盖率且高效率的白盒异常测试方法,其特征在于:步骤S3中,异常信息包括用例名、sql语句,抛异常的堆栈ID、宕机堆栈。
CN202111594973.9A 2021-12-23 2021-12-23 一种能够实现高覆盖率且高效率的白盒异常测试方法 Pending CN114328206A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202111594973.9A CN114328206A (zh) 2021-12-23 2021-12-23 一种能够实现高覆盖率且高效率的白盒异常测试方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202111594973.9A CN114328206A (zh) 2021-12-23 2021-12-23 一种能够实现高覆盖率且高效率的白盒异常测试方法

Publications (1)

Publication Number Publication Date
CN114328206A true CN114328206A (zh) 2022-04-12

Family

ID=81013657

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202111594973.9A Pending CN114328206A (zh) 2021-12-23 2021-12-23 一种能够实现高覆盖率且高效率的白盒异常测试方法

Country Status (1)

Country Link
CN (1) CN114328206A (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN117195204A (zh) * 2023-11-01 2023-12-08 建信金融科技有限责任公司 异常数据检测方法、装置、电子设备及计算机可读介质

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN117195204A (zh) * 2023-11-01 2023-12-08 建信金融科技有限责任公司 异常数据检测方法、装置、电子设备及计算机可读介质
CN117195204B (zh) * 2023-11-01 2024-02-13 建信金融科技有限责任公司 异常数据检测方法、装置、电子设备及计算机可读介质

Similar Documents

Publication Publication Date Title
US7320125B2 (en) Program execution stack signatures
US6182243B1 (en) Selective data capture for software exception conditions
EP0403415A2 (en) System and method for detecting and diagnosing errors in a computer program
US20080127112A1 (en) Software tracing
CN112463581B (zh) 一种对分布式系统进行模糊测试的方法及系统
CN110928777B (zh) 测试用例的处理方法、装置、设备及存储介质
CN110297737B (zh) 多路输出芯片的故障诊断测试方法及装置
CN114328206A (zh) 一种能够实现高覆盖率且高效率的白盒异常测试方法
US8898644B2 (en) Efficient unified tracing of kernel and user events with multi-mode stacking
CN113535538A (zh) 应用全链路自动化测试方法、装置、电子设备和存储介质
CN113971031A (zh) 软件包依赖关系检查方法及装置
US8046760B2 (en) Lock contention pinpointing
CN114328168A (zh) 异常检测方法、装置、计算机设备和存储介质
CN111061644B (zh) 一种检测并定位异常抛出处理缺陷的方法和装置
CN111124809A (zh) 一种服务器传感器系统的测试方法及装置
CN110795142B (zh) 一种配置文件的生成方法及装置
CN110620698A (zh) 一种软件异常诊断方法、装置、设备及系统
EP2159697B1 (en) Method for evaluating a production rule for a memory management analysis
CN114579252A (zh) 一种监测应用状态的方法、系统、存储介质及设备
CN110795342A (zh) 一种错误检测方法及装置
CN112346963B (zh) 一种基于aop的插桩测试方法、装置和电子设备
Duque-Torres et al. Towards Automatic Generation of Amplified Regression Test Oracles
CN110750409A (zh) 测试的实现方法、装置和系统
CN114048488B (zh) 漏洞检测方法及系统
CN112486823B (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