单元测试覆盖率生成方法、装置、可读存储介质及设备与流程

文档序号:13640887阅读:290来源:国知局

本发明涉及软件测试技术领域,尤其涉及单元测试覆盖率生成方法、装置、可读存储介质及设备。



背景技术:

在应用程序开发过程中,单元测试是程序正式提交给测试人员进行大规模功能测试前的一个重要且必要的环节。单元测试是指对程序中最小可测试单元进行逻辑检查和验证,其中,单元就是规定的最小的被测功能模块。

在安卓(android)应用的开发过程中,单元测试分为:java虚拟机单元测试(jvmtest)和设备测试(instrumentationtest)。其中,对于jvmtest而言,一般通过运行由纯java代码编写的测试桩(testcase)实现,无需依赖其他组件,由于代码运行于jvm虚拟机上,因此测试速度较快;对于instrumentationtest而言,由于这类测试需要依赖android系统提供的组件,因此需要在真机或者模拟器上部署运行,并需要进行预编译,因此测试速度较慢。

而无论是采用上述的jvmtest还是instrumentationtest,单元测试中存在一项重要数据指标,即覆盖率(codecoverage,cc),覆盖率为单元测试所执行的代码与原代码的比值,覆盖率越高,所执行的代码量越大,测试的质量就越高,代码的健壮性则越好。

在android应用开发中,对于组件化和功能模块的解耦,在单元测试时常常会重复使用同一代码块,从而组件化和模块解耦的代码复用率高。然而,若按照现有的覆盖率生成方法,被复用的代码块会被直接纳入到覆盖率的计算中,从而导致覆盖率的基数过大,致使计算得到的覆盖率不准确,存在较大误差。



技术实现要素:

鉴于上述问题,提出了本发明以便提供一种克服上述问题或者至少部分地解决上述问题的单元测试覆盖率生成方法、装置、可读存储介质及设备。

本发明实施例提供一种单元测试覆盖率生成方法,所述方法包括:

s1:基于业务逻辑对单元测试过程中的复用测试代码块进行分包处理;

s2:基于分包处理后得到的各个分包的数据,计算预测覆盖率数据集误差为第一误差;

s3:分别对分包处理后得到的各个分包进行覆盖率测试,并计算得到测试覆盖率数据集误差为第二误差;

s4:判断所述第一误差和所述第二误差的均方根误差的差值绝对值是否大于预设覆盖率标准值;

若所述差值绝对值小于或等于所述预设覆盖率标准值,则对所述预测覆盖率数据集进行输出,若所述差值绝对值大于所述预设覆盖率标准值,则依次提高所述业务逻辑的细化程度对分包处理后得到的各个分包进行再分包处理,并循环执行s2-s4直至所述差值绝对值小于或等于所述预设覆盖率标准值。

优选的,采用以下公式计算得到所述第一误差:

yp=t1x[第一分包别名]+t2x[第二分包别名]+…+tnx[第n分包别名]+e

其中,yp为所述第一误差,x[第n分包别名]为第n分包的数据,tn为与x[第n分包别名]对应的正交参数,e为残差因子,n为分包的数量。

优选的,采用以下公式计算得到所述第二误差:

其中,f为所述第二误差,x′∈[x0′,x1′...xn′],[x0′,x1′...xn′]为测试覆盖率数据集,n′为所述测试覆盖率数据集包含的元素的数量。

优选的,采用以下公式获得所述差值绝对值:

其中,σ为所述差值绝对值,yp为所述第一误差,f为所述第二误差。

优选的,所述分别对分包处理后得到的各个分包进行覆盖率测试,包括:

分别对分包处理后得到的各个分包进行基于java虚拟机单元测试或设备测试的覆盖率测试。

优选的,所述预设覆盖率标准值的取值范围为0.1~0.5。

本发明实施例提供一种单元测试覆盖率生成装置,所述装置包括:

