首页> 中国专利> 一种识别代码变更影响范围的方法、装置及设备

一种识别代码变更影响范围的方法、装置及设备

摘要

本申请实施例公开了一种识别代码变更影响范围的方法、装置及设备,调用编辑工程文件编译变更前源代码文件生成第一编译成果文件。获取变更后源代码文件确定存在代码变更的目标函数。从第一编辑成果文件中获取目标函数所占用的第一内存地址范围。修改变更后源代码文件变更目标函数在编译时所占用的内存地址范围,在变更后源代码文件的目标函数对应位置添加空函数,生成目标源代码文件。最后,调用编译工程文件编译目标源代码文件生成第二编译成果文件。通过比较第一编译成果文件和第二编译成果文件可以准确地确定目标函数变更后的代码变更影响范围,便于后续对变更代码影响范围进行确认,提高软件开发的效率并且确保开发的软件的质量。

著录项

  • 公开/公告号CN112698832A

    专利类型发明专利

  • 公开/公告日2021-04-23

    原文格式PDF

  • 申请/专利权人 东软集团股份有限公司;

    申请/专利号CN202011606125.0

  • 发明设计人 李志鹏;

    申请日2020-12-28

  • 分类号G06F8/41(20180101);G06F8/71(20180101);

  • 代理机构11227 北京集佳知识产权代理有限公司;

  • 代理人柳欣

  • 地址 110179 辽宁省沈阳市浑南新区新秀街2号

  • 入库时间 2023-06-19 10:43:23

说明书

技术领域

本申请涉及计算机技术领域,具体涉及一种识别代码变更影响范围的方法、装置及设备。

背景技术

在软件开发的过程中,开发人员需要根据软件开发的需要对软件代码进行修改。部分代码在变更后可能会对其他的代码部分造成影响,开发人员需要对代码变更影响范围进行测试,以确保代码的正确性。

目前,不能较为准确地确定代码变更影响范围,开发人员需要对修改后的软件代码进行代码整体的测试确认。这会导致测试软件代码的时间较长,软件开发的效率较低。若开发人员基于不够准确的代码变更影响范围进行测试核查,还会导致软件代码出现问题。因此,如何确定较为准确的代码变更影响范围是亟待解决的问题。

发明内容

有鉴于此,本申请实施例提供一种识别代码变更影响范围的方法、装置及设备,能够准确地确定代码变更影响范围,从而明确进行代码测试的范围,提高软件开发的效率以及代码的质量。

为解决上述问题,本申请实施例提供的技术方案如下:

一种识别代码变更影响范围的方法,所述方法包括:

调用编译工程文件对变更前源代码文件进行编译,生成第一编译成果文件,所述第一编译成果文件包括所述变更前源代码文件中各个函数占用的内存地址范围以及空闲内存地址范围;

获取变更后源代码文件,确定所述变更后源代码文件中存在代码变更的目标函数,并从所述第一编译成果文件中获取在对所述变更前源代码文件进行编译时所述目标函数占用的第一内存地址范围;

通过修改所述变更后源代码文件变更所述目标函数在编译时占用的内存地址范围,并在所述变更后源代码文件的目标函数对应位置添加空函数,生成目标源代码文件,以使在对所述目标源代码文件进行编译时所述目标函数占用所述空闲内存地址范围内的第二内存地址范围,所述空函数占用所述第一内存地址范围;

调用所述编译工程文件对所述目标源代码文件编译,生成第二编译成果文件;

比较所述第一编译成果文件以及所述第二编译成果文件,确定代码变更影响范围。

在一种可能的实现方式中,在确定代码变更影响范围之后,所述方法还包括:

将所述目标源代码文件还原为所述变更后源代码文件;

调用所述编译工程文件对所述变更后源代码文件进行编译。

在一种可能的实现方式中,所述方法还包括:

在调用所述编译工程文件对所述变更后源代码文件进行编译时生成的第三编译成果文件中,确定首个目标函数占用的内存地址范围的起始地址是否为首个所述第一内存地址范围的起始地址;

如果是,确定所述变更后源代码文件还原正常。

在一种可能的实现方式中,所述通过修改所述变更后源代码文件变更所述目标函数在编译时占用的内存地址范围,并在所述变更后源代码文件的目标函数对应位置添加空函数,生成目标源代码文件,包括:

在所述变更后源代码文件中添加对所述目标函数的扇区偏移指令,所述对所述目标函数的扇区偏移指令用于指示所述目标函数在编译时占用所述空闲内存地址范围内的第二内存地址范围;

