一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

代码处理方法、装置、软件打包方法和存储介质与流程

2023-02-02 01:39:56 来源:中国专利 TAG:


1.本技术涉及软件测试技术领域,尤其涉及一种代码处理方法、装置、软件打包方法和存储介质、计算机设备。


背景技术:

2.软件测试在整个行业中占较为重要的部分,是在了解功能需求的情况下做一系列测试用例的编写,而代码覆盖率可以描述程序中代码被测试的比例和程度,可以为测试用例是否合适提供参考。依靠在程序的代码中进行插桩(也可称为探针),即在需要被统计的代码后添加相关的计数代码,运行经过插桩的程序即可获取该程序各行代码的执行情况,进而可计算出代码覆盖率。有些渠道对代码包的大小做出了限制,传统方法会导致包括被插桩的程序的代码包由于新增的代码而变大,使得这些渠道无法接入覆盖率进行测试。


技术实现要素:

3.本技术的目的旨在至少能解决上述的技术缺陷之一,特别是现有技术中为了接入覆盖率而导致代码包大小超过上限的技术缺陷。
4.第一方面,本技术提供了一种代码处理方法,包括:
5.提取待处理脚本文件每行代码的覆盖率映射关系,得到映射关系集;覆盖率映射关系包括该行代码的属性标识以及属性标识对应的位置信息;
6.识别待处理脚本文件中的差异代码;
7.根据差异代码所在行的覆盖率映射关系,对差异代码进行插桩处理,得到目标脚本文件;
8.将待处理脚本文件的映射关系集与目标脚本文件合并存入数据库中。
9.在其中一个实施例中,识别待处理脚本文件中的差异代码,包括:
10.获取待处理脚本文件对应的历史脚本文件;
11.根据待处理脚本文件与历史脚本文件之间的差异,确定差异代码。
12.在其中一个实施例中,根据待处理脚本文件与历史脚本文件之间的差异,确定差异代码,还包括:
13.将差异代码中的干扰代码排除;干扰代码为待处理脚本文件中与历史脚本文件之间存在差异但与待处理脚本文件的逻辑无关的代码。
14.在其中一个实施例中,根据差异代码所在行的覆盖率映射关系,对差异代码进行插桩处理,包括:
15.根据差异代码所在行的属性标识,构建覆盖率标记代码;
16.在差异代码后插入覆盖率标记代码。
17.在其中一个实施例中,提取待处理脚本文件每行代码的覆盖率映射关系,得到映射关系集,包括:
18.复制待处理脚本文件,得到第一脚本文件;
19.对第一脚本文件的每行代码进行插桩处理,得到第二脚本文件;
20.根据待处理脚本文件与第二脚本文件的差异,确定待处理脚本文件的每行代码的覆盖率映射关系,以得到映射关系集。
21.在其中一个实施例中,属性标识包括下列中的至少一种:行属性标识、分支属性标识、函数属性标识。
22.第二方面,本技术实施例提供了一种软件打包方法,包括:
23.获取目标前端项目,并从目标前端项目中筛选出待处理脚本文件;
24.利用上述任一实施例中的代码处理方法对待处理脚本文件进行处理,得到目标脚本文件;
25.将目标脚本文件与目标前端项目的其他文件进行打包,得到目标代码包。
26.第三方面,本技术实施例提供了一种代码处理装置,包括:
27.提取待处理脚本文件每行代码的覆盖率映射关系,得到映射关系集;覆盖率映射关系包括该行代码的属性标识以及属性标识对应的位置信息;
28.识别待处理脚本文件中的差异代码;
29.根据差异代码所在行的覆盖率映射关系,对差异代码进行插桩处理,得到目标脚本文件;
30.将待处理脚本文件的映射关系集与目标脚本文件合并存入数据库中。
31.第四方面,本技术实施例提供了一种计算机设备,包括一个或多个处理器,以及存储器,存储器中存储有计算机可读指令,计算机可读指令被一个或多个处理器执行时,执行上述任一实施例中的代码处理方法或软件打包方法的步骤。
32.第五方面,本技术实施例提供了一种存储介质,存储介质中存储有计算机可读指令,计算机可读指令被一个或多个处理器执行时,使得一个或多个处理器执行上述任一实施例中的代码处理方法或软件打包方法的步骤。
33.从以上技术方案可以看出,本技术实施例具有以下优点:
34.基于上述任一实施例,提取待处理脚本文件中对应的映射关系集,以便统计代码执行情况,考虑到渠道方对代码包大小的限制,仅对代码的差异部分进行插桩,以缩小脚本文件的体积,最后将得到的目标脚本文件和映射关系集一同上传数据库,渠道方可从数据库中找到所需的映射关系集,参考映射关系集和测试时的代码运行结果,即可计算出代码覆盖率。该方法在保证渠道方可接入覆盖率这一指标的基础缩小了脚本文件的体积,以解决前端项目形成的代码包由于体积过大而无法交付给某些对代码包大小有限制的渠道方的问题。
附图说明
35.为了更清楚地说明本技术实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本技术的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其它的附图。
36.图1为本技术实施例提供的代码处理方法的流程示意图;
37.图2为本技术实施例提供的未经处理的脚本文件的示意图;
38.图3为对图2中的脚本文件的函数语句进行插桩所得到的脚本文件的示意图;
39.图4为与图3对应的和插桩处理相关的统计信息;
40.图5为对图2中的脚本文件的存在差异的函数语句进行插桩所得到的脚本文件的示意图;
41.图6为计算机设备的内部结构图。
具体实施方式
42.下面将结合本技术实施例中的附图,对本技术实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本技术一部分实施例,而不是全部的实施例。基于本技术中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本技术保护的范围。
43.第一方面,本技术提供了一种代码处理方法,请参阅图1,包括步骤s102至步骤s108。
44.s102,提取待处理脚本文件每行代码的覆盖率映射关系,得到映射关系集。
45.覆盖率映射关系包括该行代码的属性标识以及属性标识对应的位置信息。
46.可以理解,一个前端项目一般包括标记语言文件、脚本文件。标记语言文件包括html(hypertext markup language,超文本标记语言)文件、css(cascading style sheet,层叠样式表)文件。脚本文件根据所采用的前端框架的不同,可包括后缀名为.js、.vue、.tsx、.jsx、.ux等格式的文件。而其中的脚本文件常需要覆盖率的接入,以指导编写测试用例。因此,以前端项目中的脚本文件为待处理脚本文件。覆盖率映射关系是用于统计每行代码的执行情况的映射关系。属性标识即用于反映该行代码的语句属性,可包括行属性标识(statement)、分支属性标识(branch)、函数属性标识(function)等多个种类。且为了区分,同个种类内的属性标识对应有不同的计数特征。如以s代表行属性标识,则为每行可执行代码均可标记上行属性标识s[

xx’],其中,

