CN110209582A - 代码覆盖率的统计方法及装置、电子设备、存储介质 - Google Patents
代码覆盖率的统计方法及装置、电子设备、存储介质 Download PDFInfo
- Publication number
- CN110209582A CN110209582A CN201910468467.1A CN201910468467A CN110209582A CN 110209582 A CN110209582 A CN 110209582A CN 201910468467 A CN201910468467 A CN 201910468467A CN 110209582 A CN110209582 A CN 110209582A
- Authority
- CN
- China
- Prior art keywords
- dynamic script
- code
- code coverage
- script
- call request
- 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
- 238000007619 statistical method Methods 0.000 title claims abstract description 18
- 238000000034 method Methods 0.000 claims abstract description 55
- 238000005259 measurement Methods 0.000 claims abstract description 40
- 230000004044 response Effects 0.000 claims abstract description 26
- 230000006870 function Effects 0.000 claims description 59
- 238000012360 testing method Methods 0.000 claims description 57
- 238000003780 insertion Methods 0.000 abstract description 14
- 230000037431 insertion Effects 0.000 abstract description 14
- 230000008569 process Effects 0.000 description 20
- 238000004364 calculation method Methods 0.000 description 10
- 238000010586 diagram Methods 0.000 description 8
- 241000208340 Araliaceae Species 0.000 description 3
- 235000005035 Panax pseudoginseng ssp. pseudoginseng Nutrition 0.000 description 3
- 235000003140 Panax quinquefolius Nutrition 0.000 description 3
- 230000008878 coupling Effects 0.000 description 3
- 238000010168 coupling process Methods 0.000 description 3
- 238000005859 coupling reaction Methods 0.000 description 3
- 235000008434 ginseng Nutrition 0.000 description 3
- 230000007246 mechanism Effects 0.000 description 3
- 238000012545 processing Methods 0.000 description 3
- 238000005516 engineering process Methods 0.000 description 2
- 230000001960 triggered effect Effects 0.000 description 2
- OKTJSMMVPCPJKN-UHFFFAOYSA-N Carbon Chemical compound [C] OKTJSMMVPCPJKN-UHFFFAOYSA-N 0.000 description 1
- 238000004458 analytical method Methods 0.000 description 1
- 230000006399 behavior Effects 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 230000001413 cellular effect Effects 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 235000013399 edible fruits Nutrition 0.000 description 1
- 229910021389 graphene Inorganic materials 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 238000005457 optimization Methods 0.000 description 1
- 230000003068 static effect Effects 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
- G06F11/3672—Test management
- G06F11/3676—Test management for coverage analysis
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
技术领域
本说明书一个或多个实施例涉及测试技术领域,尤其涉及一种代码覆盖率的统计方法及装置、电子设备、存储介质。
背景技术
在相关技术中,规则引擎***中的规则通常由动态脚本构成,而动态脚本的特点是:动态编译,即只有在执行时才会被编译。在执行动态脚本时,由解释器将其翻译成机器可识别的指令,并按照程序顺序执行。
代码覆盖率作为度量代码质量的一个重要指标,用于描述程序中代码被测试的比例和程度。在传统的覆盖率统计方案中,针对动态脚本的代码覆盖率统计,一般采用人工分析的方式,效率低下,准确度较低。
发明内容
有鉴于此,本说明书一个或多个实施例提供一种代码覆盖率的统计方法及装置、电子设备、存储介质。
为实现上述目的,本说明书一个或多个实施例提供技术方案如下:
根据本说明书一个或多个实施例的第一方面,提出了一种代码覆盖率的统计方法,应用于业务服务器,所述业务服务器中配置有待测试的动态脚本;所述方法包括:
在所述动态脚本的代码分支处***路径生成函数,所述路径生成函数用于在被执行时记录所处代码分支的执行路径;
接收针对所述动态脚本的调用请求;
响应于所述调用请求,执行所述动态脚本,以根据执行结果中记录的执行路径计算所述动态脚本的代码覆盖率。
可选的,
所述接收针对所述动态脚本的调用请求,包括:接收在预设时间段内来自于客户端的用户调用请求;
所述响应于所述调用请求,执行所述动态脚本,以根据执行结果中包含的执行路径计算所述动态脚本的代码覆盖率,包括:响应于所述用户调用请求,执行所述动态脚本,以根据执行结果中记录的执行路径计算所述动态脚本在所述预设时间段内的代码覆盖率。
可选的,所述预设时间段包括目标业务的用户活跃时间段,所述目标业务与所述动态脚本相关联。
可选的,所述接收针对所述动态脚本的调用请求,包括:
接收预定义的若干针对所述动态脚本的测试调用请求;其中,各个测试调用请求中包含的与所述动态脚本涉及的参数均不相同。
可选的,所述执行所述动态脚本,以根据执行结果中记录的执行路径计算所述动态脚本的代码覆盖率,包括:
执行所述动态脚本,并根据执行结果中记录的执行路径计算所述动态脚本的代码覆盖率;
或者,将执行结果发送至测试服务器,以使得所述测试服务器根据执行结果中记录的执行路径计算所述动态脚本的代码覆盖率。
可选的,通过以下方式计算所述动态脚本的代码覆盖率:
确定与执行结果中记录的执行路径对应的代码分支;
将确定出的代码分支与所述动态脚本的所有代码分支的比值,作为所述动态脚本的代码覆盖率。
可选的,还包括:
根据预定义的分支关键字识别所述动态脚本的代码分支;
或者,根据接收到的分支选取指令所指示的代码分支,识别所述动态脚本的代码分支。
可选的,所述路径生成函数包括输出函数。
根据本说明书一个或多个实施例的第二方面,提出了一种代码覆盖率的统计方法,应用于测试服务器;所述方法包括:
获取业务服务器响应于针对待测试的动态脚本的调用请求,执行所述动态脚本得到的执行结果;其中,所述动态脚本的代码分支处***有路径生成函数,所述路径生成函数用于在被执行时记录所处代码分支的执行路径;
根据所述执行结果中记录的执行路径计算所述动态脚本的代码覆盖率。
可选的,所述根据所述执行结果中记录的执行路径计算所述动态脚本的代码覆盖率,包括:
确定与所述执行结果中记录的执行路径对应的代码分支;
将确定出的代码分支与所述动态脚本的所有代码分支的比值,作为所述动态脚本的代码覆盖率。
根据本说明书一个或多个实施例的第三方面,提出了一种代码覆盖率的统计装置,应用于业务服务器,所述业务服务器中配置有待测试的动态脚本;所述装置包括:
标记单元,在所述动态脚本的代码分支处***路径生成函数,所述路径生成函数用于在被执行时记录所处代码分支的执行路径;
接收单元,接收针对所述动态脚本的调用请求;
执行单元,响应于所述调用请求,执行所述动态脚本,以根据执行结果中记录的执行路径计算所述动态脚本的代码覆盖率。
可选的,
所述接收单元具体用于:接收在预设时间段内来自于客户端的用户调用请求;
所述执行单元具体用于:响应于所述用户调用请求,执行所述动态脚本,以根据执行结果中记录的执行路径计算所述动态脚本在所述预设时间段内的代码覆盖率。
可选的,所述预设时间段包括目标业务的用户活跃时间段,所述目标业务与所述动态脚本相关联。
可选的,所述接收单元具体用于:
接收预定义的若干针对所述动态脚本的测试调用请求;其中,各个测试调用请求中包含的与所述动态脚本涉及的参数均不相同。
可选的,所述执行单元具体用于:
执行所述动态脚本,并根据执行结果中记录的执行路径计算所述动态脚本的代码覆盖率;
或者,将执行结果发送至测试服务器,以使得所述测试服务器根据执行结果中记录的执行路径计算所述动态脚本的代码覆盖率。
可选的,通过以下方式计算所述动态脚本的代码覆盖率:
确定与执行结果中记录的执行路径对应的代码分支;
将确定出的代码分支与所述动态脚本的所有代码分支的比值,作为所述动态脚本的代码覆盖率。
可选的,还包括:
识别单元,根据预定义的分支关键字识别所述动态脚本的代码分支;
或者,根据接收到的分支选取指令所指示的代码分支,识别所述动态脚本的代码分支。
可选的,所述路径生成函数包括输出函数。
根据本说明书一个或多个实施例的第四方面,提出了一种代码覆盖率的统计装置,应用于测试服务器;所述装置包括:
获取单元,获取业务服务器响应于针对待测试的动态脚本的调用请求,执行所述动态脚本得到的执行结果;其中,所述动态脚本的代码分支处***有路径生成函数,所述路径生成函数用于在被执行时记录所处代码分支的执行路径;
计算单元,根据所述执行结果中记录的执行路径计算所述动态脚本的代码覆盖率。
可选的,所述计算单元具体用于:
确定与所述执行结果中记录的执行路径对应的代码分支;
将确定出的代码分支与所述动态脚本的所有代码分支的比值,作为所述动态脚本的代码覆盖率。
根据本说明书一个或多个实施例的第五方面,提出了一种电子设备,包括:
处理器;
用于存储处理器可执行指令的存储器;
其中,所述处理器通过运行所述可执行指令以实现如上述第一方面实施例中所述的代码覆盖率的统计方法。
根据本说明书一个或多个实施例的第六方面,提出了一种电子设备,包括:
处理器;
用于存储处理器可执行指令的存储器;
其中,所述处理器通过运行所述可执行指令以实现如上述第二方面实施例中所述的代码覆盖率的统计方法。
根据本说明书一个或多个实施例的第七方面,提供一种计算机可读存储介质,其上存储有计算机指令,该指令被处理器执行时实现如上述第一方面实施例中代码覆盖率的统计方法的步骤。
根据本说明书一个或多个实施例的第八方面,提供一种计算机可读存储介质,其上存储有计算机指令,该指令被处理器执行时实现如上述第二方面实施例中代码覆盖率的统计方法的步骤。
由以上技术方案可见,本申请通过在执行待测试的动态脚本之前,在该动态脚本的代码分支处***路径生成函数,使得在执行动态脚本(***有路径生成函数)之后,可根据执行该路径生成函数而记录的执行路径来确定本次执行过程中覆盖的代码,从而得到动态脚本的代码覆盖率。
进一步的,基于本申请通过记录执行路径来确定执行过程中所覆盖代码的机制,覆盖率的计算操作可异步进行。比如,由业务服务器来执行动态脚本并记录执行路径,而根据执行路径计算覆盖率的操作则由专门的测试服务器来执行。一方面,可降低对业务服务器处理资源的占用;另一方面,***路径生成函数和计算覆盖率的操作可独立执行,可降低***、计算等过程与业务服务器执行动态脚本的耦合度。
附图说明
图1是一示例性实施例提供的一种代码覆盖率的统计方法的流程图。
图2是一示例性实施例提供的一种代码覆盖率的统计***的架构示意图。
图3是一示例性实施例提供的另一种代码覆盖率的统计方法的流程图。
图4是一示例性实施例提供的另一种代码覆盖率的统计方法的流程图。
图5是一示例性实施例提供的另一种代码覆盖率的统计方法的流程图。
图6是一示例性实施例提供的一种电子设备的结构示意图。
图7是一示例性实施例提供的一种代码覆盖率的统计装置的框图。
图8是一示例性实施例提供的另一种电子设备的结构示意图。
图9是一示例性实施例提供的另一种代码覆盖率的统计装置的框图。
具体实施方式
这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本说明书一个或多个实施例相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本说明书一个或多个实施例的一些方面相一致的装置和方法的例子。
需要说明的是:在其他实施例中并不一定按照本说明书示出和描述的顺序来执行相应方法的步骤。在一些其他实施例中,其方法所包括的步骤可以比本说明书所描述的更多或更少。此外,本说明书中所描述的单个步骤,在其他实施例中可能被分解为多个步骤进行描述;而本说明书中所描述的多个步骤,在其他实施例中也可能被合并为单个步骤进行描述。
请参见图1,图1是一示例性实施例提供的一种代码覆盖率的统计方法的流程图。如图1所示,该方法应用于业务服务器,该业务服务器中配置有待测试的动态脚本;该方法可以包括以下步骤:
步骤102,在所述动态脚本的代码分支处***路径生成函数,所述路径生成函数用于在被执行时记录所处代码分支的执行路径。
在本实施例中,动态脚本具有动态编译的特点,也即只有在执行时才会被编译。因此,需要在执行动态脚本之前进行代码分支的打标(即在代码分支处***路径生成函数);换言之,需要在编译动态脚本之前对该动态脚本的代码分支进行打标。
而对于动态脚本代码分支的识别,在一种情况下,可由开发人员预先定义分支关键字,该分支关键字用于表明所处的位置为动态脚本的代码分支。因此,可根据该预定义的分支关键字识别待测试的动态脚本的代码分支,进而在代码分支处进行打标。在另一种情况下,可由开发人员手动打标。例如,由开发人员根据经验识别出待测试的动态脚本的代码分支,并针对识别出的代码分支向业务服务器下发分支选取指令(包含所识别出的代码分支)。那么,业务服务器在接收到该分支选取指令后,根据接收到的分支选取指令所指示的代码分支,识别出动态脚本的代码分支。
在本实施例中,基于动态脚本的代码分支处***有路径生成函数,在后续执行该动态脚本时,也会随之执行该路径生成函数,从而记录下所处代码分支的执行路径。进一步的,路径生成函数可以是输出函数,也即在执行到该输出函数时,会输出与该输出函数对应的输出内容。其中,输出函数的输出内容可设定为标明该输出函数所处代码分支的分支名称(例如,可采用代码分支中的至少一部分语句)。那么,当执行结果中包含某一代码分支的分支名称时,可确定出执行动态脚本的过程中,该代码分支被触发执行过,即该代码分支被覆盖。
步骤104,接收针对所述动态脚本的调用请求。
需要说明的是,步骤104中接收到的调用请求可以为多个,并且各个调用请求中包含的与动态脚本涉及的参数可以不同。其中,动态脚本涉及的参数可理解为:动态脚本在执行时所引用的参数,即动态脚本对调用请求提供的参数进行一定的运算,以实现相应的功能。举例而言,假定动态脚本用于判定用户是否符合业务服务器提供的某一项业务的业务规则,该规则具体为:当用户为新用户时,可享受优惠权益A,当用户为老用户时,无法享受优惠权益A。在该情况下,动态脚本根据用户是否为新用户来判定该用户是否可享受优惠权益A,那么引用的参数为表明新用户身份或者老用户身份的身份标识。相应的,对应于新用户的调用请求中包含用于表明新用户身份的身份标识,而对应于老用户的调用请求中包含用于表明老用户身份的身份标识。可见,对应于新用户的调用请求与对应于老用户的调用请求所包含的与动态脚本涉及的参数不同,属于两种不同类型的调用请求。
在一实施例中,动态脚本配置于业务服务器中用于实现相应的业务逻辑。例如,待测试的动态脚本与业务服务器提供的某项业务(以下称之为目标业务)相关联;那么,可测试该动态脚本在业务服务器向用户提供目标业务的阶段(预设时间段)内的代码覆盖率。在该情况下,业务服务器可接收在预设时间段内来自于客户端的用户调用请求,进而响应于用户调用请求,执行动态脚本,以根据执行结果中记录的执行路径计算该动态脚本在该预设时间段内的代码覆盖率。
进一步的,可将测试的时间段缩短至目标业务的用户活跃时间段。其中,用户活跃时间段可理解为:相比于其他时间段内,在该时间段内请求该业务的用户的数量最多,或者达到预设数量;换言之,在用户活跃时间段内,业务服务器可接收到最多数量以及最多类型的调用请求。基于上述设定,则计算得到的代码覆盖率为处于用户活跃时间段内的代码覆盖率,进而开发人员可基于该代码覆盖率对动态脚本的代码进行调整。例如,当计算得到的代码覆盖率较小(可设定代码覆盖率阈值)时,说明即使是在用户活跃时间段内响应于各种类型的用户调用请求(不同类型的请求,入参不同)来执行动态脚本,该动态脚本中也存在大量未曾执行过的代码。那么,该部分代码很可能为冗余或者过期的代码,开发人员可进一步根据执行结果中包含的执行路径去查询出这部分代码以进行处理,从而有助于对动态脚本进行优化,减少动态脚本中的冗余代码。
在另一实施例中,开发人员可预定义若干针对待测试的动态脚本的测试调用请求,以调用执行该动态脚本。其中,各个测试调用请求中包含的与该动态脚本涉及的参数均不相同。
在该情况下,测试调用请求可理解为专门用于测试动态脚本的代码覆盖率。那么,当被测试的动态脚本的实际代码覆盖率(即采用数量较多、请求类型覆盖较广的调用请求调用执行该动态脚本时的代码覆盖率)较高时,若采用该测试调用请求(包含多个)得到的代码覆盖率反而较低,则可反向推断出该测试调用请求所包含的请求类型不够全面。因此,开发人员可进一步对该测试调用请求所覆盖的请求类型进行调整,以尽可能覆盖更多的请求类型,从而可提高利用该测试调用请求测试动态脚本的实际代码覆盖率的准确度。
步骤106,响应于所述调用请求,执行所述动态脚本,以根据执行结果中记录的执行路径计算所述动态脚本的代码覆盖率。
在一种情况下,可由业务服务器作为计算代码覆盖率的执行主体,也即由业务服务器执行动态脚本,并根据执行结果中记录的执行路径计算动态脚本的代码覆盖率。在另一种情况下,可由区别于业务服务器的测试服务器专门用于计算代码覆盖率,也即由业务服务器将执行结果发送至测试服务器,以使得测试服务器根据执行结果中记录的执行路径计算动态脚本的代码覆盖率。
其中,基于上述打标的过程,可通过以下方式计算动态脚本的代码覆盖率:先确定与执行结果中记录的执行路径对应的代码分支,再将确定出的代码分支与动态脚本的所有代码分支的比值,作为该动态脚本的代码覆盖率。
下面结合图2-3对测试服务器计算代码覆盖率的方案进行说明。
图2是一示例性实施例提供的一种代码覆盖率的统计***的架构示意图。如图2所示,该***可以包括业务服务器21、测试服务器22和网络23。
业务服务器21可以为包含一独立主机的物理服务器,或者该业务服务器21可以为主机集群承载的虚拟服务器。在运行过程中,业务服务器21执行被进行打标处理的动态脚本,并记录下动态脚本的执行路径。
测试服务器22为区别于业务服务器21的另一服务器,专门用于计算代码覆盖率。测试服务器22可以为包含一独立主机的物理服务器,或者该测试服务器22可以为主机集群承载的虚拟服务器。在运行过程中,测试服务器22通过获取业务服务器记录的执行路径来异步执行计算代码覆盖率的操作。
而对于服务器21与测试服务器22之间进行交互的网络23,可以包括多种类型的有线或无线网络。例如,该网络23可以包括公共交换电话网络(Public Switched TelephoneNetwork,PSTN)和因特网。
请参见图3,图3是一示例性实施例提供的另一种代码覆盖率的统计方法的流程图。如图3所示,该方法应用于测试服务器,可以包括以下步骤:
步骤302,获取业务服务器响应于针对待测试的动态脚本的调用请求,执行所述动态脚本得到的执行结果;其中,所述动态脚本的代码分支处***有路径生成函数,所述路径生成函数用于在被执行时记录所处代码分支的执行路径。
在本实施例中,业务服务器所执行操作的具体过程,可参考上述图1所示的实施例,在此不再赘述。
步骤304,根据所述执行结果中记录的执行路径计算所述动态脚本的代码覆盖率。
在本实施例中,可先确定与执行结果中记录的执行路径对应的代码分支,再将确定出的代码分支与动态脚本的所有代码分支的比值,作为该动态脚本的代码覆盖率。
由以上技术方案可见,本申请通过在执行待测试的动态脚本之前,在该动态脚本的代码分支处***路径生成函数,使得在执行动态脚本(***有路径生成函数)之后,可根据执行该路径生成函数而记录的执行路径来确定本次执行过程中覆盖的代码,从而得到动态脚本的代码覆盖率。
进一步的,基于本申请通过记录执行路径来确定执行过程中所覆盖代码的机制,覆盖率的计算操作可异步进行。比如,由业务服务器来执行动态脚本并记录执行路径,而根据执行路径计算覆盖率的操作则由专门的测试服务器来执行。一方面,可降低对业务服务器处理资源的占用;另一方面,***路径生成函数和计算覆盖率的操作可独立执行,可降低***、计算等过程与业务服务器执行动态脚本的耦合度。
为了便于理解,下面结合举例对本说明书中的代码覆盖率的统计方案进行详细说明。
请参见图4,图4是一示例性实施例提供的另一种代码覆盖率的统计方法的流程图。如图4所示,该方法应用于业务服务器,可以包括以下步骤:
步骤402,识别动态脚本的代码分支。
步骤404,在代码分支处打标。
在一种情况下,可由开发人员手动打标。例如,由开发人员根据经验识别出待测试的动态脚本的代码分支,并针对识别出的代码分支向业务服务器下发分支选取指令(包含所识别出的代码分支)。那么,业务服务器在接收到该分支选取指令后,根据接收到的分支选取指令所指示的代码分支,识别出动态脚本的代码分支,并进行打标处理。
在另一种情况下,开发人员可预先定义分支关键字,该分支关键字用于表明所处的位置为动态脚本的代码分支,从而业务服务器可根据该分支关键字自动识别待测试的动态脚本的代码分支,进而在代码分支处进行打标。
举例而言,可预先定义如下分支关键字:if单分支、if-else、if-else if、条件运算符(比如,三目运算符、三元运算符等)、switch-case分支。当然,分支关键字的选取可由开发人员根据实际情况灵活设定,本说明书一个或多个实施例并不对此进行限制。
假定待测试的动态脚本的代码如下:
动态脚本1
if(W)then A;
else if(X)then B;
else if(Y)then C;
else if(Z)then D。
动态脚本2
if(O)then E;
else if(P)then F;
else if(Q)then G。
其中,W、X、Y、Z、A、B、C、D、O、P、Q、E、F、G均表示动态脚本中的代码语句。
以采用输出函数printf对动态脚本1-2进行打标为例,通过执行步骤404分别对动态脚本1-2的代码分支进行打标,并由打标后的动态脚本覆盖原有动态脚本后,得到如下动态脚本:
动态脚本1
if(W)then A;
printf(“script1,A”);//***输出函数printf,打标“script1,A”
else if(X)then B;
printf(“script1,B”);//***输出函数printf,打标“script1,B”
else if(Y)then C;
printf(“script1,C”);//***输出函数printf,打标“script1,C”
else if(Z)then D;
printf(“script1,D”);//***输出函数printf,打标“script1,D”
动态脚本2
if(O)then E;
printf(“script2,E”);//***输出函数printf,打标“script2,E”
else if(P)then F;
printf(“script2,F”);//***输出函数printf,打标“script2,F”
else if(Q)then G。
printf(“script2,G”);//***输出函数printf,打标“script2,G”
由此可见,基于动态脚本的代码分支处***有输出函数printf,在后续执行该动态脚本时,也会随之执行输出函数printf,从而打印输出所处代码分支的执行路径。例如,当执行结果中输出有“script1,A”时,可确定出执行动态脚本1的过程中,代码分支if(W)then A被触发执行过,即该代码分支被覆盖。
步骤406,接收调用请求。
在一实施例中,可测试动态脚本在业务服务器向用户提供目标业务的阶段(预设时间段)内的代码覆盖率。在该情况下,可将该预设测试时间段设定为目标业务的用户活跃时间段。其中,用户活跃时间段可理解为:相比于其他时间段内,在该时间段内请求该业务的用户的数量最多,或者达到预设数量;换言之,在用户活跃时间段内,业务服务器可接收到最多数量以及最多类型(不同类型的请求,入参不同)的调用请求。以目标业务为购物的场景为例,通常在非工作时间段为用户活跃时间段。比如,每天的18:00~23:00。
基于上述用户活跃时间段的设定,则计算得到的代码覆盖率为处于用户活跃时间段内的代码覆盖率,进而开发人员可基于该代码覆盖率对动态脚本的代码进行调整。例如,当计算得到的代码覆盖率小于预先设定的代码覆盖率阈值时,说明即使是在用户活跃时间段内响应于各种类型的用户调用请求来执行动态脚本的情况下,该动态脚本中也存在大量未曾执行过的代码。那么,该部分代码很可能为冗余或者过期的代码,开发人员可进一步根据执行结果中包含的执行路径去查询出这部分代码以进行处理,从而有助于对动态脚本进行优化,减少动态脚本中的冗余代码和过期代码。
在另一实施例中,开发人员可预定义若干针对待测试的动态脚本的测试调用请求,以调用执行该动态脚本。其中,各个测试调用请求中包含的与该动态脚本涉及的参数均不相同。
在该情况下,测试调用请求可理解为专门用于测试动态脚本的代码覆盖率。那么,当被测试的动态脚本的实际代码覆盖率(即采用数量较多、请求类型覆盖较广的调用请求调用执行该动态脚本时的代码覆盖率)较高时,若采用该测试调用请求(包含多个)得到的代码覆盖率反而较低,则可反向推断出该测试调用请求所包含的请求类型不够全面(即入参覆盖不够全面)。因此,开发人员可进一步对该测试调用请求所覆盖的请求类型进行调整,以尽可能覆盖更多的请求类型,从而可提高利用该测试调用请求测试动态脚本的实际代码覆盖率的准确度。
步骤408,执行动态脚本。
步骤410,读取执行路径日志。
在本实施例中,业务服务器在执行被打标处理后的动态脚本后,可以执行路径日志的形式记录执行过程中覆盖的代码分支。
步骤412,合并、去重代码分支。
步骤414,计算代码覆盖率。
举例而言,假定接收到调用请求1-2,响应于调用请求1-2生成的执行路径日志如表1所示:
动态脚本1 | 动态脚本2 | |
调用请求1 | script1,A、script1,B | / |
调用请求2 | script1,A | Script2,E、script2,F |
表1
那么,合并、去重响应于调用请求1-2执行动态脚本1所覆盖的代码分支,得到:代码分支A、代码分支B。合并、去重响应于调用请求1-2执行动态脚本所覆盖的代码分支,得到:代码分支E、代码分支F。再分别比较动态脚本1-2的所有代码分支和所覆盖的代码分支,得到代码覆盖率以及未覆盖的代码分支如下:
动态脚本1的代码覆盖率:(A+B)/(A+B+C+D)=50%;
动态脚本1未覆盖的代码分支:C、D。
动态脚本2的代码覆盖率:(E+F)/(E+F+G)=66.6%
动态脚本2未覆盖的代码分支:G。
在本说明书的代码覆盖率的统计方案中,基于通过记录执行路径来确定执行过程中所覆盖代码的机制,覆盖率的计算操作可异步进行。比如,由业务服务器来执行动态脚本并记录执行路径,而根据执行路径计算覆盖率的操作则由专门的测试服务器来执行。一方面,可降低对业务服务器处理资源的占用;另一方面,***路径生成函数和计算覆盖率的操作可独立执行,可降低***、计算等过程与业务服务器执行动态脚本的耦合度。下面结合图5进行说明。
请参见图5,图5是一示例性实施例提供的另一种代码覆盖率的统计方法的流程图。如图5所示,该方法应用于测试服务器,可以包括以下步骤:
步骤502,获取业务服务器生成的执行路径日志。
在本实施例中,业务服务器在通过执行被打标处理后的动态脚本后,生成执行路径日志保存在本地的存储空间。而利用该执行路径日志计算代码覆盖率的操作可由测试服务器来执行。
步骤504,合并、去重代码分支。
步骤506,计算代码覆盖率。
需要说明的是,步骤504-506的具体过程可参考上述步骤412-414的描述。
图6是一示例性实施例提供的一种电子设备的结构示意图。请参考图6,在硬件层面,该设备包括处理器602、内部总线604、网络接口606、内存608以及非易失性存储器610,当然还可能包括其他业务所需要的硬件。处理器602从非易失性存储器610中读取对应的计算机程序到内存608中然后运行,在逻辑层面上形成代码覆盖率的统计装置。当然,除了软件实现方式之外,本说明书一个或多个实施例并不排除其他实现方式,比如逻辑器件抑或软硬件结合的方式等等,也就是说以下处理流程的执行主体并不限定于各个逻辑单元,也可以是硬件或逻辑器件。
请参考图7,在软件实施方式中,该代码覆盖率的统计装置应用于业务服务器,该业务服务器中配置有待测试的动态脚本;该装置可以包括:
标记单元71,在所述动态脚本的代码分支处***路径生成函数,所述路径生成函数用于在被执行时记录所处代码分支的执行路径;
接收单元72,接收针对所述动态脚本的调用请求;
执行单元73,响应于所述调用请求,执行所述动态脚本,以根据执行结果中记录的执行路径计算所述动态脚本的代码覆盖率。
可选的,
所述接收单元72具体用于:接收在预设时间段内来自于客户端的用户调用请求;
所述执行单元73具体用于:响应于所述用户调用请求,执行所述动态脚本,以根据执行结果中记录的执行路径计算所述动态脚本在所述预设时间段内的代码覆盖率。
可选的,所述预设时间段包括目标业务的用户活跃时间段,所述目标业务与所述动态脚本相关联。
可选的,所述接收单元72具体用于:
接收预定义的若干针对所述动态脚本的测试调用请求;其中,各个测试调用请求中包含的与所述动态脚本涉及的参数均不相同。
可选的,所述执行单元73具体用于:
执行所述动态脚本,并根据执行结果中记录的执行路径计算所述动态脚本的代码覆盖率;
或者,将执行结果发送至测试服务器,以使得所述测试服务器根据执行结果中记录的执行路径计算所述动态脚本的代码覆盖率。
可选的,通过以下方式计算所述动态脚本的代码覆盖率:
确定与执行结果中记录的执行路径对应的代码分支;
将确定出的代码分支与所述动态脚本的所有代码分支的比值,作为所述动态脚本的代码覆盖率。
可选的,还包括:
识别单元74,根据预定义的分支关键字识别所述动态脚本的代码分支;
或者,根据接收到的分支选取指令所指示的代码分支,识别所述动态脚本的代码分支。
可选的,所述路径生成函数包括输出函数。
图8是一示例性实施例提供的一种电子设备的结构示意图。请参考图8,在硬件层面,该设备包括处理器802、内部总线804、网络接口806、内存808以及非易失性存储器810,当然还可能包括其他业务所需要的硬件。处理器802从非易失性存储器810中读取对应的计算机程序到内存808中然后运行,在逻辑层面上形成代码覆盖率的统计装置。当然,除了软件实现方式之外,本说明书一个或多个实施例并不排除其他实现方式,比如逻辑器件抑或软硬件结合的方式等等,也就是说以下处理流程的执行主体并不限定于各个逻辑单元,也可以是硬件或逻辑器件。
请参考图9,在软件实施方式中,该代码覆盖率的统计装置应用于测试服务器,可以包括:
获取单元91,获取业务服务器响应于针对待测试的动态脚本的调用请求,执行所述动态脚本得到的执行结果;其中,所述动态脚本的代码分支处***有路径生成函数,所述路径生成函数用于在被执行时记录所处代码分支的执行路径;
计算单元92,根据所述执行结果中记录的执行路径计算所述动态脚本的代码覆盖率。
可选的,所述计算单元92具体用于:
确定与所述执行结果中记录的执行路径对应的代码分支;
将确定出的代码分支与所述动态脚本的所有代码分支的比值,作为所述动态脚本的代码覆盖率。
上述实施例阐明的***、装置、模块或单元,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。一种典型的实现设备为计算机,计算机的具体形式可以是个人计算机、膝上型计算机、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、导航设备、电子邮件收发设备、游戏控制台、平板计算机、可穿戴设备或者这些设备中的任意几种设备的组合。
在一个典型的配置中,计算机包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。
内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。内存是计算机可读介质的示例。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带、磁盘存储、量子存储器、基于石墨烯的存储介质或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、商品或者设备中还存在另外的相同要素。
上述对本说明书特定实施例进行了描述。其它实施例在所附权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。
在本说明书一个或多个实施例使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本说明书一个或多个实施例。在本说明书一个或多个实施例和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本文中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。
应当理解,尽管在本说明书一个或多个实施例可能采用术语第一、第二、第三等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本说明书一个或多个实施例范围的情况下,第一信息也可以被称为第二信息,类似地,第二信息也可以被称为第一信息。取决于语境,如在此所使用的词语“如果”可以被解释成为“在……时”或“当……时”或“响应于确定”。
以上所述仅为本说明书一个或多个实施例的较佳实施例而已,并不用以限制本说明书一个或多个实施例,凡在本说明书一个或多个实施例的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本说明书一个或多个实施例保护的范围之内。
Claims (10)
1.一种代码覆盖率的统计方法,其特征在于,应用于业务服务器,所述业务服务器中配置有待测试的动态脚本;所述方法包括:
在所述动态脚本的代码分支处***路径生成函数,所述路径生成函数用于在被执行时记录所处代码分支的执行路径;
接收针对所述动态脚本的调用请求;
响应于所述调用请求,执行所述动态脚本,以根据执行结果中记录的执行路径计算所述动态脚本的代码覆盖率。
2.根据权利要求1所述的方法,其特征在于,
所述接收针对所述动态脚本的调用请求,包括:接收在预设时间段内来自于客户端的用户调用请求;
所述响应于所述调用请求,执行所述动态脚本,以根据执行结果中包含的执行路径计算所述动态脚本的代码覆盖率,包括:响应于所述用户调用请求,执行所述动态脚本,以根据执行结果中记录的执行路径计算所述动态脚本在所述预设时间段内的代码覆盖率。
3.根据权利要求2所述的方法,其特征在于,所述预设时间段包括目标业务的用户活跃时间段,所述目标业务与所述动态脚本相关联。
4.根据权利要求1所述的方法,其特征在于,所述执行所述动态脚本,以根据执行结果中记录的执行路径计算所述动态脚本的代码覆盖率,包括:
执行所述动态脚本,并根据执行结果中记录的执行路径计算所述动态脚本的代码覆盖率;
或者,将执行结果发送至测试服务器,以使得所述测试服务器根据执行结果中记录的执行路径计算所述动态脚本的代码覆盖率。
5.根据权利要求1所述的方法,其特征在于,通过以下方式计算所述动态脚本的代码覆盖率:
确定与执行结果中记录的执行路径对应的代码分支;
将确定出的代码分支与所述动态脚本的所有代码分支的比值,作为所述动态脚本的代码覆盖率。
6.一种代码覆盖率的统计方法,其特征在于,应用于测试服务器;所述方法包括:
获取业务服务器响应于针对待测试的动态脚本的调用请求,执行所述动态脚本得到的执行结果;其中,所述动态脚本的代码分支处***有路径生成函数,所述路径生成函数用于在被执行时记录所处代码分支的执行路径;
根据所述执行结果中记录的执行路径计算所述动态脚本的代码覆盖率。
7.一种代码覆盖率的统计装置,其特征在于,应用于业务服务器,所述业务服务器中配置有待测试的动态脚本;所述装置包括:
标记单元,在所述动态脚本的代码分支处***路径生成函数,所述路径生成函数用于在被执行时记录所处代码分支的执行路径;
接收单元,接收针对所述动态脚本的调用请求;
执行单元,响应于所述调用请求,执行所述动态脚本,以根据执行结果中记录的执行路径计算所述动态脚本的代码覆盖率。
8.一种代码覆盖率的统计装置,其特征在于,应用于测试服务器;所述装置包括:
获取单元,获取业务服务器响应于针对待测试的动态脚本的调用请求,执行所述动态脚本得到的执行结果;其中,所述动态脚本的代码分支处***有路径生成函数,所述路径生成函数用于在被执行时记录所处代码分支的执行路径;
计算单元,根据所述执行结果中记录的执行路径计算所述动态脚本的代码覆盖率。
9.一种电子设备,包括:
处理器;
用于存储处理器可执行指令的存储器;
其中,所述处理器通过运行所述可执行指令以实现如权利要求1-5中任一项所述的方法。
10.一种计算机可读存储介质,其上存储有计算机指令,其特征在于,该指令被处理器执行时实现如权利要求1-5中任一项所述方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910468467.1A CN110209582A (zh) | 2019-05-31 | 2019-05-31 | 代码覆盖率的统计方法及装置、电子设备、存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910468467.1A CN110209582A (zh) | 2019-05-31 | 2019-05-31 | 代码覆盖率的统计方法及装置、电子设备、存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN110209582A true CN110209582A (zh) | 2019-09-06 |
Family
ID=67790040
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910468467.1A Pending CN110209582A (zh) | 2019-05-31 | 2019-05-31 | 代码覆盖率的统计方法及装置、电子设备、存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110209582A (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111104332A (zh) * | 2019-12-20 | 2020-05-05 | 广州品唯软件有限公司 | 覆盖率测试方法,测试装置,服务设备及可读存储介质 |
CN111400189A (zh) * | 2020-03-25 | 2020-07-10 | 平安银行股份有限公司 | 代码覆盖率监测方法、装置、电子设备及存储介质 |
CN114253862A (zh) * | 2021-12-29 | 2022-03-29 | 湖南泛联新安信息科技有限公司 | 一种hdl代码仿真覆盖率异步事件驱动自动分析方法 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101561777A (zh) * | 2008-04-14 | 2009-10-21 | 中兴通讯股份有限公司 | 一种实现覆盖率测试的***和方法 |
CN106294163A (zh) * | 2016-08-12 | 2017-01-04 | 北京航空航天大学 | 一种轻量级的代码分支覆盖率检测方法 |
CN106874187A (zh) * | 2016-12-29 | 2017-06-20 | 腾讯科技(深圳)有限公司 | 代码覆盖率收集方法和装置 |
CN107797923A (zh) * | 2017-10-10 | 2018-03-13 | 平安科技(深圳)有限公司 | 代码覆盖率分析方法及应用服务器 |
CN107870853A (zh) * | 2016-09-27 | 2018-04-03 | 北京京东尚科信息技术有限公司 | 测试程序代码路径覆盖率的方法以及装置 |
-
2019
- 2019-05-31 CN CN201910468467.1A patent/CN110209582A/zh active Pending
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101561777A (zh) * | 2008-04-14 | 2009-10-21 | 中兴通讯股份有限公司 | 一种实现覆盖率测试的***和方法 |
CN106294163A (zh) * | 2016-08-12 | 2017-01-04 | 北京航空航天大学 | 一种轻量级的代码分支覆盖率检测方法 |
CN107870853A (zh) * | 2016-09-27 | 2018-04-03 | 北京京东尚科信息技术有限公司 | 测试程序代码路径覆盖率的方法以及装置 |
CN106874187A (zh) * | 2016-12-29 | 2017-06-20 | 腾讯科技(深圳)有限公司 | 代码覆盖率收集方法和装置 |
CN107797923A (zh) * | 2017-10-10 | 2018-03-13 | 平安科技(深圳)有限公司 | 代码覆盖率分析方法及应用服务器 |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111104332A (zh) * | 2019-12-20 | 2020-05-05 | 广州品唯软件有限公司 | 覆盖率测试方法,测试装置,服务设备及可读存储介质 |
CN111104332B (zh) * | 2019-12-20 | 2024-01-30 | 广州品唯软件有限公司 | 覆盖率测试方法,测试装置,服务设备及可读存储介质 |
CN111400189A (zh) * | 2020-03-25 | 2020-07-10 | 平安银行股份有限公司 | 代码覆盖率监测方法、装置、电子设备及存储介质 |
CN114253862A (zh) * | 2021-12-29 | 2022-03-29 | 湖南泛联新安信息科技有限公司 | 一种hdl代码仿真覆盖率异步事件驱动自动分析方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109347787B (zh) | 一种身份信息的识别方法及装置 | |
CN109309596B (zh) | 一种压力测试方法、装置及服务器 | |
CN108734304B (zh) | 一种数据模型的训练方法、装置、及计算机设备 | |
CN110414567A (zh) | 数据处理方法、装置和电子设备 | |
CN110209582A (zh) | 代码覆盖率的统计方法及装置、电子设备、存储介质 | |
CN110457912A (zh) | 数据处理方法、装置和电子设备 | |
CN107015853A (zh) | 多阶段任务的实现方法和装置 | |
CN111352935B (zh) | 一种块链式账本中的索引创建方法、装置及设备 | |
CN110474820B (zh) | 流量回放方法、装置、电子设备 | |
CN110750530B (zh) | 一种业务***及其数据核对方法 | |
CN110008743A (zh) | 一种块链式账本中的数据属性标识方法、装置及设备 | |
CN110175201A (zh) | 业务数据处理方法、***、装置及电子设备 | |
CN112560114A (zh) | 调用智能合约的方法及装置 | |
CN110147410A (zh) | 一种块链式账本中的数据验证方法、***、装置及设备 | |
CN110334012B (zh) | 一种风险评估方法及装置 | |
CN110263294A (zh) | 损失函数取值的确定方法、装置和电子设备 | |
CN110110516A (zh) | 日志记录方法、装置及*** | |
CN110347887B (zh) | 获取业务场景时序数据的方法及装置 | |
CN105224541B (zh) | 数据的唯一性控制方法、信息存储方法及装置 | |
CN109428900A (zh) | 一种数据处理的方法及装置 | |
CN110362569A (zh) | 数据表的校验方法及装置、电子设备、存储介质 | |
CN104765775B (zh) | 一种日志保存方法及装置 | |
CN104573132B (zh) | 歌曲查找方法及装置 | |
CN106570005A (zh) | 清理数据库的方法和装置 | |
CN109150643A (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 | ||
RJ01 | Rejection of invention patent application after publication | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20190906 |