根据所述第一内存地址范围确定空函数的大小,在所述变更后源代码文件的所述目标函数之前或者之后添加所述空函数,生成目标源代码文件。

在一种可能的实现方式中,所述将所述目标源代码文件还原为所述变更后源代码文件,包括:

删除所述目标源代码文件中的所述目标函数的扇区偏移指令以及所述空函数,还原所述变更后源代码文件。

在一种可能的实现方式中,所述比较所述第一编译成果文件以及所述第二编译成果文件,确定代码变更影响范围,包括:

比较所述第一编译成果文件以及所述第二编译成果文件,将所述第一编译成果文件与所述第二编译成果文件中存在差异的部分确定为代码变更影响范围。

在一种可能的实现方式中,所述方法还包括:

对所述代码变更影响范围进行突出显示。

一种识别代码变更影响范围的装置,所述装置包括:

第一编译单元,用于调用编译工程文件对变更前源代码文件进行编译,生成第一编译成果文件,所述第一编译成果文件包括所述变更前源代码文件中各个函数占用的内存地址范围以及空闲内存地址范围;

第一确定单元,用于获取变更后源代码文件,确定所述变更后源代码文件中存在代码变更的目标函数,并从所述第一编译成果文件中获取在对所述变更前源代码文件进行编译时所述目标函数占用的第一内存地址范围;

修改单元,用于通过修改所述变更后源代码文件变更所述目标函数在编译时占用的内存地址范围,并在所述变更后源代码文件的目标函数对应位置添加空函数,生成目标源代码文件,以使在对所述目标源代码文件进行编译时所述目标函数占用所述空闲内存地址范围内的第二内存地址范围,所述空函数占用所述第一内存地址范围;

第二编译单元,用于调用所述编译工程文件对所述目标源代码文件编译,生成第二编译成果文件;

比较单元,用于比较所述第一编译成果文件以及所述第二编译成果文件,确定代码变更影响范围。

一种识别代码变更影响范围的设备,包括:存储器,处理器,及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时,实现上述的识别代码变更影响范围的方法。

一种计算机可读存储介质,所述计算机可读存储介质中存储有指令,当所述指令在终端设备上运行时,使得所述终端设备执行上述的识别代码变更影响范围的方法。

由此可见,本申请实施例具有如下有益效果:

本申请实施例提供的一种识别代码变更影响范围的方法、装置及设备,先调用编辑工程文件对变更前源代码文件进行编译,生成第一编译成果文件,通过第一编译成果文件可以确定变更前源代码文件中各个函数占用的内存地址范围以及空闲内存地址范围。再获取变更后源代码文件,确定变更后源代码文件中存在代码变更的目标函数,从第一编辑成果文件中获取目标函数所占用的第一内存地址范围。第一内存地址范围是目标函数在代码变更之前所占用的内存地址范围。修改变更后源代码文件变更目标函数在编译时所占用的内存地址范围,并且在变更后源代码文件的目标函数对应位置添加空函数,生成目标源代码文件。如此可以实现利用空函数占用目标函数在代码变更之前占用的第一内存地址范围,确保在变更后源代码文件中目标函数之后的函数所占用的内存地址范围不受目标函数变更的影响。目标源代码文件在进行编译时目标函数占用空闲内存地址范围内的第二内存地址范围。调整占用内存地址范围后的目标函数占用空闲内存地址范围,不会影响到后续代码中函数在编译时所占用内存地址范围,降低了对代码影响的范围。最后,调用编译工程文件对目标源代码文件进行编译,生成第二编译成果文件。根据第二编译成果文件可以确定目标函数调整编译时所占用的内存地址范围后所占用的内存地址范围。比较第一编译成果文件以及第二编译成果文件,可以确定目标函数变更后的代码变更影响范围。如此可以较为准确地实现对于代码变更影响范围的识别,便于后续对变更代码影响范围进行确认,提高软件开发的效率并且确保开发的软件的质量。

附图说明

图1为本申请实施例提供的源代码在编译过程中占用内存地址范围的示意图;

图2为本申请实施例提供的一种识别代码变更影响范围的方法的流程图;

图3为本申请实施例提供的一种CHK文件的示意图;

图4为本申请实施例提供的一种目标源代码文件在编译过程中占用内存地址范围的示意图;

图5为本申请实施例提供的另一种源代码在编译过程中占用内存地址范围的示意图;

