一种代码覆盖率分析方法、装置、设备及存储介质与流程

文档序号:16972278发布日期:2019-02-26 18:40阅读:150来源:国知局
一种代码覆盖率分析方法、装置、设备及存储介质与流程

本发明涉及软件测试领域,尤其涉及一种代码覆盖率分析方法、装置、设备及存储介质。



背景技术:

软件测试是指通过自动化或者手工的方式,对软件进行检测以发现程序错误,保证软件质量的过程。通常包括单元测试,接口测试,集成测试,性能测试等不同级别,而从实施的角度来讲又分为手工测试、自动化测试、ad-hoc测试(随机测试)等等。

可见,软件测试分不同阶段及不同的实施例类型。然而,软件测试的每个阶段覆盖率均单独统计,比如单元测试通常由开发人员进行,集成测试通常由测试人员进行,开发人员和测试人员很难了解互相的测试覆盖率细节情况,从而很难在整体上针对覆盖情况增加测试用例。而针对不同的实施类型,例如手工测试和自动化测试,同样很难互相同步覆盖率程度,不好从总体把握漏测情况。另外,在软件功能迭代的过程中,在针对新功能进行一系列的测试过程中,很难统计新功能的覆盖对总体覆盖产生的影响。

也就是说,现有的测试覆盖率统计工具只能单机运行,存在无法在整体上对测试覆盖率情况进行统计分析的问题。



技术实现要素:

鉴于上述问题,提出了本发明实施例以便提供一种解决上述问题的代码覆盖率分析方法、装置、设备及存储介质。

依据本发明实施例的一个方面,提供一种代码覆盖率分析方法,包括:

在代码测试时,将各个测试阶段的代码覆盖率结果文件进行合并,基于合并后的文件,生成汇总的代码覆盖率结果报告;

确定待分析的第一被测试代码和第二被测试代码,并在所述汇总的代码覆盖率结果报告中得到所述第一被测试代码和第二被测试代码的代码覆盖率结果报告;

建立所述第一被测试代码和第二被测试代码的代码覆盖率结果之间的映射关系,根据所述映射关系,对两个代码覆盖率结果进行差异分析。

可选地,所述将各个测试阶段的代码覆盖率结果文件进行合并,包括:

在进行第i阶段的测试时,收集第i阶段的代码覆盖率结果文件;i=1,…,n;n为正整数;

调取所述第i-1阶段的代码覆盖率结果文件与收集的第i阶段的代码覆盖率结果文件进行合并;

重复上述过程,直到完成所有测试阶段。

可选地,所述建立所述第一被测试代码和第二被测试代码的代码覆盖率结果之间的映射关系,包括:

解析所述第一被测试代码的代码覆盖率结果报告和第二被测试代码的代码覆盖率结果报告,生成所述第一被测试代码和第二被测试代码的代码覆盖率结果文档树;

建立所述第一被测试代码和第二被测试代码的代码覆盖率结果文档树的映射关系。

可选地,所述代码覆盖率结果文档树为超文本标记语言html格式的代码覆盖率结果文档树;

所述html格式的代码覆盖率结果文档树中包含多个标签元素,每个标签元素的id值映射为对应的测试代码中的一个行号,每个标签元素的类属性的值映射为所对应行号的测试代码的代码覆盖率结果。

可选地,所述建立所述第一被测试代码和第二被测试代码的代码覆盖率结果文档树的映射关系,包括:

对所述第一被测试代码和第二被测试代码进行比较,得到第一被测试代码和第二被测代码之间的代码变化区间表;

根据所述代码变化区间表,确定两个代码覆盖率结果文档树中各标签元素的对应关系,根据该对应关系,建立两个代码覆盖率结果文档树的映射关系。

可选地,所述根据所述映射关系,对两个代码覆盖率结果进行差异分析,包括:

根据两个代码覆盖率结果文档树中各标签元素的对应关系,针对变化的代码行,得到变化覆盖率;针对未变化的代码行,对两个代码行对应的类属性值进行比对,在比对结果不同时,得到覆盖率变化。

可选地,在对两个代码的代码覆盖率结果进行差异分析之后,还包括:

对所述变化覆盖率及其对应的代码行和/或覆盖率变化及其对应的代码行进行标识后,对所述汇总的代码覆盖率结果报告进行更新。

依据本发明另一个方面,提供一种代码覆盖率分析装置,包括:

信息获取模块,用于在代码测试时,将各个测试阶段的代码覆盖率结果文件进行合并,基于合并后的文件,生成汇总的代码覆盖率结果报告;

第一分析处理模块,用于确定待分析的第一被测试代码和第二被测试代码,并在所述汇总的代码覆盖率结果报告中得到所述第一被测试代码和第二被测试代码的代码覆盖率结果报告;

第二分析处理模块,用于建立所述第一被测试代码和第二被测试代码的代码覆盖率结果之间的映射关系,根据所述映射关系,对两个代码覆盖率结果进行差异分析。

可选地,所述信息获取模块,具体用于在进行第i阶段的测试时,收集第i阶段的代码覆盖率结果文件;调取所述第i-1阶段的代码覆盖率结果文件与收集的第i阶段的代码覆盖率结果文件进行合并;重复上述过程,直到完成所有测试阶段,完成代码覆盖率结果文件的合并;其中,i=1,…,n;n为正整数。

可选地,所述第二分析处理模块包括:

解析子模块,用于解析所述第一被测试代码的代码覆盖率结果报告和第二被测试代码的代码覆盖率结果报告,生成所述第一被测试代码和第二被测试代码的代码覆盖率结果文档树;

映射关系建立子模块,用于建立所述第一被测试代码和第二被测试代码的代码覆盖率结果文档树的映射关系。

可选地,所述代码覆盖率结果文档树为超文本标记语言html格式的代码覆盖率结果文档树;

所述html格式的代码覆盖率结果文档树中包含多个标签元素,每个标签元素的id值映射为对应的测试代码中的一个行号,每个标签元素的类属性的值映射为所对应行号的测试代码的代码覆盖率结果。

可选地,所述映射关系建立子模块,具体用于对所述第一被测试代码和第二被测试代码进行比较,得到第一被测试代码和第二被测代码之间的代码变化区间表;根据所述代码变化区间表,确定两个代码覆盖率结果文档树中各标签元素的对应关系,根据该对应关系,建立两个代码覆盖率结果文档树的映射关系。

可选地,所述第二分析处理模块,还包括:

分析子模块,用于根据两个代码覆盖率结果文档树中各标签元素的对应关系,针对变化的代码行,得到变化覆盖率;针对未变化的代码行,对两个代码行对应的类属性值进行比对,在比对结果不同时,得到覆盖率变化。

可选地,所述第二分析处理模块,还包括:

更新子模块,用于在对两个代码的代码覆盖率结果进行差异分析之后,对所述变化覆盖率及其对应的代码行和/或覆盖率变化及其对应的代码行进行标识后,对所述汇总的代码覆盖率结果报告进行更新。

依据本发明的第三个方面,提供一种计算设备,所述计算设备包括:存储器、处理器及通信总线;所述通信总线用于实现处理器和存储器之间的连接通信;

所述处理器用于执行存储器中存储的代码覆盖率分析程序,以实现如上所述的代码覆盖率分析方法的步骤。

依据本发明的第四个方面,提供一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,该程序被处理器执行时实现如上所述的代码覆盖率分析方法的步骤。

本发明有益效果如下:

本发明实施例所述方案,在代码测试阶段,对各阶段的代码覆盖率结果文件进行合并,生成了汇总的代码覆盖率结果报告,基于该汇总的代码覆盖率结果报告可以对任意两个测试代码(可以是任意两个阶段测试的两个测试代码,也可以是任意一个阶段内的两个测试代码)的代码覆盖率结果进行分析,该过程实现了在整体上对测试覆盖率情况进行统计分析,基于该分析的分析结果,可以使测试更有针对性,减少重复覆盖。

上述说明仅是本发明实施例技术方案的概述,为了能够更清楚了解本发明实施例的技术手段,而可依照说明书的内容予以实施,并且为了让本发明实施例的上述和其它目的、特征和优点能够更明显易懂,以下特举本发明实施例的具体实施方式。