分包模块,用于执行s1:基于业务逻辑对单元测试过程中的复用测试代码块进行分包处理;

第一计算模块,用于执行s2:基于分包处理后得到的各个分包的数据,计算预测覆盖率数据集误差为第一误差;

第二计算模块,用于执行s3:分别对分包处理后得到的各个分包进行覆盖率测试,并计算得到测试覆盖率数据集误差为第二误差;

判断模块,用于执行s4:判断所述第一误差和所述第二误差的均方根误差的差值绝对值是否大于预设覆盖率标准值;

处理模块,用于若所述差值绝对值小于或等于所述预设覆盖率标准值,则对所述预测覆盖率数据集进行输出,若所述差值绝对值大于所述预设覆盖率标准值,则依次提高所述业务逻辑的细化程度对分包处理后得到的各个分包进行再分包处理,并循环执行s2-s4直至所述差值绝对值小于或等于所述预设覆盖率标准值。

优选的,采用以下公式计算得到所述第一误差:

yp=t1x[第一分包别名]+t2x[第二分包别名]+…+tnx[第n分包别名]+e

其中,yp为所述第一误差,x[第n分包别名]为第n分包的数据,tn为与x[第n分包别名]对应的正交参数,e为残差因子,n为分包的数量。

本发明实施例提供一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现以下步骤:

s1:基于业务逻辑对单元测试过程中的复用测试代码块进行分包处理;

s2:基于分包处理后得到的各个分包的数据,计算预测覆盖率数据集误差为第一误差;

s3:分别对分包处理后得到的各个分包进行覆盖率测试,并计算得到测试覆盖率数据集误差为第二误差;

s4:判断所述第一误差和所述第二误差的均方根误差的差值绝对值是否大于预设覆盖率标准值;

若所述差值绝对值小于或等于所述预设覆盖率标准值,则对所述预测覆盖率数据集进行输出,若所述差值绝对值大于所述预设覆盖率标准值,则依次提高所述业务逻辑的细化程度对分包处理后得到的各个分包进行再分包处理,并循环执行s2-s4直至所述差值绝对值小于或等于所述预设覆盖率标准值。

本发明实施例提供一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现以下步骤:

s1:基于业务逻辑对单元测试过程中的复用测试代码块进行分包处理;

s2:基于分包处理后得到的各个分包的数据,计算预测覆盖率数据集误差为第一误差;

s3:分别对分包处理后得到的各个分包进行覆盖率测试,并计算得到测试覆盖率数据集误差为第二误差;

s4:判断所述第一误差和所述第二误差的均方根误差的差值绝对值是否大于预设覆盖率标准值;

若所述差值绝对值小于或等于所述预设覆盖率标准值,则对所述预测覆盖率数据集进行输出,若所述差值绝对值大于所述预设覆盖率标准值,则依次提高所述业务逻辑的细化程度对分包处理后得到的各个分包进行再分包处理,并循环执行s2-s4直至所述差值绝对值小于或等于所述预设覆盖率标准值。

本发明实施例中的一个或多个技术方案,至少具有如下技术效果或优点:

本申请通过先基于业务逻辑对单元测试过程中的复用测试代码块进行分包处理,降低复用测试代码块的耦合度,再基于分包处理后得到的各个分包的数据,计算预测覆盖率数据集误差为第一误差,接着,分别对分包处理后得到的各个分包进行覆盖率测试,并计算得到测试覆盖率数据集误差为第二误差,通过判断第一误差和第二误差的均方根误差的差值绝对值是否大于预设覆盖率标准值,若差值绝对值小于或等于预设覆盖率标准值,则对预测覆盖率数据集进行输出,若差值绝对值大于预设覆盖率标准值,则依次提高业务逻辑的细化程度对分包处理后得到的各个分包进行再分包处理,并循环执行误差的计算和比较判断过程直至差值绝对值小于或等于所述预设覆盖率标准值,有效地解决了直接将复用代码块纳入到覆盖率的计算过程中而导致的覆盖率基数过大的问题,提高了计算得到的覆盖率的准确性,减小了覆盖率的误差。