图6为本申请实施例提供的另一种识别代码变更影响范围的方法的流程图;

图7为本申请实施例提供的一种修改后的变更后源代码文件的示意图;

图8为本申请实施例提供的一种识别代码变更影响范围的装置的结构示意图。

具体实施方式

为使本申请的上述目的、特征和优点能够更加明显易懂,下面结合附图和具体实施方式对本申请实施例作进一步详细的说明。

为了便于理解和解释本申请实施例提供的技术方案,下面将先对本申请的背景技术进行说明。

发明人在对传统的代码变更进行研究后发现,现有的软件代码在编译时生成的指令和数据是按照编译顺序来占用内存地址的。当对软件代码中的部分函数进行变更后,变更的函数在编译时所占用的内存地址范围会发生变化,同时会影响后续全部的函数在编译时所占用的内存地址范围。开发人员在代码变更后,可以通过查看编译时所占用的内存地址范围对代码变更影响范围进行确认,以确保代码的质量。而由于变更的函数会导致后续全部的函数在编译时所占用的内存地址范围变化,开发人员无法准确确定出真正的代码变更影响范围。

由于目前不能准确地确定代码变更影响范围,开发人员需要对较大的影响范围进行确认,导致测试时间延长,降低软件开发的效率。若开发人员基于不够准确的代码变更影响范围进行确认,还可能会遗漏部分代码变更影响范围,导致未变更的代码出现问题,影响软件代码的质量。

基于此,本申请实施例提供了一种识别代码变更影响范围的方法,先调用编辑工程文件对变更前源代码文件进行编译,生成第一编译成果文件,通过第一编译成果文件可以确定变更前源代码文件中各个函数占用的内存地址范围以及空闲内存地址范围。再获取变更后源代码文件,确定变更后源代码文件中存在代码变更的目标函数,从第一编辑成果文件中获取目标函数所占用的第一内存地址范围。第一内存地址范围是目标函数在代码变更之前所占用的内存地址范围。修改变更后源代码文件变更目标函数在编译时所占用的内存地址范围,并且在变更后源代码文件的目标函数对应位置添加空函数,生成目标源代码文件。如此可以实现利用空函数占用目标函数在代码变更之前占用的第一内存地址范围,确保目标函数之后的函数所占用的内存地址范围不受目标函数变更的影响。目标源代码文件在进行编译时目标函数占用空闲内存地址范围内的第二内存地址范围。调整占用内存地址范围后的目标函数占用空闲内存地址范围,不会影响到后续代码中函数所占用内存地址范围,降低了对代码影响的范围。最后,调用编译工程文件对目标源代码文件进行编译,生成第二编译成果文件。根据第二编译成果文件可以确定目标函数调整编译时所占用的内存地址范围后所占用的内存地址范围。比较第一编译成果文件以及第二编译成果文件,可以确定目标函数变更后的代码变更影响范围。如此可以较为准确地实现对于代码变更影响范围的识别,便于后续对准确的变更代码影响范围进行确认,提高了软件代码的正确率以及软件开发的效率。

为了便于理解本申请实施例提供的识别代码变更影响范围的方法,下面结合图1所示的场景示例进行说明。参见图1,该图为本申请实施例提供的源代码在编译过程中占用内存地址范围的示意图。

在实际应用中,源代码在编译的过程中会占用一定的内存地址范围。源代码中的各个函数所占用的内存地址范围,是根据源代码编译过程中的各个函数的编译顺序依次确定的。例如图1中CODE区域所示,CODE区域为源代码编译时所占用的内存地址区域。另外,内存地址范围中还具有空闲区域,由于空闲区域与CODE区域无关,可以将变更的目标函数在编译时所占用的内存地址范围调整至空闲区域中。为了避免目标函数在变更后影响其他函数所占用的内存地址范围,将目标函数占用的内存地址范围调整至空闲区域的第二内存地址范围中。并且确定目标函数在变更之前所占用的第一内存地址范围,利用空函数占用第一内存地址范围,可以使得目标函数在修改后第一内存地址范围也具有对应的函数,也不会影响到后续函数在编译时所占用的内存地址范围。对变更后源代码进行目标函数在编译时占用的内存地址范围的调整,并在变更后源代码文件的目标函数对应位置添加空函数后可以得到目标源代码文件。通过比较编译工程文件对变更前源代码文件进行编译生成的第一编译成果文件,和编译工程文件对目标源代码文件编译生成的第二编译成果文件,可以确定由于变更目标函数导致的代码变更影响范围。