附图说明

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

图1为本发明第一实施例提供的一种代码覆盖率分析方法的流程图;

图2为本发明第二实施例提供的一种代码覆盖率分析方法的流程图;

图3为本发明第三实施例提供的一种代码覆盖率分析方法的流程图;

图4为本发明实施例中代码覆盖率结果文档树的示意图;

图5为本发明实施例中代码变化区间表的示意图;

图6为本发明实施例中建立两个代码覆盖率结果文档树的映射关系的示意图;

图7为本发明第四实施例中代码覆盖率分析方法的流程示意图;

图8为本发明第五实施例提供的一种代码覆盖率分析装置的结构框图;

图9为本发明第五实施例提供的又一代码覆盖率分析装置的结构框图;

图10为本发明第六实施例提供的一种计算设备的结构框图。

具体实施方式

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

在本发明第一实施例中,提供一种代码覆盖率分析方法,如图1所示,本实施例所述方法包括如下步骤:

步骤s101,在代码测试时,将各个测试阶段的代码覆盖率结果文件进行合并,基于合并后的文件,生成汇总的代码覆盖率结果报告;

本发明实施例中,代码覆盖率是一种发现代码未被测试覆盖的手段,可作为软件测试人员参考并增加测试覆盖率的一种方法。

本发明实施例中,所述的测试阶段包括但不限于:单元测试、集成测试和ad-hoc测试。也就是说,被测试的源代码经过单元测试后,被提测给测试人员,进行集成测试。同时,在有ad-hoc测试的需求情况下,还可以对源代码进行ad-hoc测试。

其中,每个测试阶段都可以利用一个或多个测试用例对源代码进行测试,测试后会产生代码覆盖率结果文件,本发明实施例则是将各个测试阶段的代码覆盖率结果文件进行合并,从而生成汇总的代码覆盖率结果报告,便于进行后续代码覆盖率结果的整体分析。

另外,还要说明的是,本发明实施例中,针对任意一个测试阶段,在进行代码测试时,均可根据测试产生的代码覆盖率结果文件,对当前测试的代码进行修改,每修改一次,则更新一次测试代码的版本,并在本阶段测试完后,将最新版本的代码作为下一阶段的测试代码。举例来说,本发明实施例中,若测试开始时的源代码的版本为v1.0,经过各阶段的测试,最终测试完成得到的源代码的版本可能为v5.0。也就是说,源代码在测试过程中被修改了4次,v5.0版本的源代码为测试合格的代码,是可以用于具体业务的业务代码。

步骤s102,确定待分析的第一被测试代码和第二被测试代码,并在所述汇总的代码覆盖率结果报告中得到所述第一被测试代码和第二被测试代码的代码覆盖率结果报告;

本发明实施例中,根据具体的分析需求,所述的第一被测试代码和第二被测试代码可以是同一测试阶段中的两次测试所对应的测试代码,也可以是或者不同测试阶段中的两次测试所对应的测试代码。

其中,第一被测试代码和第二被测试代码可以是利用不同的测试用例进行测试的两个相同的测试代码,虽然测试代码相同,但由于采用的测试用例不同,所以代码覆盖率结果报告不同。

第一被测试代码和第二被测试代码也可以不同,例如,第一被测试代码为版本v1.0,第二被测试代码为版本v2.0。

步骤s103,建立所述第一被测试代码和第二被测试代码的代码覆盖率结果之间的映射关系,根据所述映射关系,对两个代码覆盖率结果进行差异分析。

本发明实施例中,代码覆盖率结果中包含了对应的被测试代码的各行代码,以及各行代码对应的覆盖率结果。所以,本实施例中,建立两个代码覆盖率结果之间的映射关系具体为建立两个代码覆盖率结果中的各代码行的映射关系,通过建立代码行的映射关系,得到覆盖率结果的映射关系,从而便于进行差异分析。

本发明实施例中,进行差异分析主要分析变化覆盖率和覆盖率变化。其中,变化覆盖率指在测试代码有增加或更新的情况下,针对测试代码变化进行测试所带来的覆盖率变化情况。覆盖率变化指在测试代码无变化的情况下,增加或减少测试用例所带来的覆盖率增加或减少。