附图说明

通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本发明的限制。而且在整个附图中,用相同的参考图形表示相同的部件。在附图中:

图1示出了本发明实施例中的一种单元测试覆盖率生成方法的流程图;

图2示出了本发明实施例中的一种单元测试覆盖率生成装置的结构图;

图3示出了本发明实施例中的计算机设备的实体结构示意图。

具体实施方式

下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。

本申请实施例提供一种单元测试覆盖率生成方法,该方法可以被应用于android系统中,且,该方法的编码语言可以为java。如图1所示,所述方法包括:

s1:基于业务逻辑对单元测试过程中的复用测试代码块进行分包处理。

对于s1而言,s1执行的是分包复用测试代码块的过程,其目的是降低各个复用测试代码块之间的耦合度。在具体实施过程中,本申请将业务逻辑相同的复用测试代码块迁移至同一包路径下,以实现分包处理,下面给出一分包实例对s1进行解释说明:

表1

以activity_init为例,该分包对应的业务逻辑为初始化activity,该分包中包含的复用测试代码块的业务逻辑均属于初始化activity。

进一步,在执行完s1之后,执行s2:基于分包处理后得到的各个分包的数据,计算预测覆盖率数据集误差为第一误差。

对于s2而言,可以借助androidstudio开发工具对各个分包下复用测试代码块所涵盖的源代码进行统计,从而获得复用测试代码块集为xt=[x[第一分包别名],x[第二分包别名]…,x[第n分包别名]],x[第一分包别名]对应第一分包的数据,x[第二分包别名]对应第二分包的数据,依次类推。以上述实例为例,通过对源代码进行统计,获得的xt=[x[activity_init],x[fragment_init]…,x[utils_verify]]。接着基于偏最小二乘法(pls)建立正交公式,获得第一误差为:

yp=t1x[第一分包别名]+t2x[第二分包别名]+…+tnx[第n分包别名]+e

其中,yp为第一误差,x[第n分包别名]为第n分包的数据,tn为与x[第n分包别名]对应的正交参数,而,[t1,t2,…tn]为正交参数集,e为残差因子,n为分包的数量。另外,正交参数集和残差因子均取自matlab中plstoolbox的标准值。

在执行完s2之后,执行s3:分别对分包处理后得到的各个分包进行覆盖率测试,并计算得到测试覆盖率数据集误差为第二误差。

对于s3而言,在具体实施过程中,可以采用基于java虚拟机单元测试(jvmtest)的覆盖率测试,或者采用基于设备测试(instrumentationtest)的覆盖率测试。而,为了避免同时采用jvmtest和instrumentationtest进行覆盖率测试,需要进行去重处理,即,先执行instrumentationtest后执行jvmtest,并且,在执行instrumentationtest后对代码块添加标签(tag),从而在执行jvmtest之前,判断代码块是否标记有tag,如果标记有tag则跳过不执行jvmtest,如果没有标记有tag则执行jvmtest,从而确保仅采用jvmtest或instrumentationtest进行覆盖率测试。另外,在完成覆盖率测试后,测试环境系统将会输出覆盖率数据集文件coverage.ec。

进一步,读取coverage.ec,得到测试覆盖率数据集[x0′,x1′...xn′],接着,使用累计分布函数计算第二误差:

其中,f为第二误差,x′∈[x0′,x1′...xn′],n′为测试覆盖率数据集包含的元素的数量。

在执行完s3之后,执行s4:判断第一误差和第二误差的均方根误差的差值绝对值是否大于预设覆盖率标准值,若差值绝对值小于或等于预设覆盖率标准值,则对预测覆盖率数据集进行输出,若差值绝对值大于预设覆盖率标准值,则依次提高业务逻辑的细化程度对分包处理后得到的各个分包进行再分包处理,并循环执行s2-s4直至差值绝对值小于或等于预设覆盖率标准值。