本领域技术人员可以理解,图1所示的示意图仅是本申请的实施方式可以在其中得以实现的一个示例。本申请实施方式的适用范围不受到该框架任何方面的限制。

为了便于理解本申请,下面结合附图对本申请实施例提供的一种实现辅助变道的方法进行说明。

参见图2,该图为本申请实施例提供的一种识别代码变更影响范围的方法的流程图,如图2所示,该方法可以包括S201-S205:

S201:调用编译工程文件对变更前源代码文件进行编译,生成第一编译成果文件,第一编译成果文件包括变更前源代码文件中各个函数占用的内存地址范围以及空闲内存地址范围。

变更前源代码文件是指在本次代码变更之前的源代码文件。源代码文件可以通过编译工程文件进行编译,在调用编译工程文件对变更前源代码文件进行编译的过程中,生成对应的指令和数据。编译得到的指令和数据储存至内存中,占用一定的内存地址。在本申请实施例中,内存地址可以是ROM(Read-Only Memory,只读存储器)或者RAM(RandomAccess Memory,随机存取存储器)中的地址。

需要说明的是,对源代码文件进行编译时所占用的内存地址范围是在预先确定的内存区域中的。内存地址中还具有空闲区域,空闲区域是未使用的内存区域。

在编译的过程中,生成对应的第一编译成果文件,第一成果文件中包括变更前源代码文件中各个函数编译得到的指令和数据,以及指令和数据所占的内存地址范围。在一种可能的实现方式中,第一编译成果文件可以为CHK格式文件或者是MAP格式文件。参见图3,该图为本申请实施例提供的一种CHK文件的示意图。其中,实线方框中的数据表示内存地址,虚线方框中的数据为编译代码之后得到的指令和数据。根据编译得到的第一编译成果文件可以确定变更前源代码文件中的各个函数在编译时所占用的内存地址范围以及空闲内存地址范围。

S202:获取变更后源代码文件,确定变更后源代码文件中存在代码变更的目标函数,并从第一编译成果文件中获取在对变更前源代码文件进行编译时目标函数占用的第一内存地址范围。

获取变更后源代码文件,根据变更后源代码文件确定本次代码变更所变更的目标函数,目标函数可以为一个或者多个。本申请实施例不限定确定目标函数的方法,在一种可能的实现方式中,可以将变更前源代码文件和变更后源代码文件进行比较来确定发生代码变更的目标函数。

根据第一编译成果文件确定目标函数在发生变更之前编译所占用的第一内存地址范围。

可以理解的是,当目标函数发生变更后,目标函数编译生成的指令和数据会发生变化,对应的所占用的内存地址范围与第一内存地址范围相比会发生变化,进而影响后续编译的函数所占用的内存地址范围。

本申请实施例中不限定目标函数发生变更的方式,可以是对目标函数进行修改、删除或者是增加,当目标函数是在本次代码变更时新增加的函数时,从第一编译成果文件中获取的目标函数的第一内存地址范围为空。

S203:通过修改变更后源代码文件变更目标函数在编译时占用的内存地址范围,并在变更后源代码文件的目标函数对应位置添加空函数,生成目标源代码文件,以使在对目标源代码文件进行编译时目标函数占用空闲内存地址范围内的第二内存地址范围,空函数占用第一内存地址范围。

参见图4,该图为本申请实施例提供的一种目标源代码文件在编译过程中占用内存地址范围的示意图。为了避免目标函数在变更后影响后续编译的函数所占用的内存地址范围,可以通过修改变更后源代码文件的目标函数在编译时占用的内存地址范围。将变更后的目标函数在编译时所占用的内存地址范围调整至空闲内存地址范围中的第二内存地址范围。

在一种可能的实现方式中,在修改变更后源代码文件变更目标函数在编译时占用的内存地址范围之前,还需要确定空闲内存地址足够使用。

需要说明的是,在对目标函数进行删除变更操作时,对应的第二内存地址范围可以是空。

在对目标函数在编译时占用的内存地址范围进行调整后,目标函数在编译时所原先占用的内存地址范围,也就是第一内存地址范围,会出现空缺,影响后续编译的函数在编译时所占用内存地址范围。所以,还需要在变更后源代码文件的目标函数对应位置添加空函数,生成目标源代码文件。参见图5,该图为本申请实施例提供的另一种源代码在编译过程中占用内存地址范围的示意图。空函数可以是不影响目标源代码文件的编译结果,在编译时实现对第一内存地址范围的内存占用的函数。空函数具体可以为Dummy函数。