综上可知,本发明实施例所述方案,在代码测试阶段,对各阶段的代码覆盖率结果文件进行合并,生成了汇总的代码覆盖率结果报告,基于该汇总的代码覆盖率结果报告可以对任意两个测试代码的代码覆盖率结果进行分析,该过程实现了在整体上对测试覆盖率情况进行统计分析,基于该分析的分析结果,可以使测试更有针对性,减少重复覆盖。

在本发明第二实施例中,提供一种代码覆盖率分析方法,本发明实施例相比于第一实施例将着重阐述汇总的代码覆盖率结果报告的生成过程,与第一实施例相同的步骤,实施方式参见第一实施例,本实施例不再赘述。

具体的,如图2所示,本实施例所述方法包括如下步骤:

步骤s201,在进行第i阶段的代码测试时,收集第i阶段的代码覆盖率结果文件;i=1,…,n;n为正整数;

步骤s202,调取所述第i-1阶段的代码覆盖率结果文件与收集的第i阶段的代码覆盖率结果文件进行合并;

需要说明的是,若第i阶段为第1阶段,由于在前无其他阶段,所以可以省略该步骤。

步骤s203,当进行下一阶段的代码测试时,令i的取值加1后,返回步骤s201,直到完成所有测试阶段,完成代码覆盖率结果文件的合并;

本发明实施例中,在一个测试阶段结束后,会向下一阶段的测试人员进行提测,由下一阶段的测试人员完成测试。根据测试需求,在一个测试阶段内可以采用手工测试,也可以采用自动测试。

本发明实施例中,在一个测试阶段完成后,将收集到的该测试阶段的代码覆盖率文件存入数据库,以供下一阶段调用,从而实现进行代码覆盖率结果文件的合并。

本发明实施例中,所述的代码覆盖率结果文件为用户不可视的文件,可以但不限于为exec格式的文件(即是一种二进制的结果文件)。该格式的文件支持代码覆盖率结果的合并。

在本发明的一个可选实施例中,可通过代码覆盖率分析工具jacoco实现代码覆盖率的收集及合并。

步骤s204,基于合并后的文件,生成汇总的代码覆盖率结果报告;

本发明实施例中,所述的代码覆盖率结果报告是被用户可视的结果文件,可以但不限于为html格式的结果文件。

本发明实施例中,可以通过代码覆盖率分析工具jacoco进行代码覆盖率结果报告的生成。

步骤s205,确定待分析的第一被测试代码和第二被测试代码,并在所述汇总的代码覆盖率结果报告中得到所述第一被测试代码和第二被测试代码的代码覆盖率结果报告;

步骤s206,建立所述第一被测试代码和第二被测试代码的代码覆盖率结果之间的映射关系,根据所述映射关系,对两个代码覆盖率结果进行差异分析。

利用本实施例所述方法,在所有测试阶段全部完成后,即可得到一个全量汇总的覆盖率结果报告文件,根据这个覆盖率报告进行分析,相关人员可根据覆盖率情况从总体补全漏测以及测试不全面的区域,减少重复覆盖,提高效率。

在本发明的第三实施例中提供一种代码覆盖率分析方法,本发明实施例相比于第一实施例将着重阐述映射关系的建设过程,与第一实施例相同的步骤,实施方式参见第一实施例,本实施例不再赘述。

具体的,如图3所示,本实施例所述方法包括如下步骤:

步骤s301,在代码测试时,将各个测试阶段的代码覆盖率结果文件进行合并,基于合并后的文件,生成汇总的代码覆盖率结果报告;

步骤s302,确定待分析的第一被测试代码和第二被测试代码,并在所述汇总的代码覆盖率结果报告中得到所述第一被测试代码和第二被测试代码的代码覆盖率结果报告;

步骤s303,解析所述第一被测试代码的代码覆盖率结果报告和第二被测试代码的代码覆盖率结果报告,生成所述第一被测试代码和第二被测试代码的代码覆盖率结果文档树;