对于s4而言,首先,采用以下公式获得差值绝对值:

其中,σ为差值绝对值,yp为第一误差,f为第二误差。

进一步,在得到差值绝对值之后,判断差值绝对值与预设覆盖率标准值之间的大小关系,预设覆盖率标准值的取值范围为0.1~0.5,优选的,预设覆盖率标准值可以选取0.2,下面将以预设覆盖率标准值取值0.2对后续过程进行详细说明。

若σ≤0.2,表明测试覆盖率数据误差合理,使用jacoco插件合并所有预测覆盖率数据,可以以覆盖率报告的形式将预测覆盖率数据集进行输出。

若σ>0.2,表明测试覆盖率数据误差较大,则提高业务逻辑的细化程度分包处理后的各个分包进行再分包处理,即,再分包处理时的业务逻辑细化程序高于第一次分包处理时的业务逻辑细化程度,例如,当第一次分包处理时,第一分包的业务逻辑为登录操作,则第二次分包处理时,可以根据业务逻辑:登录账户名和登录密码,对第一分包进行进一步的分包处理。接着,重复执行s2-s4,基于再分包处理后得到的各个分包的数据,计算出第一误差,并分别对再分包处理后得到的各个分包进行覆盖率测试,计算出第二误差,再判断第一误差和第二误差的均方根误差的差值绝对值是否大于预设覆盖率标准值,若此次差值绝对值小于或等于预设覆盖率标准值,则对第二次获得的预测覆盖率数据集进行输出,否则继续循环执行分包和s2-s4的过程,直至差值绝对值小于或等于预设覆盖率标准值。

基于同一发明构思,本发明实施例还提供一种单元测试覆盖率生成装置,如图2所示,所述装置包括:

分包模块201,用于执行s1:基于业务逻辑对单元测试过程中的复用测试代码块进行分包处理;

第一计算模块202,用于执行s2:基于分包处理后得到的各个分包的数据,计算预测覆盖率数据集误差为第一误差;

第二计算模块203,用于执行s3:分别对分包处理后得到的各个分包进行覆盖率测试,并计算得到测试覆盖率数据集误差为第二误差;

判断模块204,用于执行s4:判断所述第一误差和所述第二误差的均方根误差的差值绝对值是否大于预设覆盖率标准值;

处理模块205,用于若所述差值绝对值小于或等于所述预设覆盖率标准值,则对所述预测覆盖率数据集进行输出,若所述差值绝对值大于所述预设覆盖率标准值,则依次提高所述业务逻辑的细化程度对分包处理后得到的各个分包进行再分包处理,并循环执行s2-s4直至所述差值绝对值小于或等于所述预设覆盖率标准值。

优选的,采用以下公式计算得到所述第一误差:

yp=t1x[第一分包别名]+t2x[第二分包别名]+…+tnx[第n分包别名]+e

其中,yp为所述第一误差,x[第n分包别名]为第n分包的数据,tn为与x[第n分包别名]对应的正交参数,e为残差因子,n为分包的数量。

优选的,采用以下公式计算得到所述第二误差:

其中,f为所述第二误差,x′∈[x0′,x1′...xn′],[x0′,x1′...xn′]为测试覆盖率数据集,n′为所述测试覆盖率数据集包含的元素的数量。

优选的,采用以下公式获得所述差值绝对值:

其中,σ为所述差值绝对值,yp为所述第一误差,f为所述第二误差。

优选的,所述分别对分包处理后得到的各个分包进行覆盖率测试,包括:

分别对分包处理后得到的各个分包进行基于java虚拟机单元测试或设备测试的覆盖率测试。

优选的,所述预设覆盖率标准值的取值范围为0.1~0.5。

基于同一发明构思,本发明实施例还提供一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现以下步骤:

s1:基于业务逻辑对单元测试过程中的复用测试代码块进行分包处理;

