更新方法及装置
文献发布时间:2023-06-19 16:04:54
技术领域
本公开涉及前端技术领域,尤其涉及更新方法及装置。
背景技术
前端项目编码时会需要使用新的语言特性和功能来提升编码效率,但是这些特性和功能在浏览器中并不一定被支持,所以需使用多种工程化工具用于对项目源代码进行打包构建,将源代码进行处理和降级后产生新的代码产物,该代码产物能够在不同浏览器端运行,兼容性更好,最终能够实现在不同浏览器都能正常运行项目。
不同的工程化工具实现不同的功能,例如使用webpack工具解决JavaScript打包合并问题、less解决样式文件编译问题等等,这些工具最终是以依赖包的方式被引入到项目中,比如第一次安装时会固定一个版本,例如v1,由于工具会不断的功能更新和升级,例如升级到v2,当项目安装v2版本后,需重新对项目进行打包构建,产生新的代码产物,新的代码产物和原代码产物可能会存在不一致的情况,可能会影响到用户功能,因为工程化工具不同版本可能会采用不同的实现思路来编译源代码,虽然代码产物有变化但是功能不一定会受到影响。
目前的方案是手动更新工程化工具,更新完成后,重新编译后得到新的代码产物,通过人工测试或者单元测试的方式验证项目功能是否和原来是一致的,如果一致则说明升级没有问题,不一致则说明更新存在问题,然后手动回滚到原来的版本。
然而,上述的现有技术仍然存在部分不足点:
人工测试花费了了大量的时间,而且速度较慢,影响项目研发周期。
发明内容
为克服相关技术中存在的问题,本公开实施例提供更新方法及装置。所述技术方案如下:
根据本公开实施例的第一方面,提供一种更新方法,包括:
使用已有版本的工程化工具对项目源代码进行打包构建,以获取原版本代码产物;
安装新版本工程化工具;
使用新版本的工程化工具对项目源代码进行打包构建,以获取新版本代码产物;
根据所述原版本代码产物的实现功能和所述新版本代码产物的实现功能是否一致确定是否更新成功。
本公开的实施例提供的技术方案可以包括以下有益效果:使用已有版本的工程化工具对项目源代码进行打包构建,以获取原版本代码产物;安装新版本工程化工具;使用新版本的工程化工具对项目源代码进行打包构建,以获取新版本代码产物;根据原版本代码产物的实现功能和新版本代码产物的实现功能是否一致确定是否更新成功。其中,将工程化工具更新流程自动化,无需人为介入更新,避免了人工出错、效率较慢等问题,并且还可输出安全更新失败的原因。
在一个实施例中,所述根据所述原版本代码产物的实现功能和所述新版本代码产物的实现功能是否一致确定是否更新成功,包括:
检测所述原版本代码产物和所述新版本代码产物是否相同;
若所述原版本代码产物和所述新版本代码产物相同,则使用所述新版本工程化工具替换所述已有版本的工程化工具,并输出安全更新成功指令;
若所述原版本代码产物和所述新版本代码产物不相同,运行项目单元测试;
若所述项目单元测试不通过,则记录测试不通过的案例;
输出所述安全更新失败指示信息,所述安全更新失败指示信息指示所述项目单元测试不通过,所述安全更新失败指示信息中还包括所述案例;
若所述项目单元测试通过,则在所述新版本代码产物和所述老版本代码产物中分别自动化进行相同行为路径的模拟,检测所述新版本代码产物和所述老版本代码产物对应的相同行为路径的表现是否一致;
若不一致,则记录不一致的行为路径;
输出所述安全更新失败指示信息,所述安全更新失败指示信息指示所述新版本代码产物和所述老版本代码产物对应的相同行为路径的表现不一致,所述安全更新失败指示信息中还包括所述不一致的行为路径;
若一致,则对比所述新版本代码产物和所述老版本代码产物,将输出所述新版本代码产物和所述老版本代码产物中不一致的代码,以进行人为干预测试;
接收人为干预测试失败指令,所述人为干预测试失败指令指示人为干预测试不通过,则输出所述安全更新失败指示信息,所述安全更新失败指示信息指示人为干预测试不通过。
在一个实施例中,所述方法还包括:
接收人为干预测试成功指令,所述人为干预测试成功指令指示人为干预测试通过,则输出所述安全更新成功指令。
在一个实施例中,所述输出安全更新失败指示信息之后,所述方法还包括:
接收基于所述导致所述原版本代码产物和所述新版本代码产物不相同的原因而修改后的项目源代码;
对所述修改后的项目源代码继续执行上述的更新方法。
根据本公开实施例的第二方面,提供一种更新装置,包括:
第一获取模块,用于使用已有版本的工程化工具对项目源代码进行打包构建,以获取原版本代码产物;
安装模块,用于安装新版本工程化工具;
第二获取模块,用于使用新版本的工程化工具对项目源代码进行打包构建,以获取新版本代码产物;
确定模块,用于根据所述原版本代码产物的实现功能和所述新版本代码产物的实现功能是否一致确定是否更新成功。
在一个实施例中,所述确定模块,包括:
第一检测子模块,用于检测所述原版本代码产物和所述新版本代码产物是否相同;
第一输出子模块,用于若所述原版本代码产物和所述新版本代码产物相同,则使用所述新版本工程化工具替换所述已有版本的工程化工具,并输出安全更新成功指令;
运行子模块,用于若所述原版本代码产物和所述新版本代码产物不相同,运行项目单元测试;
第一记录子模块,用于若所述项目单元测试不通过,则记录测试不通过的案例;
第二输出子模块,用于输出所述安全更新失败指示信息,所述安全更新失败指示信息指示所述项目单元测试不通过,所述安全更新失败指示信息中还包括所述案例;
第二检测子模块,用于若所述项目单元测试通过,则在所述新版本代码产物和所述老版本代码产物中分别自动化进行相同行为路径的模拟,检测所述新版本代码产物和所述老版本代码产物对应的相同行为路径的表现是否一致;
第二记录子模块,用于若不一致,则记录不一致的行为路径;
第三输出子模块,用于输出所述安全更新失败指示信息,所述安全更新失败指示信息指示所述新版本代码产物和所述老版本代码产物对应的相同行为路径的表现不一致,所述安全更新失败指示信息中还包括所述不一致的行为路径;
第四输出子模块,用于若一致,则对比所述新版本代码产物和所述老版本代码产物,将输出所述新版本代码产物和所述老版本代码产物中不一致的代码,以进行人为干预测试;
第五输出子模块,用于接收人为干预测试失败指令,所述人为干预测试失败指令指示人为干预测试不通过,则输出所述安全更新失败指示信息,所述安全更新失败指示信息指示人为干预测试不通过。
在一个实施例中,所述确定模块还包括:
第六输出子模块,用于接收人为干预测试成功指令,所述人为干预测试成功指令指示人为干预测试通过,则输出所述安全更新成功指令。
在一个实施例中,所述装置还包括:
接收模块,用于接收基于所述导致所述原版本代码产物和所述新版本代码产物不相同的原因而修改后的项目源代码;
循环模块,用于对所述修改后的项目源代码继续执行上述的更新步骤。
根据本公开实施例的第三方面,提供一种更新装置,包括:
处理器;
用于存储处理器可执行指令的存储器;
其中,所述处理器被配置为:
使用已有版本的工程化工具对项目源代码进行打包构建,以获取原版本代码产物;
安装新版本工程化工具;
使用新版本的工程化工具对项目源代码进行打包构建,以获取新版本代码产物;
根据所述原版本代码产物的实现功能和所述新版本代码产物的实现功能是否一致确定是否更新成功。
根据本公开实施例的第四方面,提供一种计算机可读存储介质,其上存储有计算机指令,该指令被处理器执行时实现第一方面中任一项所述方法的步骤。
应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本公开。
附图说明
此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本公开的实施例,并与说明书一起用于解释本公开的原理。
图1是根据一示例性实施例示出的更新方法的流程图。
图2是根据一示例性实施例示出的更新方法的流程图。
图3是根据一示例性实施例示出的更新方法的流程图。
图4是根据一示例性实施例示出的更新方法的流程图。
图5是根据一示例性实施例示出的一种更新装置的框图。
图6是根据一示例性实施例示出的一种更新装置中确定模块的框图。
图7是根据一示例性实施例示出的一种更新装置中确定模块的框图。
图8是根据一示例性实施例示出的一种更新装置的框图。
图9是根据一示例性实施例示出的一种用于更新装置90的框图。
具体实施方式
这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本公开相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本公开的一些方面相一致的装置和方法的例子。
图1是根据一示例性实施例示出的更新方法的流程图,如图1所示,该方法包括以下步骤S101-S104:
在步骤S101中,使用已有版本的工程化工具对项目源代码进行打包构建,以获取原版本代码产物;
此时的项目源代码可以包括:当前项目修改但未提交的代码。
在提交了当前项目修改但未提交的代码后,运行项目构建命令,得到原版本代码产物。
在步骤S102中,安装新版本工程化工具;
开发者可以输入需安装的工程化工具名称和版本,此时,便自动安装新版本的工程化工具。
在步骤S103中,使用新版本的工程化工具对项目源代码进行打包构建,以获取新版本代码产物;
再次运行项目构建命令,得到新版本代码产物。
在步骤S104中,根据原版本代码产物的实现功能和新版本代码产物的实现功能是否一致确定是否更新成功。
具体的,在一个实施例中,如图2所示,步骤S104包括以下子步骤:
在步骤S1041中,检测原版本代码产物和新版本代码产物是否相同;
在步骤S1042中,若原版本代码产物和新版本代码产物相同,则使用新版本工程化工具替换已有版本的工程化工具,并输出安全更新成功指令;
在步骤S1043中,若原版本代码产物和新版本代码产物不相同,运行项目单元测试;
在步骤S1044中,若项目单元测试不通过,则记录测试不通过的案例;
在步骤S1045中,输出安全更新失败指示信息,安全更新失败指示信息指示项目单元测试不通过,安全更新失败指示信息中还包括案例;
在步骤S1046中,若项目单元测试通过,则在新版本代码产物和老版本代码产物中分别自动化进行相同行为路径的模拟,检测新版本代码产物和老版本代码产物对应的相同行为路径的表现是否一致;
在步骤S1047中,若不一致,则记录不一致的行为路径;
在步骤S1048中,输出安全更新失败指示信息,安全更新失败指示信息指示新版本代码产物和老版本代码产物对应的相同行为路径的表现不一致,安全更新失败指示信息中还包括不一致的行为路径;
在步骤S1049中,若一致,则对比新版本代码产物和老版本代码产物,将输出新版本代码产物和老版本代码产物中不一致的代码,以进行人为干预测试;
在步骤S10410中,接收人为干预测试失败指令,人为干预测试失败指令指示人为干预测试不通过,则输出安全更新失败指示信息,安全更新失败指示信息指示人为干预测试不通过。
在步骤S10411中,接收人为干预测试成功指令,人为干预测试成功指令指示人为干预测试通过,则输出安全更新成功指令。
相关技术中,由于人工测试或者单元测试无法保证100%覆盖,会有遗漏的情况。而本公开中,通过代码产物对比、单元测试、自动化测试、人工测试介入等多重验证方式,验证更新是否安全,无需人工干预,覆盖率更全、速度更快。
值得注意的是,同时验证方式不局限于上述的几种,可根据需要自由添加和删减。
在一个实施例中,输出安全更新失败指示信息之后,上述方法还包括以下子步骤A1-A2:
A1、接收基于导致原版本代码产物和新版本代码产物不相同的原因而修改后的项目源代码;
A2、对修改后的项目源代码继续执行上述的更新方法。
相关技术中,整个更新流程需要人工介入,如果失败还需要回滚版本更新,过程较慢,没有自动化的流程保障。而本公开中,如果失败,则直接继续使用已有版本的工程化工具,并且在接收到基于导致原版本代码产物和新版本代码产物不相同的原因而修改后的项目源代码后,会对该修改后的源代码继续执行上述的更新方法,从而无法人工介入。
本公开实施例中,提供一种更新方法,包括:使用已有版本的工程化工具对项目源代码进行打包构建,以获取原版本代码产物;安装新版本工程化工具;使用新版本的工程化工具对项目源代码进行打包构建,以获取新版本代码产物;根据原版本代码产物的实现功能和新版本代码产物的实现功能是否一致确定是否更新成功。其中,将工程化工具更新流程自动化,无需人为介入更新,避免了人工出错、效率较慢等问题,并且还可输出安全更新失败的原因。
下面通过几个实施例详细介绍实现过程。
本公开的技术方案可以通过开发一个独立的自动化升级模块来完成,当需要升级工程化工具时,在项目中运行该模块,升级模块将负责升级工程化工具以及验证工程化工具更新是否成功,如果不成功则提示开发者更新失败并标注失败的原因,详细的步骤如图3所示:
1.进入到项目目录,运行自动化升级模块。
2.如果升级成功,则提示开发者升级成功。
3.如果升级失败,则根据自动化升级模块提示的原因针对性解决,并再次运行自动化升级模块。
其中,运行自动化升级模块的具体步骤如图4所示:
1.提交当前项目修改但未提交代码。
2.切出一个新的升级代码分支。
3.运行项目构建命令,得到原版本代码产物。
4.存储原版本代码产物,命名为原产物。
5.开发者输入需安装的工程化工具名称和版本。
6.安装新版本的工程化工具。
7.再次运行项目构建命令,得到新版本代码产物,命名为新产物。
8.比对新老产物是否安全相同,如果相同则认为可安全更新进入第9步,如果不相同则进入下一步骤a,
a.运行项目单元测试,如果单元测试不通过,则认为更新失败,走第10步流程,并将测试不通过的案例记录下来。
b.如果上一步通过,则在新老产物中分别自动化进行相同行为路径的模拟,验证新老产物行为表现是否一致,如果不一致,则认为更新失败,走第10步流程,并将不一致的行为路径记录下来。
c.如果上一步通过,则对比新老产物代码,将代码产物中不一致的代码记录下来,用于给开发者针对不一致的代码进行人为干预测试,如果人为干预认为不通过,则走第10步流程。
9.如果上一步全部通过,则认为可安全更新,将该升级分支命名为发布分支。
10.如果上一步不通过,则提示开发者更新失败原因。
本公开中:
1.将工程化工具升级流程自动化,实现安全的升级项目依赖的工程化工具,无需人为介入,避免了人工出错、效率较慢等问题,同时该方案可用于各类其他依赖包的升级,不局限于工程化工具,例如代码中引入的第三方包等。
2.通过代码产物对比、单元测试、自动化测试、人工测试介入等多重验证方式,验证更新是否安全,无需人工干预,覆盖率更全,速度更快,同时验证方式不局限于所述几种,可根据需要自由添加和删减。
下述为本公开装置实施例,可以用于执行本公开方法实施例。
图5是根据一示例性实施例示出的一种更新装置的框图,如图5所示,该更新装置包括:
第一获取模块11,用于使用已有版本的工程化工具对项目源代码进行打包构建,以获取原版本代码产物;
安装模块12,用于安装新版本工程化工具;
第二获取模块13,用于使用新版本的工程化工具对项目源代码进行打包构建,以获取新版本代码产物;
确定模块14,用于根据所述原版本代码产物的实现功能和所述新版本代码产物的实现功能是否一致确定是否更新成功。
在一个实施例中,如图6所示,所述确定模块14,包括:
第一检测子模块141,用于检测所述原版本代码产物和所述新版本代码产物是否相同;
第一输出子模块142,用于若所述原版本代码产物和所述新版本代码产物相同,则使用所述新版本工程化工具替换所述已有版本的工程化工具,并输出安全更新成功指令;
运行子模块143,用于若所述原版本代码产物和所述新版本代码产物不相同,运行项目单元测试;
第一记录子模块144,用于若所述项目单元测试不通过,则记录测试不通过的案例;
第二输出子模块145,用于输出所述安全更新失败指示信息,所述安全更新失败指示信息指示所述项目单元测试不通过,所述安全更新失败指示信息中还包括所述案例;
第二检测子模块146,用于若所述项目单元测试通过,则在所述新版本代码产物和所述老版本代码产物中分别自动化进行相同行为路径的模拟,检测所述新版本代码产物和所述老版本代码产物对应的相同行为路径的表现是否一致;
第二记录子模块147,用于若不一致,则记录不一致的行为路径;
第三输出子模块148,用于输出所述安全更新失败指示信息,所述安全更新失败指示信息指示所述新版本代码产物和所述老版本代码产物对应的相同行为路径的表现不一致,所述安全更新失败指示信息中还包括所述不一致的行为路径;
第四输出子模块149,用于若一致,则对比所述新版本代码产物和所述老版本代码产物,将输出所述新版本代码产物和所述老版本代码产物中不一致的代码,以进行人为干预测试;
第五输出子模块1410,用于接收人为干预测试失败指令,所述人为干预测试失败指令指示人为干预测试不通过,则输出所述安全更新失败指示信息,所述安全更新失败指示信息指示人为干预测试不通过。
在一个实施例中,如图7所示,所述确定模块14,还包括:
第六输出子模块1411,用于接收人为干预测试成功指令,所述人为干预测试成功指令指示人为干预测试通过,则输出所述安全更新成功指令。
在一个实施例中,如图8所示,所述装置还包括:
接收模块15,用于接收基于所述导致所述原版本代码产物和所述新版本代码产物不相同的原因而修改后的项目源代码;
循环模块16,用于对所述修改后的项目源代码继续执行上述的更新步骤。
根据本公开实施例的第三方面,还提供一种更新装置,包括:
处理器;
用于存储处理器可执行指令的存储器;
其中,处理器被配置为:
使用已有版本的工程化工具对项目源代码进行打包构建,以获取原版本代码产物;
安装新版本工程化工具;
使用新版本的工程化工具对项目源代码进行打包构建,以获取新版本代码产物;
根据所述原版本代码产物的实现功能和所述新版本代码产物的实现功能是否一致确定是否更新成功。
上述处理器还可被配置为:
在一个实施例中,所述根据所述原版本代码产物的实现功能和所述新版本代码产物的实现功能是否一致确定是否更新成功,包括:
检测所述原版本代码产物和所述新版本代码产物是否相同;
若所述原版本代码产物和所述新版本代码产物相同,则使用所述新版本工程化工具替换所述已有版本的工程化工具,并输出安全更新成功指令;
若所述原版本代码产物和所述新版本代码产物不相同,运行项目单元测试;
若所述项目单元测试不通过,则记录测试不通过的案例;
输出所述安全更新失败指示信息,所述安全更新失败指示信息指示所述项目单元测试不通过,所述安全更新失败指示信息中还包括所述案例;
若所述项目单元测试通过,则在所述新版本代码产物和所述老版本代码产物中分别自动化进行相同行为路径的模拟,检测所述新版本代码产物和所述老版本代码产物对应的相同行为路径的表现是否一致;
若不一致,则记录不一致的行为路径;
输出所述安全更新失败指示信息,所述安全更新失败指示信息指示所述新版本代码产物和所述老版本代码产物对应的相同行为路径的表现不一致,所述安全更新失败指示信息中还包括所述不一致的行为路径;
若一致,则对比所述新版本代码产物和所述老版本代码产物,将输出所述新版本代码产物和所述老版本代码产物中不一致的代码,以进行人为干预测试;
接收人为干预测试失败指令,所述人为干预测试失败指令指示人为干预测试不通过,则输出所述安全更新失败指示信息,所述安全更新失败指示信息指示人为干预测试不通过。
在一个实施例中,所述处理器还可被配置:
接收人为干预测试成功指令,所述人为干预测试成功指令指示人为干预测试通过,则输出所述安全更新成功指令。
在一个实施例中,所述输出安全更新失败指示信息之后,所述处理器还可被配置:
接收基于所述导致所述原版本代码产物和所述新版本代码产物不相同的原因而修改后的项目源代码;
对所述修改后的项目源代码继续执行上述的更新方法。
关于上述实施例中的装置,其中各个模块执行操作的具体方式已经在有关该方法的实施例中进行了详细描述,此处将不做详细阐述说明。
图9是根据一示例性实施例示出的一种用于更新装置90的框图。例如,装置90可以被提供为一服务器。装置90包括处理组件902,其进一步包括一个或多个处理器,以及由存储器903所代表的存储器资源,用于存储可由处理组件902的执行的指令,例如应用程序。存储器903中存储的应用程序可以包括一个或一个以上的每一个对应于一组指令的模块。此外,处理组件902被配置为执行指令,以执行上述方法。
装置90还可以包括一个电源组件906被配置为执行装置90的电源管理,一个有线或无线网络接口905被配置为将装置90连接到网络,和一个输入输出(I/O)接口908。装置90可以操作基于存储在存储器903的操作系统,例如Windows ServerTM,Mac OS XTM,UnixTM,LinuxTM,FreeBSDTM或类似。
一种非临时性计算机可读存储介质,当所述存储介质中的指令由装置90的处理器执行时,使得装置90能够执行上述的更新方法,所述方法包括:
使用已有版本的工程化工具对项目源代码进行打包构建,以获取原版本代码产物;
安装新版本工程化工具;
使用新版本的工程化工具对项目源代码进行打包构建,以获取新版本代码产物;
根据所述原版本代码产物的实现功能和所述新版本代码产物的实现功能是否一致确定是否更新成功。
在一个实施例中,所述根据所述原版本代码产物的实现功能和所述新版本代码产物的实现功能是否一致确定是否更新成功,包括:
检测所述原版本代码产物和所述新版本代码产物是否相同;
若所述原版本代码产物和所述新版本代码产物相同,则使用所述新版本工程化工具替换所述已有版本的工程化工具,并输出安全更新成功指令;
若所述原版本代码产物和所述新版本代码产物不相同,运行项目单元测试;
若所述项目单元测试不通过,则记录测试不通过的案例;
输出所述安全更新失败指示信息,所述安全更新失败指示信息指示所述项目单元测试不通过,所述安全更新失败指示信息中还包括所述案例;
若所述项目单元测试通过,则在所述新版本代码产物和所述老版本代码产物中分别自动化进行相同行为路径的模拟,检测所述新版本代码产物和所述老版本代码产物对应的相同行为路径的表现是否一致;
若不一致,则记录不一致的行为路径;
输出所述安全更新失败指示信息,所述安全更新失败指示信息指示所述新版本代码产物和所述老版本代码产物对应的相同行为路径的表现不一致,所述安全更新失败指示信息中还包括所述不一致的行为路径;
若一致,则对比所述新版本代码产物和所述老版本代码产物,将输出所述新版本代码产物和所述老版本代码产物中不一致的代码,以进行人为干预测试;
接收人为干预测试失败指令,所述人为干预测试失败指令指示人为干预测试不通过,则输出所述安全更新失败指示信息,所述安全更新失败指示信息指示人为干预测试不通过。
在一个实施例中,所述方法还包括:
接收人为干预测试成功指令,所述人为干预测试成功指令指示人为干预测试通过,则输出所述安全更新成功指令。
在一个实施例中,所述输出安全更新失败指示信息之后,所述方法还包括:
接收基于所述导致所述原版本代码产物和所述新版本代码产物不相同的原因而修改后的项目源代码;
对所述修改后的项目源代码继续执行上述的更新方法。
本领域技术人员在考虑说明书及实践这里公开的公开后,将容易想到本公开的其它实施方案。本申请旨在涵盖本公开的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本公开的一般性原理并包括本公开未公开的本技术领域中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本公开的真正范围和精神由下面的权利要求指出。
应当理解的是,本公开并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。本公开的范围仅由所附的权利要求来限制。
- 乐曲数据库的更新系统、发送装置、更新方法和发送方法以及具有乐曲数据库的更新功能的终端装置及其乐曲数据库的更新方法
- 车载更新装置、更新处理程序、程序的更新方法及车载更新系统