CN107038108A - 软件的测试方法和装置 - Google Patents
软件的测试方法和装置 Download PDFInfo
- Publication number
- CN107038108A CN107038108A CN201510516314.1A CN201510516314A CN107038108A CN 107038108 A CN107038108 A CN 107038108A CN 201510516314 A CN201510516314 A CN 201510516314A CN 107038108 A CN107038108 A CN 107038108A
- Authority
- CN
- China
- Prior art keywords
- function
- measured
- under testing
- run
- software under
- 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
Abstract
本发明公开了一种软件的测试方法和装置。其中,该方法包括:获取待测软件的函数信息列表,函数信息列表包括:待测软件中的待测函数的函数地址;根据每个待测函数的函数地址对每个待测函数设置处理函数,处理函数用于在测试过程中对每个待测函数被运行的次数进行统计;在对待测软件进行的测试过程中通过处理函数获取每个待测函数被运行的次数。本发明解决了由于采用现有的软件测试方法所导致的测试准确性较低的技术问题。
Description
技术领域
本发明涉及计算机领域,具体而言,涉及一种软件的测试方法和装置。
背景技术
目前,在对无源代码的软件进行测试时,现有技术常常采用周期测试方法来获知在测试过程中软件中的哪些函数被运行到。具体而言,将测试用例输入到上述软件中进行测试,在测试过程中每隔预定的采样周期T查看函数栈中当前运行的函数的名称,例如,在时间点T0上查看到函数栈中当前运行的函数的名称为函数f1、函数f2和函数f3的名称,在时间点T0+T上查看到函数栈中当前运行的函数的名称为函数f2、函数f6和函数f7的名称。这样可以统计出在测试过程中软件中运行到的函数包括:函数f1、函数f2、函数f3、函数f6和函数f7。
然而,上述的周期方法存在一定的问题,即,会遗漏在采样周期之外运行的函数。例如,在时间点T0至时间点T0+T之间若函数f4和函数f5也被运行到,且在时间点T0+T之前完成运行,这样,将无法在时间点T0+T上通过查看函数栈中当前运行的函数的名称来获知函数f4和函数f5也被运行到了。这样的采样结果就无法真实体现被测的软件的运行状况,无法获知函数f4和函数f5是否被运行到,从而导致测试准确性较低。
针对现有的软件测试方法所导致的测试准确性较低的技术问题,目前尚未提出有效的解决方案。
发明内容
本发明实施例提供了一种软件的测试方法和装置,以至少解决由于采用现有的软件测试方法所导致的测试准确性较低的技术问题。
根据本发明实施例的一个方面,提供了一种软件的测试方法,包括:获取待测软件的函数信息列表,上述函数信息列表包括:上述待测软件中的待测函数的函数地址;根据每个上述待测函数的函数地址对每个上述待测函数设置处理函数,上述处理函数用于在测试过程中对每个上述待测函数被运行的次数进行统计;在对上述待测软件进行的上述测试过程中通过上述处理函数获取每个上述待测函数被运行的次数。
根据本发明实施例的另一方面,还提供了一种软件的测试装置,包括:第一获取单元,用于获取待测软件的函数信息列表,上述函数信息列表包括:上述待测软件中的待测函数的函数地址,并将每个上述待测函数的函数地址发送至设置单元;上述设置单元,用于接收上述第一获取单元发送的每个上述待测函数的函数地址,根据每个上述待测函数的函数地址对每个上述待测函数设置处理函数,上述处理函数用于在测试过程中对每个上述待测函数被运行的次数进行统计,将上述处理函数发送至测试单元;上述测试单元,用于接收上述设置单元发送的上述处理函数,在对上述待测软件进行的上述测试过程中通过上述处理函数获取每个上述待测函数被运行的次数。
在本发明实施例中,在从待测软件的程序数据库文件中获取待测软件的函数信息列表后,通过根据函数信息列表中每个待测函数的函数地址对每个待测函数设置处理函数,以便于在使用测试用例对待测软件进行测试的过程中,利用与每个待测函数对应的处理函数,分别获取每个待测函数被运行的次数,以准确统计待测软件中每个待测函数在测试过程中实际运行的次数。从而避免现有技术中由于定时采样而遗漏在采样周期之外运行的函数的所导致的测试准确性较低的技术问题,达到了提高测试准确性的技术效果。
附图说明
此处所说明的附图用来提供对本发明的进一步理解,构成本申请的一部分,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:
图1是根据本发明实施例的一种可选的软件的测试方法的应用场景示意图;
图2是根据本发明实施例的一种可选的软件的测试方法的流程图;
图3是根据本发明实施例的一种可选的软件的测试方法的结果显示界面示意图;
图4是根据本发明实施例的一种可选的软件的测试方法的示意图;
图5是根据本发明实施例的另一种可选的软件的测试方法的结果显示界面示意图;
图6是根据本发明实施例的又一种可选的软件的测试方法的结果显示界面示意图;
图7是根据本发明实施例的又一种可选的软件的测试方法的结果显示界面示意图;
图8是根据本发明实施例的一种可选的软件的测试装置的示意图;
图9是根据本发明实施例的另一种可选的软件的测试装置的示意图;
图10是根据本发明实施例的又一种可选的软件的测试装置的示意图;
图11是根据本发明实施例的又一种可选的软件的测试装置的示意图;
图12是根据本发明实施例的又一种可选的软件的测试装置的示意图;
图13是根据本发明实施例的又一种可选的软件的测试装置的示意图;
以及
图14是根据本发明实施例的一种可选的测试服务器的示意图。
具体实施方式
为了使本技术领域的人员更好地理解本发明方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分的实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本发明保护的范围。
需要说明的是,本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本发明的实施例能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
实施例1
根据本发明实施例,提供了一种软件的测试方法的实施例,上述软件的测试方法可以但不限于应用于如图1所示的网络环境中,待测软件所在的待测服务器102获取的函数信息列表,通过网络发送给测试服务器104,测试服务器104根据每个待测函数的函数地址对每个待测函数设置处理函数,进一步,在对待测软件进行的测试过程中,测试服务器104将通过上述处理函数获取每个待测函数被运行的次数,也就是说,通过上述处理函数实现准确监控每个待侧软件中每个待测函数的运行次数,以克服现有技术中由定时采样测试所导致的遗漏待测函数的问题,进而实现提高软件测试的准确性的效果。可选地,在本发明实施例中,上述网络可以包括但不限于:广域网、城域网、局域网。上述只是一种示例,本发明实施例对此不做任何限定。
根据本发明实施例,提供了一种软件的测试方法,如图2所示,该方法包括:
S202,获取待测软件的函数信息列表,函数信息列表包括:待测软件中的待测函数的函数地址;
S204,根据每个待测函数的函数地址对每个待测函数设置处理函数,处理函数用于在测试过程中对每个待测函数被运行的次数进行统计;
S206,在对待测软件进行的测试过程中通过处理函数获取每个待测函数被运行的次数。
可选地,在本发明实施例中,上述软件的测试方法可以但不限于应用于利用测试用例对待测软件进行测试时,获取待测软件中被测试用例测试到的函数的函数覆盖率的过程中。其中,上述待测软件可以包括但不限于任意一种有源码软件,或任意一种无源码软件,尤其是对于无源码软件,例如,代理游戏,由于无源码软件无法获知执行源码,因而,现有技术还尚未提供针对无源码软件的函数覆盖率的测试方式。在本发明实施例中,在从待测软件的程序数据库文件中获取待测软件的函数信息列表后,通过根据函数信息列表中每个待测函数的函数地址对每个待测函数设置处理函数,在使用测试用例对待测软件进行测试时,利用与每个待测函数对应的处理函数,获取每个待测函数被运行的次数,以准确统计待测软件中每个待测函数实际运行的次数,从而实现准确获取待测软件中被测试用例测试到的函数的函数覆盖率,进而克服现有技术中由于采用定时采样测试待测软件所导致的测试准确性降低的问题。
可选地,在本发明实施例中,上述测试用例是为了测试预定程序路径或核实是否满足预定测试需求而编制的一组测试代码。需要说明的是,在本发明实施例中,对测试用例的内容和格式均不做任何限定。
需要说明的是,在本发明实施例中,通过处理函数获取到的每个待测函数被运行的次数,不仅仅限于应用于获取待测软件中被测试用例测试到的函数的函数覆盖率的过程中,还可以但不限于应用于其他场景。本发明实施例中提供的是一种示例,本发明实施例并不限于此。
可选地,在本发明实施例中,上述从待测软件的程序数据库文件中获取的待测软件的函数信息列表可以包括但不限于:待测软件中待测函数的函数名称和函数地址等。其中,程序数据库(Program Datebase,PDB)文件,也称pdb文件,其中,pdb文件保存有:函数原型(例如,函数名称、函数的输入参数和输出参数的数据类型)、函数地址。
可选地,在本发明实施例中,根据待测函数的函数地址对每个待测函数设置处理函数的方式可以包括但不限于以下至少之一:将处理函数插入到每个待测函数中的预定位置,在每个待测函数中设置跳转语句跳转到处理函数所在位置。
可选地,在本发明实施例中,上述处理函数可以包括但不限于Hook函数,例如,Inline Hook函数,通过根据每个待测函数的函数地址设置对每个待测函数用于监控的Hook函数,以便于在使用测试用例对待测软件进行测试的过程中,实现对每个待测函数的准确监控,而不再仅仅是按照一定采样间隔采样待测函数,从而克服现有技术中由于采样间隔所导致的遗漏被测试到的函数的问题。
需要说明的是,上述Inline Hook函数不需要如现有技术常用的方式获取函数原型中的全部参数,在本发明实施例中,只需获取待测函数的入口地址(即,函数地址),通过在待测函数的入口位置设置用于监控测试的Inline Hook函数(例如,实施例中所提到的处理函数),以实现对待测函数是否被测试到的测试统计。也就是说,通过本发明实施例中根据待测函数的函数地址设置的Inline Hook函数,而无需再获取待测软件中的函数的输入参数和输出参数的信息,例如,输入参数和输出参数的数据类型等,从而使得测试操作更加简化,节省了获取函数原型再测试的测试时间,进一步提高了对待测软件的测试效率。
具体结合以下示例进行说明,通过从待测软件的pdb文件中获取待测软件中每个待测函数的入口地址后,将上述处理函数(如Inline Hook函数)设置在每个待测函数的入口位置,从而实现在测试用例执行到每个待测函数时,可以直接通过处理函数(如Inline Hook函数)监控该待测函数是否被测试到,进一步还可以统计出该待测函数在上述测试过程中被运行的次数,从而实现准确获取对待测函数的测试结果,其中,测试结果的界面可以如图3所示。例如,假设待测软件S中待测函数的总数目为4个,其中,通过Inline Hook函数在每个待测函数的入口位置监控,得到被测试用例测试到的待测函数A、B、C和D,被运行的次数分别为100,50,30和20,单位为次。
通过本发明提供的实施例,在从待测软件的程序数据库文件中获取待测软件的函数信息列表后,通过根据函数信息列表中每个待测函数的函数地址对每个待测函数设置处理函数,以便于在使用测试用例对待测软件进行测试的过程中,利用与每个待测函数对应的处理函数,分别获取每个待测函数被运行的次数,以准确统计待测软件中每个待测函数实际运行的次数,从而实现提高对待测软件进行测试时的测试准确性,进而克服现有技术中由于采用定时采样测试待测软件所导致的测试准确性降低的问题。进一步,在本发明实施例中根据每个待测函数的函数地址对每个待测函数设置处理函数无需获取待测软件中的函数的输入参数和输出参数的信息,从而实现在保证准确测试待测软件中待测的函数的同时,简化了测试步骤,提高了对软件的测试效率。
作为一种可选的方案,根据每个待测函数的函数地址对每个待测函数设置处理函数包括:
S1,将待测函数在函数地址上的原始指令替换成跳转指令,其中,跳转指令用于跳转到处理函数的函数地址。
可选地,在本发明实施例中,上述在函数地址上的原始指令替换成跳转指令的位置可以包括但不限于:在待测函数的入口位置。也就是说,将待测函数在函数地址上的入口处的原始指令替换为跳转指令,以实现在通过测试用例开始对每个待测函数进行测试时,可以直接跳转到处理函数所在的位置,从而通过利用处理函数获取每个待测函数被运行的次数。
具体结合以下示例进行说明,假设待测软件S中待测函数的总数目为4个,分别是待测函数A、B、C和D,其中,以待测函数A为例,在对待测函数A的函数地址设置处理函数的过程中,首先,将待测函数A的函数地址上的原始指令(如图4所示的原始指令)替换成跳转指令(如图4所示的JMP指令),并将原始指令(如图4所示的原始指令)放置在处理函数执行完之后的地址上,进一步,在位于处理函数之后的原始指令(如图4所示的原始指令)后设置回跳指令(如图4所示的JMP后续指令),其中,该回跳指令(如图4所示的JMP后续指令)用于跳转到待测函数A中位于原始指令之后的后续指令(如图4所示的后续指令)。
因而,测试用例在执行到待测函数A时,将跳转到替换过的处理函数的函数地址开始执行处理函数,以统计待测函数A在本次测试中运行的次数。例如,假设待测函数为f(x),处理函数为F(x),其中,待测函数A可以用f(1)标识,则用F(x1)标识当前正在测试的待测函数为待测函数A;进一步,为了保证待测函数的运行在处理函数处理前后不会产生变化,测试所用的处理函数可以重复多次使用,在本发明实施例中,将把待测函数使用的寄存器及处理函数的输入参数入栈,从而实现通过用于标识待测函数A的F(x1)来统计当前待测函数A被运行的次数。其中,处理函数的处理方式可以如下:
.runTims++
也就是说,当待测函数A每运行一次,与待测函数A对应的处理函数将对待测函数A被运行的次数执行加一处理,以准确统计待测函数A在测试过程中被运行的次数。
通过本发明提供的实施例,通过将待测函数在函数地址上的原始指令替换成跳转到处理函数的函数地址的跳转指令,以实现在通过测试用例对待测软件中的待测函数进行测试的过程中,可以准确监控到每个待测函数被运行的次数。
作为一种可选的方案,在对待测软件进行的测试过程中通过处理函数获取每个待测函数被运行的次数包括:
S1,根据跳转指令从待测函数的函数地址跳转到处理函数的函数地址;
S2,将待测函数使用到的寄存器入栈,以便对待测函数进行现场保护;
S3,将处理函数的输入参数入栈,处理函数的输入参数用于指示当前测试为的待测函数;
作为一种可选的示例,同一个处理函数可以适用于不同的待测函数,因此,可以通过处理函数的输入参数来表示当前是获取哪个待测函数的被运行的次数,例如,入栈的处理函数的输入参数可以为待测函数f1的名称或者对应的编号N1,以表示当前获取的是该待测函数f1的被运行的次数。
S4,将待测函数使用到的寄存器出栈,以便对待测函数进行现场恢复;
S5,将待测函数使用到的寄存器出栈进行现场恢复;
S6,运行原始指令;
S7,跳转到待测函数中位于原始指令之后的后续指令,以执行后续指令。
需要说明的是,在通过测试用例对待测函数进行测试的过程中,为了保证待测函数不会因设置的处理函数而受到影响,在本发明实施例中,通过对待测函数使用到的寄存器进行入栈保护,并在处理函数处理后,再进行现场恢复,从而保证待测函数的运行在处理函数处理前后不会产生变化,以避免在测试过程中由于软件测试而影响待测软件中待测函数的运行。
进一步,将处理函数的输入参数入栈,以表示当前是获取哪个待测函数的被运行的次数,使得同一个处理函数可以适用于不同的待测函数,从而提高处理函数的利用率。
具体结合图4所示示例进行说明,假设待测函数在函数地址上的原始指令共包括三条指令,占五个字节,每条指令所占字节如图4所示,其中,原始指令的具体内容如下:
MOV EDI,EDI
PUSH EBP
MOV EBP,ESP
在使用测试用例对待测软件进行测试的过程中,由于待测函数在函数地址00401087-0040108B上的原始指令被替换为跳转指令,其中,跳转指令的具体内容如下:
JMP 00500000
当读取到上述替换过的跳转指令后,将根据跳转指令从待测函数的函数地址跳转到处理函数的函数地址,即00500000,并将对应的待测函数使用到的寄存器入栈进行现场保护,同时也将处理函数(如图4所示处理函数)的输入参数入栈,以表示当前是获取哪个待测函数的被运行的次数;进一步,在对上述输入参数的入栈后,开始调用处理函数获取待测函数被运行的次数,并在获取到待测函数被运行的次数后,将待测函数使用到的寄存器出栈进行现场恢复。
进一步,在完成现场恢复后,运行原始指令,其中,该原始指令的函数地址变更为00500020-00500024。然后,将再次跳转到待测函数中在原始指令之后的后续指令,以执行后续指令。其中,上述后续指令如图4所示,占用一个字节,具体内容如下:
PUSH ECX
需要说明的是,上述仅是一种示例,本发明实施例对此不做任何限定。
通过本发明提供的实施例,在跳转到处理函数的函数地址前,对待测函数使用到的寄存器入栈进行现场保护,并在完成操作后再将其出栈进行现场恢复,从而保证在处理函数获取待测函数被运行的次数之后,不会影响待测软件中待测函数的正常运行。此外,在本发明实施例中,调用处理函数之前,将处理函数的输入参数入栈,以表示当前是获取哪个待测函数的被运行的次数,使得同一个处理函数可以适用于不同的待测函数,从而提高处理函数的利用率。
作为一种可选的方案,在对待测软件进行的测试过程中通过处理函数获取每个待测函数被运行的次数之后,还包括:
S1,根据次数和待测软件中待测函数的总数获取待测软件的函数覆盖率,函数覆盖率用于指示待测软件中被运行的待测函数的数量与待测函数的总数的比值。
可选地,在本发明实施例中,上述待测软件中的待测函数的总数的获取方式可以包括但不限于:在测试用例测试待测软件之前直接获取得到、通过每个待测函数中的处理函数统计得到。
需要说明的是,在本发明实施例中,由于处理函数在测试监控的过程中可能会出现监控失败,这将导致通过每个待测函数中的处理函数统计得到的待测函数的总数小于直接获取得到的待测函数的总数,但由于误差较小,因而,在本发明实施例中对此忽略不计。
例如,如图5所示,假设通过测试用例测试的为待测软件D,其中,从pdb文件中获取到待测软件D的待测函数的总数为13653个。
可选地,在本发明实施例中,根据待测函数被运行的次数获取被运行的待测函数的数量的方式可以包括但不限于:在待测函数被运行到的次数大于1时,统计该待测函数为一个被运行到的待测函数。也就是说,一旦处理函数获取到对应的待测函数被运行的次数,则可判定该待测函数已被测试用例测试到,即被运行过。例如,如图5所示,经判定得到待测软件D中被运行的待测函数的数量为8920个。
进一步,利用上述被运行到的待测函数的数量和待测软件中待测函数的总数,来计算待测软件的函数覆盖率。例如,基于上述图5所示示例可以得到:待测软件D的函数覆盖率=8920/13653=65.33%。
通过本发明提供的实施例,根据每个待测函数被运行的次数和待测软件中待测函数的总数获取待测软件的函数覆盖率,从而便于测试人员获知在利用测试用例进行测试的过程中,对待测软件的测试是否充分,进而便于相关人员通过调整测试用例,来使得待测的软件中的目标函数的运行的次数满足测试要求,以提高对待测软件测试的准确性。
作为一种可选的方案,根据次数和待测软件中待测函数的总数获取待测软件的函数覆盖率包括:
S1,获取被运行的次数大于0的待测函数的个数N;
S2,通过以下公式获取待测软件的函数覆盖率P:P=N/Sum,其中,Sum表示待测软件中待测函数的总数。
具体结合以下示例进行说明,假设待测软件F中通过处理函数获取到待测函数被运行的次数大于0的待测函数分别是待测函数A、B、C、D和E,即P=5,其被运行的次数分别为100、50、30、20和0,也就是说,待测函数E并未被运行到,被运行的次数大于1的共4个待测函数,即N=4,则待测软件F的函数覆盖率为80%。
需要说明的是,在本发明实施例中,当待测软件的函数覆盖率低于预定阈值时,可以包括但不限于执行以下至少一种操作:
1)通过处理函数重新获取待测函数被运行的次数。也就是说,通过重复多次获取测试结果,以避免偶然的测试结果对待测软件造成误判的问题。
2)调整测试用例重新进行测试。从而实现对待测函数进行全面的测试,以准确测试出待测函数中可能存在的问题。
通过本发明提供的实施例,通过计算获取待测软件的函数覆盖率,从而实现通过测试覆盖率来发现待测软件中可能存在的问题,进而便于相关人员通过调整测试用例来实现更加有效的测试,以提高对待测软件测试的准确性。
作为一种可选的方案,在对待测软件进行的测试过程中通过处理函数获取每个待测函数被运行的次数之后,还包括:
S1,输出次数大于预定阈值的待测函数的函数名和对应的被运行的次数。
可选地,在本发明实施例中,在获取到每个待测函数被运行的次数后,还可以包括但不限于:按照待测软件中待测函数被运行的次数的大小排序;统计待测软件中的热点函数。从而便于相关测试人员可以对多次运行的热点函数进行重点维护,提高待测软件的运行寿命。
需要说明的是,在本发明实施例中,上述预定阈值可以但不限于根据不同的应用场景取不同数值。本发明实施例在此不做任何限定。
例如,假设仍以待测软件S为例,通过点击如图6所示的“热点函数”显示热点函数的函数名和对应的被运行的次数,例如,预定阈值为45次,则热点函数可以如图7所示,分别包括待测函数A和待测函数B,其中,被运行的次数分别为100次和50次。
通过本发明提供的实施例,通过输出被运行的次数大于预定阈值的待测函数的函数名和对应的被运行的次数,即热点函数的相关参数,以便于相关测试人员及时调整维护被运行较多的热点函数,进一步,还可以对热点函数进行进一步的开发完善,从而达到对待测软件进行优化的效果。
需要说明的是,对于前述的实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本发明并不受所描述的动作顺序的限制,因为依据本发明,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定是本发明所必须的。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到根据上述实施例的方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如ROM/RAM、磁碟、光盘)中,包括若干指令用以使得一台终端设备(可以是手机,计算机,服务器,或者网络设备等)执行本发明各个实施例所述的方法。
实施例2
在本发明实施例中,用于实施上述软件的测试方法的软件的测试装置的具体应用场景可以参考上述实施例1,本发明实施例在此不再赘述。
根据本发明实施例,还提供了一种用于实施上述软件的测试方法的软件的测试装置,如图8所示,该装置包括:
1)第一获取单元802,用于获取待测软件的函数信息列表,函数信息列表包括:待测软件中的待测函数的函数地址,并将每个待测函数的函数地址发送至设置单元;
2)设置单元804,用于接收第一获取单元发送的每个待测函数的函数地址,根据每个待测函数的函数地址对每个待测函数设置处理函数,处理函数用于在测试过程中对每个待测函数被运行的次数进行统计,将处理函数发送至测试单元;
3)测试单元806,用于接收设置单元发送的处理函数,在对待测软件进行的测试过程中通过处理函数获取每个待测函数被运行的次数。
可选地,在本发明实施例中,上述软件的测试装置可以但不限于应用于利用测试用例对待测软件进行测试时,获取待测软件中被测试用例测试到的函数的函数覆盖率的过程中。其中,上述待测软件可以包括但不限于任意一种有源码软件,或任意一种无源码软件,尤其是对于无源码软件,例如,代理游戏,由于无源码软件无法获知执行源码,因而,现有技术还尚未提供针对无源码软件的函数覆盖率的测试方式。在本发明实施例中,在从待测软件的程序数据库文件中获取待测软件的函数信息列表后,通过根据函数信息列表中每个待测函数的函数地址对每个待测函数设置处理函数,在使用测试用例对待测软件进行测试时,利用与每个待测函数对应的处理函数,获取每个待测函数被运行的次数,以准确统计待测软件中每个待测函数实际运行的次数,从而实现准确获取待测软件中被测试用例测试到的函数的函数覆盖率,进而克服现有技术中由于采用定时采样测试待测软件所导致的测试准确性降低的问题。
可选地,在本发明实施例中,上述测试用例是为了测试预定程序路径或核实是否满足预定测试需求而编制的一组测试代码。需要说明的是,在本发明实施例中,对测试用例的内容和格式均不做任何限定。
需要说明的是,在本发明实施例中,通过处理函数获取到的每个待测函数被运行的次数,不仅仅限于应用于获取待测软件中被测试用例测试到的函数的函数覆盖率的过程中,还可以但不限于应用于其他场景。本发明实施例中提供的是一种示例,本发明实施例并不限于此。
可选地,在本发明实施例中,上述从待测软件的程序数据库文件中获取的待测软件的函数信息列表可以包括但不限于:待测软件中待测函数的函数名称和函数地址等。其中,程序数据库(Program Datebase,PDB)文件,也称pdb文件,其中,pdb文件保存有:函数原型(例如,函数名称、函数的输入参数和输出参数的数据类型)、函数地址。
可选地,在本发明实施例中,根据待测函数的函数地址对每个待测函数设置处理函数的方式可以包括但不限于以下至少之一:将处理函数插入到每个待测函数中的预定位置,在每个待测函数中设置跳转语句跳转到处理函数所在位置。
可选地,在本发明实施例中,上述处理函数可以包括但不限于Hook函数,例如,Inline Hook函数,通过根据每个待测函数的函数地址设置对每个待测函数用于监控的Hook函数,以便于在使用测试用例对待测软件进行测试的过程中,实现对每个待测函数的准确监控,而不再仅仅是按照一定采样间隔采样待测函数,从而克服现有技术中由于采样间隔所导致的遗漏被测试到的函数的问题。
需要说明的是,上述Inline Hook函数不需要如现有技术常用的方式获取函数原型中的全部参数,在本发明实施例中,只需获取待测函数的入口地址(即,函数地址),通过在待测函数的入口位置设置用于监控测试的Inline Hook函数(例如,实施例中所提到的处理函数),以实现对待测函数是否被测试到的测试统计。也就是说,通过本发明实施例中根据待测函数的函数地址设置的Inline Hook函数,而无需再获取待测软件中的函数的输入参数和输出参数的信息,例如,输入参数和输出参数的数据类型等,从而使得测试操作更加简化,节省了获取函数原型再测试的测试时间,进一步提高了对待测软件的测试效率。
具体结合以下示例进行说明,通过从待测软件的pdb文件中获取待测软件中每个待测函数的入口地址后,将上述处理函数(如Inline Hook函数)设置在每个待测函数的入口位置,从而实现在测试用例执行到每个待测函数时,可以直接通过处理函数(如Inline Hook函数)监控该待测函数是否被测试到,进一步还可以统计出该待测函数在上述测试过程中被运行的次数,从而实现准确获取对待测函数的测试结果,其中,测试结果的界面可以如图3所示。例如,假设待测软件S中待测函数的总数目为4个,其中,通过Inline Hook函数在每个待测函数的入口位置监控,得到被测试用例测试到的待测函数A、B、C和D,被运行的次数分别为100,50,30和20,单位为次。
通过本发明提供的实施例,在从待测软件的程序数据库文件中获取待测软件的函数信息列表后,通过根据函数信息列表中每个待测函数的函数地址对每个待测函数设置处理函数,以便于在使用测试用例对待测软件进行测试的过程中,利用与每个待测函数对应的处理函数,分别获取每个待测函数被运行的次数,以准确统计待测软件中每个待测函数实际运行的次数,从而实现提高对待测软件进行测试时的测试准确性,进而克服现有技术中由于采用定时采样测试待测软件所导致的测试准确性降低的问题。进一步,在本发明实施例中根据每个待测函数的函数地址对每个待测函数设置处理函数无需获取待测软件中的函数的输入参数和输出参数的信息,从而实现在保证准确测试待测软件中待测的函数的同时,简化了测试步骤,提高了对软件的测试效率。
作为一种可选的方案,如图9所示,设置单元804包括:
1)替换模块902,用于将待测函数在函数地址上的原始指令替换成跳转指令,其中,跳转指令用于跳转到处理函数的函数地址。
可选地,在本发明实施例中,上述在函数地址上的原始指令替换成跳转指令的位置可以包括但不限于:在待测函数的入口位置。也就是说,将待测函数在函数地址上的入口处的原始指令替换为跳转指令,以实现在通过测试用例开始对每个待测函数进行测试时,可以直接跳转到处理函数所在的位置,从而通过利用处理函数获取每个待测函数被运行的次数。
具体结合以下示例进行说明,假设待测软件S中待测函数的总数目为4个,分别是待测函数A、B、C和D,其中,以待测函数A为例,在对待测函数A的函数地址设置处理函数的过程中,首先,将待测函数A的函数地址上的原始指令(如图4所示的原始指令)替换成跳转指令(如图4所示的JMP指令),并将原始指令(如图4所示的原始指令)放置在处理函数执行完之后的地址上,进一步,在位于处理函数之后的原始指令(如图4所示的原始指令)后设置回跳指令(如图4所示的JMP后续指令),其中,该回跳指令(如图4所示的JMP后续指令)用于跳转到待测函数A中位于原始指令之后的后续指令(如图4所示的后续指令)。
因而,测试用例在执行到待测函数A时,将跳转到替换过的处理函数的函数地址开始执行处理函数,以统计待测函数A在本次测试中运行的次数。例如,假设待测函数为f(x),处理函数为F(x),其中,待测函数A可以用f(1)标识,则用F(x1)标识当前正在测试的待测函数为待测函数A;进一步,为了保证待测函数的运行在处理函数处理前后不会产生变化,测试所用的处理函数可以重复多次使用,在本发明实施例中,将把待测函数使用的寄存器及处理函数的输入参数入栈,从而实现通过用于标识待测函数A的F(x1)来统计当前待测函数A被运行的次数。其中,处理函数的处理方式可以如下:
.runTims++
也就是说,当待测函数A每运行一次,与待测函数A对应的处理函数将对待测函数A被运行的次数执行加一处理,以准确统计待测函数A在测试过程中被运行的次数。
通过本发明提供的实施例,通过将待测函数在函数地址上的原始指令替换成跳转到处理函数的函数地址的跳转指令,以实现在通过测试用例对待测软件中的待测函数进行测试的过程中,可以准确监控到每个待测函数被运行的次数。
作为一种可选的方案,如图10所示,测试单元806包括:
1)第一跳转模块1002,用于根据跳转指令从待测函数的函数地址跳转到处理函数的函数地址;
2)第一保护模块1004,用于将待测函数使用到的寄存器入栈,以便对待测函数进行现场保护;
3)第二保护模块1006,用于将处理函数的输入参数入栈,处理函数的输入参数用于指示当前测试为的待测函数;
作为一种可选的示例,同一个处理函数可以适用于不同的待测函数,因此,可以通过处理函数的输入参数来表示当前是获取哪个待测函数的被运行的次数,例如,入栈的处理函数的输入参数可以为待测函数f1的名称或者对应的编号N1,以表示当前获取的是该待测函数f1的被运行的次数。
4)调用模块1008,用于调用处理函数获取待测函数被运行的次数;
5)恢复模块1010,用于将待测函数使用到的寄存器出栈,以便对待测函数进行现场恢复;
6)运行模块1012,用于运行原始指令;
7)第二跳转模块1014,用于跳转到待测函数中位于原始指令之后的后续指令,以执行后续指令。
需要说明的是,在通过测试用例对待测函数进行测试的过程中,为了保证待测函数不会因设置的处理函数而受到影响,在本发明实施例中,通过对待测函数进行入栈保护,并在处理函数处理后,再进行现场恢复,从而保证待测函数在处理函数处理前后不会产生变化,以避免在测试过程中由于软件测试而影响待测软件中待测函数的运行。
进一步,将处理函数的输入参数入栈,以表示当前是获取哪个待测函数的被运行的次数,以使同一个处理函数可以适用于不同的待测函数,从而提高处理函数的利用率。
具体结合图4所示示例进行说明,假设待测函数在函数地址上的原始指令共包括三条指令,占五个字节,每条指令所占字节如图4所示,其中,原始指令的具体内容如下:
MOV EDI,EDI
PUSH EBP
MOV EBP,ESP
在使用测试用例对待测软件进行测试的过程中,由于待测函数在函数地址00401087-0040108B上的原始指令被替换为跳转指令,其中,跳转指令的具体内容如下:
JMP 00500000
当读取到上述替换过的跳转指令后,将根据跳转指令从待测函数的函数地址跳转到处理函数的函数地址,即00500000,并将对应的待测函数使用到的寄存器入栈进行现场保护,同时也将处理函数(如图4所示处理函数)的输入参数入栈,以表示当前是获取哪个待测函数的被运行的次数;进一步,在对上述输入参数的入栈后,开始调用处理函数获取待测函数被运行的次数,并在获取到待测函数被运行的次数后,将待测函数使用到的寄存器出栈进行现场恢复。
进一步,在完成现场恢复后,运行原始指令,其中,该原始指令的函数地址变更为00500020-00500024。然后,将再次跳转到待测函数中在原始指令之后的后续指令,以执行后续指令。其中,上述后续指令如图4所示,占用一个字节,具体内容如下:
PUSH ECX
需要说明的是,上述仅是一种示例,本发明实施例对此不做任何限定。
通过本发明提供的实施例,在跳转到处理函数的函数地址前,对待测函数使用到的寄存器入栈进行现场保护,并在完成操作后再将其出栈进行现场恢复,从而保证在处理函数获取待测函数被运行的次数之后,不会影响待测软件中待测函数的正常运行。此外,在本发明实施例中,调用处理函数之前,将处理函数的输入参数入栈,以表示当前是获取哪个待测函数的被运行的次数,以使同一个处理函数可以适用于不同的待测函数,从而提高处理函数的利用率。
作为一种可选的方案,如图11所示,上述装置还包括:
1)第二获取单元1102,用于在对待测软件进行的测试过程中通过处理函数获取每个待测函数被运行的次数之后,根据次数和待测软件中待测函数的总数获取待测软件的函数覆盖率,函数覆盖率用于指示待测软件中被运行的待测函数的数量与待测函数的总数的比值。
需要说明的是,在本发明实施例中,由于处理函数在测试监控的过程中可能会出现监控失败,这将导致通过每个待测函数中的处理函数统计得到的待测函数的总数小于直接获取得到的待测函数的总数,但由于误差较小,因而,在本发明实施例中对此忽略不计。
例如,如图5所示,假设通过测试用例测试的为待测软件D,其中,从pdb文件中获取到待测软件D的待测函数的总数为13653个。
可选地,在本发明实施例中,根据待测函数被运行的次数获取被运行的待测函数的数量的方式可以包括但不限于:在待测函数被运行到的次数大于1时,统计该待测函数为一个被运行到的待测函数。也就是说,一旦处理函数获取到对应的待测函数被运行的次数,则可判定该待测函数已被测试用例测试到,即被运行过。例如,如图5所示,经判定得到待测软件D中被运行的待测函数的数量为8920个。
进一步,利用上述被运行到的待测函数的数量和待测软件中待测函数的总数,来计算待测软件的函数覆盖率。例如,基于上述图5所示示例可以得到:待测软件D的函数覆盖率为=8920/13653=65.33%。
通过本发明提供的实施例,根据每个待测函数被运行的次数和待测软件中待测函数的总数获取待测软件的函数覆盖率,从而便于测试人员获知在利用测试用例进行测试的过程中,对待测软件的测试是否充分,进而便于相关人员通过调整测试用例,来使得待测的软件中的目标函数的运行的次数满足测试要求,以提高对待测软件测试的准确性。
作为一种可选的方案,如图12所示,第二获取单元1102包括:
1)第一获取模块1202,用于获取被运行的次数大于0的待测函数的个数N;
2)第二获取模块1204,用于通过以下公式获取待测软件的函数覆盖率P:P=N/Sum,其中,Sum表示待测软件中待测函数的总数。
具体结合以下示例进行说明,假设待测软件F中通过处理函数获取到待测函数被运行的次数大于0的待测函数分别是待测函数A、B、C、D和E,即P=5,其被运行的次数分别为100、50、30、20和0,也就是说,待测函数E并未被运行到,被运行的次数大于1的共4个待测函数,即N=4,则待测软件F的函数覆盖率为80%。
需要说明的是,在本发明实施例中,当待测软件的函数覆盖率低于预定阈值时,可以包括但不限于执行以下至少一种操作:
1)通过处理函数重新获取待测函数被运行的次数。也就是说,通过重复多次获取测试结果,以避免偶然的测试结果对待测软件造成误判的问题。
2)调整测试用例重新进行测试。从而实现对待测函数进行全面的测试,以准确测试出待测函数中可能存在的问题。
通过本发明提供的实施例,通过计算获取待测软件的函数覆盖率,从而实现通过测试覆盖率来发现待测软件中可能存在的问题,进而便于相关人员通过调整测试用例来实现更加有效的测试,以提高对待测软件测试的准确性。
作为一种可选的方案,如图13所示,上述装置还包括:
1)输出单元1302,用于在对待测软件进行的测试过程中通过处理函数获取每个待测函数被运行的次数之后,输出次数大于预定阈值的待测函数的函数名和对应的被运行的次数。
可选地,在本发明实施例中,在获取到每个待测函数被运行的次数后,还可以包括但不限于:按照待测软件中待测函数被运行的次数的大小排序;统计待测软件中的热点函数。从而便于相关测试人员可以对多次运行的热点函数进行重点维护,提高待测软件的运行寿命。
需要说明的是,在本发明实施例中,上述预定阈值可以但不限于根据不同的应用场景取不同数值。本发明实施例在此不做任何限定。
例如,假设仍以待测软件S为例,通过点击如图6所示的“热点函数”显示热点函数的函数名和对应的被运行的次数,例如,预定阈值为45次,则热点函数可以如图7所示,分别包括待测函数A和待测函数B,其中,被运行的次数分别为100次和50次。
通过本发明提供的实施例,通过输出被运行的次数大于预定阈值的待测函数的函数名和对应的被运行的次数,即热点函数的相关参数,以便于相关测试人员及时调整维护被运行较多的热点函数,进一步,还可以对热点函数进行进一步的开发完善,从而达到对待测软件进行优化的效果。
实施例3
根据本发明实施例,还提供了一种用于实施上述软件的测试方法的测试服务器,如图14所示,该服务器包括:
1)通讯接口1402,被设置为从待测软件的程序数据库文件中获取待测软件的函数信息列表,其中,函数信息列表包括:待测软件中的待测函数的函数地址;
2)存储器1404,被设置为存储获取到的待测软件的程序数据库文件,以及处理函数,其中,处理函数用于在测试过程中对每个待测函数被运行的次数进行统计;
3)处理器1406,被设置为在使用测试用例对待测软件进行的测试过程中通过处理函数获取每个待测函数被运行的次数。
可选地,在本发明实施例中,上述服务器可以但不限于网络中任意一台网络设备。
可选地,本发明实施例中的具体示例可以参考上述实施例1和实施例2中所描述的示例,本发明实施例在此不再赘述。
实施例4
本发明的实施例还提供了一种存储介质。可选地,在本发明实施例中,存储介质被设置为存储用于执行以下步骤的程序代码:
S1,从待测软件的程序数据库文件中获取待测软件的函数信息列表,其中,函数信息列表包括:待测软件中的待测函数的函数地址;
S2,根据每个待测函数的函数地址对每个待测函数设置处理函数,其中,处理函数用于在测试过程中对每个待测函数被运行的次数进行统计;
S3,在使用测试用例对待测软件进行的测试过程中通过处理函数获取每个待测函数被运行的次数。
可选地,在本发明实施例中,上述存储介质可以包括但不限于:U盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,RandomAccess Memory)、移动硬盘、磁碟或者光盘等各种可以存储程序代码的介质。
可选地,本发明实施例中的具体示例可以参考上述实施例1和实施例2中所描述的示例,本发明实施例在此不再赘述。
上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。
上述实施例中的集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在上述计算机可读取的存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在存储介质中,包括若干指令用以使得一台或多台计算机设备(可为个人计算机、服务器或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。
在本发明的上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。
在本申请所提供的几个实施例中,应该理解到,所揭露的客户端,可通过其它的方式实现。其中,以上所描述的装置实施例仅仅是示意性的,例如所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,单元或模块的间接耦合或通信连接,可以是电性或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本发明实施例方案的目的。
另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。
Claims (12)
1.一种软件的测试方法,其特征在于,所述方法包括:
获取待测软件的函数信息列表,所述函数信息列表包括:所述待测软件中的待测函数的函数地址;
根据每个所述待测函数的函数地址对每个所述待测函数设置处理函数,所述处理函数用于在测试过程中对每个所述待测函数被运行的次数进行统计;
在对所述待测软件进行的所述测试过程中通过所述处理函数获取每个所述待测函数被运行的次数。
2.根据权利要求1所述的方法,其特征在于,所述根据每个所述待测函数的函数地址对每个所述待测函数设置处理函数包括:
将所述待测函数在所述函数地址上的原始指令替换成跳转指令,其中,所述跳转指令用于跳转到所述处理函数的函数地址。
3.根据权利要求2所述的方法,其特征在于,所述在对所述待测软件进行的所述测试过程中通过所述处理函数获取每个所述待测函数被运行的次数包括:
根据所述跳转指令从所述待测函数的所述函数地址跳转到所述处理函数的函数地址;
将所述待测函数使用到的寄存器入栈,以便对所述待测函数进行现场保护;
将所述处理函数的输入参数入栈,所述处理函数的输入参数用于指示当前测试的为所述待测函数;
调用所述处理函数获取所述待测函数被运行的次数;
将所述待测函数使用到的所述寄存器出栈,以便对所述待测函数进行现场恢复;
运行所述原始指令;
跳转到所述待测函数中位于所述原始指令之后的后续指令,以执行所述后续指令。
4.根据权利要求1所述的方法,其特征在于,在对所述待测软件进行的所述测试过程中通过所述处理函数获取每个所述待测函数被运行的次数之后,还包括:
根据所述次数和所述待测软件中所述待测函数的总数获取所述待测软件的函数覆盖率,所述函数覆盖率用于指示所述待测软件中被运行的待测函数的数量与所述待测函数的总数的比值。
5.根据权利要求4所述的方法,其特征在于,根据所述次数和所述待测软件中所述待测函数的总数获取所述待测软件的函数覆盖率包括:
获取被运行的次数大于0的所述待测函数的个数N;
通过以下公式获取所述待测软件的函数覆盖率P:P=N/Sum,其中,Sum表示所述待测软件中所述待测函数的总数。
6.根据权利要求1所述的方法,其特征在于,在对所述待测软件进行的所述测试过程中通过所述处理函数获取每个所述待测函数被运行的次数之后,还包括:
输出次数大于预定阈值的所述待测函数的函数名和对应的被运行的次数。
7.一种软件的测试装置,其特征在于,所述装置包括:
第一获取单元,用于获取待测软件的函数信息列表,所述函数信息列表包括:所述待测软件中的待测函数的函数地址,并将每个所述待测函数的函数地址发送至设置单元;
所述设置单元,用于接收所述第一获取单元发送的每个所述待测函数的函数地址,根据每个所述待测函数的函数地址对每个所述待测函数设置处理函数,所述处理函数用于在测试过程中对每个所述待测函数被运行的次数进行统计,将所述处理函数发送至测试单元;
所述测试单元,用于接收所述设置单元发送的所述处理函数,在对所述待测软件进行的所述测试过程中通过所述处理函数获取每个所述待测函数被运行的次数。
8.根据权利要求7所述的装置,其特征在于,所述设置单元包括:
替换模块,用于将所述待测函数在所述函数地址上的原始指令替换成跳转指令,其中,所述跳转指令用于跳转到所述处理函数的函数地址。
9.根据权利要求8所述的装置,其特征在于,所述测试单元包括:
第一跳转模块,用于根据所述跳转指令从所述待测函数的所述函数地址跳转到所述处理函数的函数地址;
第一保护模块,用于将所述待测函数使用到的寄存器入栈,以便对所述待测函数进行现场保护;
第二保护模块,用于将所述处理函数的输入参数入栈,所述处理函数的输入参数用于指示当前测试的为所述待测函数;
调用模块,用于调用所述处理函数获取所述待测函数被运行的次数;
恢复模块,用于将所述待测函数使用到的所述寄存器出栈,以便对所述待测函数进行现场恢复;
运行模块,用于运行所述原始指令;
第二跳转模块,用于跳转到所述待测函数中位于所述原始指令之后的后续指令,以执行所述后续指令。
10.根据权利要求7所述的装置,其特征在于,所述装置还包括:
第二获取单元,用于在对所述待测软件进行的所述测试过程中通过所述处理函数获取每个所述待测函数被运行的次数之后,根据所述次数和所述待测软件中所述待测函数的总数获取所述待测软件的函数覆盖率,所述函数覆盖率用于指示所述待测软件中被运行的待测函数的数量与所述待测函数的总数的比值。
11.根据权利要求10所述的装置,其特征在于,所述第二获取单元包括:
第一获取模块,用于获取被运行的次数大于0的所述待测函数的个数N;
第二获取模块,用于通过以下公式获取所述待测软件的函数覆盖率P:P=N/Sum,其中,Sum表示所述待测软件中所述待测函数的总数。
12.根据权利要求7所述的装置,其特征在于,还包括:
输出单元,用于在对所述待测软件进行的所述测试过程中通过所述处理函数获取每个所述待测函数被运行的次数之后,输出次数大于预定阈值的所述待测函数的函数名和对应的被运行的次数。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510516314.1A CN107038108B (zh) | 2015-08-20 | 2015-08-20 | 软件的测试方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510516314.1A CN107038108B (zh) | 2015-08-20 | 2015-08-20 | 软件的测试方法和装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN107038108A true CN107038108A (zh) | 2017-08-11 |
CN107038108B CN107038108B (zh) | 2020-11-03 |
Family
ID=59532330
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510516314.1A Active CN107038108B (zh) | 2015-08-20 | 2015-08-20 | 软件的测试方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN107038108B (zh) |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107704383A (zh) * | 2017-09-12 | 2018-02-16 | 中国航空工业集团公司洛阳电光设备研究所 | 一种基于任务栈分析的动态测试函数覆盖率获取方法 |
CN108021357A (zh) * | 2017-11-20 | 2018-05-11 | 北京奇虎科技有限公司 | 程序调用的优化方法及装置 |
CN111324527A (zh) * | 2019-12-09 | 2020-06-23 | 许华敏 | 一种通过数据采集方式测试中断程序的装置及方法 |
CN111989655A (zh) * | 2019-03-22 | 2020-11-24 | 华为技术有限公司 | 一种soc芯片、确定热点函数的方法及终端设备 |
CN112631904A (zh) * | 2020-12-17 | 2021-04-09 | 展讯通信(上海)有限公司 | 函数调用信息的记录方法及设备 |
WO2023036076A1 (zh) * | 2021-09-13 | 2023-03-16 | 华为技术有限公司 | 一种软件监测方法以及相关装置 |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113886252B (zh) * | 2021-09-30 | 2023-05-23 | 四川大学 | 基于热力图的回归测试用例优先级确定方法 |
Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101464829A (zh) * | 2007-12-18 | 2009-06-24 | 珠海金山软件股份有限公司 | 确定代码覆盖率的方法、测试装置 |
CN101477491A (zh) * | 2009-01-16 | 2009-07-08 | 杭州华三通信技术有限公司 | 一种统计函数运行状态的方法和装置 |
CN101645037A (zh) * | 2009-09-11 | 2010-02-10 | 兰雨晴 | 基础软件平台应用程序接口集成测试覆盖分析方法 |
US20120110555A1 (en) * | 2010-10-29 | 2012-05-03 | International Business Machines Corporation | Varying removal of internal breakpoints during debugging of code |
CN102521123A (zh) * | 2011-11-24 | 2012-06-27 | 西安邮电学院 | 一种基于逻辑执行块的嵌入式软件测试插桩方法 |
US20120167059A1 (en) * | 2010-12-24 | 2012-06-28 | International Business Machines Corporation | Evaluating Coverage of a Software Test |
CN103019933A (zh) * | 2012-11-27 | 2013-04-03 | 网宿科技股份有限公司 | 测试用例覆盖度自动识别方法及装置 |
CN103761184A (zh) * | 2013-12-31 | 2014-04-30 | 华为技术有限公司 | 程序的代码段测试方法、装置和系统 |
-
2015
- 2015-08-20 CN CN201510516314.1A patent/CN107038108B/zh active Active
Patent Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101464829A (zh) * | 2007-12-18 | 2009-06-24 | 珠海金山软件股份有限公司 | 确定代码覆盖率的方法、测试装置 |
CN101477491A (zh) * | 2009-01-16 | 2009-07-08 | 杭州华三通信技术有限公司 | 一种统计函数运行状态的方法和装置 |
CN101645037A (zh) * | 2009-09-11 | 2010-02-10 | 兰雨晴 | 基础软件平台应用程序接口集成测试覆盖分析方法 |
US20120110555A1 (en) * | 2010-10-29 | 2012-05-03 | International Business Machines Corporation | Varying removal of internal breakpoints during debugging of code |
US20120167059A1 (en) * | 2010-12-24 | 2012-06-28 | International Business Machines Corporation | Evaluating Coverage of a Software Test |
CN102521123A (zh) * | 2011-11-24 | 2012-06-27 | 西安邮电学院 | 一种基于逻辑执行块的嵌入式软件测试插桩方法 |
CN103019933A (zh) * | 2012-11-27 | 2013-04-03 | 网宿科技股份有限公司 | 测试用例覆盖度自动识别方法及装置 |
CN103761184A (zh) * | 2013-12-31 | 2014-04-30 | 华为技术有限公司 | 程序的代码段测试方法、装置和系统 |
Non-Patent Citations (2)
Title |
---|
佚名: "代码覆盖率浅谈", 《HTTPS://WWW.CNBLOGS.COM/CODERZH/ARCHIVE/2009/03/29/1424344.HTML》 * |
李昱: "程序代码动态性能研究", 《中国优秀硕士学位论文全文数据库 信息科技辑》 * |
Cited By (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107704383A (zh) * | 2017-09-12 | 2018-02-16 | 中国航空工业集团公司洛阳电光设备研究所 | 一种基于任务栈分析的动态测试函数覆盖率获取方法 |
CN108021357A (zh) * | 2017-11-20 | 2018-05-11 | 北京奇虎科技有限公司 | 程序调用的优化方法及装置 |
CN111989655A (zh) * | 2019-03-22 | 2020-11-24 | 华为技术有限公司 | 一种soc芯片、确定热点函数的方法及终端设备 |
CN111324527A (zh) * | 2019-12-09 | 2020-06-23 | 许华敏 | 一种通过数据采集方式测试中断程序的装置及方法 |
CN111324527B (zh) * | 2019-12-09 | 2023-08-11 | 武汉滨湖电子有限责任公司 | 一种通过数据采集方式测试中断程序的装置及方法 |
CN112631904A (zh) * | 2020-12-17 | 2021-04-09 | 展讯通信(上海)有限公司 | 函数调用信息的记录方法及设备 |
WO2023036076A1 (zh) * | 2021-09-13 | 2023-03-16 | 华为技术有限公司 | 一种软件监测方法以及相关装置 |
Also Published As
Publication number | Publication date |
---|---|
CN107038108B (zh) | 2020-11-03 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107038108A (zh) | 软件的测试方法和装置 | |
CN106294120B (zh) | 测试代码的方法、设备和计算机程序产品 | |
CN109635564A (zh) | 一种检测暴力破解行为的方法、装置、介质及设备 | |
CN107679683B (zh) | 软件开发进度预警方法和装置 | |
CN107302527A (zh) | 一种设备异常检测方法及装置 | |
CN107634850B (zh) | 一种应用状态获取方法及其设备、存储介质、服务器 | |
CN112181804A (zh) | 一种参数校验方法、设备以及存储介质 | |
CN106201856A (zh) | 一种多版本性能测试方法及装置 | |
CN107346272A (zh) | 动态异构冗余系统的确定方法和装置 | |
CN106295348A (zh) | 应用程序的漏洞检测方法及装置 | |
CN108874470A (zh) | 一种信息处理方法及服务器、计算机存储介质 | |
CN111181923A (zh) | 流量检测方法、装置、电子设备及存储介质 | |
CN108282490A (zh) | 异常注册用户的处理方法、装置、计算机设备和存储介质 | |
CN107730096A (zh) | 一种情报数据源的质量评估方法及装置 | |
CN108134812A (zh) | 数据处理方法和装置 | |
CN111782317A (zh) | 页面的测试方法和装置、存储介质和电子装置 | |
CN109684309A (zh) | 一种数据质量评测方法及装置、计算机设备和存储介质 | |
CN106257507A (zh) | 用户行为的风险评估方法及装置 | |
CN109101819A (zh) | 一种漏洞检测方法及终端、存储介质 | |
US20190246297A1 (en) | Method and test system for mobile network testing as well as prediction system | |
CN108280024B (zh) | 流量分配策略测试方法、装置及电子设备 | |
CN110267215A (zh) | 一种数据检测方法、设备及存储介质 | |
CN113568836A (zh) | 多时间序列的样本特征提取方法以应用其的软件检测方法 | |
CN110807104B (zh) | 异常信息的确定方法及装置、存储介质、电子装置 | |
CN107222332A (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 |