在本发明的一个可选实施例中,所述代码覆盖率结果文档树为超文本标记语言html格式的代码覆盖率结果文档树。

所述html格式的代码覆盖率结果文档树中包含多个标签元素,每个标签元素的id值映射为对应的测试代码中的一个行号,每个标签元素的类属性的值映射为所对应行号的测试代码的代码覆盖率结果。具体如图4所示,图中示出了一个代码覆盖率结果文档树的示意图,图中<span>表示标签元素,class标识该标签元素的类属性,id为该标签元素的id值,该id值映射为测试代码的行号,例如l8为测试代码的第8行,示例性的,id=“l8”后面的内容为class属性值。

步骤s304,建立所述第一被测试代码和第二被测试代码的代码覆盖率结果文档树的映射关系;

在本发明的一个可选实施例中,建立所述第一被测试代码和第二被测试代码的代码覆盖率结果文档树的映射关系,包括:

步骤1,对所述第一被测试代码和第二被测试代码进行比较,得到第一被测试代码和第二被测代码之间的代码变化区间表。也就是说,通过对比操作可以得到被测试代码的映射区间表,从而得到具体类中老版本(即第一被测试代码)变化区间和新版本(即第二被测试代码)变化区间。具体如图5所示,下图中,老版本源码变化区间为第17行到第23行,新版本为17-32行。

步骤2,根据所述代码变化区间表,确定两个代码覆盖率结果文档树中各标签元素的对应关系,根据该对应关系,建立两个代码覆盖率结果文档树的映射关系。

示例性的,本发明实施例中,如图6所示,示出了老版本的html文档树和新版本的html文档树,文档树中,span元素的id的值可以映射其在源代码中的行号。得到html文档树之后,根据图5所示的代码变化区间表,构建新版和旧版html文档树的映射关系,如图中的框和剪头所示,是去除了映射变化区间带来的差异,可以得到老版本中的第24行和新版本中的第33行为同一行,从而建立起了两个代码覆盖率结果文档树的映射关系。

步骤s305,根据所述映射关系,对两个代码覆盖率结果进行差异分析。

在本发明的一个具体实施例中,根据所述映射关系,对两个代码覆盖率结果进行差异分析,包括:

根据两个代码覆盖率结果文档树中各标签元素的对应关系,针对变化的代码行,得到变化覆盖率;针对未变化的代码行,对两个代码行对应的类属性值进行比对,在比对结果不同时,得到覆盖率变化。

示例性的,如图6所示,代码变化区间表里面的行,对应变化覆盖率(即图中所框的行);而有映射关系的行,进行span元素class的值对比,对比不同的,为覆盖率变化(即图中剪头所示的行)。

在本发明的一个可选实施例中,为了增加分析的辨识度,在对两个代码的代码覆盖率结果进行差异分析之后,还包括:对所述变化覆盖率及其对应的代码行和/或覆盖率变化及其对应的代码行进行标识后,对所述汇总的代码覆盖率结果报告进行更新。在更新完成后,用户即可查看汇总的覆盖率结果报告,查看已经标识的覆盖率变化和变化覆盖率情况。其中,标识包括但不限于为对相应行进行高亮显示。

综上可知,本发明实施例所述方案,在代码测试阶段,对各阶段的代码覆盖率结果文件进行合并,生成了汇总的代码覆盖率结果报告,基于该汇总的代码覆盖率结果报告可以对任意两个测试代码的代码覆盖率结果进行分析,该过程实现了在整体上对测试覆盖率情况进行统计分析,基于该分析的分析结果,可以使测试更有针对性,减少重复覆盖。

在本发明第四实施例中,提供一种代码覆盖率分析方法,本实施例将结合具体的应用示例,对本发明的方案进行阐述,本实施例中公开的大量技术细节用于解释本发明但不用于唯一限定本发明。

具体的,本发明实施例所述方法,通过存档每个阶段覆盖率结果的方式,逐步形成每个阶段的汇总和差异覆盖率,通过分析汇总和对比总体覆盖率,即可分析当前覆盖情况,同时,针对每个阶段的覆盖率结果进行对比分析,可以查看新功能或者新用例的覆盖情况。