s2:基于分包处理后得到的各个分包的数据,计算预测覆盖率数据集误差为第一误差;

s3:分别对分包处理后得到的各个分包进行覆盖率测试,并计算得到测试覆盖率数据集误差为第二误差;

s4:判断所述第一误差和所述第二误差的均方根误差的差值绝对值是否大于预设覆盖率标准值;

若所述差值绝对值小于或等于所述预设覆盖率标准值,则对所述预测覆盖率数据集进行输出,若所述差值绝对值大于所述预设覆盖率标准值,则依次提高所述业务逻辑的细化程度对分包处理后得到的各个分包进行再分包处理,并循环执行s2-s4直至所述差值绝对值小于或等于所述预设覆盖率标准值。

本发明实施例还提供了一种计算机设备,如图3所示,为了便于说明,仅示出了与本发明实施例相关的部分,具体技术细节未揭示的,请参照本发明实施例方法部分。该计算机设备可以为包括手机、平板电脑、pda(personaldigitalassistant,个人数字助理)、pos(pointofsales,销售终端)、车载电脑等任意终端设备,以计算机设备为手机为例:

图3示出的是与本发明实施例提供的计算机设备相关的部分结构的框图。参考图3,该计算机设备包括:存储器301和处理器302。本领域技术人员可以理解,图3中示出的计算机设备结构并不构成对计算机设备的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。

下面结合图3对计算机设备的各个构成部件进行具体的介绍:

存储器301可用于存储软件程序以及模块,处理器302通过运行存储在存储器301的软件程序以及模块,从而执行各种功能应用以及数据处理。存储器301可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序(比如声音播放功能、图像播放功能等)等;存储数据区可存储数据(比如音频数据、电话本等)等。此外,存储器301可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他易失性固态存储器件。

处理器302是计算机设备的控制中心,通过运行或执行存储在存储器301内的软件程序和/或模块,以及调用存储在存储器301内的数据,执行各种功能和处理数据。可选的,处理器302可包括一个或多个处理单元;优选的,处理器302可集成应用处理器和调制解调处理器,其中,应用处理器主要处理操作系统、用户界面和应用程序等,调制解调处理器主要处理无线通信。

在本发明实施例中,该计算机设备所包括的处理器302可以具有以下功能:

s1:基于业务逻辑对单元测试过程中的复用测试代码块进行分包处理;

s2:基于分包处理后得到的各个分包的数据,计算预测覆盖率数据集误差为第一误差;

s3:分别对分包处理后得到的各个分包进行覆盖率测试,并计算得到测试覆盖率数据集误差为第二误差;

s4:判断所述第一误差和所述第二误差的均方根误差的差值绝对值是否大于预设覆盖率标准值;

若所述差值绝对值小于或等于所述预设覆盖率标准值,则对所述预测覆盖率数据集进行输出,若所述差值绝对值大于所述预设覆盖率标准值,则依次提高所述业务逻辑的细化程度对分包处理后得到的各个分包进行再分包处理,并循环执行s2-s4直至所述差值绝对值小于或等于所述预设覆盖率标准值。

总之,本申请通过先基于业务逻辑对单元测试过程中的复用测试代码块进行分包处理,降低复用测试代码块的耦合度,再基于分包处理后得到的各个分包的数据,计算预测覆盖率数据集误差为第一误差,接着,分别对分包处理后得到的各个分包进行覆盖率测试,并计算得到测试覆盖率数据集误差为第二误差,通过判断第一误差和第二误差的均方根误差的差值绝对值是否大于预设覆盖率标准值,若差值绝对值小于或等于预设覆盖率标准值,则对预测覆盖率数据集进行输出,若差值绝对值大于预设覆盖率标准值,则依次提高业务逻辑的细化程度对分包处理后得到的各个分包进行再分包处理,并循环执行误差的计算和比较判断过程直至差值绝对值小于或等于所述预设覆盖率标准值,有效地解决了直接将复用代码块纳入到覆盖率的计算过程中而导致的覆盖率基数过大的问题,提高了计算得到的覆盖率的准确性,减小了覆盖率的误差。