通过在变更后源代码文件的目标函数对应位置添加空函数,可以使得在编译目标函数时可以编译空函数,占用第一内存地址范围。从而实现了避免在对其他函数的进行编译时,对其他函数编译所占的内存地址范围的影响,便于后续识别得到较为准确的代码变更影响范围。

S204:调用编译工程文件对目标源代码文件编译,生成第二编译成果文件。

目标源代码文件在编译时占用的内存地址范围与变更前源代码文件在编译时占用的内存地址范围存在着不同。调用编译工程文件对目标源代码文件进行编译,生成对应的第二编译成果文件。第二编译成果文件中具有目标源代码文件在编译时生成的指令和数据,以及占用的内存地址范围。

S205:比较第一编译成果文件以及第二编译成果文件,确定代码变更影响范围。

对第一编译成果文件和第二编译成果文件进行比较,得到代码变更影响范围。

具体的,比较第一编译成果文件以及第二编译成果文件,确定代码变更影响范围,包括:

比较第一编译成果文件以及第二编译成果文件,将第一编译成果文件与第二编译成果文件中存在差异的部分确定为代码变更影响范围。

编译成果文件中包括源代码文件编译生成的指令和数据,以及指令和数据所占用的内存地址范围。第一编译成果文件与第二编译成果文件中存在差异的部分具体可以是存在差异的指令和数据以及存在差异的内存地址范围。

可以理解的是,通过在目标函数的位置添加空函数,实现对于第一内存地址范围的占用。但是,空函数在编译时得到的数据与变更前的目标函数在编译时得到的指令和数据不同,在进行第一编译成果文件与第二编译成果文件的比较时,可以得到第一内存地址范围内储存的数据差异。此外,第二内存地址范围内具有目标函数在编译时得到的指令和数据,与变更前源代码文件编译时得到的空闲内存地址范围内的无数据储存不同,可以得到第二内存地址范围内储存的数据的差异。

在一种可能的实现方式中,目标数据的变更方式可以为删除,第二内存地址范围为空。对应的,第一编译成果文件与第二编译成果文件中存在差异的部分可以为第一内存地址范围内的指令和数据。在另一种可能的实现方式中,目标数据的变更方式可以为增加,第一内存地址范围为空。对应的,第一编译成果文件与第二编译成果文件中存在差异的部分可以为第二内存地址范围内的指令和数据。

在一种可能的实现方式中,方法还包括:

对代码变更影响范围进行突出显示。

为了便于确定代码变更影响范围,可以将代码变更影响范围进行突出显示。例如,对代码变更影响范围进行不同颜色的显示。

基于上述S201-S205的相关内容可知,通过修改变更后源代码文件变更目标函数在编译时占用的内存地址范围,并在变更后源代码文件的目标函数对应位置添加空函数,可以利用空函数占用变更前源代码文件中目标函数在编译时占用的内存地址范围,并将在变更后源代码文件中编译时占用的内存地址范围调整至空闲内存地址范围中。如此实现了避免对其他函数编译所占用的内存地址范围的影响,缩小了代码变更影响范围,以便通过比较第一编译成果文件以及第二编译成果文件,识别得到准确的代码变更影响范围。从而可以实现仅针对准确的代码变更影响范围进行代码测试,节省对于未变更的代码的测试过程,提高了软件代码开发的效率以及软件代码的质量。

目标源代码文件是修改变更后源代码文件变更目标函数在编译时占用的内存地址范围,并在变更后源代码文件的目标函数对应位置添加空函数后得到的源代码文件。目标源代码文件的编译结果受到空函数和目标函数编译时占用的内存地址范围调整的影响,对于内存地址范围的使用效率不高,并且对源代码文件的执行效率也较低。

基于此,本申请实施例还提供一种识别代码变更影响范围的方法,参见图6,该图为本申请实施例提供的另一种识别代码变更影响范围的方法的流程图。除上述S201-S205以外,在S205之后,方法还包括以下两个步骤:

S206:将目标源代码文件还原为变更后源代码文件。

可以理解的是,对目标源代码文件还原为变更后源代码文件的方法与将变更后源代码文件修改为目标源代码文件的方法是相反的过程。

基于目标源代码文件是对变更后源代码文件进行目标函数在编译时占用的内存地址范围的修改,以及添加空函数之后得到的。可以对应的从目标源代码文件中删除空函数,并将目标函数在编译时占用的内存地址范围修改至原有的内存地址范围中,从而实现对于变更后源代码文件的还原。

