CN112068842A - 依赖关系的建立方法、联动编译方法及其系统 - Google Patents
依赖关系的建立方法、联动编译方法及其系统 Download PDFInfo
- Publication number
- CN112068842A CN112068842A CN202010968480.6A CN202010968480A CN112068842A CN 112068842 A CN112068842 A CN 112068842A CN 202010968480 A CN202010968480 A CN 202010968480A CN 112068842 A CN112068842 A CN 112068842A
- Authority
- CN
- China
- Prior art keywords
- function
- depended
- calling
- updated
- dependency relationship
- 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.)
- Pending
Links
- 238000000034 method Methods 0.000 title claims abstract description 56
- 230000004044 response Effects 0.000 claims abstract description 4
- 230000006870 function Effects 0.000 claims description 303
- 238000011161 development Methods 0.000 abstract description 10
- 238000013522 software testing Methods 0.000 abstract description 2
- 230000001419 dependent effect Effects 0.000 description 11
- 230000008569 process Effects 0.000 description 7
- 230000008901 benefit Effects 0.000 description 5
- 238000010586 diagram Methods 0.000 description 5
- 230000004048 modification Effects 0.000 description 3
- 238000012986 modification Methods 0.000 description 3
- 238000012545 processing Methods 0.000 description 2
- 238000012360 testing method Methods 0.000 description 2
- 230000008859 change Effects 0.000 description 1
- 238000006243 chemical reaction Methods 0.000 description 1
- 238000010276 construction Methods 0.000 description 1
- 230000010354 integration Effects 0.000 description 1
- 230000003287 optical effect Effects 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/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/43—Checking; Contextual analysis
- G06F8/433—Dependency analysis; Data or control flow analysis
Landscapes
- Engineering & Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
Abstract
本发明涉及软件测试技术领域,公开了一种用于联动编译的依赖关系的建立方法、建立系统、联动编译方法及联动编译系统。所述建立方法包括:响应于接收到被依赖函数的更新记录,按照所述更新记录对所述被依赖函数进行预编译;分析所述被依赖函数的所述更新记录,以确定所述被依赖函数中的预定义常量是否发生更新;在所述被依赖函数中的预定义常量中的任一者发生更新的情况下,查询用于调用所述被依赖函数的调用函数;基于所述更新记录,对所述调用函数进行预编译;以及建立预编译后的所述调用函数与预编译后的所述被依赖函数之间的更新的依赖关系。本发明可排除因被依赖模块与调用模块不匹配而导致的运行错误,进而可极大地提高开发效率。
Description
技术领域
本发明涉及软件测试技术领域,具体地涉及一种用于联动编译的依赖关系的建立方法、建立系统、联动编译方法及联动编译系统。
背景技术
每次集成测试或应用发布后极易发生线上问题,若发现运行错误,则会通过人工排查异常原因(例如,人工定位依赖模块与被依赖模块的版本不匹配),然后对应修改。由于测试范围大且难度高,故这种人工定位的方式耗时费力,大幅降低开发效率。开发过程中枚举和常量一般会暴露在头文件中,以支持使用方调用。为加快构建,现代工程一般对模块进行预编译。下面以枚举说明开发场景,并说明当被依赖模块的枚举或常量发生变量时,若调用模块直接调用被依赖模块,虽然编译正常但运行时会出现错误。
被依赖模块A声明如下:
调用模块B的函数逻辑如下:
预编译后,调用模块B二进制产物逻辑为:
{…上下文逻辑
Func(0)
…上下文逻辑}。
其中,Func(0)等价于Func(Color.red)。但当ModuleA.h中的enum Color声明变更时,例如:
调用模块B的预编译产物的逻辑发生变更,Func(0)等价于Func(Color.black)。此场景下,调用模块B无法感知被依赖模块A枚举发生变更,若直接调用被依赖模块A,则调用结果会发生错误。由此,在被依赖模块B的枚举或常量发生更新时,通过人工排查所有的调用模块的方式耗时费力,从而大幅降低开发效率。
发明内容
本发明的目的是提供一种用于联动编译的依赖关系的建立方法、建立系统、联动编译方法及联动编译系统,其可实现依赖模块与被依赖模块之间的联动编译,即在更新被依赖模块时可自动更新被依赖模块的标识信息(例如版本号),从而可排除因被依赖模块与调用模块不匹配而导致的运行错误,进而可极大地提高开发效率。
为了实现上述目的,本发明第一方面提供一种用于联动编译的依赖关系的建立方法,所述建立方法包括:响应于接收到被依赖函数的更新记录,按照所述更新记录对所述被依赖函数进行预编译;分析所述被依赖函数的所述更新记录,以确定所述被依赖函数中的预定义常量是否发生更新;在所述被依赖函数中的预定义常量中的任一者发生更新的情况下,查询用于调用所述被依赖函数的调用函数;基于所述更新记录,对所述调用函数进行预编译;以及建立预编译后的所述调用函数与预编译后的所述被依赖函数之间的更新的依赖关系。
优选地,在执行所述对所述调用函数进行预编译的步骤之前,所述建立方法还包括:分析所述调用函数,以确定所述调用函数与所述预定义常量中的发生更新的特定预定义常量之间是否存在关联性,相应地,在确定所述调用函数与所述特定预定义常量具有关联性的情况下,对所述调用函数进行预编译。
优选地,所述被依赖函数的更新记录包括更新的标识信息,相应地,所述分析所述被依赖函数的所述更新记录包括:将具有原始的标识信息的所述被依赖函数与具有所述更新的标识信息的所述预定义常量中的发生更新的特定预定义常量分别转换为第一预设数据结构与第二预设数据结构;以及基于所述第一预设数据结构与所述第二预设数据结构各自的多个子节点的内容,确定所述特定预定义常量是否发生更新。
优选地,所述预定义常量包括:宏定义、枚举或常量。
优选地,所述查询用于调用所述被依赖函数的调用函数包括:基于预编译记录中的所述调用函数与所述被依赖函数之间的依赖关系及被依赖函数的标识信息,查询所述调用函数。
通过上述技术方案,本发明创造性地按照所述更新记录对所述被依赖函数进行预编译,并在被依赖函数中的预定义常量发生更新时,查询用于调用所述被依赖函数的调用函数;对所述调用函数预编译,并基于预编译后的所述被依赖函数与所述调用函数,建立所述调用函数与所述被依赖函数之间的更新的依赖关系。由此,本发明可基于所述更新的依赖关系对依赖关系配置文件中的被依赖模块与调用模块之间的依赖关系进行更新,即在更新被依赖模块时可自动更新被依赖模块的标识信息(例如版本号),从而可排除因被依赖模块与调用模块不匹配而导致的运行错误,进而可极大地提高开发效率。
本发明第二方面提供一种联动编译方法,所述联动编译方法包括:接收所述被依赖函数的更新记录;分析所述被依赖函数的所述更新记录,以确定所述被依赖函数中的预定义常量是否发生更新;在所述被依赖函数中的预定义常量中的任一者发生更新的情况下,基于所述被依赖函数的更新记录及根据所述的用于联动编译的依赖关系的建立方法建立的依赖关系,对依赖关系配置文件中的所述被依赖函数与调用函数之间的依赖关系进行更新;以及根据所述依赖关系配置文件中的所述被依赖函数与所述调用函数之间的更新的依赖关系,对所述调用函数进行联动编译。
优选地,所述对所述依赖关系配置文件中的所述被依赖函数与所述调用函数之间的依赖关系进行更新包括:基于所述被依赖函数的更新记录及所述建立的依赖关系,确定所述被依赖函数与所述调用函数之间的联动的依赖关系;以及基于所述联动的依赖关系,对所述依赖关系配置文件中的所述被依赖函数与所述调用函数之间的依赖关系进行更新。
优选地,所述被依赖函数的更新记录包括更新的标识信息,相应地,所述确定所述被依赖函数与所述调用函数之间的联动的依赖关系包括:基于所述建立的依赖关系,确定与所述更新的标识信息相匹配的所述调用函数的标识信息;以及基于所述调用函数的标识信息与所述被依赖函数的所述更新的标识信息,确定所述被依赖函数与所述调用函数之间的所述联动的依赖关系。
优选地,所述标识信息为版本标识。
通过上述技术方案,本发明创造性地响应于接收到的被依赖函数的更新记录,对所述更新记录进行分析;并在所述被依赖函数中的预定义常量中的任一者发生更新时,根据依赖关系及更新记录对依赖关系配置文件中的依赖关系进行更新;然后根据更新的依赖关系,对调用函数进行联动编译。由此,本发明可在更新被依赖模块时可自动更新被依赖模块与调用模块之间的依赖关系(例如联动更新两者的版本号),从而可排除因被依赖模块与调用模块不匹配而导致的运行错误,进而可极大地提高开发效率。
本发明第三方面提供一种用于联动编译的依赖关系的建立系统,所述建立系统包括:第一预编译装置,用于响应于接收到被依赖函数的更新记录,按照所述更新记录对所述被依赖函数进行预编译;分析装置,用于分析所述被依赖函数的所述更新记录,以确定所述被依赖函数中的预定义常量是否发生更新;查询装置,用于在被依赖函数中的预定义常量中的任一者发生更新的情况下,查询用于调用所述被依赖函数的调用函数;以及第二预编译装置,用于基于所述更新记录,对所述调用函数进行预编译;以及建立装置,用于建立预编译后的所述调用函数与预编译后的所述被依赖函数之间的更新的依赖关系。
有关本发明提供的用于联动编译的依赖关系的建立系统的具体细节及益处可参阅上述针对用于联动编译的依赖关系的建立方法的描述,于此不再赘述。
本发明第四方面提供一种联动编译系统,所述联动编译系统包括:接收装置,用于接收所述被依赖函数的更新记录;分析装置,用于分析所述被依赖函数的所述更新记录,以确定所述被依赖函数中的预定义常量是否发生更新;更新装置,用于在所述被依赖函数中的预定义常量中的任一者发生更新的情况下,基于所述的用于联动编译的依赖关系的建立系统建立的依赖关系,对依赖关系配置文件中的所述被依赖函数与调用函数之间的依赖关系进行更新;以及编译装置,用于根据所述依赖关系配置文件中的所述被依赖函数与所述调用函数之间的更新的依赖关系,对所述调用函数进行联动编译。
有关本发明提供的联动编译系统的具体细节及益处可参阅上述针对联动编译方法的描述,于此不再赘述。
本发明第五方面提供一种机器可读存储介质,所述机器可读存储介质上存储有指令,该指令用于使得机器执所述的用于联动编译的依赖关系的建立方法和/或所述的联动编译方法。
本发明的其它特征和优点将在随后的具体实施方式部分予以详细说明。
附图说明
附图是用来提供对本发明实施例的进一步理解,并且构成说明书的一部分,与下面的具体实施方式一起用于解释本发明实施例,但并不构成对本发明实施例的限制。在附图中:
图1是本发明一实施例提供的用于联动编译的依赖关系的建立方法的流程图;
图2是本发明一实施例提供的联动编译方法的流程图;
图3是本发明一实施例提供的对依赖关系配置文件中的依赖关系进行更新的流程图;
图4是本发明一实施例提供的联动编译的过程的流程图;
图5是本发明一实施例提供的用于联动编译的依赖关系的建立系统的结构图;以及
图6是本发明一实施例提供的联动编译系统的结构图。
具体实施方式
以下结合附图对本发明的具体实施方式进行详细说明。应当理解的是,此处所描述的具体实施方式仅用于说明和解释本发明,并不用于限制本发明。
图1是本发明一实施例提供的用于联动编译的依赖关系的建立方法的流程图。如图1所示,所述建立方法可包括以下步骤S101-S105。
本发明的各个实施例以背景技术部分提到的被依赖模块A中的特定的预定义常量(例如枚举(enum)Color)为例,对建立用于联动编译的依赖关系的过程进行说明。其中,所述预定义常量可包括:宏定义、枚举或常量。
在执行步骤S101之前,根据需要对被依赖函数A中的枚举Color进行更新。
首先,在(先前的)预编译记录中,显示调用函数B(也可称为调用模块B)与被依赖函数A(也可称为被依赖模块A)之间的依赖关系(即所述被依赖模块A未更新之前的依赖关系),可如表1所示。当然,所述调用模块可以为一个或多个调用模块,即在表1中,除了所述调用模块B之外,还可包括用于调用模块A的其他调用模块(例如,模块C、D等)。为了方便起见,在表1中省略掉其他调用模块。
表1预编译记录中的调用模块B与被依赖模块A之间的依赖关系
模块 | 版本号 | 源码信息 | 依赖关系 |
A | 1.0 | <Git URL>:<Branch> | |
B | 2.0 | <Git URL>:<Branch> | A:<1.0> |
其次,更新被依赖函数A中定义的枚举Color,并定义该被依赖函数A的标识信息(例如,版本号1.1);然后提交与所述被依赖函数A的标识信息相对应的枚举Color的更新内容(可简称为更新记录)。具体地,所述更新记录如下:
步骤S101,响应于接收到被依赖函数的更新记录,按照所述更新记录对所述被依赖函数进行预编译。
具体地,接收所述更新记录,并根据所述更新记录对所述被依赖函数A进行预编译,以形成与所述被依赖函数A的源码信息相对应的二进制表示。
步骤S102,分析所述被依赖函数的所述更新记录,以确定所述被依赖函数中的预定义常量是否发生更新。
分析更新后的被依赖函数A(即所述更新记录),以确定所述被依赖函数A中任一预定义常量(例如所定义的枚举Color、常量等)是否发生更新。
其中,所述被依赖函数的更新记录可包括更新的标识信息(例如版本号)。相应地,所述分析所述被依赖函数的所述更新记录可包括:将具有原始的标识信息的所述被依赖函数与具有所述更新的标识信息的所述预定义常量中发生更新的特定预定义常量分别转换为第一预设数据结构与第二预设数据结构;以及基于所述第一预设数据结构与所述第二预设数据结构各自的多个子节点的内容,确定所述特定预定义常量是否发生更新。
具体地,通过AST(Abstract syntax tree,抽象语法树)转换将版本号为1.0的被依赖模块A中的枚举Color与版本号为1.1的被依赖模块A中的枚举Color分别转换为数据结构1与数据结构2(可对数据结构进行自定义,例如JSON类型);然后对比数据结构1中的各个子节点(子节点1:red;子节点2:green;子节点3:blue)与数据结构2中的相应子节点(子节点1:black;子节点2:red;子节点3:green;子节点4:blue);若数据结构1中的多个子节点与数据结构2中的多个子节点一一对应,则表明枚举Color未发生更新,否则表明枚举Color发生更新。
步骤S103,在所述被依赖函数中的预定义常量中的任一者发生更新的情况下,查询用于调用所述被依赖函数的调用函数。
对于步骤S103,所述查询用于调用所述被依赖函数的调用函数可包括:基于预编译记录中的所述调用函数与所述被依赖函数之间的依赖关系及被依赖函数的标识信息,查询所述调用函数。具体地,可通过表1所示的依赖关系查询到用于调用所述被依赖模块A的调用模块B。
当然,本发明实施例中的步骤S101并不限于上述描述的执行顺序,还可在步骤S102或S103之后执行。若先执行步骤S101,则对于步骤S102中的“确定所述被依赖函数中的预定义常量是否发生更新”,可指预编译之前或预编译之后的被依赖函数;若先执行步骤S102,则对于步骤S102中的“确定所述被依赖函数中的预定义常量是否发生更新”,可指预编译之前的被依赖函数。
在执行步骤S104之前,所述建立方法还可包括:分析所述调用函数(例如其源码),以确定所述调用函数与所述预定义常量中的发生更新的特定预定义常量之间是否存在关联性。相应地,在确定所述调用函数与所述特定预定义常量具有关联性的情况下,执行下述步骤S104。
具体地,对调用函数B的源码进行文本检索,找到以下源码:
由于被依赖函数A中的特定预定义常量枚举Color发生更新,故基于调用函数B的源码,可确定调用函数B与被依赖函数A中的枚举Color之间存在关联性,即所述调用函数B与所述被依赖函数A的特定预定义常量(例如枚举Color)具有相关性。而当调用函数B的源码不包括与枚举Color相关的信息时,则可确定调用函数B与被依赖函数A中的枚举Color的之间不存在关联性,即所述调用函数B与所述被依赖函数A的特定预定义常量(例如枚举Color)不具有相关性。
更为具体地,若调用函数中不包括所述被依赖函数的特定预定义常量相关的信息,则表明所述调用函数与所述特定预定义常量不具有相关性。若调用函数中包括与所述特定的预定义常量相关的信息(例如Func(Color.red)),则表明所述调用函数与所述特定的预定义常量(例如枚举Color)具有相关性。
步骤S104,基于所述更新记录,对所述调用函数进行预编译。
首先重新定义调用函数B的标识信息(例如,版本号2.0.0.1),然后根据被依赖函数A的更新记录,对所述调用函数B进行预编译,以形成与所述调用函数B的源码信息相对应的二进制表示。调用函数B的二进制产物逻辑为:
{…上下文逻辑
Func(1)
…上下文逻辑},
其中,Func(1)等价于Func(Color.red)。这是因为,与原始的被依赖函数A相比,所述被依赖函数A的更新记录中的枚举Color的第一行增加了“black”,故相应地要调用Color.Red的调用函数B的二进制产物逻辑由Func(0)变为Func(1)。
步骤S105,建立预编译后的所述调用函数与预编译后的所述被依赖函数之间的更新的依赖关系。
在经过步骤S101与步骤S104的预编译步骤之后,可通过调用函数B的标识信息与被依赖函数A的标识信息来表示两次编译结果建立调用函数B与被依赖函数A之间的更新的依赖关系,并将更新的依赖关系存储在文件或数据库等介质中以形成预编译记录,如表2所示。
表2预编译记录中的调用模块B与被依赖模块A之间的依赖关系
模块 | 版本号 | 源码信息 | 依赖关系 |
A | 1.0 | <Git URL>:<Branch> | |
B | 2.0 | <Git URL>:<Branch> | A:<1.0> |
A | 1.1 | <Git URL>:<Branch> | |
B | 2.0.0.1 | <Git URL>:<Branch> | A:<1.1> |
综上所述,本发明创造性地按照所述更新记录对所述被依赖函数进行预编译,并在被依赖函数中的预定义常量发生更新时,查询用于调用所述被依赖函数的调用函数;基于所述更新记录,对所述调用函数预编译,并基于预编译后的所述被依赖函数与所述调用函数,建立所述调用函数与所述被依赖函数之间的更新的依赖关系。由此,本发明可基于所述更新的依赖关系对依赖关系配置文件中的被依赖模块与调用模块之间的依赖关系进行更新,即在更新被依赖模块时可自动更新被依赖模块的标识信息(例如版本号),从而可排除因被依赖模块与调用模块不匹配而导致的运行错误,进而可极大地提高开发效率。
下面会接着介绍,在实际应用中借助上述依赖关系来实现联动编译的过程。
图2是本发明一实施例提供的联动编译方法的流程图。如图2所示,所述联动编译方法可包括以下步骤S201-S204。
步骤S201,接收所述被依赖函数的更新记录。
例如,所述被依赖函数A的更新记录如下:
[-remove]pod“A”,“1.0”
[+add]pod“A”,“1.1”。
步骤S202,分析所述被依赖函数的所述更新记录,以确定所述被依赖函数中的预定义常量是否发生更新。
具体分析过程可参见上述步骤S102的详细描述,于此不再进行赘述。
步骤S203,在所述被依赖函数中的预定义常量中的任一者发生更新的情况下,基于所述被依赖函数的更新记录及根据所述的用于联动编译的依赖关系的建立方法建立的依赖关系,对依赖关系配置文件中的所述被依赖函数与调用函数之间的依赖关系进行更新。
对于步骤S203,所述对依赖关系配置文件中的所述被依赖函数与调用函数之间的依赖关系进行更新可包括以下步骤S301-S302,如图3所示。
步骤S301,基于所述被依赖函数的更新记录及所述建立的依赖关系,确定所述被依赖函数与所述调用函数之间的联动的依赖关系。
其中,所述被依赖函数的更新记录包括更新的标识信息。更为具体地,所述标识信息可为版本标识。
相应地,所述确定所述被依赖函数与所述调用函数之间的联动的依赖关系可包括:基于所述建立的依赖关系,确定与所述更新的标识信息相匹配的所述调用函数的标识信息;以及基于所述调用函数的标识信息与所述被依赖函数的所述更新的标识信息,确定所述被依赖函数与所述调用函数之间的所述联动的依赖关系。
具体地,根据被依赖函数A的更新的标识信息(例如,版本号1.1),从表2所示的依赖关系中确定与所述更新的标识信息相匹配的调用函数B的标识信息(例如,版本号2.0.0.1);并确定所述被依赖函数A与所述调用函数B之间的联动的依赖关系是版本号为2.0.0.1的调用函数B依赖于版本号为1.1的被依赖函数A,如表3所示。
表3调用模块B与被依赖模块A之间的联动的依赖关系
模块 | 版本号 | 源码信息 | 依赖关系 |
A | 1.1 | <Git URL>:<Branch> | |
B | 2.0.0.1 | <Git URL>:<Branch> | A:<1.1> |
步骤S302,基于所述联动的依赖关系,对所述依赖关系配置文件中的所述被依赖函数与所述调用函数之间的依赖关系进行更新。
按照表3所示的调用函数B与被依赖函数A之间的联动的依赖关系,将所述依赖关系配置文件中的所述调用函数B的版本号更新为2.0.0.1,并将该依赖关系配置文件中的所述被依赖函数A的版本号更新为1.1。由此,在后续通过模块B调用模块A的过程中,不会因为两者的版本号不匹配而导致运行错误。
对于其他用于调用被依赖函数的调用函数,可执行类似的处理,直至更新完所有调用函数在相应依赖配置中的标识信息。
步骤S204,根据所述依赖关系配置文件中的所述被依赖函数与所述调用函数之间的更新的依赖关系,对所述调用函数进行联动编译。
由于所述依赖关系配置文件中的版本号为2.0.0.1的调用函数B依赖版本号为1.1的被依赖函数A,故在对版本号为2.0.0.1的调用函数B进行编译时,其直接调用版本号为1.1的被依赖函数A(即调用A模块中的Color.red),从而可有效地避免因两者的版本号不匹配而导致运行错误的情况。
下面以图4为例对联动编译的过程进行说明。
所述联动编译的过程可包括以下步骤S401-S416,如图4所示。
步骤S401,从预编译记录中获取被依赖模块A与用于调用模块A的调用模块之间的依赖关系。
步骤S402,提交被依赖模块A的更新记录。
在被依赖库处提交被依赖模块A的更新记录。
步骤S403,根据所述更新记录对被依赖模块A进行预编译。
步骤S404,对所述更新记录进行分析。
步骤S405,判断所述更新记录是否包含预定义常量的更新内容,若包含,则执行步骤S406;否则,结束。
步骤S406,基于所述依赖关系,查询用于调用被依赖模块A的调用模块。
表1中的依赖关系表明所述调用模块至少可包括调用模块B,假设本实施例中调用模块的总数为N。
步骤S407,判断调用模块i是否与所述预定义常量中发生更新的特定预定义常量相关,若相关,则执行步骤S408;否则,结束。
其中,i的初始值为1。
步骤S408,基于所述更新记录对调用模块i进行预编译。
步骤S409,生成调用模块i与被依赖模块A之间的依赖关系,并保存在预编译记录中。
步骤S410,判断i是否小于或等于N,若是,则执行步骤S407-S410;否则,执行步骤S411。
步骤S411,提交被依赖模块A的更新记录。
在应用端提交被依赖模块A的更新记录。
步骤S412,对所述更新记录进行分析。
步骤S413,判断所述更新记录是否包含预定义常量的更新内容,若包含,则执行步骤S414;否则,结束。
步骤S414,判断预编译记录中是否存在与所述被依赖模块A的版本号相匹配的联动版本号,若存在,则执行步骤S415;否则,结束。
步骤S415,按照所匹配的联动版本号对依赖关系配置文件中的相应的调用模块与所述被依赖模块A的版本进行更新。
步骤S416,遍历是否存在其他联动版本号,若存在,则执行步骤S415-S416;否则,结束。
本发明上述各个实施例可使用依赖树和文本处理精准识别相关调用模块,实现联动编译。
综上所述,本发明创造性地响应于接收到的被依赖函数的更新记录,对所述更新记录进行分析;并在所述被依赖函数中的预定义常量中的任一者发生更新时,根据依赖关系及更新记录对依赖关系配置文件中的依赖关系进行更新;然后根据更新的依赖关系,对调用函数进行联动编译。由此,本发明可在更新被依赖模块时可自动更新被依赖模块与调用模块之间的依赖关系(例如联动更新两者的版本号),从而可排除因被依赖模块与调用模块不匹配而导致的运行错误,进而可极大地提高开发效率。
图5是本发明一实施例提供的用于联动编译的依赖关系的建立系统的结构图。如图5所示,所述建立系统可包括:第一预编译装置10,用于响应于接收到被依赖函数的更新记录,按照所述更新记录对所述被依赖函数进行预编译;第一分析装置20,用于分析所述被依赖函数的所述更新记录,以确定所述被依赖函数中的预定义常量是否发生更新;查询装置30,用于在被依赖函数中的预定义常量中的任一者发生更新的情况下,查询用于调用所述被依赖函数的调用函数;第二预编译装置40,用于基于所述更新记录,对所述调用函数进行预编译;以及建立装置50,用于建立预编译后的所述调用函数与预编译后的所述被依赖函数之间的更新的依赖关系。
优选地,所述建立系统还包括:第二分析装置(未示出),用于分析所述调用函数,以确定所述调用函数与所述预定义常量中的发生更新的特定预定义常量之间是否存在关联性,相应地,所述第二预编译装置40用于在确定所述调用函数与所述特定预定义常量具有关联性的情况下,对所述调用函数进行预编译。
优选地,所述被依赖函数的更新记录包括更新的标识信息,相应地,所述分析装置20包括:转换模块(未示出),用于将具有原始的标识信息的所述被依赖函数与具有所述更新的标识信息的所述预定义常量中的发生更新的特定预定义常量分别转换为第一预设数据结构与第二预设数据结构;以及确定模块(未示出),用于基于所述第一预设数据结构与所述第二预设数据结构各自的多个子节点的内容,确定所述特定预定义常量是否发生更新。
优选地,所述预定义常量包括:宏定义、枚举或常量。
优选地,所述查询用于调用所述被依赖函数的调用函数包括:基于预编译记录中的所述调用函数与所述被依赖函数之间的依赖关系及被依赖函数的标识信息,查询所述调用函数。
有关本发明提供的用于联动编译的依赖关系的建立系统的具体细节及益处可参阅上述针对用于联动编译的依赖关系的建立方法的描述,于此不再赘述。
图6是本发明一实施例提供的联动编译系统的结构图。如图6所示,所述联动编译系统可包括:接收装置60,用于接收所述被依赖函数的更新记录;分析装置70,用于分析所述被依赖函数的所述更新记录,以确定所述被依赖函数中的预定义常量是否发生更新;更新装置80,用于在所述被依赖函数中的预定义常量中的任一者发生更新的情况下,基于所述的用于联动编译的依赖关系的建立系统建立的依赖关系,对依赖关系配置文件中的所述被依赖函数与调用函数之间的依赖关系进行更新;以及编译装置90,用于根据所述依赖关系配置文件中的所述被依赖函数与所述调用函数之间的更新的依赖关系,对所述调用函数进行联动编译。
优选地,所述更新装置80包括:确定模块(未示出),用于基于所述被依赖函数的更新记录及所述建立的依赖关系,确定所述被依赖函数与所述调用函数之间的联动的依赖关系;以及更新模块(未示出),用于基于所述联动的依赖关系,对所述依赖关系配置文件中的所述被依赖函数与所述调用函数之间的依赖关系进行更新。
优选地,所述被依赖函数的更新记录包括更新的标识信息,相应地,所述确定模块(未示出)包括:第一确定单元,用于基于所述建立的依赖关系,确定与所述更新的标识信息相匹配的所述调用函数的标识信息;以及第二确定单元,用于基于所述调用函数的标识信息与所述被依赖函数的所述更新的标识信息,确定所述被依赖函数与所述调用函数之间的所述联动的依赖关系。
优选地,所述标识信息为版本标识。
有关本发明提供的联动编译系统的具体细节及益处可参阅上述针对联动编译方法的描述,于此不再赘述。
本发明又一实施例提供一种机器可读存储介质,所述机器可读存储介质上存储有指令,该指令用于使得机器执行所述的用于联动编译的依赖关系的建立方法和/或所述的联动编译方法。
以上结合附图详细描述了本发明实施例的可选实施方式,但是,本发明实施例并不限于上述实施方式中的具体细节,在本发明实施例的技术构思范围内,可以对本发明实施例的技术方案进行多种简单变型,这些简单变型均属于本发明实施例的保护范围。
另外需要说明的是,在上述具体实施方式中所描述的各个具体技术特征,在不矛盾的情况下,可以通过任何合适的方式进行组合。为了避免不必要的重复,本发明实施例对各种可能的组合方式不再另行说明。
本领域技术人员可以理解实现上述实施例方法中的全部或部分步骤是可以通过程序来指令相关的硬件来完成,该程序存储在一个存储介质中,包括若干指令用以使得单片机、芯片或处理器(processor)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
此外,本发明实施例的各种不同的实施方式之间也可以进行任意组合,只要其不违背本发明实施例的思想,其同样应当视为本发明实施例所公开的内容。
Claims (10)
1.一种用于联动编译的依赖关系的建立方法,其特征在于,所述建立方法包括:
响应于接收到被依赖函数的更新记录,按照所述更新记录对所述被依赖函数进行预编译;
分析所述被依赖函数的所述更新记录,以确定所述被依赖函数中的预定义常量是否发生更新;
在所述被依赖函数中的预定义常量中的任一者发生更新的情况下,查询用于调用所述被依赖函数的调用函数;
基于所述更新记录,对所述调用函数进行预编译;以及
建立预编译后的所述调用函数与预编译后的所述被依赖函数之间的更新的依赖关系。
2.根据权利要求1所述的用于联动编译的依赖关系的建立方法,其特征在于,在执行所述对所述调用函数进行预编译的步骤之前,所述建立方法还包括:
分析所述调用函数,以确定所述调用函数与所述预定义常量中的发生更新的特定预定义常量之间是否存在关联性,
相应地,在确定所述调用函数与所述特定预定义常量具有关联性的情况下,对所述调用函数进行预编译。
3.根据权利要求1所述的用于联动编译的依赖关系的建立方法,其特征在于,所述被依赖函数的更新记录包括更新的标识信息,
相应地,所述分析所述被依赖函数的所述更新记录包括:
将具有原始的标识信息的所述被依赖函数与具有所述更新的标识信息的所述预定义常量中的发生更新的特定预定义常量分别转换为第一预设数据结构与第二预设数据结构;以及
基于所述第一预设数据结构与所述第二预设数据结构各自的多个子节点的内容,确定所述特定预定义常量是否发生更新。
4.根据权利要求1所述的用于联动编译的依赖关系的建立方法,其特征在于,所述预定义常量包括:宏定义、枚举或常量。
5.根据权利要求1所述的用于联动编译的依赖关系的建立方法,其特征在于,所述查询用于调用所述被依赖函数的调用函数包括:
基于预编译记录中的所述调用函数与所述被依赖函数之间的依赖关系及被依赖函数的标识信息,查询所述调用函数。
6.一种联动编译方法,其特征在于,所述联动编译方法包括:
接收所述被依赖函数的更新记录;
分析所述被依赖函数的所述更新记录,以确定所述被依赖函数中的预定义常量是否发生更新;
在所述被依赖函数中的预定义常量中的任一者发生更新的情况下,基于所述被依赖函数的更新记录及根据权利要求1-5中任一项权利要求所述的用于联动编译的依赖关系的建立方法建立的依赖关系,对依赖关系配置文件中的所述被依赖函数与调用函数之间的依赖关系进行更新;以及
根据所述依赖关系配置文件中的所述被依赖函数与所述调用函数之间的更新的依赖关系,对所述调用函数进行联动编译。
7.根据权利要求6所述的联动编译方法,其特征在于,所述对所述依赖关系配置文件中的所述被依赖函数与所述调用函数之间的依赖关系进行更新包括:
基于所述被依赖函数的更新记录及所述建立的依赖关系,确定所述被依赖函数与所述调用函数之间的联动的依赖关系;以及
基于所述联动的依赖关系,对所述依赖关系配置文件中的所述被依赖函数与所述调用函数之间的依赖关系进行更新。
8.根据权利要求7所述的联动编译方法,其特征在于,所述被依赖函数的更新记录包括更新的标识信息,
相应地,所述确定所述被依赖函数与所述调用函数之间的联动的依赖关系包括:
基于所述建立的依赖关系,确定与所述更新的标识信息相匹配的所述调用函数的标识信息;以及
基于所述调用函数的标识信息与所述被依赖函数的所述更新的标识信息,确定所述被依赖函数与所述调用函数之间的所述联动的依赖关系。
9.根据权利要求8所述的联动编译方法,其特征在于,所述标识信息为版本标识。
10.一种用于联动编译的依赖关系的建立系统,其特征在于,所述建立系统包括:
第一预编译装置,用于响应于接收到被依赖函数的更新记录,按照所述更新记录对所述被依赖函数进行预编译;
分析装置,用于分析所述被依赖函数的所述更新记录,以确定所述被依赖函数中的预定义常量是否发生更新;
查询装置,用于在被依赖函数中的预定义常量中的任一者发生更新的情况下,查询用于调用所述被依赖函数的调用函数;
第二预编译装置,用于基于所述更新记录,对所述调用函数进行预编译;以及
建立装置,用于建立预编译后的所述调用函数与预编译后的所述被依赖函数之间的更新的依赖关系。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010968480.6A CN112068842A (zh) | 2020-09-15 | 2020-09-15 | 依赖关系的建立方法、联动编译方法及其系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010968480.6A CN112068842A (zh) | 2020-09-15 | 2020-09-15 | 依赖关系的建立方法、联动编译方法及其系统 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN112068842A true CN112068842A (zh) | 2020-12-11 |
Family
ID=73695782
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010968480.6A Pending CN112068842A (zh) | 2020-09-15 | 2020-09-15 | 依赖关系的建立方法、联动编译方法及其系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112068842A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113326047A (zh) * | 2021-06-10 | 2021-08-31 | 南京大学 | 基于静态分析的c语言代码依赖关系提取方法 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9134975B1 (en) * | 2014-08-22 | 2015-09-15 | International Business Machines Corporation | Determining which computer programs are candidates to be recompiled after application of updates to a compiler |
CN107741851A (zh) * | 2017-10-12 | 2018-02-27 | 北京元心科技有限公司 | 编译系统的编译方法、装置及终端设备 |
CN108073501A (zh) * | 2016-11-14 | 2018-05-25 | 阿里巴巴集团控股有限公司 | 一种代码冲突检测方法及设备 |
CN109766099A (zh) * | 2018-12-11 | 2019-05-17 | 浙江口碑网络技术有限公司 | 前端源码编译方法、装置、存储介质及计算机设备 |
CN110262803A (zh) * | 2019-06-30 | 2019-09-20 | 潍柴动力股份有限公司 | 一种依赖关系的生成方法及装置 |
CN110704062A (zh) * | 2019-09-27 | 2020-01-17 | 天津五八到家科技有限公司 | 依赖管理方法、数据获取方法、装置及设备 |
-
2020
- 2020-09-15 CN CN202010968480.6A patent/CN112068842A/zh active Pending
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9134975B1 (en) * | 2014-08-22 | 2015-09-15 | International Business Machines Corporation | Determining which computer programs are candidates to be recompiled after application of updates to a compiler |
CN108073501A (zh) * | 2016-11-14 | 2018-05-25 | 阿里巴巴集团控股有限公司 | 一种代码冲突检测方法及设备 |
CN107741851A (zh) * | 2017-10-12 | 2018-02-27 | 北京元心科技有限公司 | 编译系统的编译方法、装置及终端设备 |
CN109766099A (zh) * | 2018-12-11 | 2019-05-17 | 浙江口碑网络技术有限公司 | 前端源码编译方法、装置、存储介质及计算机设备 |
CN110262803A (zh) * | 2019-06-30 | 2019-09-20 | 潍柴动力股份有限公司 | 一种依赖关系的生成方法及装置 |
CN110704062A (zh) * | 2019-09-27 | 2020-01-17 | 天津五八到家科技有限公司 | 依赖管理方法、数据获取方法、装置及设备 |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113326047A (zh) * | 2021-06-10 | 2021-08-31 | 南京大学 | 基于静态分析的c语言代码依赖关系提取方法 |
CN113326047B (zh) * | 2021-06-10 | 2023-11-03 | 南京大学 | 基于静态分析的c语言代码依赖关系提取方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US20210374563A1 (en) | Solution Automation | |
EP3254191B1 (en) | Apparatus and method for using parameterized intermediate representation for just-in-time compilation in database query execution engine | |
CN111158741B (zh) | 监控业务模块对第三方类库依赖关系变化的方法及装置 | |
CN112306855A (zh) | 接口自动化测试方法、装置、终端和存储介质 | |
CN111679852B (zh) | 一种冲突依赖库的检测方法及装置 | |
CN114021130A (zh) | 不依赖编译的漏洞扫描方法、装置及存储介质 | |
WO2023241529A1 (zh) | 漏洞信息处理方法、服务装置和漏洞检测模块 | |
CN112783867A (zh) | 为满足实时大数据业务需求的数据库优化方法及云服务器 | |
CN116414774A (zh) | 文件迁移方法、装置、设备及存储介质 | |
CN114780109A (zh) | Python项目第三方库依赖自动化解析与安装方法 | |
CN112068842A (zh) | 依赖关系的建立方法、联动编译方法及其系统 | |
CN107729015B (zh) | 一种确定工程代码中的无用函数的方法和装置 | |
CN114238469B (zh) | 数据提取接口开放方法、装置、计算机设备及存储介质 | |
JP5377522B2 (ja) | 公称的に互換性のない型を効率的に相関させること | |
CN116841635A (zh) | 参数配置方法、装置、设备及存储介质 | |
CN116610694A (zh) | 一种基于列和访问语句关系的规则校验方法和系统 | |
CN115858884A (zh) | 一种日志校验方法、装置和产品 | |
CN113672491B (zh) | 检测sql语句合法性的方法、存储介质及终端设备 | |
CN114647439A (zh) | 一种代码扫描的方法、代码迁移的方法及相关装置 | |
CN113568662B (zh) | 一种基于调用关系的代码变更影响范围分析方法及系统 | |
CN114416104B (zh) | 一种结构化数据文件处理方法及装置 | |
CN115422280B (zh) | 一种不确定数据结构的数据增删改的接口方法 | |
CN113190456B (zh) | 测试方法、测试装置、电子设备及存储介质 | |
CN116501348B (zh) | 一种基于java虚拟机的热更新java代码的方法 | |
JP5517904B2 (ja) | データアクセス処理管理・生成システム |
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 |