如图7所示,本实施例所述方法实现过程如下:

1.开发人员在开发功能模块的过程中对功能模块的源码进行单元测试,单元测试中开发人员通过代码覆盖率分析工具jacoco的maven(项目管理工具)plugin(插件)的方式进行jacocodump(代码覆盖率结果文件下载)和report(生成覆盖率结果文件)操作。具体的,下载得到二进制的代码覆盖率结果exec文件,并基于该exec文件生成代码覆盖率结果报告html文件,将exec文件、html文件和源码的版本号存入数据库系统。

2.单元测试通过后,提测给测试人员,测试人员搭建测试环境,进行自动化和手工方面的集成测试,通过在服务端配置jacocoagent动态收集代码覆盖率的模式,自动化测试完成后,进行jacocodump操作,得到代码覆盖率结果exec文件,同时和步骤1中的代码覆盖率结果exec文件进行jacocomerge操作(merge操作会对相同的统计类的覆盖率情况进行合并),生成汇总的代码覆盖率结果exec文件并存入数据库系统,同时在此exec文件上做jacocoreport操作,生成汇总的代码覆盖率结果报告html文件并存入数据库系统,同时还将经过该测试阶段后的源码的版本号存入数据库系统。

在自动测试完成后,进行手工测试,在手工测试时进行同样的jacocodump,merge(该merge操作是与集成测试过程中汇总的exec文件进行合并的操作)和report操作,生成汇总的代码覆盖率结果exec文件和汇总的代码覆盖率结果报告html文件,并将汇总的exec文件、汇总的html文件、以及经过该测试阶段后的源码的版本号存入数据库系统。

3.同理,在有ad-hoc测试的需求情况下,任何产研测运营人员都可加入测试,测试完成根据步骤2中相同的方式,与步骤2手工测试得到的代码覆盖率结果exec文件进行合并,生成汇总的代码覆盖率结果exec文件,利用汇总的exec文件生成汇总的代码覆盖率报告html文件,并将汇总的exec文件、汇总的html文件、以及经过该测试阶段后的源码的版本号存入数据库系统。

4.在所有测试阶段全部完成后,即可得到一个全量汇总的代码覆盖率结果报告html文件,根据这个代码覆盖率结果报告html文件。

5.相关人员可根据覆盖率情况从总体补全漏测以及测试不全面的区域,减少重复覆盖,提高效率。

具体的,可根据需求分别选取不同测试过程的代码覆盖率结果报告html文件,进行汇总差异分析,即可查看不同阶段的详细覆盖率差异情况,此方法适合分析覆盖率变化以及新功能增加或修改所带来的变化覆盖率情况。

具体分析方法如下:

1)根据分析需求,确定待分析的两个源代码,在数据库中查询两个源代码的源代码版本号和测试的代码覆盖率结果报告html文件。

其中,确定的两个源代码的版本号可能相同(即测试过程中未发生源代码更新,使得两个源代码相同,即版本相同),也可能不同(即测试过程中发生了源代码的更新,导致两个源代码的版本不同)。

本实施例中假定两个源代码的版本号不同。

2)源码对比器根据输入的源代码新版本号和旧版本号进行源代码变化分析,根据变化的类以及变化的行生成源码变化区间表。

当然,如果两个源代码的版本号相同,由于没有变化的类和变化的行,所以,源码变化区间表为空。

3)html解析器解析新版本源代码的代码覆盖率结果报告html文件和旧版本的代码覆盖率结果报告html文件,分别生成相应的html结构代码覆盖率结果文档树。

4)源码与html映射器根据步骤2)生成的源码变化区间表,建立步骤3)中新版本的和旧版本的html结构代码覆盖率结果文档树的映射关系。

5)变化修改器针对无映射关系的视为变化覆盖率,对无映射关系的行添加变化标识。

6)变化修改器针对有映射关系的,分别按照映射进行对比,覆盖率标识有变化的,添加变化标识,视为覆盖率变化。

7)变化修改器根据步骤5)、6)的标识对新版本源代码的代码覆盖率结果报告html文件进行修改,以把所有变化标识的行高亮显示。