在一种可能的实现方式中,在将目标源代码文件还原为变更后源代码文件之前,还需要确定内存地址中可以使用的源代码文件编译所占用的内存地址足够。确定可以将目标函数编译后占用的内存地址调整至源代码文件编译所占用的代码段的内存地址范围中。

本申请实施例提供一种通过修改变更后源代码文件变更目标函数在编译时占用的内存地址范围,并在变更后源代码文件的目标函数对应位置添加空函数,生成目标源代码文件的具体实施方式。并且对应的提供一种将目标源代码文件还原为变更后源代码文件的具体实施方式,具体请参见下文。

S207:调用编译工程文件对变更后源代码文件进行编译。

对变更后的源代码文件进行编译,得到变更后的源代码文件的编译结果,重新确定内存地址范围内写入的源代码文件的编译结果。

基于S206-S207的相关内容可知,相较于目标源代码文件,还原得到的变更后源代码文件的编译效率更高。并且编译时所使用的地址具有一致性和连续性,提高了内存地址的使用效率和指令执行效率,便于后续利用变更后源代码文件进行软件开发。

在一种可能的实现方式中,可以通过设置目标函数的扇区偏移指令来修改变更后源代码文件的目标函数在编译时占用的内存地址范围。通过修改变更后源代码文件变更目标函数在编译时占用的内存地址范围,并在变更后源代码文件的目标函数对应位置添加空函数,生成目标源代码文件,具体包括:

在变更后源代码文件中添加对目标函数的扇区偏移指令,对目标函数的扇区偏移指令用于指示目标函数在编译时占用空闲内存地址范围内的第二内存地址范围;

根据第一内存地址范围确定空函数的大小,在变更后源代码文件的目标函数之前或者之后添加空函数,生成目标源代码文件。

扇区偏移指令用于指示函数编译之后所占用的内存地址范围。在变更后源代码文件中添加针对目标函数的扇区偏移指令,将目标函数编译后所占用的内存地址范围迁移至第二内存地址范围,使得变更后的目标函数所占用的内存地址范围不影响后续编译的其他函数在编译时所占用的内存地址范围。

在调整目标函数编译后占用的内存地址范围之后,原先在编译目标函数后占用的内存地址范围出现空缺。为了防止后续编译的函数占用,导致后续编译的函数所占用的内存地址范围出现变动,根据第一内存地址范围确定空函数的大小,并在变更后源代码文件的目标函数之前或者之后添加空函数,使得在编译目标函数之前或者之后编译空函数,占用第一内存地址范围。

参见图7,该图为本申请实施例提供的一种修改后的变更后源代码文件的示意图。其中,图7(a)为在目标函数之前添加空函数的目标源代码文件的示意图。在对目标源代码文件进行编译时,会先编译在目标函数之前的空函数,在编译空函数时占用第一内存地址范围。在编译空函数之后会编译目标函数,在编译目标函数时占用第二内存地址范围。之后会按照原有的编译顺序编译之后的函数,后续的函数在编译时会按照顺序占用第一内存地址范围之后的内存地址范围。图7(b)为在目标函数之后添加空函数的目标源代码文件的示意图。在对目标源代码文件进行编译时,会先编译目标函数,在编译目标函数时占用第二内存地址范围。在编译目标函数之后会编译空函数,在编译空函数时占用第一内存地址范围。之后会按照原有的编译顺序编译之后的函数,后续的函数在编译时会按照编译顺序占用第一内存地址范围之后的内存地址范围。如此可以避免目标函数在变更后对其他函数占用的内存地址范围的造成影响。

利用添加扇区偏移指令和空函数的变更后源代码文件生成目标源代码文件。

在本申请实施例中,通过扇区偏移指令调整目标函数在编译时所占用的内存地址范围,并利用空函数占用第一内存地址范围,可以使得在变更目标函数时不影响其他函数的编译所占用的内存地址范围。从而可以根据生成的目标源代码较为准确地确定变更目标函数所导致的代码变更影响范围。

进一步的,对应于上述生成目标源代码文件的方法,本申请实施例提供一种将目标源代码文件还原为变更后源代码文件的具体实施方式,具体包括:

删除目标源代码文件中的目标函数的扇区偏移指令以及空函数,还原变更后源代码文件。

从目标源代码文件中删除目标函数的扇区偏移指令和空函数,还原得到未进行调整的变更后源代码文件。