在此提供的算法和显示不与任何特定计算机、虚拟系统或者其它设备固有相关。各种通用系统也可以与基于在此的示教一起使用。根据上面的描述,构造这类系统所要求的结构是显而易见的。此外,本发明也不针对任何特定编程语言。应当明白,可以利用各种编程语言实现在此描述的本发明的内容,并且上面对特定语言所做的描述是为了披露本发明的最佳实施方式。

在此处所提供的说明书中,说明了大量具体细节。然而,能够理解,本发明的实施例可以在没有这些具体细节的情况下实践。在一些实例中,并未详细示出公知的方法、结构和技术,以便不模糊对本说明书的理解。

类似地,应当理解,为了精简本公开并帮助理解各个发明方面中的一个或多个,在上面对本发明的示例性实施例的描述中,本发明的各个特征有时被一起分组到单个实施例、图、或者对其的描述中。然而,并不应将该公开的方法解释成反映如下意图:即所要求保护的本发明要求比在每个权利要求中所明确记载的特征更多的特征。更确切地说,如下面的权利要求书所反映的那样,发明方面在于少于前面公开的单个实施例的所有特征。因此,遵循具体实施方式的权利要求书由此明确地并入该具体实施方式,其中每个权利要求本身都作为本发明的单独实施例。

本领域那些技术人员可以理解,可以对实施例中的设备中的模块进行自适应性地改变并且把它们设置在与该实施例不同的一个或多个设备中。可以把实施例中的模块或单元或组件组合成一个模块或单元或组件,以及此外可以把它们分成多个子模块或子单元或子组件。除了这样的特征和/或过程或者单元中的至少一些是相互排斥之外,可以采用任何组合对本说明书(包括伴随的权利要求、摘要和附图)中公开的所有特征以及如此公开的任何方法或者设备的所有过程或单元进行组合。除非另外明确陈述,本说明书(包括伴随的权利要求、摘要和附图)中公开的每个特征可以由提供相同、等同或相似目的的替代特征来代替。

此外,本领域的技术人员能够理解,尽管在此的一些实施例包括其它实施例中所包括的某些特征而不是其它特征,但是不同实施例的特征的组合意味着处于本发明的范围之内并且形成不同的实施例。例如,在下面的权利要求书中,所要求保护的实施例的任意之一都可以以任意的组合方式来使用。

本发明的各个部件实施例可以以硬件实现,或者以在一个或者多个处理器上运行的软件模块实现,或者以它们的组合实现。本领域的技术人员应当理解,可以在实践中使用微处理器或者数字信号处理器(dsp)来实现根据本发明实施例的网关、代理服务器、系统中的一些或者全部部件的一些或者全部功能。本发明还可以实现为用于执行这里所描述的方法的一部分或者全部的设备或者装置程序(例如,计算机程序和计算机程序产品)。这样的实现本发明的程序可以存储在计算机可读介质上,或者可以具有一个或者多个信号的形式。这样的信号可以从因特网网站上下载得到,或者在载体信号上提供,或者以任何其他形式提供。

应该注意的是上述实施例对本发明进行说明而不是对本发明进行限制,并且本领域技术人员在不脱离所附权利要求的范围的情况下可设计出替换实施例。在权利要求中,不应将位于括号之间的任何参考符号构造成对权利要求的限制。单词“包含”不排除存在未列在权利要求中的元件或步骤。位于元件之前的单词“一”或“一个”不排除存在多个这样的元件。本发明可以借助于包括有若干不同元件的硬件以及借助于适当编程的计算机来实现。在列举了若干装置的单元权利要求中,这些装置中的若干个可以是通过同一个硬件项来具体体现。单词、第二、以及第三等的使用不表示任何顺序。可将这些单词解释为名称。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1