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

文档序号:31335950发布日期:2022-08-31 08:46阅读:67来源:国知局
一种代码覆盖率的统计方法、装置、存储介质及设备与流程

1.本发明涉及计算机技术领域,具体而言涉及一种代码覆盖率的统计方法、装置、存储介质及设备。


背景技术:

2.在应用程序测试过程中,通常会采用多种测试手段,比如:单元测试、功能测试、自动化测试等。目前,通过统计测试包的代码覆盖率来反应测试进度以及测试效果。
3.在具体应用中,对于一次正常的应用程序迭代而言,打出多个因代码变更而具有不同代码的测试包是非常常见的情况,而不同代码的测试包所得到的代码覆盖率并不能直接简单合并,这样就导致统计不同测试包的代码覆盖率具有非常大的难度。
4.在现有技术中,在对不同测试包的代码覆盖率进行统计的过程中,工作人员会遗漏一些测试包的代码覆盖行信息,这样会导致部分代码覆盖行信息没有被统计进来,从而降低了不同测试包的代码覆盖率的统计准确度。


技术实现要素:

5.有鉴于此,本发明实施例提供了一种代码覆盖率的统计方法、装置、存储介质及设备,以解决部分代码覆盖行信息没有被统计进来,从而降低了不同测试包的代码覆盖率的统计准确度的问题。
6.第一方面,本发明实施例提供了一种代码覆盖率的统计方法,所述方法包括:
7.s101:获取当次应用程序迭代的第一个测试包与所述预置基准包的第一合并代码覆盖行信息;
8.s102:将当次应用程序迭代的第一个测试包确定为第一目标测试包,将当次应用程序迭代的第二个测试包确定为第二目标测试包,以及将所述第一合并代码覆盖行信息确定为第一历史合并代码覆盖行信息;
9.s103:确定所述第二目标测试包相较于所述第一目标测试包的第一变更代码行信息及所述第二目标测试包的代码覆盖行信息;
10.s104:将所述第一历史合并代码覆盖行信息与所述第一变更代码行信息进行映射,得到第一临时代码覆盖行信息;
11.s105:将所述第一临时代码覆盖行信息与所述第二目标测试包的代码覆盖行信息进行合并,得到第二合并代码覆盖行信息;
12.s106:将当次应用程序迭代的第k1个测试包确定为新的第一目标测试包,将当次应用程序迭代的第k1+1个测试包确定为新的第二目标测试包,将所述第二合并代码覆盖行信息作为新的第一历史合并代码覆盖行信息,重复s103-s105的步骤,其中,k1依次取2至n1-1之间的正整数,n1为当次应用程序迭代的测试包的总数量;
13.s107:基于最终的第二合并代码覆盖行信息,得到n1个测试包的全量代码覆盖率。
14.在一种可能的实现方式中,所述获取当次应用程序迭代的第一个测试包与预置基
准包的第一合并代码覆盖行信息包括:
15.确定第一个测试包相较于预置基准包的第二变更代码行信息、预置基准包的代码覆盖行信息及第一个测试包的代码覆盖行信息;
16.将所述预置基准包的代码覆盖行信息与所述第二变更代码行信息进行映射,得到第二临时代码覆盖行信息;
17.将所述第二临时代码覆盖行信息与第一个测试包的代码覆盖行信息进行合并,得到第一合并代码覆盖行信息。
18.在一种可能的实现方式中,所述确定第一个测试包相较于预置基准包的第二变更代码行信息包括:
19.将所述第一个测试包的源代码与所述预置基准包的源代码进行比对;
20.如果所述预置基准包不含有所述第一个测试包的第l1行的源代码,则将l1确定为新增行数,其中,所述l1为所述第一个测试包内的任一行;
21.如果所述第一个测试包不含有所述预置基准包的第l2行的源代码,则将l2确定为删除行数,其中,所述l2为所述预置基准包内的任一行;
22.如果所述预置基准包的第l2行在所述第一个测试包的第l3行的源代码,则将l2确定为初始行数,以及将l3确定为变更行数,其中,所述l3与l2不相等;
23.基于所述新增行数、删除行数、初始行数及对应的变更行数,得到第二变更代码行信息。
24.在一种可能的实现方式中,所述预置基准包的代码覆盖行信息包括预置基准包的每行源代码所在的行数及对应的覆盖信息,所述将所述预置基准包的代码覆盖行信息与所述第二变更代码行信息进行映射,得到第二临时代码覆盖行信息包括:
25.如果所述第二变更代码行信息包括所述删除行数,则将所述预置基准包的代码覆盖行信息内的所述删除行数所对应的源代码的覆盖信息删除;
26.如果所述第二变更代码行信息包括所述初始行数及对应的变更行数,则将所述预置基准包的代码覆盖行信息的所述初始行数更改为对应的变更行数,以得到第二临时代码覆盖行信息。
27.在一种可能的实现方式中,所述确定所述第二目标测试包相较于所述第一目标测试包的第一变更代码行信息包括:
28.将所述第二目标测试包的源代码与所述第一目标测试包的源代码进行比对;
29.如果所述第一目标测试包不含有所述第二目标测试包的第l4行的源代码,则将l4确定为新增行数,其中,所述l4为所述第二目标测试包内的任一行;
30.如果所述第二目标测试包不含有所述第一目标测试包的第l5行的源代码,则将l5确定为删除行数,其中,所述l5为所述第一目标测试包内的任一行;
31.如果所述第一目标测试包的第l5行的源代码在所述第二目标测试包的第l6行的源代码在,则将l5确定为初始行数,以及将l6确定为变更行数,其中,所述l6与l5不相等;
32.基于所述新增行数、删除行数、初始行数及对应的变更行数,得到第一变更代码行信息。
33.在一种可能的实现方式中,所述将所述第一历史合并代码覆盖行信息与所述第一变更代码行信息进行映射,得到第一临时代码覆盖行信息包括:
34.如果所述第一变更代码行信息包括删除行数,则将所述第一历史合并代码覆盖行信息的所述删除行数所对应的源代码的覆盖信息删除;
35.如果所述第一变更代码行信息包括初始行数及对应的变更行数,则将所述第一历史合并代码覆盖行信息的所述初始行数更改为对应的变更行数,以得到第一临时代码覆盖行信息。
36.在一种可能的实现方式中,所述基于最终的第二合并代码覆盖行信息,得到n1个测试包的全量代码覆盖率包括:
37.基于所述最终的第二合并代码覆盖行信息,得到被覆盖过的源代码的总行数及所有源代码的总行数;
38.基于所述被覆盖过的源代码的总行数及所有源代码的总行数,按照下列公式计算得到n1个测试包的全量代码覆盖率;
39.其中,p1为n1个测试包的全量代码覆盖率,s1为被覆盖过的源代码的总行数,t1为所有源代码的总行数。
40.第二方面,本发明实施例提供了一种代码覆盖率的统计方法,所述方法包括:
41.s201:获取当次应用程序迭代的第一个测试包与上一次应用程序迭代的最后一个测试包的第三合并代码行覆盖行信息以及当次应用程序迭代的第一个测试包相较于上一次应用程序迭代的最后一个测试包的第一变更代码覆盖行信息;
42.s202:将当次应用程序迭代的第一个测试包确定为第三目标测试包,将当次应用程序迭代的第二个测试包确定为第四目标测试包,将所述第一变更代码覆盖行信息确定为历史变更代码覆盖行信息,以及将所述第三合并代码行覆盖行信息确定为第二历史合并代码覆盖行信息;
43.s203:确定所述第四目标测试包相较于所述第三目标测试包的第三变更代码行信息及第四目标测试包的代码覆盖行信息;
44.s204:将所述第二历史合并代码覆盖行信息与所述第三变更代码行信息进行映射,得到第三临时代码覆盖行信息;
45.s205:将所述第三临时代码覆盖行信息与所述第三目标测试包的覆盖行信息进行合并,得到第四合并代码覆盖行信息;
46.s206:将所述第四合并代码覆盖行信息、第三变更代码行信息及历史变更代码覆盖行信息进行合并,得到第二变更代码覆盖行信息;
47.s207:将当次应用程序迭代的第k2个测试包确定为新的第一目标测试包,将当次应用程序迭代的第k2+1个测试包确定为新的第二目标测试包,将所述第四合并代码覆盖行信息作为新的第二历史合并代码覆盖行信息,并将所述第二变更代码覆盖行信息作为新的历史变更代码行信息,重复s203-s206的步骤,其中,k1依次取2至n2-1之间的正整数,n2为当次应用程序迭代的测试包的总数量;
48.s208:基于最终的变更代码覆盖行信息,得到n2个测试包的变量代码覆盖率。
49.在一种可能的实现方式中,所述获取当次应用程序迭代的第一个测试包与上一次应用程序迭代的最后一个测试包的第三合并代码覆盖行信息包括:
50.获取当次应用程序迭代的第一个测试包的代码覆盖行信息、当次应用程序迭代的
第一个测试包的代码覆盖行信息以及当次应用程序迭代的第一个测试包相较于上一次应用程序迭代的最后一个测试包的第四变更代码行信息;
51.将当次应用程序迭代的第一个测试包的代码覆盖行信息与所述第四变更代码行信息进行映射,得到第四临时代码覆盖行信息;
52.将所述第四临时代码覆盖行信息与当次应用程序迭代的第一个测试包的代码覆盖行信息进行合并,得到第三合并代码覆盖行信息。
53.在一种可能的实现方式中,获取所述当次应用程序迭代的第一个测试包相较于上一次应用程序迭代的最后一个测试包的第四变更代码行信息包括:
54.将当次应用程序迭代的第一个测试包的源代码与上一次应用程序迭代的最后一个测试包的源代码进行比对;
55.如果上一次应用程序迭代的最后一个测试包不含有当次应用程序迭代的第一个测试包的第l7行的源代码,则将l7确定为新增行数,其中,所述l7为当次应用程序迭代的第一个测试包内的任一行;
56.如果当次应用程序迭代的第一个测试包不含有上一次应用程序迭代的最后一个测试包的第l8行的源代码,则将l8确定为删除行数,其中,所述l8为上一次应用程序迭代的最后一个测试包内的任一行;
57.如果上一次应用程序迭代的最后一个测试包的第l8行在当次应用程序迭代的第一个测试包的第l9行的源代码,则将l8确定为初始行数,以及将l9确定为变更行数,其中,所述l8与l9不相等;
58.基于所述新增行数、删除行数、初始行数及对应的变更行数,得到第四变更代码行信息。
59.在一种可能的实现方式中,所述获取当次应用程序迭代的第一个测试包相较于上一次应用程序迭代的最后一个测试包的第一变更代码覆盖行信息包括:
60.如果所述第四变更代码行信息包括新增行数,则提取所述第三合并代码覆盖行信息中所述新增行数对应的覆盖信息;
61.基于所述新增行数及对应的覆盖信息,得到第一变更代码覆盖行信息。
62.在一种可能的实现方式中,所述上一次应用程序迭代的最后一个测试包的代码覆盖行信息包括上一次应用程序迭代的最后一个测试包的每行源代码所在的行数及对应的覆盖信息,所述将当次应用程序迭代的第一个测试包的代码覆盖行信息与所述第四变更代码行信息进行映射,得到第四临时代码覆盖行信息包括:
63.如果所述第三变更代码行信息包括删除行数,则将上一次应用程序迭代的最后一个测试包的代码覆盖行信息内的所述删除行数所对应的源代码的覆盖信息删除;
64.如果所述第三变更代码行信息包括初始行数及对应的变更行数,则将上一次应用程序迭代的最后一个测试包的代码覆盖行信息的所述初始行数更改为对应的变更行数,以得到第四临时代码覆盖行信息。
65.在一种可能的实现方式中,所述确定所述第四目标测试包相较于所述第三目标测试包的第三变更代码行信息包括:
66.将所述第四目标测试包的源代码与所述第三目标测试包的源代码进行比对;
67.如果所述第三目标测试包不含有所述第四目标测试包的第l10行的源代码,则将
l10确定为新增行数,其中,所述l10为所述第四目标测试包的任一行;
68.如果所述第四目标测试包不含有所述第三目标测试包的第l5行的源代码,则将l11确定为删除行数,其中,所述l11为所述第三目标测试包内的任一行;
69.如果所述第三目标测试包的第l11行的源代码在所述第四目标测试包的第l12行的源代码在,则将l11确定为初始行数,以及将l12确定为变更行数,其中,所述l11与l12不相等;
70.基于所述新增行数、删除行数、初始行数及对应的变更行数,得到第三变更代码行信息。
71.在一种可能的实现方式中,所述将所述第二历史合并代码覆盖行信息与所述第三变更代码行信息进行映射,得到第三临时代码覆盖行信息包括:
72.如果所述第三变更代码行信息包括删除行数,则将所述第二历史合并代码覆盖行信息的所述删除行数所对应的源代码的覆盖信息删除;
73.如果所述第三变更代码行信息包括初始行数及对应的变更行数,则将所述第二历史合并代码覆盖行信息的所述初始行数更改为对应的变更行数,以得到第三临时代码覆盖行信息。
74.在一种可能的实现方式中,所述基于最终的变更代码覆盖行信息,得到n2个测试包的变量代码覆盖率包括:
75.基于所述最终的变量代码覆盖率,得到被覆盖过的新增代码的总行数及所有新增代码的总行数;
76.基于所述被覆盖过的新增代码的总行数及所有新增代码的总行数,按照下列公式计算得到n2个测试包的变量代码覆盖率;
77.其中,p2为n2个测试包的变量代码覆盖率,s2为被覆盖过的新增代码的总行数,t2为所有新增代码的总行数。
78.第三方面,本发明实施例提供了一种代码覆盖率的统计装置,所述装置包括:
79.第一获取模块,用于获取当次应用程序迭代的第一个测试包与所述预置基准包的第一合并代码覆盖行信息;
80.第一确定模块,用于将当次应用程序迭代的第一个测试包确定为第一目标测试包,将当次应用程序迭代的第二个测试包确定为第二目标测试包,以及将所述第一合并代码覆盖行信息确定为第一历史合并代码覆盖行信息;
81.第二确定模块,用于确定所述第二目标测试包相较于所述第一目标测试包的第一变更代码行信息及所述第二目标测试包的代码覆盖行信息;
82.第一映射模块,用于将所述第一历史合并代码覆盖行信息与所述第一变更代码行信息进行映射,得到第一临时代码覆盖行信息;
83.第一合并模块,用于将所述第一临时代码覆盖行信息与所述第二目标测试包的代码覆盖行信息进行合并,得到第二合并代码覆盖行信息;
84.第一循环模块,用于将当次应用程序迭代的第k1个测试包确定为新的第一目标测试包,将当次应用程序迭代的第k1+1个测试包确定为新的第二目标测试包,将所述第二合并代码覆盖行信息作为新的第一历史合并代码覆盖行信息,重复第一确定模块、第一映射
模块及第一合并模块的步骤,其中,k1依次取2至n1-1之间的正整数,n1为当次应用程序迭代的测试包的总数量;
85.计算模块,用于基于最终的第二合并代码覆盖行信息,得到n1个测试包的全量代码覆盖率。
86.第四方面,本发明实施例提供了一种代码覆盖率的统计装置,所述装置包括:
87.第二获取模块,用于获取当次应用程序迭代的第一个测试包与上一次应用程序迭代的最后一个测试包的第三合并代码行覆盖行信息以及当次应用程序迭代的第一个测试包相较于上一次应用程序迭代的最后一个测试包的第一变更代码覆盖行信息;
88.第四确定模块,用于将当次应用程序迭代的第一个测试包确定为第三目标测试包,将当次应用程序迭代的第二个测试包确定为第四目标测试包,将所述第一变更代码覆盖行信息确定为历史变更代码覆盖行信息,以及将所述第三合并代码行覆盖行信息确定为第二历史合并代码覆盖行信息;
89.第五确定模块,用于确定所述第四目标测试包相较于所述第三目标测试包的第三变更代码行信息及第四目标测试包的代码覆盖行信息;
90.第二映射模块,用于将所述第二历史合并代码覆盖行信息与所述第三变更代码行信息进行映射,得到第三临时代码覆盖行信息;
91.第二合并模块,用于将所述第三临时代码覆盖行信息与所述第三目标测试包的覆盖行信息进行合并,得到第四合并代码覆盖行信息;
92.第三合并模块,用于将所述第四合并代码覆盖行信息、第三变更代码行信息及历史变更代码覆盖行信息进行合并,得到第二变更代码覆盖行信息;
93.第二循环模块,用于将当次应用程序迭代的第k2个测试包确定为新的第一目标测试包,将当次应用程序迭代的第k2+1个测试包确定为新的第二目标测试包,将所述第四合并代码覆盖行信息作为新的第二历史合并代码覆盖行信息,并将所述第二变更代码覆盖行信息作为新的历史变更代码行信息,重复s203-s206的步骤,其中,k1依次取2至n2-1之间的正整数,n2为当次应用程序迭代的测试包的总数量;
94.第二计算模块,用于基于最终的变更代码覆盖行信息,得到n2个测试包的变量代码覆盖率。
95.第五方面,本发明实施例提供了一种存储介质,所述存储介质中存储有至少一可执行指令,所述可执行指令使处理器执行上述的代码覆盖率的统计方法的操作。
96.第六方面,本发明实施例提供了一种计算机设备,包括:处理器、存储器、通信接口和通信总线,所述处理器、所述存储器和所述通信接口通过所述通信总线完成相互间的通信;
97.所述存储器用于存放至少一可执行指令,所述可执行指令使所述处理器执行上述的代码覆盖率的统计方法的操作。
98.根据本发明实施例所提供的一种代码覆盖率的统计方法、装置、存储介质及设备,该方法能够统计一次应用程序迭代中每个测试包的代码覆盖行信息,从而避免遗漏代码覆盖行信息的情况发生,提高了不同测试包的代码覆盖率统计的准确性。
附图说明
99.本发明的下列附图在此作为本发明实施例的一部分用于理解本发明。附图中示出了本发明的实施例及其描述,用来解释本发明的原理。
100.附图中:
101.图1为根据本发明的一个可选实施例的一种代码覆盖率的统计方法的流程图;
102.图2为根据本发明的一个可选实施例的步骤s101的流程图;
103.图3为根据本发明的一个可选实施例的步骤s1011的流程图;
104.图4为根据本发明的一个可选实施例的步骤s1012的流程图;
105.图5为根据本发明的一个可选实施例的步骤s103的流程图;
106.图6为根据本发明的一个可选实施例的步骤s107的流程图;
107.图7为根据本发明的另一个可选实施例的一种代码覆盖率的统计方法的流程图;
108.图8为根据本发明的一个可选实施例的步骤s201的流程图;
109.图9为根据本发明的一个可选实施例的步骤s2011的流程图;
110.图10为根据本发明的一个可选实施例的步骤s2012的流程图;
111.图11为根据本发明的一个可选实施例的步骤s201的流程图;
112.图12为根据本发明的一个可选实施例的步骤s203的流程图;
113.图13为根据本发明的一个可选实施例的步骤s208的流程图;
114.图14为根据本发明的一个可选实施例的代码覆盖率的统计装置的结构示意图;
115.图15为根据本发明的另一个可选实施例的代码覆盖率的统计装置的结构示意图。
具体实施方式
116.在下文的描述中,给出了大量具体的细节以便提供对本发明更为彻底的理解。然而,对于本领域技术人员而言显而易见的是,本发明可以无需一个或多个这些细节而得以实施。在其他的例子中,为了避免与本发明发生混淆,对于本领域公知的一些技术特征未进行描述。
117.应予以注意的是,这里所使用的术语仅是为了描述具体实施例,而非意图限制根据本发明的示例性实施例。如在这里所使用的,除非上下文另外明确指出,否则单数形式也意图包括复数形式。此外,还应当理解的是,当在本说明书中使用术语“包含”和/或“包括”时,其指明存在特征、整体、步骤、操作、元件和/或组件,但不排除存在或附加一个或多个其他特征、整体、步骤、操作、元件、组件和/或它们的组合。
118.现在,将参照附图更详细地描述根据本发明的示例性实施例。然而,这些示例性实施例可以多种不同的形式来实施,并且不应当被解释为只限于这里所阐述的实施例。应当理解的是,提供这些实施例是为了使得本发明的公开彻底且完整,并且将这些示例性实施例的构思充分传达给本领域普通技术人员。
119.第一方面,如图1所示,本发明实施例提供了一种代码覆盖率的统计方法,该方法的执行主体可以是分布式服务器中的一台或多台服务器,也可以是具有信息处理能力的计算设备,该方法包括:
120.s101:获取当次应用程序迭代的第一个测试包与预置基准包的第一合并代码覆盖行信息。
121.应用程序安装于终端设备中,随着应用程序的使用,应用程序开发者会对不断对应用程序存在的漏洞进行修复、优化等操作。而每次应用程序进行修复、优化的操作就是一次应用程序的迭代。
122.预置基准包也可以称作第零个测试包。预置基准包是由工作人员预先编辑好的基础测试包,第一个测试包是在预置基准包的基础上修改得到的。
123.终端设备包括但不限于移动电话、移动电脑等。终端设备上还安装有操作系统,例如,终端可以为苹果(ios)系统,也可以为安卓(android)系统。而对于不同的操作系统,应用程序也有相应的不同版本。而在应用程序正式推出前,需要测试人员对应用程序进行测试,由此在每次应用程序迭代的过程中,会利用多个测试包在同一终端设备或不同终端设备上测试运行,不同测试包的代码也不同,并且一个测试包可能仅在一个终端上测试运行,也可能在不同终端上测试运行,即一个测试包可能被测试一次,也可能被测试多次;而同一终端设备也可能运行不同的测试包,从而提高应用程序的交付质量,降低线上事故。
124.s102:将当次应用程序迭代的第一个测试包确定为第一目标测试包,将当次应用程序迭代的第二个测试包确定为第二目标测试包,以及将第一合并代码覆盖行信息确定为第一历史合并代码覆盖行信息。
125.s103:确定第二目标测试包相较于第一目标测试包的第一变更代码行信息及第二目标测试包的代码覆盖行信息。
126.第二目标测试包的代码行覆盖信息包括第二目标测试包的每行源代码所在的行数及对应的覆盖信息。其中,覆盖标记包括已覆盖标记及未覆盖标记。在具体应用中,已覆盖标记及未覆盖标记可以采用不同的颜色来进行区别,当然也可以采用不同的符号等,本实施例不做严格限定。
127.示例性的,如果第二目标测试包共被测试过5次,而在这测试的过程中第一行源代码在五次测试过程中在任意一次测试中被执行过,则第一行源代码的覆盖信息为行数1及已覆盖标记;而在这五次第二行源代码一次都未被执行,则第二行源代码的覆盖信息为行数2及未覆盖标记。
128.值得注意的是,本技术中的第二目标测试包的代码覆盖行信息仅包含有意义的源代码所在的行数及对应的覆盖标记,也就是说对换行、注释等作用的源代码不进行覆盖标记。
129.s104:将第一历史合并代码覆盖行信息与第一变更代码行信息进行映射,得到第一临时代码覆盖行信息。
130.通过第一历史合并代码覆盖行信息与第一变更代码行信息的映射,可以对第一历史合并代码覆盖行信息进行调整,从而使映射后的第一临时代码覆盖行信息与第二目标测试包的代码覆盖行信息相适应,进而使后续的合并结果更加准确。
131.s105:将第一临时代码覆盖行信息与第二目标测试包的代码覆盖行信息进行合并,得到第二合并代码覆盖行信息。
132.在该步骤中,可以利用代码覆盖信息统计工具lcov的指令将第一临时代码覆盖行信息与第二目标测试包的代码覆盖行信息进行合并,从而得到第二合并代码覆盖行信息。具体地,针对代码相同且所在行数相同的情况,如果第一临时代码覆盖行信息和/或第二目标测试包的代码覆盖行信息中该行所对应的覆盖信息为已覆盖标记,则第二合并代码覆盖
行信息中的该行数对应的覆盖信息为已覆盖标记。而如果第一临时代码覆盖行信息及第二目标测试包的代码覆盖行信息中该行所对应的覆盖信息均为未覆盖标记,则第二合并代码覆盖行信息中的该行数对应的覆盖信息为未覆盖标记。
133.针对第二目标测试包中相较于第一目标测试包的新增代码所在的行数(新增行数),则第二合并代码覆盖行信息中的该新增行数对应的覆盖信息与第二目标测试包中的该新增行数对应的覆盖信息相同。示例性的,如果第二目标测试包中的新增行数是第三行,其对应的覆盖信息为未覆盖标记,则第二合并代码覆盖行信息中的第三行对应的覆盖信息为未覆盖标记。
134.针对删除行数,删除行数对应的覆盖信息已被删除,由此第二合并代码覆盖行信息中仅有该删除行数,并无对应的覆盖信息。由此,通过合并操作,可以将新的测试包的代码覆盖行信息进行累计统计,这样就能够最终得到所有测试包的代码覆盖行信息的汇总。
135.s106:将当次应用程序迭代的第k1个测试包确定为新的第一目标测试包,将当次应用程序迭代的第k1+1个测试包确定为新的第二目标测试包,将第二合并代码覆盖行信息作为新的第一历史合并代码覆盖行信息,重复s103-s105的步骤,其中,k1依次取2至n1-1之间的正整数,n1为当次应用程序迭代的测试包的总数量。
136.s107:基于最终的第二合并代码覆盖行信息,得到n1个测试包的全量代码覆盖率。
137.在本实施例中,该方法能够统计一次应用程序迭代中每个测试包的代码覆盖行信息,从而避免遗漏代码覆盖行信息的情况发生,提高了不同测试包的代码覆盖率统计的准确性。
138.具体地,在上述实施例中,如图2所示,步骤s101具体包括如下步骤:
139.步骤s1011:确定第一个测试包相较于预置基准包的第二变更代码行信息、预置基准包的代码覆盖行信息及第一个测试包的代码覆盖行信息。
140.其中,第一个测试包的代码覆盖行信息包括第一个测试包的源代码所在的行数及对应的覆盖标记,其中,覆盖标记包括已覆盖标记及未覆盖标记。在具体应用中,已覆盖标记及未覆盖标记可以采用不同的颜色来进行区别,当然也可以采用不同的符号等,本实施例不做严格限定。
141.示例性的,如果第一个测试包共被测试过5次,而在这测试的过程中第一行源代码在五次测试过程中在任意一次测试中被执行过,则第一行源代码的覆盖信息为行数1及已覆盖标记;而在这五次第二行源代码一次都未被执行,则第二行源代码的覆盖信息为行数2及未覆盖标记。
142.同样地,预置基准包的代码行覆盖信息包括预置基准包的每行源代码所在的行数及对应的覆盖信息。其中,覆盖标记包括已覆盖标记及未覆盖标记。在具体应用中,已覆盖标记及未覆盖标记可以采用不同的颜色来进行区别,当然也可以采用不同的符号等,本实施例不做严格限定。
143.示例性的,如果预置基准包共被测试过5次,而在这测试的过程中第一行源代码在五次测试过程中在任意一次测试中被执行过,则第一行源代码的覆盖信息为行数1及已覆盖标记;而在这五次第二行源代码一次都未被执行,则第二行源代码的覆盖信息为行数2及未覆盖标记。
144.值得注意的是,本技术中第一个测试包及预置基准包的代码覆盖行信息仅包含有
意义的源代码所在的行数及对应的覆盖标记,也就是说对换行、注释等作用的源代码不进行覆盖标记。
145.进一步地,如图3所示,该步骤中确定第一个测试包相较于预置基准包的第二变更代码行信息具体包括如下步骤:
146.步骤s1011a:将第一个测试包的源代码与预置基准包的源代码进行比对,如果预置基准包不含有第一个测试包的第l1行的源代码,则将l1确定为新增行数,其中,l1为第一个测试包内的任一行。
147.示例性的,下表是第一个测试包的源代码与预置基准包的源代码的比对结果。
[0148][0149]
由上表可以看出,第一个测试包相较于预置基准包的源代码增加了第二行和第三行的源代码,这样将第一个测试包的第二行及第三行确定为新增行数。
[0150]
步骤s1011b:如果第一个测试包不含有预置基准包的第l2行的源代码,则将l2确定为删除行数,其中,l2为预置基准包内的任一行。
[0151]
示例性的,下表是第一个测试包的源代码与预置基准包的源代码的比对结果。
[0152][0153]
由上表可以看出,第一个测试包相较于预置基准包的源代码删除了第二行和第三行的源代码,这样将预置基准包的第二行及第三行确定为删除行数。
[0154]
步骤s1011c:如果预置基准包的第l2行在第一个测试包的第l3行的源代码,则将l2确定为初始行数,以及将l3确定为变更行数,其中,l3与l2不相等。
[0155]
示例性的,如果第一个测试包的源代码及预置基准包的源代码均含有“form1.cs”,但是在预置基准包中,该源代码位于第四行,而在第一个测试包中,该源代码位于第二行,这样预置基准包的第四行确定为初始行数,第一个测试包的第二行确定为变更行数。
[0156]
步骤s1011d:基于新增行数、删除行数、初始行数及对应的变更行数,得到第二变更代码行信息。
[0157]
在该步骤中,通过对新增行数、删除行数、初始行数及对应的变更行数的汇总,能够得到第一个测试包相较于预置基准包的源代码的改变。
[0158]
步骤s1012:将预置基准包的代码覆盖行信息与第二变更代码行信息进行映射,得到第二临时代码覆盖行信息。
[0159]
通过第二变更代码行信息对预置基准包的代码覆盖行信息进行修改,就能够得到映射后的预置基准包的代码覆盖行信息,也就是第二临时代码覆盖行信息。
[0160]
进一步地,如图4所示,该步骤具体包括:
[0161]
步骤s1012a:如果第二变更代码行信息包括删除行数,则将预置基准包的代码行覆盖信息内的删除行数所对应的源代码的覆盖信息删除。
[0162]
示例性的,如果删除行数是第二行及第三行,则将预置基准包的第二行及第三行的覆盖信息删除,也就是相应的已覆盖标记或未覆盖标记删除。
[0163]
步骤s1012b:如果第二变更代码行信息包括初始行数及对应的变更行数,则将预置基准包的代码行覆盖信息的初始行数更改为对应的变更行数,以得到第二临时代码覆盖行信息。
[0164]
示例性的,如果初始行数是第一行,变更行数是第三行,则将预置基准包的第一行改为第三行,而第一行对应的覆盖信息不变,这样通过将预置基准包中与第一个测试包具有相同且行数不同的源代码改为第一个测试包的该源代码所在的行数,这样使后续将第二临时代码覆盖行信息与第一个测试包的代码覆盖行信息合并的更加准确。而对于预置基准包中与第一个测试包具有相同且所在行数也未改变的源代码所在的行数及覆盖信息,以及新增行数不做处理。
[0165]
步骤s1013:将第二临时代码覆盖行信息与第一个测试包的代码覆盖行信息进行合并,得到第一合并代码覆盖行信息。
[0166]
在该步骤中,可以利用代码覆盖信息统计工具lcov的指令将第二临时代码覆盖行信息与第一个测试包的代码覆盖行信息进行合并,从而得到第一合并代码覆盖行信息。具体地,针对代码相同且所在相同的行数,如果第二临时代码覆盖行信息和/或第一个测试包的代码覆盖行信息中该行所对应的覆盖信息为已覆盖标记,则第一合并代码覆盖行信息中的该行数对应的覆盖信息为已覆盖标记。如果第二临时代码覆盖行信息及第一个测试包的代码覆盖行信息中该行所对应的覆盖信息均为未覆盖标记则第一合并代码覆盖行信息中的该行数对应的覆盖信息为未覆盖标记。
[0167]
针对括第一个测试包中相较于预置基准包的新增代码所在的行数(新增行数),则第一合并代码覆盖行信息中的该新增行数对应的覆盖信息与第一个测试包中的该新增行数对应的覆盖信息相同。示例性的,如果第一个测试包中的新增行数是第三行,其对应的覆盖信息为未覆盖标记,则第一合并代码覆盖行信息中的第三行对应的覆盖信息为未覆盖标记。
[0168]
针对删除行数,删除行数对应的覆盖信息已被删除,由此第一合并代码覆盖行信息中仅有该删除行数,并无对应的覆盖信息。
[0169]
具体地,在上述实施例中,如图5所示,步骤s103中的确定第二目标测试包相较于第一目标测试包的第一变更代码行信息包括:
[0170]
步骤s1031:将第二目标测试包的源代码与第一目标测试包的源代码进行比对;如果第一目标测试包不含有第二目标测试包的第l4行的源代码,则将l4确定为新增行数,其中,l4为第二目标测试包内的任一行。
[0171]
示例性的,下表是第二目标测试包的源代码与第一目标测试包的源代码的比对结果。
[0172][0173]
由上表可以看出,第二目标测试包相较于第一目标测试包的源代码增加了第二行和第三行的源代码,这样将第二目标测试包的第二行及第三行确定为新增行数。
[0174]
步骤s1032:如果第二目标测试包不含有第一目标测试包的第l5行的源代码,则将l5确定为删除行数,其中,l5为第一目标测试包内的任一行。
[0175]
示例性的,下表是第二目标测试包的源代码与第一目标测试包的源代码的比对结果。
[0176][0177]
由上表可以看出,第二目标测试包相较于第一目标测试包的源代码删除了第二行和第三行的源代码,这样将第一目标测试包的第二行及第三行确定为删除行数。
[0178]
步骤s1033:如果第一目标测试包的第l5行的源代码在第二目标测试包的第l6行的源代码在,则将l5确定为初始行数,以及将l6确定为变更行数,其中,l6与l5不相等。
[0179]
示例性的,如果第一目标测试包的源代码及第二目标测试包的源代码均含有“form1.cs”,但是在第一目标测试包中,该源代码位于第四行,而在第二目标测试包中,该源代码位于第二行,这样第一目标测试包的第四行确定为初始行数,第二目标测试包的第二行确定为变更行数。
[0180]
步骤s1034:基于新增行数、删除行数、初始行数及对应的变更行数,得到第一变更代码行信息。
[0181]
在该步骤中,通过对新增行数、删除行数、初始行数及对应的变更行数的汇总,能够得到第二目标测试包相较于第一目标测试包的源代码的改变。
[0182]
进一步地,在上述实施例中,步骤s104具体包括:
[0183]
步骤s1041:如果第一变更代码行信息包括删除行数,则将第一历史合并代码覆盖行信息的删除行数所对应的源代码的覆盖信息删除。
[0184]
示例性的,如果删除行数是第二行及第三行,则将第一目标测试包的第二行及第三行的覆盖信息删除,也就是相应的已覆盖标记或未覆盖标记删除。
[0185]
步骤s1042:如果第一变更代码行信息包括初始行数及对应的变更行数,则将第一历史合并代码覆盖行信息的初始行数更改为对应的变更行数,以得到第一临时代码覆盖行信息。
[0186]
示例性的,如果初始行数是第一行,变更行数是第三行,则将第一历史测试包的第一行改为第三行,而第一行对应的覆盖信息不变,这样通过将预置基准包中与第一个测试包具有相同且行数不同的源代码改为第一个测试包的该源代码所在的行数,这样使后续将第二临时代码覆盖行信息与第一个测试包的代码覆盖行信息合并的更加准确。而对于预置基准包中与第一个测试包具有相同且所在行数也未改变的源代码所在的行数及覆盖信息,以及新增行数不做处理。
[0187]
进一步地,在上述实施例中,如图6所示,步骤s107具体包括:
[0188]
步骤s1071:基于最终的第二合并代码覆盖行信息,得到被覆盖过的源代码的总行数及所有源代码的总行数。
[0189]
其中,被覆盖过的源代码的总行数可通过带有已覆盖标记的代码进行统计,所有源代码的总行数包括带有已覆盖标记和未覆盖标记的源代码的总行行数。
[0190]
步骤s1072:基于被覆盖过的源代码的总行数及所有源代码的总行数,按照下列公式计算得到n1个测试包的全量代码覆盖率;
[0191]
其中,p1为n1个测试包的全量代码覆盖率,s1为被覆盖过的源代码的总行数,t1为所有源代码的总行数。
[0192]
通过被覆盖过的源代码的总行数占全部源代码的总行数的比例,就可以得到一次应用程序迭代的所有测试包的全量代码覆盖率。
[0193]
第二方面,如图7所示,本发明实施例提供了一种代码覆盖率的统计方法,该方法的执行主体可以是分布式服务器中的一台或多台服务器,也可以是具有信息处理能力的计算设备,该方法包括:
[0194]
s201:获取当次应用程序迭代的第一个测试包与上一次应用程序迭代的最后一个测试包的第三合并代码行覆盖行信息以及当次应用程序迭代的第一个测试包相较于上一次应用程序迭代的最后一个测试包的第一变更代码覆盖行信息。
[0195]
应用程序安装于终端设备中,随着应用程序的使用,应用程序开发者会对不断对应用程序存在的漏洞进行修复、优化等操作。而每次应用程序进行修复、优化的操作就是一次应用程序的迭代。
[0196]
终端设备包括但不限于移动电话、移动电脑等。终端设备上还安装有操作系统,例如,终端可以为苹果(ios)系统,也可以为安卓(android)系统。而对于不同的操作系统,应用程序也有相应的不同版本。而在应用程序正式推出前,需要测试人员对应用程序进行测试,由此在每次应用程序迭代的过程中,会利用多个测试包在同一终端设备或不同终端设备上测试运行,不同测试包的代码也不同,并且一个测试包可能仅在一个终端上测试运行,也可能在不同终端上测试运行,即一个测试包可能被测试一次,也可能被测试多次;而同一终端设备也可能运行不同的测试包,从而提高应用程序的交付质量,降低线上事故。
[0197]
s202:将当次应用程序迭代的第一个测试包确定为第三目标测试包,将当次应用程序迭代的第二个测试包确定为第四目标测试包,将第一变更代码覆盖行信息确定为历史
变更代码覆盖行信息,以及将第三合并代码行覆盖行信息确定为第二历史合并代码覆盖行信息。
[0198]
s203:确定第四目标测试包相较于第三目标测试包的第三变更代码行信息及第四目标测试包的代码覆盖行信息。
[0199]
第四目标测试包的代码行覆盖信息包括第四目标测试包的每行源代码所在的行数及对应的覆盖信息。其中,覆盖标记包括已覆盖标记及未覆盖标记。在具体应用中,已覆盖标记及未覆盖标记可以采用不同的颜色来进行区别,当然也可以采用不同的符号等,本实施例不做严格限定。
[0200]
示例性的,如果第四目标测试包共被测试过5次,而在这测试的过程中第一行源代码在五次测试过程中在任意一次测试中被执行过,则第一行源代码的覆盖信息为行数1及已覆盖标记;而在这五次第四行源代码一次都未被执行,则第四行源代码的覆盖信息为行数2及未覆盖标记。
[0201]
值得注意的是,本技术中的第四目标测试包的代码覆盖行信息仅包含有意义的源代码所在的行数及对应的覆盖标记,也就是说对换行、注释等作用的源代码不进行覆盖标记。
[0202]
s204:将第二历史合并代码覆盖行信息与第三变更代码行信息进行映射,得到第三临时代码覆盖行信息。
[0203]
通过第二历史合并代码覆盖行信息与第三变更代码行信息的映射,可以对第二历史合并代码覆盖行信息进行调整,从而使映射后的第三临时代码覆盖行信息与第四目标测试包的代码覆盖行信息相适应,进而使后续的合并结果更加准确。
[0204]
s205:将第三临时代码覆盖行信息与第四目标测试包的覆盖行信息进行合并,得到第四合并代码覆盖行信息。
[0205]
在该步骤中,可以利用代码覆盖信息统计工具lcov的指令将第三临时代码覆盖行信息与第四目标测试包的代码覆盖行信息进行合并,从而得到第四合并代码覆盖行信息。具体地,针对代码相同且所在行数相同的情况,如果第三临时代码覆盖行信息和/或第四目标测试包的代码覆盖行信息中该行所对应的覆盖信息为已覆盖标记,则第四合并代码覆盖行信息中的该行数对应的覆盖信息为已覆盖标记。如果第三临时代码覆盖行信息及第四目标测试包的代码覆盖行信息中该行所对应的覆盖信息均为未覆盖标记,则第四合并代码覆盖行信息中的该行数对应的覆盖信息为未覆盖标记。
[0206]
针对括第四目标测试包中相较于第三目标测试包的新增代码所在的行数(新增行数),则第四合并代码覆盖行信息中的该新增行数对应的覆盖信息与第四目标测试包中的该新增行数对应的覆盖信息相同。示例性的,如果第四目标测试包中的新增行数是第三行,其对应的覆盖信息为未覆盖标记,则第四合并代码覆盖行信息中的第三行对应的覆盖信息为未覆盖标记。
[0207]
针对删除行数,删除行数对应的覆盖信息已被删除,由此第四合并代码覆盖行信息中仅有该删除行数,并无对应的覆盖信息。由此,通过合并操作,可以将新的测试包的代码覆盖行信息进行累计统计,这样就能够最终得到所有测试包的代码覆盖行信息的汇总。
[0208]
s206:将第四合并代码覆盖行信息与第四变更代码行信息及历史变更代码覆盖行信息进行合并,得到第二变更代码覆盖行信息。
[0209]
在该步骤中,可以利用代码覆盖信息统计工具lcov的指令将第四合并代码覆盖行信息与第四变更代码行信息及历史变更代码覆盖行信息进行合并,得到第二变更代码覆盖行信息。第二变更代码覆盖行信息包括第四目标测试包之前(含第四目标测试包)的各测试包相对于前一个测试包新增的源代码的行数及对应的覆盖信息,从而实现跨包变更代码覆盖行信息的统计。
[0210]
s207:将当次应用程序迭代的第k2个测试包确定为新的第一目标测试包,将当次应用程序迭代的第k2+1个测试包确定为新的第二目标测试包,将第四合并代码覆盖行信息作为新的第二历史合并代码覆盖行信息,并将第二变更代码覆盖行信息作为新的历史变更代码行信息,重复s203-s206的步骤,其中,k1依次取2至n2-1之间的正整数,n2为当次应用程序迭代的测试包的总数量。
[0211]
s208:基于最终的变更代码覆盖行信息,得到n2个测试包的变量代码覆盖率。
[0212]
其中,最终的变更代码覆盖行信息包括各测试包相对于前一个测试包新增的源代码的行数及对应的覆盖信息,这样就能够通过最终的变代码覆盖行信息计算得到n2个测试包的变量代码覆盖率。
[0213]
在本实施例中,该方法能够统计一次应用程序迭代中每个测试包的代码覆盖行信息,从而避免遗漏代码覆盖行信息的情况发生,提高了不同测试包的代码覆盖率统计的准确性。
[0214]
进一步地,在上述实施例中,如图8所示,步骤s201中的获取当次应用程序迭代的第一个测试包与上一次应用程序迭代的最后一个测试包的第三合并代码覆盖行信息具体地包括:
[0215]
步骤s2011:获取当次应用程序迭代的第一个测试包的代码覆盖行信息、当次应用程序迭代的第一个测试包的代码覆盖行信息及当次应用程序迭代的第一个测试包相较于上一次应用程序迭代的最后一个测试包的第四变更代码行信息。
[0216]
其中,如图9所示,该步骤中的获取当次应用程序迭代的第一个测试包相较于上一次应用程序迭代的最后一个测试包的第四变更代码行信息包括:
[0217]
步骤s2011a:将当次应用程序迭代的第一个测试包的源代码与上一次应用程序迭代的最后一个测试包的源代码进行比对;如果上一次应用程序迭代的最后一个测试包不含有当次应用程序迭代的第一个测试包的第l7行的源代码,则将l7确定为新增行数,其中,l7为当次应用程序迭代的第一个测试包内的任一行。
[0218]
步骤s2011b:如果当次应用程序迭代的第一个测试包不含有上一次应用程序迭代的最后一个测试包的第l8行的源代码,则将l8确定为删除行数,其中,l8为上一次应用程序迭代的最后一个测试包内的任一行。
[0219]
步骤s2011c:如果上一次应用程序迭代的最后一个测试包的第l8行在当次应用程序迭代的第一个测试包的第l9行的源代码,则将l8确定为初始行数,以及将l9确定为变更行数,其中,l8与l9不相等。
[0220]
步骤s2011d:基于新增行数、删除行数、初始行数及对应的变更行数,得到第四变更代码行信息。
[0221]
其中,步骤s2011a-s2011d的过程可参见步骤s1011a-s1011d的过程,在此不再赘述。
[0222]
步骤s2012:将当次应用程序迭代的第一个测试包的代码覆盖行信息与第四变更代码行信息进行映射,得到第四临时代码覆盖行信息。
[0223]
其中,上一次应用程序迭代的最后一个测试包的代码覆盖行信息包括上一次应用程序迭代的最后一个测试包的每行源代码所在的行数及对应的覆盖信息。
[0224]
如图10所示,该步骤具体包括:
[0225]
步骤s2012a:如果第三变更代码行信息包括删除行数,则将上一次应用程序迭代的最后一个测试包的代码覆盖行信息内的删除行数所对应的源代码的覆盖信息删除。
[0226]
步骤s2012b:如果第三变更代码行信息包括初始行数及对应的变更行数,则将上一次应用程序迭代的最后一个测试包的代码覆盖行信息的初始行数更改为对应的变更行数,以得到第四临时代码覆盖行信息。
[0227]
其中,步骤s2012a-s2012b的过程可参见步骤s1011a-s1012b的过程,在此不再赘述。
[0228]
步骤s2013:将第四临时代码覆盖行信息与当次应用程序迭代的第一个测试包的代码覆盖行信息进行合并,得到第三合并代码覆盖行信息。
[0229]
其中,步骤s2011-s2013的过程可参见步骤s1011-s1013的过程,在此不再赘述。
[0230]
进一步地,在上述实施例中,如图11所示,步骤s201中的获取当次应用程序迭代的第一个测试包相较于上一次应用程序迭代的最后一个测试包的第一变更代码覆盖行信息包括:
[0231]
步骤s201a:如果第四变更代码行信息包括新增行数,则提取第三合并代码覆盖行信息中新增行数对应的覆盖信息。
[0232]
如果第四变更代码行信息包括新增行数,也就是当次应用程序迭代的第一当次应用程序迭代的第一个测试包相较于上一次应用程序迭代的最后一个测试包新增了一部分源代码,这样就需将新增行数的对应的覆盖信息进行提取。
[0233]
步骤s201b:基于新增行数及对应的覆盖信息,得到第一变更代码覆盖行信息。
[0234]
第一变更代码覆盖行信息包括当次应用程序迭代的第一当次应用程序迭代的第一个测试包相较于上一次应用程序迭代的最后一个测试包新增的源代码所在的行数以及对应的覆盖信息。
[0235]
具体地,在上述实施例中,如图12所示,步骤s203中的确定第四目标测试包相较于第三目标测试包的第三变更代码行信息包括:
[0236]
步骤s2031:将第四目标测试包的源代码与第三目标测试包的源代码进行比对;如果第三目标测试包不含有第四目标测试包的第l10行的源代码,则将l10确定为新增行数,其中,l10为第四目标测试包的任一行。
[0237]
步骤s2032:如果第四目标测试包不含有第三目标测试包的第l5行的源代码,则将l11确定为删除行数,其中,l11为第三目标测试包内的任一行。
[0238]
步骤s2033:如果第三目标测试包的第l11行的源代码在第四目标测试包的第l12行的源代码在,则将l11确定为初始行数,以及将l12确定为变更行数,其中,l11与l12不相等。
[0239]
步骤s2034:基于新增行数、删除行数、初始行数及对应的变更行数,得到第三变更代码行信息。
[0240]
其中,步骤s2031-s2034的过程可参见步骤s1031-s1034的过程,在此不再赘述。
[0241]
进一步地,在上述实施例中,步骤s204包括:
[0242]
步骤s2041:如果第三变更代码行信息包括删除行数,则将第二历史合并代码覆盖行信息的删除行数所对应的源代码的覆盖信息删除。
[0243]
步骤s2042:如果第三变更代码行信息包括初始行数及对应的变更行数,则将第二历史合并代码覆盖行信息的初始行数更改为对应的变更行数,以得到第三临时代码覆盖行信息。
[0244]
其中,步骤s2041-s2042的过程可参见步骤s1041-s1042的过程,在此不再赘述。
[0245]
进一步地,在上述实施例中,步如图13所示,骤s208具体包括:
[0246]
步骤s2081:基于最终的变量代码覆盖率,得到被覆盖过的新增代码的总行数及所有新增代码的总行数。
[0247]
其中,被覆盖过的新增代码的总行数可通过带有已覆盖标记的新增代码进行统计,所有新增源代码的总行数包括带有已覆盖标记和未覆盖标记的新增源代码的总行行数。
[0248]
步骤s2082:基于被覆盖过的新增代码的总行数及所有新增代码的总行数,按照下列公式计算得到n2个测试包的变量代码覆盖率;
[0249]
其中,p2为n2个测试包的变量代码覆盖率,s2为被覆盖过的新增代码的总行数,t2为所有新增代码的总行数。
[0250]
通过被覆盖过的新增源代码的总行数占全部新增源代码的总行数的比例,就可以得到一次应用程序迭代的所有测试包的变量代码覆盖率。
[0251]
第三方面,如图14所示,本发明实施例提供了一种代码覆盖率的统计装置,装置包括:
[0252]
第一获取模块301,用于获取当次应用程序迭代的第一个测试包与预置基准包的第一合并代码覆盖行信息;
[0253]
第一确定模块302,用于将当次应用程序迭代的第一个测试包确定为第一目标测试包,将当次应用程序迭代的第二个测试包确定为第二目标测试包,以及将第一合并代码覆盖行信息确定为第一历史合并代码覆盖行信息;
[0254]
第二确定模块303,用于确定第二目标测试包相较于第一目标测试包的第一变更代码行信息及第二目标测试包的代码覆盖行信息;
[0255]
第一映射模块304,用于将第一历史合并代码覆盖行信息与第一变更代码行信息进行映射,得到第一临时代码覆盖行信息;
[0256]
第一合并模块305,用于将第一临时代码覆盖行信息与第二目标测试包的代码覆盖行信息进行合并,得到第二合并代码覆盖行信息;
[0257]
第一循环模块306,用于将当次应用程序迭代的第k1个测试包确定为新的第一目标测试包,将当次应用程序迭代的第k1+1个测试包确定为新的第二目标测试包,将第二合并代码覆盖行信息作为新的第一历史合并代码覆盖行信息,重复第一确定模块、第一映射模块及第一合并模块的步骤,其中,k1依次取2至n1-1之间的正整数,n1为当次应用程序迭代的测试包的总数量;
[0258]
计算模块307,用于基于最终的第二合并代码覆盖行信息,得到n1个测试包的全量代码覆盖率。
[0259]
第四方面,如图15所示,本发明实施例提供了一种代码覆盖率的统计装置,装置包括:
[0260]
第二获取模块401,用于获取当次应用程序迭代的第一个测试包与上一次应用程序迭代的最后一个测试包的第三合并代码行覆盖行信息以及当次应用程序迭代的第一个测试包相较于上一次应用程序迭代的最后一个测试包的第一变更代码覆盖行信息;
[0261]
第四确定模块402,用于将当次应用程序迭代的第一个测试包确定为第三目标测试包,将当次应用程序迭代的第二个测试包确定为第四目标测试包,将第一变更代码覆盖行信息确定为历史变更代码覆盖行信息,以及将第三合并代码行覆盖行信息确定为第二历史合并代码覆盖行信息;
[0262]
第五确定模块403,用于确定第四目标测试包相较于第三目标测试包的第三变更代码行信息及第四目标测试包的代码覆盖行信息;
[0263]
第二映射模块404,用于将第二历史合并代码覆盖行信息与第三变更代码行信息进行映射,得到第三临时代码覆盖行信息;
[0264]
第二合并模块405,用于将第三临时代码覆盖行信息与第三目标测试包的覆盖行信息进行合并,得到第四合并代码覆盖行信息;
[0265]
第三合并模块406,用于将第四合并代码覆盖行信息、第三变更代码行信息及历史变更代码覆盖行信息进行合并,得到第二变更代码覆盖行信息;
[0266]
第二循环模块407,用于将当次应用程序迭代的第k2个测试包确定为新的第一目标测试包,将当次应用程序迭代的第k2+1个测试包确定为新的第二目标测试包,将第四合并代码覆盖行信息作为新的第二历史合并代码覆盖行信息,并将第二变更代码覆盖行信息作为新的历史变更代码行信息,重复s203-s206的步骤,其中,k1依次取2至n2-1之间的正整数,n2为当次应用程序迭代的测试包的总数量;
[0267]
第二计算模块408,用于基于最终的变更代码覆盖行信息,得到n2个测试包的变量代码覆盖率。
[0268]
第五方面,本发明实施例提供了一种存储介质,存储介质中存储有至少一可执行指令,可执行指令使处理器执行上述的代码覆盖率的统计方法的操作。
[0269]
第六方面,本发明实施例提供了一种计算机设备,包括:处理器、存储器、通信接口和通信总线,处理器、存储器和通信接口通过通信总线完成相互间的通信;
[0270]
存储器用于存放至少一可执行指令,可执行指令使处理器执行上述的代码覆盖率的统计方法的操作
[0271]
本发明已经通过上述实施例进行了说明,但应当理解的是,上述实施例只是用于举例和说明的目的,而非意在将本发明限制于所描述的实施例范围内。此外本领域技术人员可以理解的是,本发明并不局限于上述实施例,根据本发明的教导还可以做出更多种的变型和修改,这些变型和修改均落在本发明所要求保护的范围以内。本发明的保护范围由附属的权利要求书及其等效范围所界定。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1