基于上述内容可知,得到的变更后源代码文件在编译时占用的内存地址范围是连续的,提高了内存地址的使用效率和指令执行效率,便于后续利用变更后源代码文件进行软件开发。

在利用目标源代码文件还原得到变更后源代码文件之后,还可以对变更后源代码文件进行验证,确保变更后源代码文件还原正常。

在除上述S206-S207以外,方法还可以包括:

在调用编译工程文件对变更后源代码文件进行编译时生成的第三编译成果文件中,确定首个目标函数占用的内存地址范围的起始地址是否为首个第一内存地址范围的起始地址;

如果是,确定变更后源代码文件还原正常。

在对目标函数进行变更时,目标函数以外的其他函数未发生改变。当目标函数为一个时,在目标函数编译顺序之前的其他函数所占用的内存地址范围不变。所以,变更后的目标函数所占用的内存地址范围的起始地址,与第一内存地址范围的起始地址相同。在当目标函数为多个时,首个编译的目标函数之前的其他函数所占用的内存地址范围不变。所以,首个目标函数所占用的内存地址范围的起始地址,与对应的首个第一内存地址范围的起始地址相同。

需要说明的是,若目标函数是新增加的函数,目标函数对应的第一内存地址为空,则无法通过目标函数在第三编译成果文件中获取的占用的内存地址范围的起始地址与第一内存地址范围的起始地址进行比较,来确定还原的变更后源代码文件还原正常。

在得到通过目标源代码文件还原得到的变更后源代码文件之后,可以调用编译工程文件对变更后源代码文件进行编译,得到第三编译成果文件。从第三编译成果文件中可以得到变更后源代码文件中各个函数所占用的内存地址范围。

从第三编译成果文件中获取首个目标函数占用的内存地址范围的起始地址。在当目标函数为一个时,首个目标函数为该目标函数;在当目标函数为多个时,首个目标函数为按照编译顺序确定的第一个目标函数。

将获取的首个目标函数占用的内存地址范围的起始地址与首个第一内存地址范围的起始地址进行比较。若首个目标函数占用的内存地址范围的起始地址为首个第一内存地址范围的起始地址,则可以确定变更后源代码文件还原正常。

基于上述内容可知,通过将首个目标函数占用的内存地址范围的起始地址和首个第一内存地址范围的起始地址进行比较,可以对目标源代码文件还原后的变更后源代码文件进行是否还原准确的判断。如此可以确保目标函数所占的内存地址范围已还原,便于后续利用变更后源代码文件进行开发。

基于上述方法实施例提供的识别代码变更影响范围的方法,本申请实施例还提供了一种识别代码变更影响范围的装置,下面将结合附图对该识别代码变更影响范围的装置进行说明。

参见图8,该图为本申请实施例提供的一种识别代码变更影响范围的装置的结构示意图。如图8所示,该识别代码变更影响范围的装置包括:

第一编译单元801,用于调用编译工程文件对变更前源代码文件进行编译,生成第一编译成果文件,所述第一编译成果文件包括所述变更前源代码文件中各个函数占用的内存地址范围以及空闲内存地址范围;

第一确定单元802,用于获取变更后源代码文件,确定所述变更后源代码文件中存在代码变更的目标函数,并从所述第一编译成果文件中获取在对所述变更前源代码文件进行编译时所述目标函数占用的第一内存地址范围;

修改单元803,用于通过修改所述变更后源代码文件变更所述目标函数在编译时占用的内存地址范围,并在所述变更后源代码文件的目标函数对应位置添加空函数,生成目标源代码文件,以使在对所述目标源代码文件进行编译时所述目标函数占用所述空闲内存地址范围内的第二内存地址范围,所述空函数占用所述第一内存地址范围;

第二编译单元804,用于调用所述编译工程文件对所述目标源代码文件编译,生成第二编译成果文件;

比较单元805,用于比较所述第一编译成果文件以及所述第二编译成果文件,确定代码变更影响范围。

在一种可能的实现方式中,在确定代码变更影响范围之后,所述装置还包括:

还原单元,用于将所述目标源代码文件还原为所述变更后源代码文件;

第三编译单元,用于调用所述编译工程文件对所述变更后源代码文件进行编译。

在一种可能的实现方式中,所述装置还包括:

判断单元,用于在调用所述编译工程文件对所述变更后源代码文件进行编译时生成的第三编译成果文件中,确定首个目标函数占用的内存地址范围的起始地址是否为首个所述第一内存地址范围的起始地址;