xx’即为计数特征,代表该行可执行代码是所有行属性标识中的第xx个。而属性标识对应的位置信息即标识该行代码在整个待处理脚本文件中的起始位置和结束位置。
[0047]
换句话说,为了覆盖率统计需要对每行代码进行插桩,最后即会在每个可执行代码后添加上对应的覆盖率标记代码,又会得到反映各覆盖率标记代码相关情况的统计信息。本公开的思路是不在待处理脚本文件的每个可执行代码都插入覆盖率标记代码,而只根据该统计信息得到覆盖率映射关系。以对图2所示的代码进行插桩(只示出了函数属性标识相关的结果)为例,得到图3中的插桩后代码以及图4中的统计信息。“function testa()”对应的函数属性标识覆盖率标记代码为“cov.f[
‘1’
] ”,“function testa()”对应的函数属性标识覆盖率标记代码为“cov.f[
‘2’
] ”,他们分别有不同的计数特征。而图4中的“f”即展示计数特征对应的语句被执行的次数,以“function testa()”为例,每当“function testa()”被执行时,其对应的覆盖率标记代码“cov.f[
‘1’
] ”也会被执行,就会使得“f”中的“1”后的数字自加,以此统计被执行次数。而“fnmap”即反映计数特征与语句之间的对应关系,以及反映对应的语句的位置信息,如“function testa()”位于第一行且开始于第一行、结束于第一行。因此,只提取插桩过程中的统计信息,根据统计信息即可得到映射关系集。
[0048]
s104,识别待处理脚本文件中的差异代码。
[0049]
可以理解,本实施例针对的是存在版本更新的前端项目,差异代码即为待处理脚本文件当前版本与前一版本之间的差异部分。即先获取待处理脚本文件对应的历史脚本文件。根据待处理脚本文件与历史脚本文件之间的差异,确定差异代码。目前,对两个代码之间差异进行识别的差异识别算法研究较为成熟,如bsdiff、xdelta3、courgette等等,这些算法可以比较两个文件的编译文件之间的差异,并输出各差异内容以及各差异内容在文件中的位置。通过类似的识别算法可实现对差异代码的识别。
[0050]
s106,根据差异代码所在行的覆盖率映射关系,对差异代码进行插桩处理,得到目标脚本文件。
[0051]
对于存在版本更迭的脚本文件而言,主要测试目标应在差异代码部分。因此只对差异代码部分进行插桩处理,而为了根据步骤s102中得到的全量映射关系集确定差异代码的执行情况,应为差异代码选择该差异代码所在行在映射关系集中相同的属性标识。具体而言,可根据差异代码所在行的属性标识,构建覆盖率标记代码;在差异代码后插入覆盖率标记代码。仍以图2为例,假设“function testb()”为差异代码,则在映射关系集中,其属性标识为f[
‘2’
],构建出的覆盖率标记代码为“cov.f[
‘2’
] ”,则应仅在“function testb()”后加上“cov.f[
‘2’
] ”,如图5所示。
[0052]
s108,将待处理脚本文件的映射关系集与目标脚本文件合并存入数据库中。
[0053]
由于差异代码的数量相对较少,但对测试用例的编写又较为关键,相较于对待处理文件所有代码都插入覆盖率标记语句而言,目标脚本文件的体积大幅度降低但测试效果也可以保证。使得在将目标脚本文件和前端项目中除待处理脚本文件以外的文件打包所得的代码包即可以满足大小限制,又可以满足接入覆盖率的需要。另外,传统技术中映射关系集将保存在脚本文件中,本实施例将其提取出来,并在目标脚本文件和待处理脚本文件的映射关系集之间建立对应关系后上传数据库,进一步缩小代码包体积,在需要了解代码覆盖率时,渠道方可从数据库中找到需要的映射关系集并运行接收到的代码包。结合运行结果、映射关系集可在测试时计算差异代码的覆盖率,以该覆盖率为参考,提高测试用例编写时的合理性以及编写效率。
[0054]
基于本实施例中的代码处理方法,提取待处理脚本文件中对应的映射关系集,以便统计代码执行情况,考虑到渠道方对代码包大小的限制,仅对代码的差异部分进行插桩,以缩小脚本文件的体积,最后将得到的目标脚本文件和映射关系集一同上传数据库,渠道方可从数据库中找到所需的映射关系集,参考映射关系集和测试时的代码运行结果,即可计算出代码覆盖率。该方法在保证渠道方可接入覆盖率这一指标的基础缩小了脚本文件的体积,以解决前端项目形成的代码包由于体积过大而无法交付给某些对代码包大小有限制的渠道方的问题。
[0055]
在其中一个实施例中,根据待处理脚本文件与历史脚本文件之间的差异,确定差异代码,还包括:将差异代码中的干扰代码排除。干扰代码为待处理脚本文件中与历史脚本文件之间存在差异但与待处理脚本文件的逻辑无关的代码。即待处理脚本文件和历史脚本文件可能是基于不同的语句结构编写的,如空格以及符号的使用方式不同,这些语句结构上的差异与脚本文件的执行逻辑无关,对执行结果也没有影响,而差异识别算法会将这些差异识别出来并作为差异代码。而这些干扰代码往往数量很多,如果不将其排除,会导致插
入许多无用的覆盖率标记语句,使得文件体积变大。因此,在利用差异识别算法识别出差异代码后,将其中的干扰代码排除出差异代码,避免对干扰代码进行插桩。
[0056]
在其中一个实施例中,提取待处理脚本文件每行代码的覆盖率映射关系,得到映射关系集,包括:
[0057]
1)复制待处理脚本文件,得到第一脚本文件。
[0058]
2)对第一脚本文件的每行代码进行插桩处理,得到第二脚本文件。
[0059]
3)根据待处理脚本文件与第二脚本文件的差异,确定待处理脚本文件的每行代码的覆盖率映射关系,以得到映射关系集。
[0060]
可以理解,有的代码覆盖率工具(如istanbul)在插桩后即会在原来的代码中加入覆盖率标记语句和相关的统计信息,而无法直接提取映射关系集。基于该类代码覆盖率工具,为了不对待处理脚本文件造成影响,对其复制版本,也即第一脚本文件进行插桩处理,得到第二脚本文件,第二脚本文件与待处理文件之间的差异即包括覆盖率标记语句和相关的统计信息。由于这两部分的语句结构是代码覆盖率工具中设置好的,通过设置正则表达式的方式即可筛选出统计信息,根据统计信息中的属性标识和位置信息之间的对应关系,以属性标识为键、位置信息为值,构建覆盖率映射关系,从而得到映射关系集。
[0061]
第二方面,本技术实施例提供了一种软件打包方法,包括:
[0062]
1)获取目标前端项目,并从目标前端项目中筛选出待处理脚本文件。
[0063]
可以理解,目标前端项目即为需要交付给渠道方进行测试的前端项目。而目标前端项目中包括标记语言文件、脚本文件、模板文件等。其中只有脚本文件需要接入覆盖率指标,因此,在编译、打包目标前端项目的过程中需要以目标前端项目中的脚本文件为待处理脚本文件进行处理
[0064]
2)利用上述任一实施例中的代码处理方法对待处理脚本文件进行处理,得到目标脚本文件。
[0065]
3)将目标脚本文件与目标前端项目的其他文件进行打包,得到目标代码包。
[0066]
经过上述任一实施例中的代码处理方法所得到目标脚本文件即可用来统计覆盖率,文件体积也不会过大,将其与目标前端项目中待处理脚本文件以外的文件进行打包,即可得到大小不超过渠道限制的目标代码包。渠道方可从数据库中找到需要的映射关系集并运行接收到的目标代码包。结合运行结果、映射关系集可在测试时计算差异代码的覆盖率,以该覆盖率为参考,提高测试用例编写时的合理性以及编写效率。
[0067]
第三方面,本技术实施例提供了一种代码处理装置,包括提取模块、识别模块、第一插桩模块以及入库模块。
[0068]
提取模块用于提取待处理脚本文件每行代码的覆盖率映射关系,得到映射关系集。覆盖率映射关系包括该行代码的属性标识以及属性标识对应的位置信息。识别模块用于识别待处理脚本文件中的差异代码。第一插桩模块用于根据差异代码所在行的覆盖率映射关系,对差异代码进行插桩处理,得到目标脚本文件。入库模块用于将待处理脚本文件的映射关系集与目标脚本文件合并存入数据库中。
[0069]
在其中一个实施例中,识别模块用于获取待处理脚本文件对应的历史脚本文件;根据待处理脚本文件与历史脚本文件之间的差异,确定差异代码。
[0070]
在其中一个实施例中,识别模块还包括过滤单元。过滤单元用于将差异代码中的
干扰代码排除;干扰代码为待处理脚本文件中与历史脚本文件之间存在差异但与待处理脚本文件的逻辑无关的代码。
[0071]
在其中一个实施例中,第一插桩模块用于根据差异代码所在行的属性标识,构建覆盖率标记代码;在差异代码后插入覆盖率标记代码。
[0072]
在其中一个实施例中,提取模块用于复制待处理脚本文件,得到第一脚本文件;对第一脚本文件的每行代码进行插桩处理,得到第二脚本文件;根据待处理脚本文件与第二脚本文件的差异,确定待处理脚本文件的每行代码的覆盖率映射关系,以得到映射关系集。
[0073]
第四方面,本技术实施例提供了一种计算机设备,包括一个或多个处理器,以及存储器,存储器中存储有计算机可读指令,计算机可读指令被一个或多个处理器执行时,执行:提取待处理脚本文件每行代码的覆盖率映射关系,得到映射关系集;覆盖率映射关系包括该行代码的属性标识以及属性标识对应的位置信息;识别待处理脚本文件中的差异代码;根据差异代码所在行的覆盖率映射关系,对差异代码进行插桩处理,得到目标脚本文件;将待处理脚本文件的映射关系集与目标脚本文件合并存入数据库中。
[0074]
在其中一个实施例中,计算机可读指令被一个或多个处理器执行时,执行:获取待处理脚本文件对应的历史脚本文件;根据待处理脚本文件与历史脚本文件之间的差异,确定差异代码。
[0075]
在其中一个实施例中,计算机可读指令被一个或多个处理器执行时,执行:将差异代码中的干扰代码排除;干扰代码为待处理脚本文件中与历史脚本文件之间存在差异但与待处理脚本文件的逻辑无关的代码。
[0076]
在其中一个实施例中,计算机可读指令被一个或多个处理器执行时,执行:根据差异代码所在行的属性标识,构建覆盖率标记代码;在差异代码后插入覆盖率标记代码。
[0077]
在其中一个实施例中,计算机可读指令被一个或多个处理器执行时,执行:复制待处理脚本文件,得到第一脚本文件;对第一脚本文件的每行代码进行插桩处理,得到第二脚本文件;根据待处理脚本文件与第二脚本文件的差异,确定待处理脚本文件的每行代码的覆盖率映射关系,以得到映射关系集。
[0078]
在其中一个实施例中,计算机可读指令被一个或多个处理器执行时,执行:获取目标前端项目,并从目标前端项目中筛选出待处理脚本文件;利用上述任一实施例中的代码处理方法对待处理脚本文件进行处理,得到目标脚本文件;将目标脚本文件与目标前端项目的其他文件进行打包,得到目标代码包。
[0079]
第五方面,本技术实施例提供了一种存储介质,存储介质中存储有计算机可读指令,计算机可读指令被一个或多个处理器执行时,使得一个或多个处理器执行:提取待处理脚本文件每行代码的覆盖率映射关系,得到映射关系集;覆盖率映射关系包括该行代码的属性标识以及属性标识对应的位置信息;识别待处理脚本文件中的差异代码;根据差异代码所在行的覆盖率映射关系,对差异代码进行插桩处理,得到目标脚本文件;将待处理脚本文件的映射关系集与目标脚本文件合并存入数据库中。
[0080]
在其中一个实施例中,计算机可读指令被一个或多个处理器执行时,使得一个或多个处理器执行:获取待处理脚本文件对应的历史脚本文件;根据待处理脚本文件与历史脚本文件之间的差异,确定差异代码。
[0081]
在其中一个实施例中,计算机可读指令被一个或多个处理器执行时,执行:将差异
代码中的干扰代码排除;干扰代码为待处理脚本文件中与历史脚本文件之间存在差异但与待处理脚本文件的逻辑无关的代码。
[0082]
在其中一个实施例中,计算机可读指令被一个或多个处理器执行时,使得一个或多个处理器执行:根据差异代码所在行的属性标识,构建覆盖率标记代码;在差异代码后插入覆盖率标记代码。
[0083]
在其中一个实施例中,计算机可读指令被一个或多个处理器执行时,使得一个或多个处理器执行:复制待处理脚本文件,得到第一脚本文件;对第一脚本文件的每行代码进行插桩处理,得到第二脚本文件;根据待处理脚本文件与第二脚本文件的差异,确定待处理脚本文件的每行代码的覆盖率映射关系,以得到映射关系集。
[0084]
在其中一个实施例中,计算机可读指令被一个或多个处理器执行时,使得一个或多个处理器执行:获取目标前端项目,并从目标前端项目中筛选出待处理脚本文件;利用上述任一实施例中的代码处理方法对待处理脚本文件进行处理,得到目标脚本文件;将目标脚本文件与目标前端项目的其他文件进行打包,得到目标代码包。
[0085]
示意性地,如图6所示,图6为本技术实施例提供的一种计算机设备的内部结构示意图,该计算机设备600可以被提供为一服务器。参照图6,计算机设备600包括处理组件602,其进一步包括一个或多个处理器,以及由存储器601所代表的存储器资源,用于存储可由处理组件602的执行的指令,例如应用程序。存储器601中存储的应用程序可以包括一个或一个以上的每一个对应于一组指令的模块。此外,处理组件602被配置为执行指令,以执行上述任意实施例的文本识别方法。
[0086]
计算机设备600还可以包括一个电源组件603被配置为执行计算机设备600的电源管理,一个有线或无线网络接口604被配置为将计算机设备600连接到网络,和一个输入输出(i/o)接口605。计算机设备600可以操作基于存储在存储器601的操作系统,例如windows server tm、mac os xtm、unix tm、linux tm、free bsdtm或类似。
[0087]
本领域技术人员可以理解,图6中示出的结构,仅仅是与本技术方案相关的部分结构的框图,并不构成对本技术方案所应用于其上的计算机设备的限定,具体的计算机设备可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。
[0088]
最后,还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个
……”
限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
[0089]
本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间可以根据需要进行组合,且相同相似部分互相参见即可。
[0090]
对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本技术。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本技术的精神或范围的情况下,在其它实施例中实现。因此,本技术
将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。
再多了解一些

本文用于创业者技术爱好者查询,仅供学习研究,如用于商业用途,请联系技术所有人。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献