8)修改完成后,用户可查看汇总的代码覆盖率结果报告html文档,其中可以查看已经高亮的覆盖率变化和变化覆盖率情况。同时,还可以基于汇总的代码覆盖率结果报告html文档提供覆盖率整体指标趋势图等度量分析报表。

综上可知,本发明实施例所述方案可以自动保存每个阶段的代码覆盖率结果数据,便于总体汇总和分析。并且由于是基于总体汇总的代码覆盖率结果数据进行的分析,使得分析得到的结果,会更有针对性,减少测试过程中的重复覆盖。

在本发明第五实施例中提供一种代码覆盖率分析装置,如图8所示,所述装置包括:

信息获取模块810,用于在代码测试时,将各个测试阶段的代码覆盖率结果文件进行合并,基于合并后的文件,生成汇总的代码覆盖率结果报告;

第一分析处理模块820,用于确定待分析的第一被测试代码和第二被测试代码,并在所述汇总的代码覆盖率结果报告中得到所述第一被测试代码和第二被测试代码的代码覆盖率结果报告;

第二分析处理模块830,用于建立所述第一被测试代码和第二被测试代码的代码覆盖率结果之间的映射关系,根据所述映射关系,对两个代码覆盖率结果进行差异分析。

在本发明的一个可选实施例中,信息获取模块810,具体用于在进行第i阶段的测试时,收集第i阶段的代码覆盖率结果文件;调取所述第i-1阶段的代码覆盖率结果文件与收集的第i阶段的代码覆盖率结果文件进行合并;重复上述过程,直到完成所有测试阶段,完成代码覆盖率结果文件的合并;其中,i=1,…,n;n为正整数。

本发明实施例中,所述的测试阶段包括但不限于:单元测试、集成测试和ad-hoc测试。也就是说,被测试的源代码经过单元测试后,被提测给测试人员,进行集成测试。同时,在有ad-hoc测试的需求情况下,还可以对源代码进行ad-hoc测试。

其中,每个测试阶段都可以利用一个或多个测试用例对源代码进行测试,测试后会产生代码覆盖率结果文件,本发明实施例则是将各个测试阶段的代码覆盖率结果文件进行合并,从而生成汇总的代码覆盖率结果报告,便于进行后续代码覆盖率结果的整体分析。

如图9所示,在本发明的一个可选实施例中,第二分析处理模块830包括:

解析子模块831,用于解析所述第一被测试代码的代码覆盖率结果报告和第二被测试代码的代码覆盖率结果报告,生成所述第一被测试代码和第二被测试代码的代码覆盖率结果文档树;

映射关系建立子模块832,用于建立所述第一被测试代码和第二被测试代码的代码覆盖率结果文档树的映射关系。

可选的,所述代码覆盖率结果文档树为超文本标记语言html格式的代码覆盖率结果文档树。此时,所述html格式的代码覆盖率结果文档树中包含多个标签元素,每个标签元素的id值映射为对应的测试代码中的一个行号,每个标签元素的类属性的值映射为所对应行号的测试代码的代码覆盖率结果。

在本发明的一个可选实施例中,映射关系建立子模块832,具体用于对所述第一被测试代码和第二被测试代码进行比较,得到第一被测试代码和第二被测代码之间的代码变化区间表;根据所述代码变化区间表,确定两个代码覆盖率结果文档树中各标签元素的对应关系,根据该对应关系,建立两个代码覆盖率结果文档树的映射关系。

在本发明的一个可选实施例中,第二分析处理模块830,还包括:

分析子模块833,用于根据两个代码覆盖率结果文档树中各标签元素的对应关系,针对变化的代码行,得到变化覆盖率;针对未变化的代码行,对两个代码行对应的类属性值进行比对,在比对结果不同时,得到覆盖率变化。

在本发明的一个可选实施例中,所述第二分析处理模块830,还包括:

更新子模块834,用于在对两个代码的代码覆盖率结果进行差异分析之后,对所述变化覆盖率及其对应的代码行和/或覆盖率变化及其对应的代码行进行标识后,对所述汇总的代码覆盖率结果报告进行更新。