第二确定单元,用于如果是,确定所述变更后源代码文件还原正常。

在一种可能的实现方式中,所述修改单元803,具体用于在所述变更后源代码文件中添加对所述目标函数的扇区偏移指令,所述对所述目标函数的扇区偏移指令用于指示所述目标函数在编译时占用所述空闲内存地址范围内的第二内存地址范围;

根据所述第一内存地址范围确定空函数的大小,在所述变更后源代码文件的所述目标函数之前或者之后添加所述空函数,生成目标源代码文件。

在一种可能的实现方式中,所述还原单元,具体用于删除所述目标源代码文件中的所述目标函数的扇区偏移指令以及所述空函数,还原所述变更后源代码文件。

在一种可能的实现方式中,所述比较单元805,具体用于比较所述第一编译成果文件以及所述第二编译成果文件,将所述第一编译成果文件与所述第二编译成果文件中存在差异的部分确定为代码变更影响范围。

在一种可能的实现方式中,所述装置还包括:

显示单元,用于对所述代码变更影响范围进行突出显示

另外,本申请实施例还提供了一种识别代码变更影响范围的设备,,包括:存储器,处理器,及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时,实现如上述实施例所述的识别代码变更影响范围的方法。

另外,本申请实施例还提供了一种计算机可读存储介质,所述计算机可读存储介质中存储有指令,当所述指令在终端设备上运行时,使得所述终端设备执行如上述实施例所述的识别代码变更影响范围的方法。

本申请实施例提供的一种识别代码变更影响范围的装置及设备,先调用编辑工程文件对变更前源代码文件进行编译,生成第一编译成果文件,通过第一编译成果文件可以确定变更前源代码文件中各个函数占用的内存地址范围以及空闲内存地址范围。再获取变更后源代码文件,确定变更后源代码文件中存在代码变更的目标函数,从第一编辑成果文件中获取目标函数所占用的第一内存地址范围。第一内存地址范围是目标函数在代码变更之前所占用的内存地址范围。修改变更后源代码文件变更目标函数在编译时所占用的内存地址范围,并且在变更后源代码文件的目标函数对应位置添加空函数,生成目标源代码文件。如此可以实现利用空函数占用目标函数在代码变更之前占用的第一内存地址范围,确保在变更后源代码文件中目标函数之后的函数所占用的内存地址范围不受目标函数变更的影响。目标源代码文件在进行编译时目标函数占用空闲内存地址范围内的第二内存地址范围。调整占用内存地址范围后的目标函数占用空闲内存地址范围,不会影响到后续代码中函数在编译时所占用内存地址范围,降低了对代码影响的范围。最后,调用编译工程文件对目标源代码文件进行编译,生成第二编译成果文件。根据第二编译成果文件可以确定目标函数调整编译时所占用的内存地址范围后所占用的内存地址范围。比较第一编译成果文件以及第二编译成果文件,可以确定目标函数变更后的代码变更影响范围。如此可以较为准确地实现对于代码变更影响范围的识别,便于后续对变更代码影响范围进行确认,提高软件开发的效率并且确保开发的软件的质量。

需要说明的是,本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。对于实施例公开的系统或装置而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。

应当理解,在本申请中,“至少一个(项)”是指一个或者多个,“多个”是指两个或两个以上。“和/或”,用于描述关联对象的关联关系,表示可以存在三种关系,例如,“A和/或B”可以表示:只存在A,只存在B以及同时存在A和B三种情况,其中A,B可以是单数或者复数。字符“/”一般表示前后关联对象是一种“或”的关系。“以下至少一项(个)”或其类似表达,是指这些项中的任意组合,包括单项(个)或复数项(个)的任意组合。例如,a,b或c中的至少一项(个),可以表示:a,b,c,“a和b”,“a和c”,“b和c”,或“a和b和c”,其中a,b,c可以是单个,也可以是多个。

还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。

结合本文中所公开的实施例描述的方法或算法的步骤可以直接用硬件、处理器执行的软件模块,或者二者的结合来实施。软件模块可以置于随机存储器(RAM)、内存、只读存储器(ROM)、电可编程ROM、电可擦除可编程ROM、寄存器、硬盘、可移动磁盘、CD-ROM、或技术领域内所公知的任意其它形式的存储介质中。

对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本申请。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本申请的精神或范围的情况下,在其它实施例中实现。因此,本申请将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号