CN110780897A - 一种代码变更方法以及装置 - Google Patents
一种代码变更方法以及装置 Download PDFInfo
- Publication number
- CN110780897A CN110780897A CN201910877510.XA CN201910877510A CN110780897A CN 110780897 A CN110780897 A CN 110780897A CN 201910877510 A CN201910877510 A CN 201910877510A CN 110780897 A CN110780897 A CN 110780897A
- Authority
- CN
- China
- Prior art keywords
- changer
- change
- software code
- changers
- changed
- 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.)
- Granted
Links
- 238000000034 method Methods 0.000 title claims abstract description 99
- 230000008859 change Effects 0.000 claims abstract description 680
- 230000003111 delayed effect Effects 0.000 claims description 52
- 230000004075 alteration Effects 0.000 claims description 47
- 238000004458 analytical method Methods 0.000 claims description 28
- 230000008676 import Effects 0.000 claims description 24
- 238000012217 deletion Methods 0.000 claims description 10
- 230000037430 deletion Effects 0.000 claims description 10
- 238000004590 computer program Methods 0.000 claims description 6
- 238000012545 processing Methods 0.000 claims description 6
- 230000006870 function Effects 0.000 description 42
- 230000004048 modification Effects 0.000 description 37
- 238000012986 modification Methods 0.000 description 37
- 238000004891 communication Methods 0.000 description 20
- 238000010586 diagram Methods 0.000 description 13
- 230000008569 process Effects 0.000 description 7
- 238000013461 design Methods 0.000 description 6
- 102100035971 Molybdopterin molybdenumtransferase Human genes 0.000 description 5
- 101710119577 Molybdopterin molybdenumtransferase Proteins 0.000 description 5
- 230000008878 coupling Effects 0.000 description 3
- 238000010168 coupling process Methods 0.000 description 3
- 238000005859 coupling reaction Methods 0.000 description 3
- 239000003607 modifier Substances 0.000 description 3
- 239000010754 BS 2869 Class F Substances 0.000 description 2
- 238000002715 modification method Methods 0.000 description 2
- 230000000717 retained effect Effects 0.000 description 2
- 238000006467 substitution reaction Methods 0.000 description 2
- 238000009825 accumulation Methods 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 230000003247 decreasing effect Effects 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 238000007373 indentation Methods 0.000 description 1
- 238000012423 maintenance Methods 0.000 description 1
- 238000004088 simulation Methods 0.000 description 1
- 239000007787 solid Substances 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/70—Software maintenance or management
- G06F8/71—Version control; Configuration management
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/60—Software deployment
- G06F8/65—Updates
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/70—Software maintenance or management
- G06F8/72—Code refactoring
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computer Security & Cryptography (AREA)
- Stored Programmes (AREA)
Abstract
本申请提供了一种代码变更方法以及装置。变更装置根据用户发送的指令确定待变更的软件代码以及变更配置信息,并根据变更配置信息从保存的变更器中选择需要调用的多个变更器,并确定多个变更器的调用顺序以及每个变更器设置属性。变更装置可以按照调用顺序依次调用多个变更器,并且基于每个变更器的属性,对变更器输入的软件代码进行变更。该变更装置能够根据用户的需求,灵活的调用多个不同的变更器。
Description
本申请要求在2019年8月26日提交中华人民共和国知识产权局、申请号为201910792544.9、发明名称为“一种代码变更方法以及装置”的中国专利申请的优先权,其全部内容通过引用结合在本申请中。
技术领域
本申请涉及计算机技术领域,尤其涉及一种代码变更方法以及装置。
背景技术
在软件开发与维护过程中,有许多场景需要对软件代码进行变更,比如库升级后的软件代码更新或者对软件代码的格式进行变更。每个场景中对软件代码的变更也存在多种不同的变更类型。例如,在库升级的场景中,某个库函数的形式参数发生变化,此时需要对软件代码中该库函数的所有引用点的实际参数作更改,或者某个库函数的名称发生变化,此时需要将软件代码中该库函数的名称更改为变化后的库函数名称等等。又例如,对软件代码的格式进行更改的场景中,可能需要修改软件代码的缩进方式、对齐方式等。
目前对软件代码的变更方式,仅是支持单一变更,即在对软件代码变更时,只能进行一种变更类型的变更。目前还没有一种能够对软件代码同时进行多种变更类型的变更方式。
发明内容
本申请提供一种代码变更方法,以提供一种高效的对软件代码同时进行多种变更类型的变更方式。
第一方面,本申请提供了一种代码变更方法,该方法可以由变更装置执行,该变更装置可以获取用户输入的软件代码以及软件代码的变更配置信息,其中,该变更配置信息包括待变更的代码元素、对待变更的代码元素的变更方式以及待变更的代码元素对应的变更后的代码元素。该变更装置可以根据该变更配置信息从保存的变更器中选择需要调用的多个变更器,并确定该多个变更器的调用顺序。变更装置可以按照调用顺序依次调用该多个变更器,对软件代码进行变更,其中,每一个变更器能够对软件代码中的一种待变更的代码元素进行变更,所述多个变更器中第一个被调用的变更器的输入为所述软件代码,被所述第一个被调用的变更器变更后的软件代码被输入所述多个变更器中的另一个变更器。
通过上述方法,变更装置能够根据用户的需求,灵活的调用多个不同的变更器,能够同时对软件代码进行多种不同的变更。
在一种可能的实现方式中,当变更装置先确定选择的多个变更器中是否存在冲突的变更器,其中冲突的变更器是指其中一个变更器先进行变更,导致后续变更器对该变更器输出的软件代码进行变更时,会无法进行正常的变更。若不存在冲突的变更器,变更装置可以采用并行变更模式,同时调用该多个变更器对该软件代码进行变更,之后在将每个变更器的变更内容进行合并。
若存在冲突的变更器,变更装置则确定该多个变更器采用串行变更模式或部分串行部分并行变更模式对软件代码进行变更。
通过上述方法,变更装置可以灵活的选择不同的变更模式对软件代码进行变更,使得选择的变更模式更能适用于软件代码,变更的方式更加高效。
在一种可能的实现方式中,若该多个变更器中的至少一个变更器包括直接变更内容和延迟变更内容;变更装置在按照多个变更器的调用顺序依次调用多个变更器,对软件代码进行变更时,当调用至少一个变更器时,可以将直接变更内容应用在输入到该至少一个变更器的软件代码中;将延迟变更内容在所述多个变更器中最后一个变更器调用结束后应用。
在一种可能的实现方式中,在确定了调用顺序之后,还可以对每个变更器设置属性,变更器的属性用于描述该变更器对软件代码中的一些行的变更是否保留或删除。
通过上述方法,变更装置在调用每个变更器时,区分每个变更器的变更内容中的直接变更内容和可能存在变更冲突的延迟变更内容,将多个变更器产生的延迟变更内容统一在最后应用在软件代码上,能够有效避免不同变更器在调用过程中直接进行变更引起的冲突。
在一种可能的实现方式中,变更装置可以在依次调用所述多个变更器之前,先基于所述多个变更器的调用顺序确定每个变更器的属性,每个变更器的属性用于描述每个变更器对软件代码中的目标行的变更的处理。当然,变更装置也可以不确定每个变更器的属性。
通过上述方法,变更装置能够为变更器设置属性,以便变更器在后续被调用时,能够较为准确的确定对软件代码中一些目标行的变更是否保留或删除。
在一种可能的实现方式中,变更配置信息中可以还包括每个变更器的属性,每个变更器的属性用于描述每个变更器对所述软件代码中的目标行的变更的处理。
通过上述方法,用户可以自行对变更器的属性进行配置,给予用户更多的主动权,有利于提高软件代码变更的灵活性。
在一种可能的实现方式中,变更装置在确定至少一个变更器的直接变更内容时,可以直接根据至少一个变更器的变更操作,来确定至少一个变更器的直接变更内容。也可以根据至少一个变更器的属性,确定至少一个变更器的直接变更内容。
通过上述方法,变更装置基于变更器设置属性,能够较为准确的确定对软件代码中一些目标行的变更是否保留或删除,进一步确定变更器的直接变更内容。
在一种可能的设计中,变更装置在根据至少一个变更器的属性确定至少一个变更器的直接变更内容时,需要确定至少一个变更器的第一属性,如合并变更属性以及覆盖变更属性,该第一属性描述至少一个变更器对软件代码的第一目标行的变更保留或删除,第一目标行为至少一个变更器和至少一个变更器之前被调用变更器对软件代码变更的相同的一行或多行。根据至少一个变更器的第一属性,确定至少一个变更器需要保留的变更,进而确定至少一个变更器的直接变更内容。
通过上述方法,变更装置可以基于变更器的属性较为便捷的确定需要删除或保留的变更,进而能够确定最终实际执行的直接变更内容。
在一种可能的设计中,变更装置在根据至少一个变更器的属性确定至少一个变更器的直接变更内容时,可以只基于至少一个变更器的第一属性来确定至少一个变更器的直接变更内容,还可以同时参照至少一个变更器的第一属性和第二属性来确定至少一个变更器的直接变更内容,也可以只基于至少一个变更器的第二属性来确定至少一个变更器的直接变更内容,其中,至少一个变更器的第二属性(如忽略变更属性)描述至少一个变更器对软件代码的第二目标行的变更保留或删除,第二目标行为至少一个变更器和至少一个变更器之前被调用变更器对软件代码变更的不同的一行或多行。
通过上述方法,变更装置可以基于变更器的属性较为便捷的确定需要删除或保留的变更,进而能够确定最终实际执行的直接变更内容。
在一种可能的设计中,变更装置在确定该变更器对输入到该变更器的软件代码执行变更时存在延迟变更内容时,可以预先设置一种或多种延迟变更内容,根据预设的延迟变更内容从该变更器对输入到该变更器的软件代码执行变更时的变更内容中确定延迟变更内容。
通过上述方法,变更装置可以基于预设的信息确定延迟变更内容,能够较为快捷的确定出需要保留到最后再进行变更的延迟变更内容。
在一种可能的设计中,变更装置在调用第一个变更器时,第一个被调用的变更器可以对软件代码进行分析,产生分析结果,该分析结果中可以包括软件代码中所存在的所有代码元素的位置,变更装置可以保存该分析结果,以便后续在调用其他变更器时,其他变更器可以调用该分析结果,对输入到其他变更器的软件代码进行变更。
通过上述方法,对软件代码的分析操作只需要进行一次,后续变更器只需调用之前变更器产生的分析结果,不需要重复分析,能够有效节约时间,提高软件代码的变更效率。
在一种可能的设计中,变更装置对软件代码进行变更之后,还能显示最终的变更后的软件代码,并显示多个变更器对软件代码进行变更的变更位置以及变更的内容。
通过上述方法,变更装置能够较为直观的显示出变更后的软件代码,还能够显示所进行的变更,便于用户查看。
第二方面,本申请实施例还提供了一种变更装置,有益效果可以参见第一方面的描述此处不再赘述。该装置具有实现上述第一方面的方法实例中行为的功能。所述功能可以通过硬件实现,也可以通过硬件执行相应的软件实现。所述硬件或软件包括一个或多个与上述功能相对应的模块。在一个可能的设计中,所述装置的结构中包括导入模块、配置模块、变更器库以及变更模块,这些模块可以执行上述第一方面方法示例中的相应功能,具体参见方法示例中的详细描述,此处不做赘述。
第三方面,本申请实施例还提供了一种计算设备,所述计算设备包括处理器和存储器,还可以包括通信接口。可选的还包括显示屏。所述处理器执行所述存储器中的程序指令执行上述第一方面或第一方面任一可能的实现方式提供的方法。所述存储器与所述处理器耦合,其保存确定交通流量的过程中必要的程序指令和数据。所述通信接口,用于与其他设备进行通信,如接收软件代码以及变更配置信息。所述显示屏用于在所述处理器的触发下向用户显示信息。
第四方面,本申请提供了一种计算设备集群,该计算设备集群包括至少一个计算设备。每个计算设备包括存储器和处理器。至少一个计算设备的处理器用于访问所述存储器中的代码以执行第一方面或第一方面的任意一种可能的实现方式提供的方法。
第五方面,本申请提供了一种非瞬态的可读存储介质,所述非瞬态的可读存储介质被计算设备执行时,所述计算设备执行前述第一方面或第一方面的任意可能的实现方式中提供的方法。该存储介质中存储了程序。该存储介质包括但不限于易失性存储器,例如随机访问存储器,非易失性存储器,例如快闪存储器、硬盘(hard disk drive,HDD)、固态硬盘(solid state drive,SSD)。
第六方面,本申请提供了一种计算机程序产品,所述计算机程序产品包括计算机指令,在被计算设备执行时,所述计算设备执行前述第一方面或第一方面的任意可能的实现方式中提供的方法。该计算机程序产品可以为一个软件安装包,在需要使用前述第一方面或第一方面的任意可能的实现方式中提供的方法的情况下,可以下载该计算机程序产品并在计算设备上执行该计算机程序产品。
第七方面,本申请还提供一种计算机芯片,芯片与存储器相连,芯片用于读取并执行存储器中存储的软件程序,执行前述第一方面或第一方面的任意可能的实现方式中提供的方法。
附图说明
图1A为本申请提供的一种代码元素的关系示意图;
图1B为本申请提供的一种部分串行部分并行模式的示意图;
图1C为本申请提供的另一种部分串行部分并行模式的示意图;
图2A为本申请提供的一种变更装置的结构示意图。
图2B为本申请提供的一种计算设备集群的结构示意图;
图2C为本申请提供的一种***架构示意图;
图3为本申请提供的一种支持多变更的软件代码变更的方法示意图;
图4为本申请提供的一种提示用户输入待变更的软件代码的显示界面的示意图;
图5为本申请提供的一种变更模块140采用串行变更模式对待变更的软件代码进行变更方法示意图;
图6为本申请提供的一种变更模块140采用串行变更模式对待变更的软件代码进行变更流程示意图;
图7为本申请提供的一种生成变更器的中间变更实例集合的示意图;
图8为本申请提供的一种更新变更器的中间变更实例集合的示意图;
图9为本申请提供的一种显示变更后的软件代码的界面的示意图;
图10为本申请提供的另一种显示变更后的软件代码的界面的示意图。
具体实施方式
在对本申请实施例提供的一种支持多变更的软件代码变更方法进行说明之前,先对本申请实施例涉及的概念进行说明:
(1)、软件代码,可执行代码,库,构建***。
软件代码是程序员利用开发工具所支持的语言编写而成的。软件代码由一组具有指向意义的数字或字母构成。软件代码中包括多行代码,每行设置一个行号,通过行号标识该行代码。
软件代码并不能在计算机上直接执行,需要通过构建***根据构建文件中记录的配置信息调用编译器将软件代码转换为机器能够识别的二进制代码,该二进制代码也称为可执行代码。
库(library)是用于编写软件代码是可调用的代码集合,库中包括多个固定配置的代码,在编写软件程序时可以直接调用该库中的代码。库可以由第三方提供的,通过引用(调用)的方式嵌入软件代码中,提高代码的复用和开发效率。
构建***(build system)是用于从软件代码生成机器识别的可执行程序的工具。为了构建目标,构建***需要知道一些配置信息,如工具链组件的位置、软件代码的位置、库依赖、库的位置、库的版本等。这些配置信息通常在构建***能够读取的构建文件中记录。
(2)、类,内部类,包,函数/方法,域/变量。
软件代码在编写过程中需要满足一定编写规范,如面向对象程序编程(object-oriented programming,OOP)、面向过程程序编程(procedure-oriented programming,POP)等。面向对象程序编程的程序语言有C++,Java,C#等,面向过程程序编程的程序语言有fortran,C等。
采用一定编写规范所编写而成的软件代码中可以包括类、包、函数/方法、域/变量等代码元素。不同种类的代码元素之间关系可以参见图1A。其中,包中可以包括一个或多个类,每个类中可以包括内部类、函数/方法;函数/方法中可以调用域/变量。内部类与类相似,内部类中也可以包括函数/方法。
类(class)在面向对象编程中是一种面向对象计算机编程语言的构造,描述了所创建的对象共同的方法和域。
函数/方法(function/method)指的是类中的一种子程序。一个方法通常以一系列的语句所组成,并能够完成一个功能。在面向对象编程的编写规范中称为方法,在面向过程编程的编写规范中称为函数。
域/变量(field/variable)存储一些数据,如整数与字符,字符串、散列表、指针等。
包(package)用来说明某段程序的路径结构。一个包通常包含多个类,类引用的时候需要在包导入(import)区填写完整的包路径。
内部类(innerclass)为包含在类中的类。
(3)、并行变更模式、串行变更模式以及部分串行或部分并行模式。
并行变更模式是指多个变更器同时对待变更的软件代码进行变更,之后将每个变更器对待变更的软件代码进行变更所产生的变更后的软件代码进行合并,产生最终的变更后的软件代码。
串行变更模式是指多个变更器依次对待变更的软件代码进行变更,每个变更器的输入为前一个变更器的输出,第一调用的变更器输入为待变更的软件代码。
部分串行或部分并行模式是并行变更模式与串行变更模式的结合,多个变更器中存在需要串行的变更器,也存在需要并行的变更器。部分串行或部分并行模式可以分为以并行模式为主的串并模式和以串行模式为主的串并模式。
如图1B所示,以并行模式为主的串并模式中可以分为多个变更器组合,每个变更器组合中存在一个或多个变更器。多个变更器组合同时对待变更的软件代码进行变更,之后将每个变更器组合对待变更的软件代码进行变更所产生的变更后的软件代码进行合并。多个变更器组合内部的多个变更器可以采用并行变更模式,也可以采用串行变更模式。
如图1C所示,以串行模式为主的串并模式中可以分为多个变更器组合,每个变更器组合中存在一个或多个变更器。多个变更器组合依次对待变更的软件代码进行变更,每个变更器组合的输入为前一个变更器组合的输出,第一调用的变更器组合输入为待变更的软件代码。多个变更器组合内部的多个变更器可以采用并行变更模式,也可以采用串行变更模式。
需要说明的是,上述两种部分串行或部分并行模式仅是举例,凡是存在多个串行调用的变更器以及多个并行调用的变更器的变更模式均属于部分串行或部分并行模式。
(4)、变更器,子变更器。
每个变更器用于对待变更的软件代码执行一种类型的变更,可以对待变更的软件代码中的一种代码元素(如类、方法、域等)进行变更,不同变更器所变更的代码元素不同。
此处列举一些在Java程序中库升级场景下常见的变更器:
a.类名变更器。在库升级场景下,当某个类的类名需要变更,该变更器可以对软件代码中该类的类名改为另一个类的类名。
b.方法名变更器。在库升级场景下,某个类中的某个方法的方法名需要变更,该变更器可以对软件代码中将类下的该方法的方法名改为该类中另一个方法的方法名。
c.域名变更器。在库升级场景下,某个类中的某个域的名称需要变更,该变更器可以对软件代码中将该类中的该域的名称改为该类中另一个域的名称。
d.库版本变更器。在库升级场景下,库的版本需要变更,该变更器可以对软件代码中将构建文件中该库的版本改为该库的另一个版本。
e.包名变更器。在库升级场景下,当某个包的包名需要变更,该变更器可以对软件代码中将该类的所有引用的包名改为另一个包的包名。
f.包删除变更器。在库升级场景下,当某个包需要删除,该变更器找到软件代码中该包的所有引用位置,并输出该包的所有引用位置。
g.类删除变更器。在库升级场景下,当某个类需要删除,该变更器找到软件代码中该类的所有引用位置,并输出该类的所有引用位置。
k.域删除变更器。在库升级场景下,当某个域需要删除,该变更器找到软件代码中该域的所有引用位置,并输出该域的所有引用位置。
l.方法删除变更器。在库升级场景下,当某个方法需要删除,该变更器找到软件代码中该方法的所有引用位置并提示给用户。
其中,三种名变更器(类名变更器、方法名变更器以及域名变更器)包括两个子变更器,每个子变更器用于对软件代码中特定区(如引用区以及包导入区)进行更改。以类名变更器为例,类名变更器可以分拆为类引用子变更器和包应用变更器。
其中,类引用子变更器。在库升级场景下,当某个类的类名需要变更,该子变更器可以对软件代码中将该类的所有引用的类名(也即引用区域内的该类的类名)改为另一个类的类名。
包导入子变更器。在库升级场景下,当某个类的类名需要变更,该子变更器可以对软件代码中将包导入区中该类的类名改为另一个类的类名。
变更器或子变更器可以理解为一个软件装置,该软件装置包括输入和输出,输入为需要变更的软件代码,输出为变更后的软件代码。
(5)、变更器的变更内容、直接变更内容以及延迟变更内容。
每个变更器在对软件代码进行变更时,通常是对该软件代码中的部分字段或一些格式进行变更。变更器对该软件代码进行变更时,需要变更的部分称为变更器的变更内容。
当多个变更器采用串行变更的模式对待变更的代码进行变更时,变更器的变更内容可以包括直接变更内容以及延迟变更内容。变更器的变更内容也可以只包括直接变更内容或延迟变更内容。
其中,直接变更内容是指可以直接对软件代码进行变更的部分,该部分的变更不会对后续变更器的变更产生影响。
相反的,延迟变更内容是指如果直接对软件代码进行变更,会对后续变更器的变更产生影响的部分。也就说,如果该部分内容进行变更,后续变更器在基于当前变更器变更后的软件代码执行变更时,会使得后续变更器不能执行正常的变更操作。延迟变更内容的类型可以使预先设置好的,当调用某一变更器对软件代码进行变更时,可以基于预设的延迟变更内容的类型,根据该变更器所进行的变更类型,确定该变更器的变更内容中是否存在延迟变更内容。
下面列举两种在库升级场景下两种类名变更器中的延迟变更内容,分别为内部类变更内容以及类拆分变更内容。
1、内部类变更内容。
若需要将待变更的软件代码中的第一类变更为第二类,且第一类中的一个或多个内部类需要变更到其他类中,其他类为除第一类外的类。这样,变更器将包导入区的第一类变更为第二类所产生的变更内容、以及将包导入区的第一类中的一个或多个内部类需要变更到其他类所产生的变更内容均可以作为变更器的内部类变更内容。
举例来说,当类A中存在多个内部类,分别为内部类B、内部类C以及内部类D,当需要将类A变更为类ZZ,且将内部类B、内部类C以及内部类D中的一个或多个变更到其他类中,如将内部类B变更到类ZZ中,内部类C变更到类F、内部类D变更到类Q。
例如,变更器1用于将类A变更为类ZZ,变更器2用于将内部类B变更到类ZZ中,变更器3用于将内部类C变更到类F中,变更器4用于将内部类D变更到类Q中。
若变更器1、变更器2、变更器3以及变更器4中的任一变更器对待变更的软件代码中的所有包导入(import)语句处涉及的内部类或类A进行变更,则会导致其他变更器在后续进行变更时,无法检测到需要变更的内部类的信息。例如,当变更器1先行将待变更的软件代码中的所有import语句处涉及的类A变更为类ZZ,当之后变更器2、变更器3以及变更器4对变更器1变更后的软件代码继续变更时,则会由于在变更器1变更后的软件代码的包导入区中找不到类A,而无法查询到类A中的内部类,进而无法进行变更。
故而,变更器1、变更器2、变更器3以及变更器4针对包导入区的变更内容均属于内部类变更内容。
2、类拆分变更内容。
若需要将待变更的软件代码中的第一类变更为第二类,且第一类中的函数、方法或域需迁移至其他类。这样,将包导入区的第一类变更为第二类所产生的变更内容、以及将包导入区的第一类中的函数、方法或域需要变更到其他类所产生的变更内容均可以作为类拆分变更内容。
举例来说,当类A中存在域E和方法F,当需要将类A变更为类X,并将域E和方法F变更到其他类中,如将域E变更到类Y中,方法F变更到类Z。
例如,变更器5用于将类A变更为类X,变更器6用于将域E变更到类Y中,变更器7用于将方法F变更到类X中。
若变更器5、变更器6、变更器7中的任一变更器将待变更的软件代码中的所有包导入import语句处涉及的函数E、方法F或类A进行变更,则会导致其他变更器在后续进行变更时,无法检测到需要变更的内部类的信息。例如,当变更器5先行将待变更的软件代码中的所有import语句处涉及的类A变更为类X,当之后变更器6、以及变更器7对变更器1变更后的软件代码继续变更时,则会由于在变更器5变更后的软件代码的包导入区中找不到类A,无法查询到类A中的域E和方法F,进而无法进行变更。
故而,变更器5、变更器6、以及变更器7针对包导入区的变更内容均属于类拆分变更内容。
(6)、存在冲突的两个变更器。
存在冲突的两个变更器是指当这两个变更器对同一个软件代码进行变更,其中一个变更器的变更内容会对另一个变更器的变更产生影响。
在本申请实施例中,变更装置可以预先配置一个变更器集合,该变更器集合中包括一个或多个变更器,该变更器集合中的任意两个变更器均不存在冲突,当变更装置调用该变更集合中的变更器对待变更的软件代码进行变更时,可以采用并行变更模式调用该变更集合中的变更器对待变更的软件代码进行变更。
本申请实施例并不限定该变更器集合的配置方式,可以人工配置的,也可以是通过模拟仿真后,将能够并行调用的变更器放置在该变更器集合中。
(7)、原始变更实例集合、中间变更实例集合、目标变更实例集合。
变更器的原始变更实例集合中包括一个或多个变更实例,原始变更实例集合中的每个原始变更实例记录了变更器输入的软件代码(也就是该变更器的前一个变更器输出的软件代码)需要变更的一行以及该行变更后的内容。
变更器的中间变更实例集合中包括一个或多个变更实例,中间变更实例集合中的每个变更实例记录了该变更器对待变更的软件代码需要变更的一行以及该行变更后的内容。
原始变更实例集合和中间变更实例集合的区别在于作为基准的软件代码不同,原始变更实例集合是以该变更器输入的软件代码为基准的,中间变更实例集合是以待变更的软件代码为基准的,是以变更装置最初确定的待变更的软件代码为基准的。
当采用串行变更模式调用多个变更器对待变更的软件代码时,第一个被调用的变更器的原始变更实例集合和中间变更实例集合是相同的,第二个被调用的变更器的原始变更实例集合是以第一个调用的变更器输出的软件代码为基准的,第二个被调用的变更器的中间变更实例集合是以待变更的软件代码为基准的。
变更器的中间变更实例集合中的一个变更实例与变更器的原始变更实例集合的一个变更实例对应,变更器的中间变更实例集合中一个变更实例是基于变更器的原始变更实例集合种对应的一个变更实例生成的,根据该变更器之前调用的变更器的中间变更实例集合确定,具体的确定方式,可以参见下文实施例中的描述。
变更器的目标变更实例集合是消除了变更器之间的冲突之后所产生的,目标变更实例包括一个或多个变更实例,目标变更实例集合中的每个变更实例记录了变更器输入的软件代码(也就是该变更器的前一个变更器输出的软件代码)需要变更的一行以及该行变更后的内容。
原始变更实例集合和目标变更实例集合中包括的变更实例可能相同,目标变更实例集合也可以只包括原始变更实例集合中的部分变更实例。变更器的目标变更实例集合中的变更实例记录了该变更器在对输入的软件代码进行变更时,实际执行变更时所产生的直接变更内容。变更器的原始变更实例集合中的变更实例记录了该变更器在对输入的软件代码进行变更时,预计需要执行变更时所产生的变更内容,由于在消除变更器之间的冲突的过程中,会删除一些变更实例,故而导致目标变更实例集合中只能包括原始变更实例集合中的部分变更实例。
在本申请实施例中,变更装置需要对每个变更器维持一个中间变更实例集合,基于变更器的中间变更实例集合,变更装置能够利用变更器的属性消除了变更器之间的冲突,确定变更器的中间变更实例集合中需要删除的变更实例,变更装置可以将消除了变更器之间的冲突后、所需调用的变更器中间变更实例集合(若存在需要删除的变更实例,消除了变更器之间的冲突后,变更器的中间变更实例集合为已删除的变更实例的中间变更实例集合)汇总,汇总后的中间变更实例集合(为方便说明可以简称为总变更实例集合)保存起来,并通过显示屏显示给用户。
换句话说,总变更实例集合包括多个变更实例,是以待变更的软件代码为基准的,记录了变更装置在采用串行变更模式调用多个变更器时,对待变更的软件代码实际执行变更时所产生的变更内容。
当然,变更装置利用变更器的属性消除了变更器之间的冲突,删除掉变更器的中间变更实例集合中的一个或多个变更实例时,也可以在变更器的原始变更实例集合中删除对应的一个或多个变更实例,产生该变更器的目标变更实例集合。
由于软件代码变更的场景众多,本申请中以库升级的场景为例进行阐述。以下列举了两种库升级场景中的变更类型:
变更类型1、当某个库函数的形式参数发生改变时,需要对软件代码中该库函数所有的调用点的实际参数作更改。这种类型的变更需要对待变更的软件代码中该库函数调用的实际参数均进行变更。
变更类型2、当某个库函数名称发生改变时,需要将软件代码中一个库函数名称更改为另一个库函数名称。这种类型的变更需要对待变更的软件代码中所有出现的特定的库函数名称改为另一个库函数名称。
目前,对软件代码进行变更时,一次执行一种变更类型的变更。若需要执行多种变更类型的变更,只能分别对软件代码执行不同的变更类型的变更,导致软件代码的变更方式较不灵活。
为此本申请实施例提供了一种支持多变更的软件代码变更方法,在本申请实施例中,变更装置可以根据用户对待变更的软件代码的变更配置信息选择变更器、设置变更器的调用顺序以及各个变更器的属性,之后,变更装置按照设置的调用顺序,依次调用各个变更器进行变更,其中,第一个被调用的变更器的输入为待变更的软件代码,除第一个被调用的变更器外的任一变更器的输入为前一个变更器的输出。
采用本申请实施例的方式,变更装置能够根据用户的变更配置信息,调用多个不同的变更器,在待变更的软件代码上实现多种不同类型的变更,能够灵活的组建多个不同的变更器对待变更的软件代码进行变更,有利于提高软件代码的变更效率。
本申请实施例提供的一种支持多变更的软件代码变更方法由变更装置执行,本申请实施例并不限定变更装置的部署位置,变更装置可以部署在云端,如变更装置可以是云端服务器;变更装置也可以是创建在云端服务器中的虚拟机;变更装置还可以是部署在云端服务器或者虚拟机上的软件装置,该软件装置用于对待变更的软件代码进行多种不同类型的变更,该软件装置可以分布式地部署在多个服务器上、或者分布式地部署在多个虚拟机上、或者分布式地部署在虚拟机和服务器上。
图2A所示,为本申请实施例提供的一种变更装置100,该变更装置包括导入模块110、变更器库120、配置模块130、以及变更模块140。
导入模块110用于确定待变更的软件代码,以及用户对该待变更的软件代码的变更配置信息。
变更器库120中存储有多个变更器,其中,部分变更器(例如名变更器)包括一个或多个子变更器,每个变更器能够执行一种代码元素的变更。
配置模块130可以根据变更配置信息从变更器库120中选择变更器,并配置调用模式,如选择串行变更模式或并行变更模式,还可以配置每个变更器的属性。
配置模块130在选择了调用模式后,变更模块140可以基于配置模块130选择的调用模式,调用配置模块130选择的变更器,对该待变更的软件代码进行变更。
变更模块140在调用配置模块130选择的变更器,对该待变更的软件代码进行变更的过程中,每个变更器可以对输入该变更器的软件代码进行变更。
变更装置100中包括的各个模块可以为软件模块。
下面对本申请实施例所适用于的***架构进行说明,如图2B所示,为本申请实施例提供的一种计算机集群,该计算机集群中包括至少一个计算设备100,每个计算设备100间通过通信网络建立通信通路。
每个计算设备100中包括总线101、处理器102、通信接口103以及存储器104。可选的,计算设备10中还可以包括显示屏105。处理器102、存储器104和通信接口103之间通过总线101通信。
其中,处理器102可以由一个或者多个通用处理器构成,例如中央处理器(centralprocessing unit,CPU),或者CPU和硬件芯片的组合。上述硬件芯片可以是专用集成电路(application-specific integrated circuit,ASIC)、可编程逻辑器件(programmablelogic device,PLD)或其组合。上述PLD可以是复杂可编程逻辑器件(complexprogrammablelogic device,CPLD)、现场可编程逻辑门阵列(field-programmable gate array,FPGA)、通用阵列逻辑(generic array logic,GAL)或其任意组合。
存储器104可以包括易失性存储器(volatile memory),例如随机存取存储器(random access memory,RAM)。存储器104还可以包括非易失性存储器(non-volatilememory,NVM),例如只读存储器(read-only memory,ROM),快闪存储器,硬盘(hard diskdrive,HDD)或固态硬盘(solid-state drive,SSD)。存储器104还可以包括上述种类的组合。
存储器104中存储存可执行代码,处理器102可以读取存储器104中的该可执行代码实现功能,还可以通过通信接口103与其他计算设备进行通信,处理器102还可以触发显示屏105向用户显示信息,如本申请实施例中如图4、9、10所示的界面中包括的信息。
在本申请实施例中,处理器102可以实现变更装置100的一个或多个模块(如导入模块110、变更器库120、配置模块130、以及变更模块140中的一个或多个模块)的功能,这种情况下,存储器104中存储有变更装置100的一个或多个模块(如导入模块110、变更器库120、配置模块130、以及变更模块140中的一个或多个模块)。
在本申请实施例中,多个计算设备10中的处理器101可以协调工作,执行本申请实施例提供的支持多变更的软件代码变更方法。
需要说明的是,当存储器104中存储有变更模块140时,该变更模块140中还包括缓存空间,该缓存空间位于存储器104中,该缓存空间可以用于存储第一个被调用的变更器对待变更的软件代码进行分析获得的分析结果,以及各个被调用的变更器的延迟变更内容。
如图2C所示,为本申请实施例提供的一种***架构,该***架构中包括客户端200和部署有变更装置的云端设备300,客户端200与云端设备300通过网络连接,该云端设备300位于云环境中,可以是部署在云数据中心中的服务器或者虚拟机,图2C中,仅是以该变更装置部署在一个云端设备300为例,作为一种可能的实施方式,该变更装置可以分布式地部署在多个云端设备300上。
如图2C所示,客户端200包括总线201、处理器202、通信接口203、存储器204。可选的包括客户端200还包括显示屏205。处理器202、存储器204和通信接口203之间通过总线201通信。其中,处理器202和存储器204的类型可以参见处理器102以及存储器104的相关说明,此处不再赘述。存储器204中存储存可执行代码,处理器202可以读取存储器204中的该可执行代码实现功能。处理器202还可以触发显示屏205向用户显示信息,如本申请实施例中如图4、9、10所示的界面中包括的信息。处理器202还可以通过通信接口203与云端设备进行通信。例如处理器202可以通过显示屏提示用于输入待变更的软件代码以及变更配置信息,并在用户的触发下,确定待变更的软件代码以及变更配置信息;通过通信接口203将待变更的软件代码以及变更配置信息反馈给云端设备300。
如图2C所示,云端设备300包括总线301、处理器302、通信接口303以及存储器304。处理器302、存储器304和通信接口303之间通过总线301通信。其中,处理器302和存储器304的类型可以参见处理器102以及存储器104的相关说明,此处不再赘述。存储器304中存储存可执行代码,处理器302可以读取存储器304中的该可执行代码实现功能,还可以通过通信接口303与客户端200进行通信。在本申请实施例中,参考图2B,可以由多个云端设备300的处理器302配合实现变更装置300的功能,这种情况下,存储器304中存储有变更装置300的导入模块130、变更器库120、配置模块130、以及变更模块140中的一个或多个模块。
需要说明的是,当存储器304中存储有变更模块140时,该变更模块140中还包括缓存空间,该缓存空间位于存储器304中,该缓存空间可以用于存储第一个被调用的变更器对待变更的软件代码进行分析获得的分析结果,以及各个被调用的变更器的延迟变更内容。
处理器302通过通信接口303从客户端200接收到待变更的软件代码以及变更配置信息后,可以调用存储器304中存储的模块实现本申请实施例提供的代码变更方法,生成变更后的软件代码,处理器302可以通过通信接口303向客户端200发送该变更后的软件代码。可选的,处理器302还可以确定所调用的所有变更器的直接变更内容以及延迟变更内容,通过通信接口303向客户端200发送所调用的所有变更器的直接变更内容以及延迟变更内容。
客户端200中处理器202通过通信接口203在接收到变更后的软件代码以及所调用的所有变更器的直接变更内容以及延迟变更内容后,处理器202可以触发显示屏205向用户显示变更后的软件代码以及所调用的所有变更器的直接变更内容以及延迟变更内容。
下面结合图3对本申请实施例提供的一种支持多变更的软件代码变更方法进行说明。参见图3,该方法包括:
步骤301:导入模块110确定待变更的软件代码以及用户对待变更的软件代码的变更配置信息。
该变更配置信息包括待变更的代码元素、对待变更的代码元素的变更方式(如修改或删除)以及待变更的代码元素对应的变更后的代码元素。
需要说明的是,对于需要将一个待变更的代码元素删除的变更,该待变更的代码元素对应的变更后的代码元素为空值。
本申请实施例并不限定待变更的代码元素的数量,可以是一个也可以是多个。该变更配置信息可以是用户配置的,也可以固定的,本申请实施例并不限定。
需要说明的是,在本申请实施例中以该变更配置信息包括多个待变更的代码元素为例进行说明,当该变更配置信息包括一个待变更的代码元素时,配置模块130只需从变更器库120中选取能对该待变更的代码元素执行相应变更的变更器,变更模块140只需要调用该变更器对待变更的软件代码进行变更即可。
导入模块110确定待变更的软件代码或该变更配置信息的方式有许多种,例如,用户可以触发终端设备向导入模块110发送携带有待变更的软件代码以及该变更配置信息的请求消息,还请求消息用于请求变更装置100对待变更的软件代码执行变更。
又例如,用户可以将待变更的软件代码导入到导入模块110,并在导入模块110的提醒下设置该变更配置信息。
其中,待变更的软件代码可以是整个软件的代码(多个目录中的所有文件),也可以是整个软件的代码中用于实现某一特定功能的代码(某个特定目录中的所有文件),还可以是整个软件的代码中某个特定的代码文件。
作为一种可能的实施方式,用户可以将整个软件的代码文件导入到导入模块110中,用户可以在导入模块110的提醒下从整个代码文件中选择选取不需要变更的软件代码,将剩余的软件代码作为待变更的软件代码,如图4所示,用户输入不需要变更的软件代码的存储路径,以使得导入模块110可以从整个软件的代码文件中的部分代码确定待变更代码。
作为一种可能的实施方式,变更配置信息还可以包括其他信息,其他信息包括以下的部分或全部:需要调用的变更器的标识(Identity,ID)、待变更的软件代码的变更模式(如串行变更模式、并行变更模式或部分串行部分并行模式)。
可选的,当待变更的软件代码的变更模为串行变更模式或部分串行部分并行模式时,该变更配置信息还可以包括变更器的调用顺序以及每个变更器的属性。
在本申请实施例中,用户在确定需要对待变更的软件代码进行变更时,可以自行选择对待变更的软件代码进行变更时,需要调用的变更器。本申请实施例并不限定用户自行选择的需要调用的变更器的数量,用户选择的变更器可以只对该变更配置信息中的部分待变更的代码元素执行变更,针对该变更配置信息中的其余待变更的代码元素执行变更所需的变更器,可以交于配置模块130进行选择,选择的方式可以参见步骤302。
用户也可以自行选择待变更的软件代码的变更模式,例如,当用户确定对待变更的软件代码中的多个待变更的软件元素的变更之间不存在冲突,则可以选择并行变更模式。当用户确定对待变更的软件代码中的多个待变更的软件元素的变更之间存在冲突,则可以选择串行变更模式。
当用户选择采用串行变更模式或部分串行部分并行模式时,用户还可以对选择的多个变更器设置调用顺序以及每个变更器的属性。
本申请实施例中,对每个变更器可以设置属性,属性的可选项分别为合并变更属性、忽略变更属性以及覆盖变更属性。
其中,合并变更属性用于表述否对该变更器以及该变更器之前调用的变更器对特定行的变更进行合并,两个变更器对待变更的软件代码的相同的一行或多行简称为特定行。该变更器的合并变更属性可以设置为真(true)或假(false),当合并变更属性为真(true)表示对该变更器以及该变更器之前调用的变更器对待变更的软件代码的特定行的变更进行合并;当合并变更属性为假(false)表示对该变更器以及该变更器之前调用的变更器对特定行的变更不进行合并,这种情况需要查看覆盖变更属性。
忽略变更属性用于描述否忽略该变更器对待变更的软件代码的其他行的变更。其他行是指待变更的软件代码中除特定行外的行。该变更器的忽略变更属性可以设置为真(true)或假(false),当忽略变更属性为真(true)表示对该变更器对其他行的变更进行忽略;当忽略变更属性为假(false)表示对该变更器对其他行的变更不进行忽略。
覆盖变更属性用于描述是否覆盖该变更器之前调用的变更器对待变更的软件代码的特定行的变更。该变更器的覆盖变更属性可以设置为真(true)或假(false),当覆盖变更属性为真(true)表示对该变更器之前调用的变更器对特定行的变更进行覆盖,也就是说,该变更器之前调用的变更器对特定行的变更无效,只保留该变更器对特定行的变更;当覆盖变更属性为假(false)表示对该变更器之前调用的变更器对特定行的变更不进行覆盖,这种情况需要查看合并变更属性。
当用户通过设置每个变更器的属性可以提前对多个变更器对待变更的软件代码的相同的一行或多行进行变更时所可能产生的冲突做规避,便于之后变更模块140在调用各个变更器时,每个变更器可以较快速的进行变更。
步骤302:配置模块130根据该变更配置信息从变更器库120中选择变更器。
若该变更配置信息包括待变更的代码元素、对待变更的代码元素的变更方式(如修改或删除)以及待变更的代码元素对应的变更后的代码元素。由于不同变更器用于变更不同的代码元素,配置模块130可以根据待变更的代码元素从变更器库120中选择能将待变更的代码元素变更为对应的变更后的代码元素的变更器。本申请实施例并不限定配置模块130所选择的变更器的数量,变更器的数量与该变更器配置信息有关。
若该变更配置信息还包括需要调用的变更器的ID,配置模块130可以根据变更器的ID从变更器库120中选择需要调用的变更器。若该变更配置信息中包括的需要调用的变更器的ID对应的变更器只能实现对部分待变更的代码元素的变更,配置模块130则还需要从变更器库120中选择能将剩余待变更的代码元素变更为对应的变更后的代码元素的变更器。本申请实施例并不限定配置模块130所选择的变更器的数量,变更器的数量与该变更器配置信息中剩余的待变更的代码元素的数量有关。
步骤303:配置模块130根据该变更配置信息确定待变更的软件代码的变更模式,如选择串行变更模式、并行变更模式或部分串行或部分并行模式。
若该变更配置信息包括待变更的软件代码的变更模式,配置模块130可以根据该变更配置信息直接确定该待变更的软件代码的变更模式。
若该变更配置信息不包括待变更的软件代码的变更模式。配置模块130可以根据选择的变更器确定待变更的软件代码的变更模式。
配置模块130在选择了多个变更器后,判断选择的多个变更器中是否存在冲突的两个变更器。若不存在冲突的两个变更器,配置模块130可以采用并行变更模式,否则采用串行变更模式或部分串行部分并行模式(其中存在冲突的变更器采用串行的方式,不存在冲突的变更器采用并行的模式)。
当待变更的软件代码的变更模式为串行变更模式或部分串行部分并行模式时,配置模块130还可以设置变更器的调用顺序以及每个变更器的属性。
若该变更配置信息包括变更器的调用顺序以及每个变更器的属性,则配置模块130可以直接根据该变更配置信息设置变更器的调用顺序以及每个变更器的属性。
若该变更配置信息不包括变更器的调用顺序以及每个变更器的属性,则配置模块130可以先设置该多个变更器的调用顺序,之后,再基于该调用顺序配置每个变更器的属性。
本申请实施例并不限定调用顺序的设置方式。例如,配置模块130可以对变更器库120中的多个变更器设置优先级,优先级高的变更器需要先调用,优先级低的变更器后调用。配置模块130可以根据该多个变更器的优先级确定调用顺序。
又例如,配置模块130中预先保留多种调用方案,每种调用方案中可以包括所有变更器,也可以包括部分变更器。配置模块130可以根据多个变更器与多种调用方案进行匹配,获得目标调用方案,目标调用方案中包括该多个变更器,目标调用方案还可以包括该多个变更器之外的其他变更器。
配置模块130可以按照目标调用方案中该多个变更器的先后顺序确定该多个变更器的调用顺序。
举例来说,例如变更器库120中预先保存了五种不同的变更器,分别为变更器A、变更器B、变更器C、变更器D、变更器E,并配置模块130预先配置了三种调用方案,其中,方案一:A->B->D->E->C;方案二:A->B->D->E;方案三:A->D->E->C。
配置模块130选择的变更器为变更器A、变更器B、变更器C,只有方案一包括变更器A、变更器B、变更器C,则方案一即为目标调用方案。由于没有选择变更器D和变更器E,则方案一可以转换为A->B->C,配置模块130配置的调用顺序为A->B->C。
当然,前述调用顺序的确定方式仅是举例说明,本申请实施例并不限定配置模块130确定调用顺序的方式,作为一种可能的实施方式,配置模块130也可以采用随机的方式,确定该多个变更器的调用顺序。
配置模块130在确定了该多个变更器的调用顺序之后,可以基于该调用顺序(和该变更配置信息)设置除第一个被调用的变更器之外的变更器的属性。
配置模块130可以预先保存变更器的属性配置方案,对于一个变更器的属性配置方案中记录了该变更器与其他变更器(该其他变更器为与该变更器可能存在冲突的变更器)的调用的先后顺序,以及在该先后顺序下,该变更器的属性。配置模块130基于该多个变更器的调用属性,根据变更器的属性配置方案设置该变更器的属性。
例如,变更器A、变更器B以及变更器C,变更器B的属性配置方案如下:当变更器B的调用顺序先于变更器A,则变更器B的三个属性均设置为假,若变更器A的调用顺序先于变更器B,则变更器B的合并变更属性为真,忽略该变更属性以及覆盖该变更属性为假。变更器C的属性配置方案如下:当变更器C的调用顺序先于变更器B,则变更器C的三个属性均设置为假,若变更器B的调用顺序先于变更器C,则变更器C的合并变更属性和忽略该变更属性为假,以及覆盖该变更属性为真。
若配置模块130确定的该多个变更器的调用顺序为A->B->C,则变更器B的合并变更属性为真,忽略该变更属性以及覆盖该变更属性为假,变更器C的合并变更属性和忽略该变更属性为假,以及覆盖该变更属性为真,由于变更器A为调用的第一个变更器,第一被调用的变更器并不存在在该变更器之前调用的变更器,所以配置模块130可以不设置变更器A的属性。
步骤304:变更模块140基于待变更的软件代码的变更模式,调用该多个变更器,对待变更的软件代码进行变更。
下面分别对并行变更模式以及串行变更模式下,变更模块140调用该多个变更器,对待变更的软件代码进行变更的方式进行说明。
对于部分串行部分并行模式,其实质上是并行变更模式以及串行变更模式的结合,部分串行部分并行模式下变更模块140调用该多个变更器,对待变更的软件代码进行变更的方式可以参见如下的方式一和方式二的说明,对于部分串行部分并行模式中并行的多个变更器,变更模块140采用方式一,调用该多个变更器,对输入到该多个变更器的软件代码进行变更;对于部分串行部分并行模式中串行的多个变更器(或变更器组合),变更模块140采用方式一,调用该多个变更器(或变更器组合),对输入到该多个变更器(或变更器组合)的软件代码进行变更。具体可参见下述说明,此处不再赘述。
方式一、基于并行变更模式,同时调用该多个变更器,对待变更的软件代码进行变更。
在并行变更模式下,变更模块140可以调用多个变更器同时对待变更的软件代码进行变更,在该多个变更器中的每个变更器变更结束后,可以将每个变更器所产生的变更后的软件代码进行合并,合并后的软件代码即为最终的变更后的软件代码。
示例性的,变更模块140可以确定每个变更器的变更内容,例如确定每个变更器对待变更的软件代码进行变更时,变更的一行或多行代码。将待变更的软件代码中每个变更器的变更内容对应位置的软件代码替换为每个变更器的变更内容,获取最终的变更后的软件代码。
方式二、基于串行变更模式,依次调用该多个变更器,对待变更的软件代码进行变更。
当多个不同的变更器采用串行的方式对待变更的软件代码进行变更时,不同变更器产生的变更内容需要采样一种较为便捷的方式进行合并,而现有的对软件代码的变更方式,并不能将不同变更器产生的变更内容进行合并。
例如,对软件代码进行变更类型1的变更时,针对函数P的形式参数作更改,将待变更的软件代码中函数P调用的形式参数均进行变更,生成变更后的软件代码1。对软件代码进行变更类型2的变更时,针对函数P作更改,将待变更的软件代码中的函数P更改为函数Q,生成变更后的软件代码2。由于变更后的软件代码2中不存在函数P,故而不能简单的将变更后的软件代码1和变更后的软件代码2进行合并。也就是说,对软件代码进行不同变更类型的变更,产生的变更内容之间容易存在冲突,不能简单合并。应需理解的是,上述举例仅是一种较为简化的情况,在实际对软件代码进行变更时,对软件代码进行不同变更类型的变更,产生的变更内容之间的冲突更加明显,合并难度更大。
由上可知,为了能够支持多变更类型的变更,需要解决对软件代码进行不同变更类型的变更之间的存在的冲突,需要更加高效、便捷的对软件代码进行不同变更类型的变更所产生的变更内容进行合并。
在本申请实施例中,变更模块140在调用任一变更器对输入到该变更器的软件代码进行变更时,确定该变更器是否存在直接变更内容或延迟变更内容,若存在,将该变更器的直接变更内容直接应用在待变更的软件代码上,保留该变更器的延迟变更内容延迟,直至所有变更器调用完成后,统一将调用的多个变更器的延迟变更内容应用在最后一个变更器输出的软件代码上,获得变更后的软件代码。在调用每个变更器时,区分每个变更器的变更内容中的直接变更内容和可能存在变更冲突的延迟变更内容,将多个变更器产生的延迟变更内容统一在最后应用在待变更的软件代码上,能够有效避免不同变更器在调用过程中直接进行变更引起的冲突。
如图5所示,为变更模块140采用串行变更模式对待变更的软件代码进行变更的方法示意图。该方法包括:
步骤501:变更模块140按照该多个变更器的调用顺序依次调用该多个变更器对待变更的软件代码进行变更,每一个变更器的输入为前一个变更器的输出,待变更的软件代码为第一个调用的变更器的输入。
步骤502:变更模块140在调用一个变更器对输入该变更器的软件代码进行变更时,确定该变更器的变更内容中是否存在直接变更内容以及延迟变更内容。
步骤503:变更模块140将该变更器的直接变更内容直接应用在该变更器输入的软件代码中。
步骤504:若该变更器存在延迟变更内容,变更模块140保留该变更器的延迟变更内容。如可以将该变更器的延迟变更内容保存起来。
步骤505:直至所有变更器调用完成后,变更模块140统一将这多个变更器的延迟变更内容应用在最后一个变更器输出的软件代码上,生成变更后的软件代码。
为了更加直观呈现变更模块140采用串行变更模式对待变更的软件代码进行变更的方法,可以参见图6。图6为变更模块140采用串行变更模式对待变更的软件代码进行变更的流程图,变更模块140按照A->B->C的调用顺序依次调用变更器A、变更器B以及变更器。
变更模块140将待变更的软件代码输入到变更器A,在调用变更器A时,确定变更器A的变更内容中是否存在直接变更内容以及延迟变更内容,若存在直接变更内容,则变更模块140将直接变更内容应用到待变更的软件代码上(1),变更后的软件代码即为变更器A输出的软件代码。若存在延迟变更内容,变更模块140保留延迟变更内容(2)。变更器A在对待变更的软件代码进行变更时,还可以保存对待变更的软件代码的分析结果(3),该分析结果包括待变更的软件代码中所有代码元素的位置(关于分析结果的描述可以参见下文中的描述,此处不再赘述)。
之后,变更模块140将变更器A输出软件代码输入至变更器B,变更模块140调用变更器B时,确定变更器B的变更内容中是否存在直接变更内容以及延迟变更内容,若存在直接变更内容,则变更模块140将直接变更内容应用到输入到变更器B的软件代码上(5),变更后的软件代码即为变更器B输出的软件代码。若存在延迟变更内容,变更模块140保留延迟变更内容(6)。变更器B在对输入到变更器B的软件代码时,还可以调用变更器A保存的分析结果(3),基于分析结果,确定对输入到变更器B的软件代码的变更位置。
之后,变更模块140将变更器B输出软件代码输入至变更器C,变更模块140调用变更器C时,确定变更器C的变更内容中是否存在直接变更内容以及延迟变更内容,若存在直接变更内容,则变更模块140将直接变更内容应用到输入到变更器C的软件代码上(8),变更后的软件代码即为变更器C输出的软件代码。若存在延迟变更内容,变更模块140保留延迟变更内容(9)。变更器C在对输入到变更器C的软件代码时,还可以调用变更器A保存的分析结果(7),基于分析结果,确定对输入到变更器C的软件代码的变更位置。
最后,变更模块140统一将这多个变更器的延迟变更内容应用在变更器C输出的软件代码上,生成变更后的软件代码。
在执行步骤502时,当变更模块140调用多个变更器的任一变更器对输入到该变更器的软件代码进行变更时,变更模块140可以根据预先设定的延迟变更内容(如内部类变更内容以及类拆分变更内容)确定该变更器的变更内容中是否存在延迟变更内容,若存在延迟变更内容,则保留该延迟变更内容,若不存在延迟变更内容,则变更模块140确定该变更器的直接变更内容。
这里需要注意的时,虽然从变更器的变更内容中保留了该变更器的延迟变更内容,但是变更器之间还可能存在一些潜在的冲突,这些潜在的冲突可能导致该变更器的变更内容中除了延迟变更内容中之外的内容只有一部分可以能够应用在输入至该变更器的软件代码(该部分即为直接变更内容),而不能应用在输入至该变更器的软件代码会被删除。
变更模块140确定变更器的变更器内容中的直接变更内容时,需要借助调用的变更器的属性,基于变更器的部分或全部属性确定该变更器的之间变更内容,下面对变更模块140确定该变更器的直接变更内容的方式进行说明:
步骤1:变更模块140每调用一个变更器,确定该变更器的原始变更实例集合。
步骤2:变更模块140基于该变更器的原始变更实例集合以及该变更器之前调用的变更器的原始变更实例集合,生成该变更器的中间变更实例集合。
对于变更器的原始变更实例集合中的一个变更实例1,该变更实例1记录了需要变更的行号1,变更模块140可以从该变更器之前调用的变更器的原始变更实例集合中,查找行号1之前所有的行号变化,行号变化包括但不限于:从该变更器之前调用的变更器增加或删除行导致的行号变化。
变更模块140可以通过累加的方式计算该变更器之前调用的变更器对待变更的软件代码进行变更所引起的行变化数量,例如,若该变更器之前调用的变更器增加N个行号,则累加的数值为正数,为N;若该变更器之前调用的变更器删除M个行号,则累加的数值为负数,为-M。
变更模块140将该变更器的变更实例1中记录行号1减去该行变化数量,确定当以待变更的软件代码为基准时,该变更器需要变更的行号2,进而生成该变更器的中间变更实例集合中变更实例1对于的变更实例2(其中行号为行号2,该行变更后的内容与变更实例1中记录的行号1的行变更后的内容相同)。采用上述方式,可以生成该变更器的中间变更实例集合中所有的变更实例。
如图7所示为串行的三个变更器,分别为变更器A、变更器B、变更器C,每个变更器下面标注了每个变更器对输入该变更器的软件代码进行变更时,需要变更的行号以及变更的后的内容(可以看做为每个变更器的原始变更实例集合),以操作(数值1,数值2)标识,操作可以分为增加(add)、修改(modify)以及删除(delete)数值1表示行号,数值2表示操作的行数,比如增加(3,2)表示在输入该变更器的软件代码的第3行***2行代码,删除(4,1)表示在输入该变更器的软件代码的第4行删除1行代码,修改(6,1)表示在输入该变更器的软件代码的第6行修改1行代码(也就是行数不增不减)。
变更器B的一个操作为增加(2,1),由于它之前的变更器(变更器A)在对待变更的软件代码进行变更时,都是针对第2行的代码进行变更,也就是说该操作中的行号没有发生变化。变更器B的另一个操作为修改(6,1),可以看到变更器A在对待变更的软件代码进行变更时,在第6行之前***了2行,删除了1行,行变化数量为1,因此,变更器B的另一个操作为修改(6,1),若以待变更的软件代码进行变更,应该为修改(5,1),同理,变更器C的操作修改(8,1)变更为修改(6,1)。
步骤3:变更模块140基于该变更器的属性、以及该变更器的中间变更实例集合以及该变更器之前调用变更器的中间变更实例集合,生成该变更器的目标变更实例集合。
步骤4:变更模块140生成该变更器的目标变更实例集合后,可以利用该变更器的目标变更实例集合对输入至该变更器的软件代码进行变更。
在获取了一个变更器的中间变更实例集合后,变更模块140可以基于该变更器的中间变更实例以及该变更器之前调用变更器的中间变更实例确定该变更器和该变更器之前调用变更器是否会对待变更的软件代码的相同的一行或多行代码进行变更,若该变更器和该变更器之前调用变更器对待变更的软件代码的相同的一行或多行代码进行变更,该种变更容易引发变更器之间的冲突,需要消除这种冲突。
下面对消除两个变更器对待变更的软件代码的相同的一行或多行(为方便说明,同一行或多行简称为特定行)进行变更所引起的冲突的方式进行说明。
变更模块140可以根据该变更器的合并变更属性,确定是否需要该变更器以及该变更器之前调用的变更器对特定行的变更进行合并,如果需要进行合并,则可以在该变更器的中间变更实例中保留该特定行对应的变更实例,保留该变更器的原始变更实例中保留该特定行对应的变更实例。
变更模块140可以根据该变更器的忽略变更属性,确定是否忽略该变更器对待变更的软件代码的其他行的变更;如果需要忽略,则可以在该变更器的中间变更实例中删除该其他行对应的变更实例,删除该变更器的原始变更实例中该其他行对应的变更实例。
变更模块140可以根据该变更器的覆盖变更属性,确定覆盖该变更器之前调用的变更器对待变更的软件代码的特定行的变更。如果需要覆盖,则变更模块140可以在该变更器的中间变更实例中保留该特定行对应的变更实例,可以保留该变更器的中间变更实例中该特定行对应的变更实例。
变更模块140在根据该变更器各个属性,对该变更器的原始变更实例集合进行更新(如删除变更实例或保留变更实例),更新后的该变更器的原始变更实例集合即为该变更器的目标变更实例集合。
变更模块140在根据该变更器各个属性,对该变更器的中间变更实例集合更新(如删除变更实例或保留变更实例)后,可以将更新后的将该变更器的中间变更实例集合中的变更实例添加到总变更实例集合中。
举例来说,如图8所示,为串行的三个变更器,分别为变更器E、变更器F、变更器G,每个变更器下面标注了每个变更器对待变更的软件代码进行变更时,需要变更的行号以及变更后的内容(可以看做为每个变更器的中间变更实例集合),标注方式与图5所示的实施例相同,此处不再赘述。其中,图8中,m1、m2、m3、m4以及m5用于指示修改的内容,仅是区分不同的修改。变更器F、变更器G上面标注了合并变更属性、忽略该变更属性以及覆盖该变更属性的真或假。变更器B的合并变更属性为真,忽略该变更属性以及覆盖该变更属性为假。变更器C的合并变更属性和忽略该变更属性为假,以及覆盖该变更属性为真。
图8中,变更器F的一个变更实例为修改(4,m3),变更器E的一个变更实例为修改(4,m2),也就是说变更器E对第4行也有修改,由于变更器F的合并变更属性为true,需要变更器B和变更器E的变更需要进行合并,需要同时保留变更器E和变更器F的该变更实例,在变更器B的中间变更实例中保留修改(4,m3)这一变更实例,保留该变更器F的原始变更实例集合中保留修改(4,m3)这一变更实例对应的变更实例。更新后的变更器F的原始变更实例集合即为变更器F的目标实例集合。
变更器G的一个变更实例为修改(1,m4),可以看到之前的变更器G之前调用的变更器(变更器E和变更器F)都没有对第1行进行修改,且变更器G的忽略变更属性为true,在该变更器G的中间变更实例集合中删除修改(1,m4)这一变更实例,删除该变更器G的原始变更实例集合中修改(1,m4)这一变更实例对应的变更实例。变更器G的另一个操作为修改(3,m5),且变更器A也对第3行做了修改,且变更器G的覆盖变更属性为true,变更模块140保留该变更器G的中间变更实例集合中修改(3,m5)这一变更实例,变更模块140保留该变更器G的原始变更实例集合中修改(3,m5)这一变更实例对应的变更实例。更新后的变更器G的原始变更实例集合即为变更器G的目标实例集合。
变更器可以将更新后的该变更器E的中间变更实例集合、该变更器F的中间变更实例集合以及该变更器G的中间变更实例集合中的变更实例也添加到总变更实例集合中。总变更实例集合中包括修改(4,m2)、修改(3,m1)、修改(4,m3)以及修改(3,m5)。
作为一种可能的实施方式,可以将变更器F的变更实例修改(4,m3)和变更器E的变更实例修改(4,m2)进行合并,也就是说,合并后的变更实例为修改(4,[m2,m3])。该合并后的变更实例修改(4,[m2,m3])替换总变更实例集合中的修改(4,m2)和修改(4,m3)。
作为一种可能的实施方式,每个变更器在对输入的软件代码进行变更时,需要先输入的软件代码进行分析,分析输入的软件代码中所有代码元素的位置,找到待变更的代码元素的位置(如一行或多行),对该位置的待变更的代码元素进行变更。
对于两个变更器,对待变更的软件代码进行变更时,可能变更的位置(如行)是相同的,例如,在库升级场景下,某个方法的名称发生变化,同时它的形式参数也发生变化,需要变更方法名称的变更器和变更方法实际参数的变更器。通常方法名称和方法实际参数的变更位置(行)是相同的,此时两个变更器就存在冲突。
而每个变更器在对输入的软件代码进行变更时,通常需要先对输入的软件代码进行分析,分析输入的软件代码中所有代码元素的位置,还可以分析各个代码元素之间的包含关系,如某个类中包含的函数/方法,函数/方法中所引用的变量/域等。而每个变更器对输入的软件代码的分析过程通常需要消耗一定的时间,为了能够高效的实现对待变更的软件代码的变更。在本申请实施例中第一个被调用的变更器可以将对待变更的软件代码的分析结果保存起来,该分析结果中包括待变更的软件代码中所有代码元素的位置以及各个代码元素之间的包含关系。示例性的,该分析结果可以保存在变更模块140中的缓存空间中。
当某一变更器对输入的软件代码进行变更时,可以调取第一个被调用的变更器保存的分析结果,基于第一个变更器保存的分析结果对前一个变更器输出的变更后的软件代码进行变更。
采用上述方式,变更模块140可以将每个变更器的直接变更内容应用到输入到该变更器的软件代码上。对于变更器的延迟变更内容,变更模块140可以在调用的最后一个变更器的直接变更内容应用到输入到该变更器的软件代码后,统一将所有变更器的延迟变更内容应用在最后一个变更器输出的软件代码中。
在将多个变更器的所有延迟变更内容应用到最后一个变更器输出的软件代码时,也可以采用串行或并行的方式,将多个变更器的所有延迟变更内容应用到最后一个变更器输出的软件代码。串行的方式与如图5或图6所示的实施例类似,例如对于多个变更器的所有延迟变更内容中任一个变更器的延迟变更内容通过一个延迟变更实例集合进行表征,该延迟变更实例集合中的变更实例是以待变更的软件代码为基准的,该延迟变更实例集合中的变更实例的确定方式与变更器的中间变更实例集合中的变更实例集合的方式类似,也是需要确定该变更器之前调用的变更器对待变更的软件代码进行变更所引起的行变化数量,并进行相应的累加,确定延迟变更实例集合中的变更实例,还可以根据这多个变更器的属性,避免不同延迟变更内容中存在冲突的内容,删除延迟变更实例集合中的变更实例,更新该延迟变更实例集合。之后,将更新后的延迟变更实例集合中的变更实例更新到总变更实例集合中。
变更模块140可以通过计算设备中的显示屏,向用户显示该总变更集合,也就是展示该变更模块140对待变更的软件代码的所有变更的行,变更的方式(删除、修改、增加等)以及变更后的内容。
变更模块140提供了如下两种显示方式:
第一种,如图9所示,变更模块140可以展示变更后的软件代码以及待变更的软件代码的差异对比页面,图9中,左边为待变更的软件代码,右边为变更后的软件代码。页面中以行号为标注,在待变更的软件代码上用加粗的方式标注需要变更的行。
用户可以通过差异比对页面,确认需要变更的行,以及变更后的内容,当确认变更正确后,可以将变更后的软件代码替换最初导入的待变更的软件代码。
第二种,如图10所示,变更模块140可以展示待变更的软件代码,并在页面的下方展示总变更实例集合的所有变更实例。在待变更的软件代码的展示界面中,以小灯泡形式对需要变更的行进行展示,展示该行的变更后的内容。
用户可以确认了某一行的变更后的内容,若确认该行的变更后的内容正确后,可以单独将该行变更后的内容应用到待变更的软件代码中。
在本申请所提供的几个实施例中,应该理解到,所揭露的***、装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个***,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
以上所述,仅为本发明的具体实施方式。熟悉本技术领域的技术人员根据本发明提供的具体实施方式,可想到变化或替换,都应涵盖在本发明的保护范围之内。
Claims (22)
1.一种代码变更方法,其特征在于,该方法包括:
获取用户输入的软件代码以及变更配置信息,所述变更配置信息包括所述软件代码中待变更的代码元素、所述待变更的代码元素的变更方式以及所述待变更的代码元素对应的变更后的代码元素;
根据所述变更配置信息确定多个变更器以及所述多个变更器的调用顺序;
按照所述多个变更器的调用顺序依次调用所述多个变更器,对所述软件代码进行变更;
其中,每一个变更器用于对所述软件代码中的一种待变更的代码元素进行变更,所述多个变更器中第一个被调用的变更器的输入为所述软件代码,被所述第一个被调用的变更器变更后的软件代码被输入所述多个变更器中的另一个变更器。
2.如权利要求1所述的方法,其特征在于,所述根据所述软件代码的变更配置信息确定所述多个变更器的调用顺序,还包括:
若所述多个变更器中存在冲突的变更器,确定待变更的软件代码的变更模式为串行变更模式或部分串行部分并行变更模式。
3.如权利要求1或2所述的方法,其特征在于,所述多个变更器中的至少一个变更器包括直接变更内容和延迟变更内容;则,所述按照所述多个变更器的调用顺序依次调用所述多个变更器,对所述软件代码进行变更,包括:
调用所述至少一个变更器时,将所述直接变更内容应用在输入到所述至少一个变更器的软件代码中;
将所述延迟变更内容在所述多个变更器中最后一个变更器调用结束后应用。
4.如权利要求3所述的方法,其特征在于,在所述依次调用所述多个变更器之前,所述方法还包括:
基于所述多个变更器的调用顺序确定每个变更器的属性,每个变更器的属性用于描述每个变更器对所述软件代码中的目标行的变更的处理。
5.如权利要求3所述的方法,其特征在于,所述变更配置信息还包括每个变更器的属性,每个变更器的属性用于描述每个变更器对所述软件代码中的目标行的变更的处理。
6.如权利要求4或5所述的方法,其特征在于,所述方法还包括:
根据所述至少一个变更器的属性,确定所述至少一个变更器的直接变更内容。
7.如权利要求6所述的方法,其特征在于,所述根据所述至少一个变更器的属性,确定所述至少一个变更器的直接变更内容,包括:
根据所述至少一个变更器的第一属性确定所述至少一个变更器的直接变更内容,所述至少一个变更器的第一属性用于描述对所述软件代码的第一目标行的变更保留或删除,所述第一目标行为所述至少一个变更器和所述至少一个变更器之前被调用的变更器对所述软件代码均执行了变更的。
8.如权利要求6或7所述的方法,其特征在于,根据所述至少一个变更器的属性,确定所述至少一个变更器的直接变更内容包括:
根据所述至少一个变更器的第二属性确定所述至少一个变更器的直接变更内容,所述至少一个变更器的第二属性用于描述对所述软件代码的第二目标行的变更保留或删除,所述第二目标行为所述至少一个变更器对所述软件代码执行了变更且和所述至少一个变更器之前调用的变更器对所述软件代码未执行变更的。
9.如权利要求1至8任一所述的方法,其特征在于,所述方法还包括:
保存所述第一个被调用的变更器对所述软件代码的分析结果,所述分析结果中包括所述软件代码中各代码元素的位置;
所述多个变更器中的另一个变更器读取存储的所述分析结果,对所述软件代码进行变更。
10.如权利要求1至9任一所述的方法,其特征在于,所述方法还包括:
输出所述多个变更器对所述软件代码进行变更后生成的变更后的软件代码,并显示所述多个变更器对所述软件代码进行变更的变更位置以及变更的内容。
11.一种变更装置,其特征在于,该装置包括:
导入模块,用于获取用户输入的软件代码以及变更配置信息,所述变更配置信息包括所述软件代码中待变更的代码元素、所述待变更的代码元素的变更方式以及所述待变更的代码元素对应的变更后的代码元素;
配置模块,用于根据所述变更配置信息确定多个变更器以及所述多个变更器的调用顺序;
变更模块,用于按照所述多个变更器的调用顺序依次调用所述多个变更器,对所述软件代码进行变更;
其中,每一个变更器用于对所述软件代码中的一种待变更的代码元素进行变更,所述多个变更器中第一个被调用的变更器的输入为所述软件代码,被所述第一个被调用的变更器变更后的软件代码被输入所述多个变更器中的另一个变更器。
12.如权利要求11所述的装置,其特征在于,所述配置模块在根据所述软件代码的变更配置信息确定所述多个变更器的调用顺序之前,还用于:
若所述多个变更器中存在冲突的变更器,确定待变更的软件代码的变更模式为串行变更模式或部分串行部分并行变更模式。
13.如权利要求11或12所述的装置,其特征在于,所述多个变更器中的至少一个变更器包括直接变更内容和延迟变更内容;则,所述变更模块在按照所述多个变更器的调用顺序依次调用所述多个变更器,对所述软件代码进行变更,具体用于:
调用所述至少一个变更器时,将所述直接变更内容应用在输入到所述至少一个变更器的软件代码中;
将所述延迟变更内容在所述多个变更器中最后一个变更器调用结束后应用。
14.如权利要求13所述的装置,其特征在于,所述配置模块在所述依次调用所述多个变更器之前,还用于:
基于所述多个变更器的调用顺序确定每个变更器的属性,每个变更器的属性用于描述每个变更器对所述软件代码中的目标行的变更的处理。
15.如权利要求13所述的装置,其特征在于,所述变更配置信息还包括每个变更器的属性,每个变更器的属性用于描述每个变更器对所述软件代码中的目标行的变更的处理。
16.如权利要求14或15所述的装置,其特征在于,所述配置模块,还用于:
根据所述至少一个变更器的属性,确定所述至少一个变更器的直接变更内容。
17.如权利要求16所述的装置,其特征在于,所述配置模块在根据所述至少一个变更器的属性,确定所述至少一个变更器的直接变更内容,具体用于:
根据所述至少一个变更器的第一属性确定所述至少一个变更器的直接变更内容,所述至少一个变更器的第一属性用于描述对所述软件代码的第一目标行的变更保留或删除,所述第一目标行为所述至少一个变更器和所述至少一个变更器之前被调用的变更器对所述软件代码均执行了变更的。
18.如权利要求16或17所述的装置,其特征在于,所述配置模块在根据所述至少一个变更器的属性,确定所述至少一个变更器的直接变更内容,具体用于:
根据所述至少一个变更器的第二属性确定所述至少一个变更器的直接变更内容,所述至少一个变更器的第二属性用于描述对所述软件代码的第二目标行的变更保留或删除,所述第二目标行为所述至少一个变更器对所述软件代码执行了变更且和所述至少一个变更器之前调用的变更器对所述软件代码未执行变更的。
19.如权利要求11至18任一所述的装置,其特征在于,所述变更模块还用于:
保存所述第一个被调用的变更器对所述软件代码的分析结果,所述分析结果中包括所述软件代码中各代码元素的位置;
所述多个变更器中的另一个变更器读取存储的所述分析结果,对所述软件代码进行变更。
20.如权利要求11至19任一所述的装置,其特征在于,所述变更模块还用于:
输出所述多个变更器对所述软件代码进行变更后生成的变更后的软件代码,并显示所述多个变更器对所述软件代码进行变更的变更位置,以及变更的内容。
21.一种计算设备集群,其特征在于,所述计算设备集群中包括至少一个计算设备,每个计算设备包括处理器和存储器;所述至少一个计算设备中的存储器,用于存储计算机程序指令;
所述至少一个计算设备中的处理器调用所述存储器中存储的计算机程序指令执行如权利要求1至10中任一项所述的方法。
22.一种包含指令的计算机程序产品,其特征在于,当所述计算机程序产品在计算设备上运行时,使得所述计算机执行权利要求1至10任一所述的方法。
Priority Applications (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
PCT/CN2020/111326 WO2021037050A1 (zh) | 2019-08-26 | 2020-08-26 | 一种代码变更方法及装置 |
EP20858958.0A EP4009162A4 (en) | 2019-08-26 | 2020-08-26 | CODE CHANGE PROCEDURE AND DEVICE |
US17/678,625 US20220179642A1 (en) | 2019-08-26 | 2022-02-23 | Software code change method and apparatus |
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910792544 | 2019-08-26 | ||
CN2019107925449 | 2019-08-26 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110780897A true CN110780897A (zh) | 2020-02-11 |
CN110780897B CN110780897B (zh) | 2022-05-10 |
Family
ID=69383528
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910877510.XA Active CN110780897B (zh) | 2019-08-26 | 2019-09-17 | 一种代码变更方法以及装置 |
Country Status (4)
Country | Link |
---|---|
US (1) | US20220179642A1 (zh) |
EP (1) | EP4009162A4 (zh) |
CN (1) | CN110780897B (zh) |
WO (1) | WO2021037050A1 (zh) |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2021037050A1 (zh) * | 2019-08-26 | 2021-03-04 | 华为技术有限公司 | 一种代码变更方法及装置 |
CN112559024A (zh) * | 2020-12-14 | 2021-03-26 | 建信金融科技有限责任公司 | 一种生成交易码变更列表的方法和装置 |
CN112925561A (zh) * | 2021-03-23 | 2021-06-08 | 北京字节跳动网络技术有限公司 | 一种软件开发方法、装置、计算机设备及存储介质 |
WO2023273164A1 (zh) * | 2021-06-30 | 2023-01-05 | 中兴通讯股份有限公司 | 代码集成验证方法及装置 |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11656977B2 (en) * | 2021-04-06 | 2023-05-23 | EMC IP Holding Company LLC | Automated code checking |
US11971806B2 (en) | 2022-02-23 | 2024-04-30 | Bank Of America Corporation | System and method for dynamic monitoring of changes in coding data |
CN116661812B (zh) * | 2022-11-25 | 2024-04-02 | 荣耀终端有限公司 | 设备升级方法、电子设备及*** |
Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102279873A (zh) * | 2010-06-11 | 2011-12-14 | 微软公司 | 对数据、模式,以及应用程序的统一并发变更 |
US20140215446A1 (en) * | 2013-01-29 | 2014-07-31 | ArtinSoft Corporation | Automated Porting of Application to Mobile Infrastructures |
CN105159715A (zh) * | 2015-09-01 | 2015-12-16 | 南京大学 | 一种基于抽象语法树节点变更抽取的Python代码变更提示方法 |
CN106033391A (zh) * | 2015-03-13 | 2016-10-19 | 上海爱韦讯信息技术有限公司 | 基于FOG数据的修复bug和变更控制的方法及装置 |
CN106648636A (zh) * | 2016-12-08 | 2017-05-10 | 北京航空航天大学 | 一种基于图挖掘的软件函数变更预测***及方法 |
CN106648618A (zh) * | 2016-11-16 | 2017-05-10 | 腾讯科技(深圳)有限公司 | 虚拟应用的文本信息生成方法和装置 |
US20170161061A1 (en) * | 2015-12-07 | 2017-06-08 | Sap Se | Custom code migration suggestion system based on actual change references |
CN109117164A (zh) * | 2018-06-22 | 2019-01-01 | 北京大学 | 基于关键元素差异性分析的微服务更新方法及*** |
Family Cites Families (16)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CA2256931A1 (en) * | 1998-12-23 | 2000-06-23 | Robert Weisz | Source editing in a graphical hierarchical environment |
US6564374B1 (en) * | 1999-04-22 | 2003-05-13 | International Business Machines Corporation | Method and apparatus for employing cognitive compares in compare statement sequences |
US7257805B2 (en) * | 2001-11-09 | 2007-08-14 | International Business Machines Corporation | Restoring debugging breakpoints subsequent to program code modifications |
US20030131342A1 (en) * | 2002-01-08 | 2003-07-10 | International Business Machines Corporation | Debugger with activity alert |
US20070300215A1 (en) * | 2006-06-26 | 2007-12-27 | Bardsley Jeffrey S | Methods, systems, and computer program products for obtaining and utilizing a score indicative of an overall performance effect of a software update on a software host |
US8266594B2 (en) * | 2008-08-20 | 2012-09-11 | International Business Machines Corporation | System, method and program product for correcting semantic errors in code using peer submitted code snippets |
WO2010064260A1 (en) * | 2008-12-01 | 2010-06-10 | Kpit Cummins Infosystems Ltd. | Method and system for parallelization of sequencial computer program codes |
US8464261B2 (en) * | 2010-03-31 | 2013-06-11 | Oracle International Corporation | System and method for executing a transaction using parallel co-transactions |
US9141519B2 (en) * | 2010-10-05 | 2015-09-22 | Infinera Corporation | Accurate identification of software tests based on changes to computer software code |
US8990771B2 (en) * | 2011-08-19 | 2015-03-24 | Red Hat, Inc. | Building and distributing software packages |
US9727623B1 (en) * | 2016-02-05 | 2017-08-08 | Accenture Global Solutions Limited | Integrated developer workflow for data visualization development |
US10223076B1 (en) * | 2016-08-29 | 2019-03-05 | The Mathworks, Inc. | Generating code based on user interactions with a user interface element in a code editor |
CN109933326B (zh) * | 2017-12-15 | 2023-03-17 | 北京奇虎科技有限公司 | 改写代码的编译方法、装置及相应终端 |
WO2020061587A1 (en) * | 2018-09-22 | 2020-03-26 | Manhattan Engineering Incorporated | Error recovery |
CN109828808B (zh) * | 2018-12-24 | 2023-01-31 | 珠海海鸟科技有限公司 | 一种防拦截方法及相关设备 |
CN110780897B (zh) * | 2019-08-26 | 2022-05-10 | 华为云计算技术有限公司 | 一种代码变更方法以及装置 |
-
2019
- 2019-09-17 CN CN201910877510.XA patent/CN110780897B/zh active Active
-
2020
- 2020-08-26 EP EP20858958.0A patent/EP4009162A4/en active Pending
- 2020-08-26 WO PCT/CN2020/111326 patent/WO2021037050A1/zh unknown
-
2022
- 2022-02-23 US US17/678,625 patent/US20220179642A1/en active Pending
Patent Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102279873A (zh) * | 2010-06-11 | 2011-12-14 | 微软公司 | 对数据、模式,以及应用程序的统一并发变更 |
US20140215446A1 (en) * | 2013-01-29 | 2014-07-31 | ArtinSoft Corporation | Automated Porting of Application to Mobile Infrastructures |
CN106033391A (zh) * | 2015-03-13 | 2016-10-19 | 上海爱韦讯信息技术有限公司 | 基于FOG数据的修复bug和变更控制的方法及装置 |
CN105159715A (zh) * | 2015-09-01 | 2015-12-16 | 南京大学 | 一种基于抽象语法树节点变更抽取的Python代码变更提示方法 |
US20170161061A1 (en) * | 2015-12-07 | 2017-06-08 | Sap Se | Custom code migration suggestion system based on actual change references |
CN106648618A (zh) * | 2016-11-16 | 2017-05-10 | 腾讯科技(深圳)有限公司 | 虚拟应用的文本信息生成方法和装置 |
CN106648636A (zh) * | 2016-12-08 | 2017-05-10 | 北京航空航天大学 | 一种基于图挖掘的软件函数变更预测***及方法 |
CN109117164A (zh) * | 2018-06-22 | 2019-01-01 | 北京大学 | 基于关键元素差异性分析的微服务更新方法及*** |
Non-Patent Citations (2)
Title |
---|
LING WU等: "Transforming Code with Compositional Mappings for API-Library Switching", 《2015 IEEE 39TH ANNUAL COMPUTER SOFTWARE AND APPLICATIONS CONFERENCE》 * |
陶彬贤: "CODEREBUILDER:一种自动化Java并发程序重构工具的研究与实现", 《中国优秀硕士学位论文全文数据库 (信息科技辑)》 * |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2021037050A1 (zh) * | 2019-08-26 | 2021-03-04 | 华为技术有限公司 | 一种代码变更方法及装置 |
CN112559024A (zh) * | 2020-12-14 | 2021-03-26 | 建信金融科技有限责任公司 | 一种生成交易码变更列表的方法和装置 |
CN112925561A (zh) * | 2021-03-23 | 2021-06-08 | 北京字节跳动网络技术有限公司 | 一种软件开发方法、装置、计算机设备及存储介质 |
CN112925561B (zh) * | 2021-03-23 | 2024-07-16 | 抖音视界有限公司 | 一种软件开发方法、装置、计算机设备及存储介质 |
WO2023273164A1 (zh) * | 2021-06-30 | 2023-01-05 | 中兴通讯股份有限公司 | 代码集成验证方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
WO2021037050A1 (zh) | 2021-03-04 |
EP4009162A4 (en) | 2022-09-21 |
US20220179642A1 (en) | 2022-06-09 |
EP4009162A1 (en) | 2022-06-08 |
CN110780897B (zh) | 2022-05-10 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110780897B (zh) | 一种代码变更方法以及装置 | |
US20170277524A1 (en) | Dynamic container deployment with parallel conditional layers | |
CN111176717B (zh) | 生成安装包的方法、装置及电子设备 | |
CN107656729B (zh) | 列表视图的更新装置、方法及计算机可读存储介质 | |
CN111068328A (zh) | 游戏广告配置表格的生成方法、终端设备及介质 | |
CN110543327A (zh) | 业务组件复用方法、装置、计算机设备及存储介质 | |
US11144292B2 (en) | Packaging support system and packaging support method | |
US11029934B2 (en) | Method and system for updating legacy software | |
CN112379940B (zh) | 一种可执行文件处理方法、装置、电子设备及存储介质 | |
CN113485722A (zh) | 应用商店的应用程序的上架方法、处理方法及计算机设备 | |
CN110045983B (zh) | 版本库管理方法、装置及服务器 | |
CN116048609A (zh) | 配置文件更新方法、装置、计算机设备和存储介质 | |
CN115167822A (zh) | 分支代码合并方法、装置、设备和存储介质 | |
CN111124386B (zh) | 基于Unity的动画事件处理方法、装置、设备和存储介质 | |
CN114003210A (zh) | 基于sdk的多应用程序适配方法、装置、设备及介质 | |
CN117251898B (zh) | 基于云存储的Revit链接方法及*** | |
CN115658119B (zh) | 一种根据软件版本迁移配置数据的方法 | |
CN117093207B (zh) | 多业务数据模型的实体处理方法、装置及*** | |
CN111538484B (zh) | 多项目的模块化管理方法、生物解锁模型获取方法和产品 | |
CN114594980A (zh) | 组件动态更新的方法、装置、电子设备和存储介质 | |
CN114840217A (zh) | 一种编译方法、装置、设备及可读存储介质 | |
CN113157355A (zh) | 自定义上位机用户界面的方法、电子装置及存储介质 | |
CN114579178A (zh) | 多版本组件运行方法、装置、终端设备及存储介质 | |
CN113268267A (zh) | 一种数据包生成方法、装置、计算机设备及存储介质 | |
CN114968292A (zh) | 一种程序处理方法、装置、设备及计算机可读存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
TA01 | Transfer of patent application right | ||
TA01 | Transfer of patent application right |
Effective date of registration: 20220221 Address after: 550025 Huawei cloud data center, jiaoxinggong Road, Qianzhong Avenue, Gui'an New District, Guiyang City, Guizhou Province Applicant after: Huawei Cloud Computing Technologies Co.,Ltd. Address before: 518129 Bantian HUAWEI headquarters office building, Longgang District, Guangdong, Shenzhen Applicant before: HUAWEI TECHNOLOGIES Co.,Ltd. |
|
GR01 | Patent grant | ||
GR01 | Patent grant |