需要说明的是,本实施例是与第一至第三方法实施例对应的装置实施例,本实施例中各模块功能的实施细节可以参见第一至第三实施例,本实施例不再重复阐述。

本发明实施例所述方案,在代码测试阶段,对各阶段的代码覆盖率结果文件进行合并,生成了汇总的代码覆盖率结果报告,基于该汇总的代码覆盖率结果报告可以对任意两个测试代码(可以是任意两个阶段测试的两个测试代码,也可以是任意一个阶段内的两个测试代码)的代码覆盖率结果进行分析,该过程实现了在整体上对测试覆盖率情况进行统计分析,基于该分析的分析结果,可以使测试更有针对性,减少重复覆盖。

在本发明第六实施例中,提供一种计算设备,如图10所示,所述计算设备包括:存储器1010、处理器1020及通信总线1030;所述通信总线1030用于实现处理器1020和存储器1010之间的连接通信;

具体的,本发明实施例中,处理器1020可以是通用处理器,例如中央处理器(centralprocessingunit,cpu),还可以是数字信号处理器(digitalsignalprocessor,dsp)、专用集成电路(英文:applicationspecificintegratedcircuit,asic),或者是被配置成实施本发明实施例的一个或多个集成电路。其中,存储器1010用于存储所述处理器1020的可执行指令;

存储器1010,用于存储程序代码,并将该程序代码传输给处理器1020。存储器1010可以包括易失性存储器(volatilememory),例如随机存取存储器(randomaccessmemory,ram);存储器1010也可以包括非易失性存储器(non-volatilememory),例如只读存储器(read-onlymemory,rom)、快闪存储器(flashmemory)、硬盘(harddiskdrive,hdd)或固态硬盘(solid-statedrive,ssd);存储器1010还可以包括上述种类的存储器的组合。

具体的,本发明实施例中,处理器1020用于执行存储器1010中存储的应用程序中的代码覆盖率分析程序,以实现如下方法步骤:

步骤1,在代码测试时,将各个测试阶段的代码覆盖率结果文件进行合并,基于合并后的文件,生成汇总的代码覆盖率结果报告;

步骤2,确定待分析的第一被测试代码和第二被测试代码,并在所述汇总的代码覆盖率结果报告中得到所述第一被测试代码和第二被测试代码的代码覆盖率结果报告;

步骤3,建立所述第一被测试代码和第二被测试代码的代码覆盖率结果之间的映射关系,根据所述映射关系,对两个代码覆盖率结果进行差异分析。

本实施例中各步骤的实施过程可参见第一至第三实施例,本实施例不再赘述。

在本发明第七实施例中,提供一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,该程序被处理器执行时实现如下方法步骤:

步骤1,在代码测试时,将各个测试阶段的代码覆盖率结果文件进行合并,基于合并后的文件,生成汇总的代码覆盖率结果报告;

步骤2,确定待分析的第一被测试代码和第二被测试代码,并在所述汇总的代码覆盖率结果报告中得到所述第一被测试代码和第二被测试代码的代码覆盖率结果报告;

步骤3,建立所述第一被测试代码和第二被测试代码的代码覆盖率结果之间的映射关系,根据所述映射关系,对两个代码覆盖率结果进行差异分析。

本实施例中各步骤的实施过程可参见第一至第三实施例,本实施例不再赘述。

其中,计算机存储介质可以是ram存储器、闪存、rom存储器、eprom存储器、eeprom存储器、寄存器、硬盘、移动硬盘、cd-rom或者本领域已知的任何其他形式的存储介质。

在本申请所提供的实施例中,应该理解到,所揭露的装置和方法,也可以通过其它的方式实现。以上所描述的装置实施例仅仅是示意性的,例如,附图中的流程图和框图显示了根据本发明的多个实施例的装置、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或代码的一部分,所述模块、程序段或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现方式中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或动作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。

另外,在本发明各个实施例中的各功能模块可以集成在一起形成一个独立的部分,也可以是各个模块单独存在,也可以两个或两个以上模块集成形成一个独立的部分。

总之,以上所述仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

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