CN105446884A - 代码覆盖率的测试方法及装置 - Google Patents
代码覆盖率的测试方法及装置 Download PDFInfo
- Publication number
- CN105446884A CN105446884A CN201510944799.4A CN201510944799A CN105446884A CN 105446884 A CN105446884 A CN 105446884A CN 201510944799 A CN201510944799 A CN 201510944799A CN 105446884 A CN105446884 A CN 105446884A
- Authority
- CN
- China
- Prior art keywords
- code coverage
- tested program
- code
- test
- passage
- 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
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
技术领域
本发明涉及测试领域,特别是一种代码覆盖率的测试方法及装置。
背景技术
代码覆盖率(codecoverage)是反映测试用例对被测程序覆盖程度的重要指标,也是衡量测试完整性的一个参考值。
在Android(安卓)平台上,Java代码覆盖率的测试可以使用Emma、Jacoco(Javacodecoverage)等开源工具,通过这些开源工具可以方便地生成覆盖率报告。然而,这类工具需要集成在Eclipse或AndroidStudio之类的IDE(IntegratedDevelopmentEnvironment,集成开发环境)中,并通过点击IDE上的相关控件生成报告,这就必须要求测试人员对这类IDE比较熟悉。
以在AndroidStudio上使用Jacoco为例,需要在Android工程的构建工具gradle里进行一系列比较复杂的配置,重新clean工程(clean工程是指在AndroidStudio中删除原先编译好的相关文件,并重新编译),导出插桩后的安装包,进而安装和测试,拷贝需要的文件到指定的路径,最后点击AndroidStudio上的指定按钮生成代码覆盖率报告。
发明人发现,在上述方案中,开发和测试过程没有分开,导出插桩后的安装包是开发工作,而后面安装、测试以及生成覆盖率报告是测试工作,而由于Jacoco在AndroidStudio中使用方式的固定性,使得上述过程只能由开发独自完成,亟待解决这一问题。
发明内容
鉴于上述问题,提出了本发明以便提供一种克服上述问题或者至少部分地解决上述问题的代码覆盖率的测试方法及相应的装置。
依据本发明的一方面,提供了一种代码覆盖率的测试方法,包括:
新建特定的测试资源发布通道,其中,所述测试资源发布通道用于将测试资源部署到测试环境中;
当接收到对被测程序进行测试的指令时,利用所述测试资源发布通道将所述被测程序部署到测试环境;
在所述测试环境中对所述被测程序进行测试,获取所述被测程序的代码覆盖率数据。
可选地,在利用所述测试资源发布通道将所述被测程序部署到测试环境之前,所述方法还包括:
对被测程序的源码进行插桩处理;
对插桩处理后的源码进行编译并打包,得到所述被测程序。
可选地,利用所述测试资源发布通道将所述被测程序部署到测试环境,包括:
调用所述测试资源发布通道的第一接口接收所述被测程序;以及
调用所述测试资源发布通道的第二接口将接收的所述被测程序部署到所述测试环境。
可选地,在所述测试环境中对所述被测程序进行测试,得到所述被测程序的代码覆盖率数据,包括:
在所述测试环境中,调用第一线程执行所述被测程序的测试用例,生成所述测试用例的测试信息,其中,所述测试信息中包括代码覆盖率数据;
新增独立于所述第一线程的第二线程,其中,所述第二线程具备代码覆盖率数据的获取功能;
在所述第一线程的执行过程中,触发所述第二线程从所述测试信息中获取代码覆盖率数据。
可选地,所述方法还包括:
利用所述测试资源发布通道将所述被测程序的源码提交给代码覆盖率工具;
在测试完成后,调用代码覆盖率工具,由所述代码覆盖率工具根据所述代码覆盖率数据、所述被测程序的源码以及所述被测程序的代码,生成代码覆盖率报告。
可选地,根据所述代码覆盖率数据、所述被测程序的源码以及所述被测程序的代码,生成代码覆盖率报告,包括:
对比分析所述代码覆盖率数据、所述被测程序的源码以及所述被测程序的代码,得到代码覆盖率的统计数据;
根据所述代码覆盖率的统计数据,生成代码覆盖率报告。
可选地,所述代码覆盖率的统计数据包括下列至少之一:
指令覆盖率数据、分支覆盖率数据、圈复杂度覆盖率数据、行覆盖率数据、方法覆盖率数据、类覆盖率数据。
可选地,根据所述代码覆盖率的统计数据,生成代码覆盖率报告,包括:
计算各类代码覆盖率的统计数据的百分比值,并确定所述各类代码覆盖率的统计数据的重要程度系数;
对所述各类代码覆盖率的统计数据的百分比值和重要程度系数进行加权求和,得到综合数值;
根据所述综合数值,生成代码覆盖率报告。
可选地,所述测试资源发布通道包括web前台页面。
可选地,在生成代码覆盖率报告之后,所述方法还包括:
在所述web前台页面展示所述代码覆盖率报告。
依据本发明的另一方面,还提供了一种代码覆盖率的测试装置,包括:
发布通道提供模块,适于新建特定的测试资源发布通道,其中,所述测试资源发布通道用于将测试资源部署到测试环境中;
导入模块,适于当接收到对被测程序进行测试的指令时,利用所述测试资源发布通道将所述被测程序部署到测试环境;
获取模块,适于在所述测试环境中对所述被测程序进行测试,获取所述被测程序的代码覆盖率数据。
可选地,所述装置还包括:
插桩模块,适于在所述导入模块利用所述测试资源发布通道将所述被测程序部署到测试环境之前,对被测程序的源码进行插桩处理;
编译模块,适于对插桩处理后的源码进行编译并打包,得到所述被测程序。
可选地,所述导入模块还适于:
调用所述测试资源发布通道的第一接口接收所述被测程序;以及
调用所述测试资源发布通道的第二接口将接收的所述被测程序部署到所述测试环境。
可选地,所述获取模块还适于:
在所述测试环境中,调用第一线程执行所述被测程序的测试用例,生成所述测试用例的测试信息,其中,所述测试信息中包括代码覆盖率数据;
新增独立于所述第一线程的第二线程,其中,所述第二线程具备代码覆盖率数据的获取功能;
在所述第一线程的执行过程中,触发所述第二线程从所述测试信息中获取代码覆盖率数据。
可选地,所述装置还包括:
提交模块,适于利用所述测试资源发布通道将所述被测程序的源码提交给代码覆盖率工具;
生成模块,适于在测试完成后,调用代码覆盖率工具,由所述代码覆盖率工具根据所述代码覆盖率数据、所述被测程序的源码以及所述被测程序的代码,生成代码覆盖率报告。
可选地,所述生成模块还适于:
对比分析所述代码覆盖率数据、所述被测程序的源码以及所述被测程序的代码,得到代码覆盖率的统计数据;
根据所述代码覆盖率的统计数据,生成代码覆盖率报告。
可选地,所述代码覆盖率的统计数据包括下列至少之一:
指令覆盖率数据、分支覆盖率数据、圈复杂度覆盖率数据、行覆盖率数据、方法覆盖率数据、类覆盖率数据。
可选地,所述生成模块还适于:
计算各类代码覆盖率的统计数据的百分比值,并确定所述各类代码覆盖率的统计数据的重要程度系数;
对所述各类代码覆盖率的统计数据的百分比值和重要程度系数进行加权求和,得到综合数值;
根据所述综合数值,生成代码覆盖率报告。
可选地,所述测试资源发布通道包括web前台页面。
可选地,所述装置还包括:
展示模块,适于在所述生成模块生成代码覆盖率报告之后,在所述web前台页面展示所述代码覆盖率报告。
在本发明实施例中,新建特定的测试资源发布通道,当接收到对被测程序进行测试的指令时,利用测试资源发布通道将被测程序部署到测试环境,随后在测试环境中对被测程序进行测试,获取被测程序的代码覆盖率数据。由此可见,本发明实施例在测试代码覆盖率时,可以利用测试资源发布通道将被测程序部署到测试环境,从而将开发和测试工作分开,减轻了开发的负担,提高了测试效率。
上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,而可依照说明书的内容予以实施,并且为了让本发明的上述和其它目的、特征和优点能够更明显易懂,以下特举本发明的具体实施方式。
根据下文结合附图对本发明具体实施例的详细描述,本领域技术人员将会更加明了本发明的上述以及其他目的、优点和特征。
附图说明
通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本发明的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中:
图1示出了根据本发明一个实施例的代码覆盖率的测试方法的流程图;
图2示出了根据本发明一个实施例的获取代码覆盖率数据的方法的流程图;
图3示出了根据本发明一个实施例的代码覆盖率报告的生成方法的流程图;
图4示出了根据本发明一个实施例的代码覆盖率的测试的架构示意图;
图5示出了根据本发明一个实施例的代码覆盖率的测试装置的结构示意图;以及
图6示出了根据本发明另一个实施例的代码覆盖率的测试装置的结构示意图。
具体实施方式
下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。
为解决上述技术问题,本发明实施例提供了一种代码覆盖率的测试方法。图1示出了根据本发明一个实施例的代码覆盖率的测试方法的流程图。如图1所示,该方法至少包括以下步骤S102至步骤S106:
步骤S102,新建特定的测试资源发布通道,其中,该测试资源发布通道用于将测试资源部署到测试环境中;
步骤S104,当接收到对被测程序进行测试的指令时,利用测试资源发布通道将被测程序部署到测试环境;
步骤S106,在测试环境中对被测程序进行测试,获取被测程序的代码覆盖率数据。
在本发明实施例中,新建特定的测试资源发布通道,当接收到对被测程序进行测试的指令时,利用测试资源发布通道将被测程序部署到测试环境,随后在测试环境中对被测程序进行测试,获取被测程序的代码覆盖率数据。由此可见,本发明实施例在测试代码覆盖率时,可以利用测试资源发布通道将被测程序部署到测试环境,从而将开发和测试工作分开,减轻了开发的负担,提高了测试效率。
上文步骤S102中提及的测试环境,可以是指测试运行其上的软件和硬件环境的描述,以及任何其它与被测程序交互的软件,包括驱动等;也可以是指为了完成软件测试工作所必须的计算机硬件、软件、网络设备、历史数据的总称,因此,在本发明的下述说明中,不对测试环境展开赘述。
在本发明一实施例中,在利用测试资源发布通道将被测程序部署到测试环境之前,可以对被测程序的源码进行插桩处理,进而对插桩处理后的源码进行编译并打包,得到被测程序。
在本发明实施例中,在对被测程序的源码进行插桩时,可以采用已有的以及在以后出现的各种可能的方式进行,用于插桩的代码,可以根据实际需要进行设定,在此不予赘述。这里的插桩是指在不破坏被测程序原有逻辑完整性的情况下,在被测程序的相应位置插入用于生成代码覆盖率数据的代码,即探针,这些探针本质上是进行信息采集的代码段,通过探针的执行并输出程序的运行特征数据,从而基于这些特征数据的分析,揭示程序的内部行为和特性。例如,被测程序的源码生成的class文件为:
if(j==-1)
{doSomething();}
else
{doSomething2();}
代码覆盖率工具通过离线或在线的插桩模式,往被测程序的class文件中插入覆盖率统计标识,插入覆盖率统计标识后的class文件为:
if(j==-1)
{doSomething();
arrayOfBoolean[0]=true;
}
else
{doSomething2();
arrayOfBoolean[1]=true;
}
在测试结束后,需要将这些插入的探针去除,以保留被测程序的完整性。
上文步骤S104中利用测试资源发布通道将被测程序部署到测试环境,本发明提供了一种可选的方案,在该方案中,可以调用测试资源发布通道的第一接口接收被测程序,并调用测试资源发布通道的第二接口将接收的被测程序部署到测试环境。
进一步,步骤S106中在测试环境中对被测程序进行测试,获取被测程序的代码覆盖率数据,本发明实施例提供了一种可选的方案,图2示出了根据本发明一个实施例的获取代码覆盖率数据的方法的流程图。如图2所示,该方法至少包括以下步骤S202至步骤S206:
步骤S202,在测试环境中,调用第一线程执行被测程序的测试用例,生成测试用例的测试信息,其中,该测试信息中包括代码覆盖率数据;
步骤S204,新增独立于第一线程的第二线程,其中,第二线程具备代码覆盖率数据的获取功能;
步骤S206,在第一线程的执行过程中,触发第二线程从测试信息中获取代码覆盖率数据。
在本发明实施例中,通过新增独立于第一线程的第二线程,以使得在对被测程序进行测试的过程中,利用第二线程具备的代码覆盖率数据的获取功能,实时获取并导出代码覆盖率数据。
在本发明一实施例中,可以进一步利用获取的代码覆盖率数据生成代码覆盖率数据报告。即,利用测试资源发布通道将被测程序的源码提交给代码覆盖率工具,在测试完成后,调用代码覆盖率工具,由代码覆盖率工具根据代码覆盖率数据、被测程序的源码以及被测程序的代码,生成代码覆盖率报告。
图3示出了根据本发明一个实施例的代码覆盖率报告的生成方法的流程图。如图3所示,该方法至少包括以下步骤S302至步骤S304。
步骤S302,对比分析代码覆盖率数据、被测程序的源码以及被测程序的代码,得到代码覆盖率的统计数据。
该步骤中,代码覆盖率的统计数据可以包括指令覆盖率数据、分支覆盖率数据、圈复杂度覆盖率数据、行覆盖率数据、方法覆盖率数据、类覆盖率数据,等等,本发明不限于此。
步骤S304,根据代码覆盖率的统计数据,生成代码覆盖率报告。
为了使得代码覆盖率报告更加直观,增加其可读性,本发明实施例提供了一种实施步骤S304的方案,即,可以计算各类代码覆盖率的统计数据的百分比值,并确定各类代码覆盖率的统计数据的重要程度系数,随后对各类代码覆盖率的统计数据的百分比值和重要程度系数进行加权求和,得到综合数值,进而根据综合数值,生成代码覆盖率报告。
以Jacoco工具为例,如表1所示,Jacoco工具生成的代码覆盖率报告中的代码覆盖率的统计数据可以包括字节码指令(Instructions)、分支(Branches)、圈复杂度(Cxty)、行(Lines)、方法(Methods)和类(Classes)等。在表1中,cn为各类代码覆盖率的统计数据的百分比值,an为各类代码覆盖率的统计数据的重要程度系数。
表1
代码覆盖率的统计数据 | 覆盖率(0<=cn<=1) | 重要程度系数(0<=an<=100) |
指令(Instructions) | c0 | a0 |
分支(Branches) | c1 | a1 |
圈复杂度(Cxty) | c2 | a2 |
行(Lines) | c3 | a3 |
方法(Methods) | c4 | a4 |
类(Classes) | c5 | a5 |
在本发明实施例中,可以对Jacoco报告处理如下:
首先,从Jacoco报告的html/index.html中读取Total一行的数据,计算出c0到c5;
其次,将c0到c5按重要程度加权计算平均值,即按如下公式计算评分:
p=a0*c0+a1*c1+a2*c2+a3*c3+a4*c4+a5*c5
其中,a0+a1+a2+a3+a4+a5=100,这里的权值an可以根据实际需要灵活调整。
例如,如果只关注代码的行覆盖度,则令a3=100,a0=a1=a2=a4=a5=0,公式变成p=c3,恰好是Jacoco报告中的行覆盖率得分。
又例如,如果关注行覆盖率和分支覆盖率,且两者重要性相当,则可以令a3=a1=50,a0=a2=a4=a5=0,公式变成p=50*(c3+c1)。
下面通过一实施例详细介绍本发明提供的代码覆盖率的测试方法的实现过程。如图4所示,测试资源发布通道为web前台页面,测试人员可以将被测程序(这里,对被测程序的源码进行插桩处理,进而对插桩处理后的源码进行编译并打包,得到被测程序)以及被测程序的源码通过web前台页面上传,并部署到测试环境。
随后,在测试环境中对被测程序进行测试,获取被测程序的代码覆盖率数据。在测试完成后,调用代码覆盖率工具,由代码覆盖率工具根据代码覆盖率数据、被测程序的源码以及被测程序的代码,生成代码覆盖率报告。
为了使得代码覆盖率报告更加直观,增加其可读性,可以计算各类代码覆盖率的统计数据的百分比值,并确定各类代码覆盖率的统计数据的重要程度系数,随后对各类代码覆盖率的统计数据的百分比值和重要程度系数进行加权求和,得到综合数值(即,代码覆盖率得分),进而根据综合数值,生成代码覆盖率报告。
最后,在web前台页面展示代码覆盖率报告。
基于上文各个实施例提供的代码覆盖率的测试方法,基于同一发明构思,本发明实施例还提供了一种代码覆盖率的测试装置。
图5示出了根据本发明一个实施例的代码覆盖率的测试装置的结构示意图。如图5所示,该装置500至少可以包括发布通道提供模块510、导入模块520以及获取模块530。
现介绍本发明实施例的代码覆盖率的测试装置500的各组成或器件的功能以及各部分间的连接关系:
发布通道提供模块510,适于新建特定的测试资源发布通道,其中,测试资源发布通道用于将测试资源部署到测试环境中;
导入模块520,与发布通道提供模块510相耦合,适于当接收到对被测程序进行测试的指令时,利用测试资源发布通道将被测程序部署到测试环境;
获取模块530,与导入模块520相耦合,适于在测试环境中对被测程序进行测试,获取被测程序的代码覆盖率数据。
在本发明一实施例中,如图6所示,图5展示的装置还可以包括:
插桩模块540,适于在导入模块520利用测试资源发布通道将被测程序部署到测试环境之前,对被测程序的源码进行插桩处理;
编译模块550,与插桩模块540以及导入模块520相耦合,适于对插桩处理后的源码进行编译并打包,得到被测程序。
在本发明一实施例中,导入模块520还适于:
调用测试资源发布通道的第一接口接收被测程序;以及
调用测试资源发布通道的第二接口将接收的被测程序部署到测试环境。
在本发明一实施例中,获取模块530还适于:
在测试环境中,调用第一线程执行被测程序的测试用例,生成测试用例的测试信息,其中,测试信息中包括代码覆盖率数据;
新增独立于第一线程的第二线程,其中,第二线程具备代码覆盖率数据的获取功能;
在第一线程的执行过程中,触发第二线程从测试信息中获取代码覆盖率数据。
在本发明一实施例中,如图6所示,图5展示的装置还可以包括:
提交模块560,适于利用测试资源发布通道将被测程序的源码提交给代码覆盖率工具;
生成模块570,与提交模块560相耦合,适于在测试完成后,调用代码覆盖率工具,由代码覆盖率工具根据代码覆盖率数据、被测程序的源码以及被测程序的代码,生成代码覆盖率报告。
在本发明一实施例中,生成模块570还适于:
对比分析代码覆盖率数据、被测程序的源码以及被测程序的代码,得到代码覆盖率的统计数据;
根据代码覆盖率的统计数据,生成代码覆盖率报告。
在本发明一实施例中,代码覆盖率的统计数据包括下列至少之一:
指令覆盖率数据、分支覆盖率数据、圈复杂度覆盖率数据、行覆盖率数据、方法覆盖率数据、类覆盖率数据。
在本发明一实施例中,生成模块570还适于:
计算各类代码覆盖率的统计数据的百分比值,并确定各类代码覆盖率的统计数据的重要程度系数;
对各类代码覆盖率的统计数据的百分比值和重要程度系数进行加权求和,得到综合数值;
根据综合数值,生成代码覆盖率报告。
在本发明一实施例中,测试资源发布通道包括web前台页面。
在本发明一实施例中,如图6所示,图5展示的装置还可以包括:
展示模块580,与生成模块570相耦合,适于在生成模块570生成代码覆盖率报告之后,在web前台页面展示代码覆盖率报告。
根据上述任意一个优选实施例或多个优选实施例的组合,本发明实施例能够达到如下有益效果:
在本发明实施例中,当接收到对被测程序进行测试的指令时,调用第一线程执行被测程序的测试用例,生成该测试用例的包括代码覆盖率数据的测试参数。新增独立于第一线程的第二线程,从而在第一线程的执行过程中,触发第二线程从测试参数中获取代码覆盖率数据。由此可知,本发明实施例通过新增独立于第一线程的第二线程,以使得在对被测程序进行测试的过程中,利用第二线程具备的代码覆盖率数据的获取功能,实时获取并导出代码覆盖率数据,从而解决了现有技术中需要修改被测程序的源码,对外提供触发接口导出代码覆盖率数据的问题。并且,本发明实施例通过循环的方式实时获取代码覆盖率数据,解决了现有技术中是在测试结束后导出数据而存在的被测程序异常退出,导致无法获取代码覆盖率数据的问题。
在此处所提供的说明书中,说明了大量具体细节。然而,能够理解,本发明的实施例可以在没有这些具体细节的情况下实践。在一些实例中,并未详细示出公知的方法、结构和技术,以便不模糊对本说明书的理解。
类似地,应当理解,为了精简本公开并帮助理解各个发明方面中的一个或多个,在上面对本发明的示例性实施例的描述中,本发明的各个特征有时被一起分组到单个实施例、图、或者对其的描述中。然而,并不应将该公开的方法解释成反映如下意图:即所要求保护的本发明要求比在每个权利要求中所明确记载的特征更多的特征。更确切地说,如下面的权利要求书所反映的那样,发明方面在于少于前面公开的单个实施例的所有特征。因此,遵循具体实施方式的权利要求书由此明确地并入该具体实施方式,其中每个权利要求本身都作为本发明的单独实施例。
本领域那些技术人员可以理解,可以对实施例中的设备中的模块进行自适应性地改变并且把它们设置在与该实施例不同的一个或多个设备中。可以把实施例中的模块或单元或组件组合成一个模块或单元或组件,以及此外可以把它们分成多个子模块或子单元或子组件。除了这样的特征和/或过程或者单元中的至少一些是相互排斥之外,可以采用任何组合对本说明书(包括伴随的权利要求、摘要和附图)中公开的所有特征以及如此公开的任何方法或者设备的所有过程或单元进行组合。除非另外明确陈述,本说明书(包括伴随的权利要求、摘要和附图)中公开的每个特征可以由提供相同、等同或相似目的的替代特征来代替。
此外,本领域的技术人员能够理解,尽管在此所述的一些实施例包括其它实施例中所包括的某些特征而不是其它特征,但是不同实施例的特征的组合意味着处于本发明的范围之内并且形成不同的实施例。例如,在权利要求书中,所要求保护的实施例的任意之一都可以以任意的组合方式来使用。
本发明的各个部件实施例可以以硬件实现,或者以在一个或者多个处理器上运行的软件模块实现,或者以它们的组合实现。本领域的技术人员应当理解,可以在实践中使用微处理器或者数字信号处理器(DSP)来实现根据本发明实施例的代码覆盖率的测试装置中的一些或者全部部件的一些或者全部功能。本发明还可以实现为用于执行这里所描述的方法的一部分或者全部的设备或者装置程序(例如,计算机程序和计算机程序产品)。这样的实现本发明的程序可以存储在计算机可读介质上,或者可以具有一个或者多个信号的形式。这样的信号可以从因特网网站上下载得到,或者在载体信号上提供,或者以任何其他形式提供。
应该注意的是上述实施例对本发明进行说明而不是对本发明进行限制,并且本领域技术人员在不脱离所附权利要求的范围的情况下可设计出替换实施例。在权利要求中,不应将位于括号之间的任何参考符号构造成对权利要求的限制。单词“包含”不排除存在未列在权利要求中的元件或步骤。位于元件之前的单词“一”或“一个”不排除存在多个这样的元件。本发明可以借助于包括有若干不同元件的硬件以及借助于适当编程的计算机来实现。在列举了若干装置的单元权利要求中,这些装置中的若干个可以是通过同一个硬件项来具体体现。单词第一、第二、以及第三等的使用不表示任何顺序。可将这些单词解释为名称。
至此,本领域技术人员应认识到,虽然本文已详尽示出和描述了本发明的多个示例性实施例,但是,在不脱离本发明精神和范围的情况下,仍可根据本发明公开的内容直接确定或推导出符合本发明原理的许多其他变型或修改。因此,本发明的范围应被理解和认定为覆盖了所有这些其他变型或修改。
本发明实施例还公开了:A1、一种代码覆盖率的测试方法,包括:
新建特定的测试资源发布通道,其中,所述测试资源发布通道用于将测试资源部署到测试环境中;
当接收到对被测程序进行测试的指令时,利用所述测试资源发布通道将所述被测程序部署到测试环境;
在所述测试环境中对所述被测程序进行测试,获取所述被测程序的代码覆盖率数据。
A2、根据A1所述的方法,其中,在利用所述测试资源发布通道将所述被测程序部署到测试环境之前,所述方法还包括:
对被测程序的源码进行插桩处理;
对插桩处理后的源码进行编译并打包,得到所述被测程序。
A3、根据A1或A2所述的方法,其中,利用所述测试资源发布通道将所述被测程序部署到测试环境,包括:
调用所述测试资源发布通道的第一接口接收所述被测程序;以及
调用所述测试资源发布通道的第二接口将接收的所述被测程序部署到所述测试环境。
A4、根据A1-A3任一项所述的方法,其中,在所述测试环境中对所述被测程序进行测试,得到所述被测程序的代码覆盖率数据,包括:
在所述测试环境中,调用第一线程执行所述被测程序的测试用例,生成所述测试用例的测试信息,其中,所述测试信息中包括代码覆盖率数据;
新增独立于所述第一线程的第二线程,其中,所述第二线程具备代码覆盖率数据的获取功能;
在所述第一线程的执行过程中,触发所述第二线程从所述测试信息中获取代码覆盖率数据。
A5、根据A1-A4任一项所述的方法,其中,还包括:
利用所述测试资源发布通道将所述被测程序的源码提交给代码覆盖率工具;
在测试完成后,调用代码覆盖率工具,由所述代码覆盖率工具根据所述代码覆盖率数据、所述被测程序的源码以及所述被测程序的代码,生成代码覆盖率报告。
A6、根据A5所述的方法,其中,根据所述代码覆盖率数据、所述被测程序的源码以及所述被测程序的代码,生成代码覆盖率报告,包括:
对比分析所述代码覆盖率数据、所述被测程序的源码以及所述被测程序的代码,得到代码覆盖率的统计数据;
根据所述代码覆盖率的统计数据,生成代码覆盖率报告。
A7、根据A6所述的方法,其中,所述代码覆盖率的统计数据包括下列至少之一:
指令覆盖率数据、分支覆盖率数据、圈复杂度覆盖率数据、行覆盖率数据、方法覆盖率数据、类覆盖率数据。
A8、根据A7所述的方法,其中,根据所述代码覆盖率的统计数据,生成代码覆盖率报告,包括:
计算各类代码覆盖率的统计数据的百分比值,并确定所述各类代码覆盖率的统计数据的重要程度系数;
对所述各类代码覆盖率的统计数据的百分比值和重要程度系数进行加权求和,得到综合数值;
根据所述综合数值,生成代码覆盖率报告。
A9、根据A1-A8任一项所述的方法,其中,所述测试资源发布通道包括web前台页面。
A10、根据A9所述的方法,其中,在生成代码覆盖率报告之后,所述方法还包括:
在所述web前台页面展示所述代码覆盖率报告。
B11、一种代码覆盖率的测试装置,包括:
发布通道提供模块,适于新建特定的测试资源发布通道,其中,所述测试资源发布通道用于将测试资源部署到测试环境中;
导入模块,适于当接收到对被测程序进行测试的指令时,利用所述测试资源发布通道将所述被测程序部署到测试环境;
获取模块,适于在所述测试环境中对所述被测程序进行测试,获取所述被测程序的代码覆盖率数据。
B12、根据B11所述的装置,其中,还包括:
插桩模块,适于在所述导入模块利用所述测试资源发布通道将所述被测程序部署到测试环境之前,对被测程序的源码进行插桩处理;
编译模块,适于对插桩处理后的源码进行编译并打包,得到所述被测程序。
B13、根据B11或B12所述的装置,其中,所述导入模块还适于:
调用所述测试资源发布通道的第一接口接收所述被测程序;以及
调用所述测试资源发布通道的第二接口将接收的所述被测程序部署到所述测试环境。
B14、根据B11-B13任一项所述的装置,其中,所述获取模块还适于:
在所述测试环境中,调用第一线程执行所述被测程序的测试用例,生成所述测试用例的测试信息,其中,所述测试信息中包括代码覆盖率数据;
新增独立于所述第一线程的第二线程,其中,所述第二线程具备代码覆盖率数据的获取功能;
在所述第一线程的执行过程中,触发所述第二线程从所述测试信息中获取代码覆盖率数据。
B15、根据B10-B14任一项所述的装置,其中,还包括:
提交模块,适于利用所述测试资源发布通道将所述被测程序的源码提交给代码覆盖率工具;
生成模块,适于在测试完成后,调用代码覆盖率工具,由所述代码覆盖率工具根据所述代码覆盖率数据、所述被测程序的源码以及所述被测程序的代码,生成代码覆盖率报告。
B16、根据B15所述的装置,其中,所述生成模块还适于:
对比分析所述代码覆盖率数据、所述被测程序的源码以及所述被测程序的代码,得到代码覆盖率的统计数据;
根据所述代码覆盖率的统计数据,生成代码覆盖率报告。
B17、根据B16所述的装置,其中,所述代码覆盖率的统计数据包括下列至少之一:
指令覆盖率数据、分支覆盖率数据、圈复杂度覆盖率数据、行覆盖率数据、方法覆盖率数据、类覆盖率数据。
B18、根据B17所述的装置,其中,所述生成模块还适于:
计算各类代码覆盖率的统计数据的百分比值,并确定所述各类代码覆盖率的统计数据的重要程度系数;
对所述各类代码覆盖率的统计数据的百分比值和重要程度系数进行加权求和,得到综合数值;
根据所述综合数值,生成代码覆盖率报告。
B19、根据B10-B18任一项所述的装置,其中,所述测试资源发布通道包括web前台页面。
B20、根据B19所述的装置,其中,还包括:
展示模块,适于在所述生成模块生成代码覆盖率报告之后,在所述web前台页面展示所述代码覆盖率报告。
Claims (10)
1.一种代码覆盖率的测试方法,包括:
新建特定的测试资源发布通道,其中,所述测试资源发布通道用于将测试资源部署到测试环境中;
当接收到对被测程序进行测试的指令时,利用所述测试资源发布通道将所述被测程序部署到测试环境;
在所述测试环境中对所述被测程序进行测试,获取所述被测程序的代码覆盖率数据。
2.根据权利要求1所述的方法,其中,在利用所述测试资源发布通道将所述被测程序部署到测试环境之前,所述方法还包括:
对被测程序的源码进行插桩处理;
对插桩处理后的源码进行编译并打包,得到所述被测程序。
3.根据权利要求1或2所述的方法,其中,利用所述测试资源发布通道将所述被测程序部署到测试环境,包括:
调用所述测试资源发布通道的第一接口接收所述被测程序;以及
调用所述测试资源发布通道的第二接口将接收的所述被测程序部署到所述测试环境。
4.根据权利要求1-3任一项所述的方法,其中,在所述测试环境中对所述被测程序进行测试,得到所述被测程序的代码覆盖率数据,包括:
在所述测试环境中,调用第一线程执行所述被测程序的测试用例,生成所述测试用例的测试信息,其中,所述测试信息中包括代码覆盖率数据;
新增独立于所述第一线程的第二线程,其中,所述第二线程具备代码覆盖率数据的获取功能;
在所述第一线程的执行过程中,触发所述第二线程从所述测试信息中获取代码覆盖率数据。
5.根据权利要求1-4任一项所述的方法,其中,还包括:
利用所述测试资源发布通道将所述被测程序的源码提交给代码覆盖率工具;
在测试完成后,调用代码覆盖率工具,由所述代码覆盖率工具根据所述代码覆盖率数据、所述被测程序的源码以及所述被测程序的代码,生成代码覆盖率报告。
6.根据权利要求5所述的方法,其中,根据所述代码覆盖率数据、所述被测程序的源码以及所述被测程序的代码,生成代码覆盖率报告,包括:
对比分析所述代码覆盖率数据、所述被测程序的源码以及所述被测程序的代码,得到代码覆盖率的统计数据;
根据所述代码覆盖率的统计数据,生成代码覆盖率报告。
7.根据权利要求6所述的方法,其中,所述代码覆盖率的统计数据包括下列至少之一:
指令覆盖率数据、分支覆盖率数据、圈复杂度覆盖率数据、行覆盖率数据、方法覆盖率数据、类覆盖率数据。
8.根据权利要求7所述的方法,其中,根据所述代码覆盖率的统计数据,生成代码覆盖率报告,包括:
计算各类代码覆盖率的统计数据的百分比值,并确定所述各类代码覆盖率的统计数据的重要程度系数;
对所述各类代码覆盖率的统计数据的百分比值和重要程度系数进行加权求和,得到综合数值;
根据所述综合数值,生成代码覆盖率报告。
9.根据权利要求1-8任一项所述的方法,其中,所述测试资源发布通道包括web前台页面。
10.一种代码覆盖率的测试装置,包括:
发布通道提供模块,适于新建特定的测试资源发布通道,其中,所述测试资源发布通道用于将测试资源部署到测试环境中;
导入模块,适于当接收到对被测程序进行测试的指令时,利用所述测试资源发布通道将所述被测程序部署到测试环境;
获取模块,适于在所述测试环境中对所述被测程序进行测试,获取所述被测程序的代码覆盖率数据。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510944799.4A CN105446884A (zh) | 2015-12-16 | 2015-12-16 | 代码覆盖率的测试方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510944799.4A CN105446884A (zh) | 2015-12-16 | 2015-12-16 | 代码覆盖率的测试方法及装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN105446884A true CN105446884A (zh) | 2016-03-30 |
Family
ID=55557113
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510944799.4A Pending CN105446884A (zh) | 2015-12-16 | 2015-12-16 | 代码覆盖率的测试方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN105446884A (zh) |
Cited By (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106201863A (zh) * | 2016-06-22 | 2016-12-07 | 广州唯品会信息科技有限公司 | 一种获取代码覆盖率的方法和装置 |
CN106681912A (zh) * | 2016-12-08 | 2017-05-17 | 武汉斗鱼网络科技有限公司 | 用于Android系统的代码覆盖率的自动化测试方法及装置 |
CN106776296A (zh) * | 2016-11-30 | 2017-05-31 | 网易(杭州)网络有限公司 | 覆盖率检测的启动方法、装置和启动设备 |
CN107506300A (zh) * | 2017-08-09 | 2017-12-22 | 百度在线网络技术(北京)有限公司 | 一种用户界面测试方法、装置、服务器和存储介质 |
CN108170600A (zh) * | 2017-12-27 | 2018-06-15 | 广州品唯软件有限公司 | 前端代码测试的覆盖率统计方法、装置及系统 |
CN108627716A (zh) * | 2017-03-22 | 2018-10-09 | 株洲中车时代电气股份有限公司 | 一种变流器整机全过程检测覆盖率分析方法 |
CN109542789A (zh) * | 2018-11-26 | 2019-03-29 | 泰康保险集团股份有限公司 | 一种代码覆盖率统计方法及装置 |
CN110245073A (zh) * | 2019-05-21 | 2019-09-17 | 北京字节跳动网络技术有限公司 | 终端代码覆盖率监测方法、系统、介质和电子设备 |
CN110888811A (zh) * | 2019-11-21 | 2020-03-17 | 望海康信(北京)科技股份公司 | 代码覆盖率信息处理方法、装置、电子设备及介质 |
CN111026630A (zh) * | 2018-10-09 | 2020-04-17 | 阿里巴巴集团控股有限公司 | 代码覆盖率的统计方法、装置和系统 |
CN111782495A (zh) * | 2020-06-29 | 2020-10-16 | 京东数字科技控股有限公司 | 一种埋点数据的获取方法和装置 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103095518A (zh) * | 2011-11-08 | 2013-05-08 | 阿里巴巴集团控股有限公司 | 覆盖率测试处理方法、装置、覆盖率测试服务器及系统 |
CN103425573A (zh) * | 2012-05-24 | 2013-12-04 | 腾讯科技(深圳)有限公司 | 代码测试信息收集方法及系统 |
WO2014124691A1 (en) * | 2013-02-15 | 2014-08-21 | Sabanci Üniversitesi | Interleaving coverage criteria oriented testing of multi-threaded applications |
-
2015
- 2015-12-16 CN CN201510944799.4A patent/CN105446884A/zh active Pending
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103095518A (zh) * | 2011-11-08 | 2013-05-08 | 阿里巴巴集团控股有限公司 | 覆盖率测试处理方法、装置、覆盖率测试服务器及系统 |
CN103425573A (zh) * | 2012-05-24 | 2013-12-04 | 腾讯科技(深圳)有限公司 | 代码测试信息收集方法及系统 |
WO2014124691A1 (en) * | 2013-02-15 | 2014-08-21 | Sabanci Üniversitesi | Interleaving coverage criteria oriented testing of multi-threaded applications |
Non-Patent Citations (2)
Title |
---|
张波: ""基于测试覆盖的安全关键软件测试策略研究"", 《中国博士学位论文全文数据库 信息科技辑》 * |
李树芳 等: ""面向大型实时软件的测试覆盖率快速分析方法"", 《西南科技大学学报》 * |
Cited By (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106201863A (zh) * | 2016-06-22 | 2016-12-07 | 广州唯品会信息科技有限公司 | 一种获取代码覆盖率的方法和装置 |
CN106776296A (zh) * | 2016-11-30 | 2017-05-31 | 网易(杭州)网络有限公司 | 覆盖率检测的启动方法、装置和启动设备 |
CN106681912A (zh) * | 2016-12-08 | 2017-05-17 | 武汉斗鱼网络科技有限公司 | 用于Android系统的代码覆盖率的自动化测试方法及装置 |
CN108627716A (zh) * | 2017-03-22 | 2018-10-09 | 株洲中车时代电气股份有限公司 | 一种变流器整机全过程检测覆盖率分析方法 |
CN107506300A (zh) * | 2017-08-09 | 2017-12-22 | 百度在线网络技术(北京)有限公司 | 一种用户界面测试方法、装置、服务器和存储介质 |
CN108170600A (zh) * | 2017-12-27 | 2018-06-15 | 广州品唯软件有限公司 | 前端代码测试的覆盖率统计方法、装置及系统 |
CN111026630A (zh) * | 2018-10-09 | 2020-04-17 | 阿里巴巴集团控股有限公司 | 代码覆盖率的统计方法、装置和系统 |
CN111026630B (zh) * | 2018-10-09 | 2023-05-02 | 阿里巴巴集团控股有限公司 | 代码覆盖率的统计方法、装置和系统 |
CN109542789A (zh) * | 2018-11-26 | 2019-03-29 | 泰康保险集团股份有限公司 | 一种代码覆盖率统计方法及装置 |
CN109542789B (zh) * | 2018-11-26 | 2022-03-25 | 泰康保险集团股份有限公司 | 一种代码覆盖率统计方法及装置 |
CN110245073A (zh) * | 2019-05-21 | 2019-09-17 | 北京字节跳动网络技术有限公司 | 终端代码覆盖率监测方法、系统、介质和电子设备 |
CN110888811A (zh) * | 2019-11-21 | 2020-03-17 | 望海康信(北京)科技股份公司 | 代码覆盖率信息处理方法、装置、电子设备及介质 |
CN111782495A (zh) * | 2020-06-29 | 2020-10-16 | 京东数字科技控股有限公司 | 一种埋点数据的获取方法和装置 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN105446884A (zh) | 代码覆盖率的测试方法及装置 | |
Xie et al. | A framework and tool supports for generating test inputs of AspectJ programs | |
US9612943B2 (en) | Prioritization of tests of computer program code | |
CN101853200B (zh) | 一种高效动态软件漏洞挖掘方法 | |
CN105608000A (zh) | 获取代码覆盖率数据的方法及装置 | |
CN105630670A (zh) | 一种代码覆盖率的测试方法和装置 | |
Panigrahi et al. | A heuristic-based regression test case prioritization approach for object-oriented programs | |
CN103338121B (zh) | 一种系统管理服务器、方法及其系统 | |
CN105573915A (zh) | 一种基于代码覆盖率的测试方法和装置 | |
CN106776334A (zh) | 基于注释生成测试用例方法及装置 | |
CN105630671B (zh) | 代码覆盖率报告的生成方法及装置 | |
Panigrahi et al. | An approach to prioritize the regression test cases of object-oriented programs | |
CN110275818A (zh) | 测试程序生成方法、装置及存储介质 | |
JP2014021982A (ja) | オブジェクト指向言語のための記号テストドライバの反復生成 | |
Souter et al. | The construction of contextual def-use associations for object-oriented systems | |
CN106557412A (zh) | 一种模糊测试的方法及装置 | |
Ceccarello et al. | Automated generation of model classes for java pathfinder | |
Maragathavalli et al. | Automatic program instrumentation in generation of test data using genetic algorithm for multiple paths coverage | |
CN106227650A (zh) | 一种检测应用的内存泄漏的方法和装置 | |
Kim et al. | Automated bug neighborhood analysis for identifying incomplete bug fixes | |
CN109947642A (zh) | 基于案例分类的自动化分层测试方法、装置及系统 | |
CN105718373B (zh) | 满足do-178c的代码覆盖率生成方法 | |
Singh et al. | Extended firm mutation testing: A cost reduction technique for mutation testing | |
CN106951236A (zh) | 插件的开发方法及装置 | |
Liu et al. | Extracting Inline Tests from Unit Tests |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20160330 |
|
RJ01 | Rejection of invention patent application after publication |