CN106445476B - 一种代码变更信息确定方法、装置及电子设备 - Google Patents
一种代码变更信息确定方法、装置及电子设备 Download PDFInfo
- Publication number
- CN106445476B CN106445476B CN201510490603.9A CN201510490603A CN106445476B CN 106445476 B CN106445476 B CN 106445476B CN 201510490603 A CN201510490603 A CN 201510490603A CN 106445476 B CN106445476 B CN 106445476B
- Authority
- CN
- China
- Prior art keywords
- code
- function
- change
- version
- file
- 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.)
- Active
Links
Images
Abstract
本申请提供一种代码变更信息确定方法、装置及电子设备,方法包括:获取第一版本和第二版本的代码变更位置信息,代码变更位置信息记录有第一版本的代码变更位置,及第二版本的代码变更位置;根据第一版本的代码变更位置,在第一版本对应的第一代码工程文件中,提取第一代码工程文件中发生代码变更的第一函数信息;及根据第二版本的代码变更位置,在第二版本对应的第二代码工程文件中,提取第二代码工程文件中发生代码变更的第二函数信息;根据第一函数信息和第二函数信息,比对第一代码工程文件和第二代码工程文件中同一文件路径的函数变更情况,确定第一版本和第二版本的代码变更函数信息。本申请实现了两个对比版本的代码变更函数信息的确定。
Description
技术领域
本发明涉及代码处理技术领域,具体涉及一种代码变更信息确定方法、装置及电子设备。
背景技术
代码开发中,不同版本的代码存在代码变更的情况,获知不同版本之间的代码变更信息,对于代码开发、测试过程中查找代码质量问题具有重要参考意义。
目前具有代码管理功能的工具有多种,SVN(Subversion)作为开放源代码的版本控制系统,是其中一个常用的进行代码管理的工具;SVN提供有获取两个对比版本的代码变更信息的功能,具体方式为:通过SVN提供的SVN日志可获取到SVN管理的两个对比版本的代码变更信息(如新、旧版本之间的代码变更信息),SVN日志可通过SVN提供的“svn diff”命令调取。
本发明的发明人在研究过程中发现,目前SVN日志仅包含两个对比版本中发生代码变更的变更文件路径、变更行等代码变更位置信息,并不存在发生代码变更的函数、类名等代码变更函数信息;而函数作为执行代码功能的基本单位,对于分析代码质量问题的意义重大,因此如何改进现有确定两个对比版本的代码变更信息的方式,实现对两个对比版本的代码变更函数信息的确定,成为本领域技术人员需要考虑的问题。
发明内容
有鉴于此,本发明实施例提供一种代码变更信息确定方法、装置及电子设备,以实现对两个对比版本的代码变更函数信息的确定。
为实现上述目的,本发明实施例提供如下技术方案:
一种代码变更信息确定方法,包括:
获取第一版本和第二版本的代码变更位置信息,所述代码变更位置信息记录有第一版本的代码变更位置,及第二版本的代码变更位置;
根据所述第一版本的代码变更位置,在第一版本对应的第一代码工程文件中,提取第一代码工程文件中发生代码变更的第一函数信息;及根据第二版本的代码变更位置,在第二版本对应的第二代码工程文件中,提取第二代码工程文件中发生代码变更的第二函数信息;
根据所述第一函数信息和第二函数信息,比对第一代码工程文件和第二代码工程文件中同一文件路径的函数变更情况,确定第一版本和第二版本的代码变更函数信息。
本发明实施例还提供一种代码变更信息确定装置,包括:
变更位置获取模块,用于获取第一版本和第二版本的代码变更位置信息,所述代码变更位置信息记录有第一版本的代码变更位置,及第二版本的代码变更位置;
第一函数信息提取模块,用于根据所述第一版本的代码变更位置,在第一版本对应的第一代码工程文件中,提取第一代码工程文件中发生代码变更的第一函数信息;
第二函数信息提取模块,用于根据第二版本的代码变更位置,在第二版本对应的第二代码工程文件中,提取第二代码工程文件中发生代码变更的第二函数信息;
变更函数确定模块,用于根据所述第一函数信息和第二函数信息,比对第一代码工程文件和第二代码工程文件中同一文件路径的函数变更情况,确定第一版本和第二版本的代码变更函数信息。
本发明实施例还提供一种电子设备,包括上述所述的代码变更信息确定装置。
基于上述技术方案,本发明实施例提供的代码变更信息确定方法,可根据第一版本和第二版本的代码变更位置信息,从第一版本的源代码工程文件和第二版本的源代码工程文件中,提取出同一文件路径下代码变更位置所涉及的具体代码变更函数信息,实现两个对比版本的代码变更函数信息的确定;而且整个代码变更函数信息的确定过程,无需人工查看源代码工程文件,代码变更函数信息的确定极为便捷,可为后续进行代码变更的分析工作提供了快速、有效的参考。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。
图1为本发明实施例提供的代码变更信息确定方法的流程图;
图2为本发明实施例提供的新、旧版本之间的代码变更函数信息的提取流程示意图;
图3为本发明实施例提供的获取第一版本和第二版本的代码变更位置信息的方法流程图;
图4为本发明实施例提供的从原始代码变更位置信息中提取代码变更位置信息的方法流程图;
图5为本发明实施例提供的通过SVN日志获取的原始代码变更位置信息的部分内容示意图;
图6为本发明实施例提供的提取第一函数信息的方法流程图;
图7为本发明实施例提供的在变更文件中查找对应变更行的函数信息的方法流程图;
图8为本发明实施例提供的结合向上查找结果和向下查找结果的方法流程图;
图9为本发明实施例提供的确定第一版本和第二版本的代码变更函数信息的方法流程图;
图10为本发明实施例提供的代码变更信息确定装置的结构框图;
图11为本发明实施例提供的第一函数信息提取模块的结构框图;
图12为本发明实施例提供的查找单元的结构框图;
图13为本发明实施例提供的变更位置获取模块的结构框图;
图14为本发明实施例提供的变更函数确定模块的结构框图;
图15为本发明实施例提供的电子设备的硬件结构框图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
图1为本发明实施例提供的代码变更信息确定方法的流程图,该方法可应用于具有数据处理能力的电子设备,电子设备如电脑等用户侧设备,服务器等网络侧设备;
参照图1,该方法可以包括:
步骤S100、获取第一版本和第二版本的代码变更位置信息,所述代码变更位置信息记录有第一版本的代码变更位置,及第二版本的代码变更位置;
第一版本和第二版本可以认为是两个需进行代码变更对比的版本;如第一版本和第二版本中的其中一个可以为代码的新版本,另一个可以为代码的旧版本;
由于SVN日志提供有两个对比版本的变更文件路径、变更行等代码变更位置信息,因此本发明实施例可通过SVN日志实现第一版本和第二版本的代码变更位置信息的获取;
通过所述代码变更位置信息,本发明实施例可得到第一版本涉及代码变更的变更文件路径、变更行等代码变更位置,得到第二版本涉及代码变更的变更文件路径、变更行等代码变更位置。
步骤S110、根据所述第一版本的代码变更位置,在第一版本对应的第一代码工程文件中,提取第一代码工程文件中发生代码变更的第一函数信息;及根据第二版本的代码变更位置,在第二版本对应的第二代码工程文件中,提取第二代码工程文件中发生代码变更的第二函数信息;
某一版本的代码工程文件是指某一个时间内所保存的完整代码工程文件(代码工程文件可保存在服务器中),不同的代码编辑时间节点所拉取的代码工程不同,因此本发明实施例可利用第一版本的编辑时间节点,去拉取第一版本对应的第一代码工程文件,利用第二版本的编辑时间节点,去拉取第二版本对应的第二代码工程文件;
两个对比版本的代码变更信息,具体可以指这两个版本的代码工程文件的差异信息,如代码工程文件中变更的代码内容、函数、行等信息;
通过第一版本的代码变更位置中记录的变更文件路径及变更文件路径的变更行,与第一代码工程文件进行脚本对比处理,本发明实施例可从第一代码工程文件中提取出涉及代码变更的变更文件路径、变更函数名、及变更类名等第一函数信息;
同理,通过第二版本的代码变更位置中记录的变更文件路径及变更文件路径的变更行,与第二代码工程文件进行脚本对比处理,本发明实施例可从第二代码工程文件中提取出涉及代码变更的变更文件路径、变更函数名、及变更类名等第二函数信息。
步骤S120、根据所述第一函数信息和第二函数信息,比对第一代码工程文件和第二代码工程文件中同一文件路径的函数变更情况,确定第一版本和第二版本的代码变更函数信息。
第一函数信息记录了第一代码工程文件中不同变更文件路径下,各变更文件的变更函数名及变更类名的函数信息,第二函数信息中记录有第二代码工程文件中不同变更文件路径下,各变更文件的变更函数名及变更类名的函数信息;
将第一代码工程文件和第二代码工程文件中发生代码变更的同一个文件路径下的函数信息进行变更比对,可找出新增、删除、修改的函数,从而获取到第一版本和第二版本的代码变更函数信息。
在图1所示方法的基础上,针对新、旧版本之间的代码变更函数信息的提取,图2示出了相应的处理流程;如图2所示,本发明实施例可通过“svn diff”命令提取新、旧版本的代码变更位置信息;
从该代码变更位置信息中提取出旧版本涉及代码变更的变更文件路径、变更行等信息,得到旧版本的代码变更位置;从该代码变更位置信息中提取出新版本涉及代码变更的变更文件路径、变更行等信息,得到新版本的代码变更位置;
提取旧版本的代码工程文件和新版本的代码工程文件;
将旧版本涉及代码变更的变更文件路径、变更行等信息,与旧版本的代码工程文件进行脚本比对处理,提取出旧版本的代码工程文件涉及代码变更的变更文件路径、变更函数名及变更类名等第一函数信息;
将新版本涉及代码变更的变更文件路径、变更行等信息,与新版本的代码工程文件进行脚本比对处理,提取出新版本的代码工程文件涉及代码变更的变更文件路径、变更函数名及变更类名等第二函数信息;
将旧版本的代码工程文件涉及代码变更的变更文件路径、变更函数名及变更类名等,与新版本的代码工程文件涉及代码变更的变更文件路径、变更函数名及变更类名等进行脚本比对处理,可比对出同一变更文件路径下,新版本的代码工程文件中新增、删除、和修改的函数(包括函数的函数名及其类名等),得出代码变更函数信息。
本发明实施例提供的代码变更信息确定方法,包括:获取第一版本和第二版本的代码变更位置信息,所述代码变更位置信息记录有第一版本的代码变更位置,及第二版本的代码变更位置;根据所述第一版本的代码变更位置,在第一版本对应的第一代码工程文件中,提取第一代码工程文件中发生代码变更的第一函数信息;及根据第二版本的代码变更位置,在第二版本对应的第二代码工程文件中,提取第二代码工程文件中发生代码变更的第二函数信息;根据所述第一函数信息和第二函数信息,比对第一代码工程文件和第二代码工程文件中同一文件路径的函数变更情况,确定第一版本和第二版本的代码变更函数信息。可以看出,本发明实施例提供的代码变更信息确定方法,可根据第一版本和第二版本的代码变更位置信息,从第一版本的源代码工程文件和第二版本的源代码工程文件中,提取出同一文件路径下代码变更位置所涉及的具体代码变更函数信息,实现两个对比版本的代码变更函数信息的确定;而且整个代码变更函数信息的确定过程,无需人工查看源代码工程文件,代码变更函数信息的确定极为便捷,可为后续进行代码变更的分析工作提供了快速、有效的参考。
可选的,通过SVN日志获取的第一版本和第二版本的原始代码变更位置信息,可能存在一些与变更文件路径、变更行不相关的无效信息,本发明实施例可对通过SVN日志获取的原始代码变更位置信息进行有效信息的提取,实现记录有第一版本的代码变更位置和第二版本的代码变更位置的有效代码变更位置信息的获取;
对应的,图3示出了本发明实施例提供的获取第一版本和第二版本的代码变更位置信息的方法流程图,参照图3,该方法可以包括:
步骤S200、通过SVN日志获取第一版本和第二版本的原始代码变更位置信息;
原始代码变更位置信息可以认为是通过“svn diff”命令调取的SVN日志中记录的原始信息。
步骤S210、从所述原始代码变更位置信息中提取第一版本和第二版本中发生代码变更的代码变更位置信息。
具体的,本发明实施例可从所述原始代码变更位置信息中提取发生代码变更的变更文件路径,提取变更文件路径下变更的起止行号,最后剔除不可执行文件对应的变更文件路径;保留可执行文件的变更文件路径,及变更文件路径下的变更起止行号,得到所述代码变更位置信息;
对应的,图4示出了本发明实施例提供的从原始代码变更位置信息中提取代码变更位置信息的方法流程图,参照图4,该方法可以包括:
步骤S300、从所述原始代码变更位置信息中提取发生代码变更的变更文件路径;
可选的,发生代码变更的变更文件路径具有预设的路径标识,如“Index”(具体标识形式可根据需要设定),本发明实施例可从SVN日志提供的原始代码变更位置信息中进行逐行读取,当读取到“Index”标识时,则提取出“Index”标识表示的发生代码变更的变更文件路径;
步骤S310、从所述原始代码变更位置信息中提取各变更文件路径对应的变更行;
变更行是指变更文件路径对应的变更文件中,发生代码变更的起止行号;变更行具有预设的行标识,如“@@”(具体标识形式可根据需要设定),本发明实施例可在提取到变更文件路径后,在变更文件路径下根据标识“@@”提取变更文件路径下代码变更涉及的起止行号;
步骤S320、将所提取的各变更文件路径中的无效文件路径剔除,得到有效的变更文件路径,及有效的变更文件路径对应的变更行;其中,无效文件路径为文件路径对应的文件不可执行。
无效文件路径可以文件路径的结尾标识符确定,文件路径的结尾标识符可以包括:可执行标识符和不可执行标识符;如在OC以及其它C语言中文件路径以“.m”结尾(具体标识符形式可根据需要设定),则对应文件是指可执行文件;相反的,若文件路径以“.h”结尾(具体标识符形式可根据需要设定),则对应文件为头文件,一般头文件是主要用来设置一些声明,不含具体的函数实现,为不可执行文件;
可选的,本发明实施例可以文件路径是否以“.m”结尾,将不可执行文件的文件变更路径、变更行去除,得到有效的变更文件路径(即可执行文件对应的变更文件路径),及有效的变更文件路径对应的变更行。
为便于理解,图5示出了通过SVN日志获取的原始代码变更位置信息的部分内容,这些内容包含在SVN日志提供的svn_diff.txt文件中;
如图5所示,“---”开头的代表旧版本的代码工程文件里涉及到代码变更的变更文件名和所在路径,“+++”开头的代表新版本的代码工程文件里涉及到代码变更的变更文件名和所在路径;“@@-1120,6”表示旧版本的代码工程文件从第1120行开始变更6行。“++1120,7@”代表新版本的代码工程文件从1120行开始变更7行;
根据svn_diff.txt中的信息,可在新、旧版本代码工程文件的相应变更文件(变更文件与变更文件路径相应)中查找到各变更文件的变更起止行号,得到新版本的代码变更位置,及旧版本的代码变更位置。
可选的,代码变更位置可以包括:变更文件路径,和变更文件路径对应变更行;在得到第一版本的代码变更位置,和第二版本的代码变更位置后,本发明实施例可分别确定出第一代码工程文件中发生代码变更的第一函数信息,第二代码工程文件中发生代码变更的第二函数信息;第一函数信息的确定原理和第二函数信息的确定原理类似,下面以第一函数信息的确定过程为例进行介绍;
图6为本发明实施例提供的提取第一函数信息的方法流程图,参照图6,该方法可以包括:
步骤S400、在第一代码工程文件中确定与第一版本的变更文件路径对应的变更文件;
在确定了记录第一版本的变更文件路径,和变更文件路径对应变更行的代码变更位置后,本发明实施例可以第一版本的变更文件路径,在第一代码工程文件中查找到相应的变更文件;
第一版本的变更文件路径可能有多个,本发明实施例可在第一代码工程文件中确定出多个相应的变更文件。
步骤S410、在所述变更文件中查找对应变更行的函数信息,以得到第一函数信息。
根据第一版本的变更文件路径涉及的变更行,本发明实施例可在第一代码工程文件中与变更文件路径对应的变更文件中,查找所涉及的变更行所对应的函数信息;在第一代码工程文件中,综合各变更文件涉及的变更行对应的函数信息,得到第一函数信息。
依照图6所示方式,也可确定出第二代码工程文件中发生代码变更的第二函数信息;即本发明实施例可在第二代码工程文件中确定与第二版本的变更文件路径对应的变更文件,在所确定的变更文件中查找对应变更行的函数信息,以得到第二函数信息。
各变更文件中查找发生代码变更的函数信息的方式类似,下面以在一个变更文件中查找发生代码变更的函数信息为例进行介绍;图7为本发明实施例提供的在变更文件中查找对应变更行的函数信息的方法流程图,参照图7,该方法可以包括:
步骤S500、在所述变更文件中,从对应变更行的起始行向上查找类名和函数名,提取第一个有类名特征的行所对应的类名,及第一个有函数名特征的行所对应的函数名;
以变更起始行为基准,在变更文件中逐行向上查找,当查找到第一个有类名特征的字符串,则提取该行的类名信息,并记录行号;可选的,在OC语言的可执行文件中,有类名特征的行是以“@implementation”(具体形式可根据需要设定)开头的行;
同时,以变更起始行为基准,在变更文件中逐行向上查找时,若查找到第一个出现的有函数名特征的字符串,则提取该行的函数名,并记录行号;可选的,在OC语言的可执行文件中,有函数名特征的行可以是以加减号和括号开头且结尾没有分号的行;
在向上查找的过程中,如果查找到变更文件的首行都未曾遇到符合特征的函数名或者类名,则不记录。
步骤S510、在所述变更文件中,以对应变更行的起始行和终止行为查找范围,向下查找类名和函数名,提取所有有类名特征的行所对应的类名,及第一个有函数名特征的行所对应的函数名;
以变更起始行为基准,在变更文件中逐行向下查找,在没有超出终止行的情况下,遇到的所有符合类名特征的字符串,则提取所有有类名特征的行所对应的类名并记录行号;可选的,在OC语言的可执行文件中,有类名特征的行,是以“@implementation”(具体形式可根据需要设定)开头的行;
同时,以变更起始行为基准,在变更文件中逐行向下查找,且在没有超出终止行的情况下,若查找到第一个出现有函数名特征的字符串,则提取该行的函数名,并记录行号;可选的,在OC语言的可执行文件中,有函数名特征的行,可以是以加减号和括号开头且结尾没有分号的行;
在向下查找的过程中,如果查找到终止行都未曾遇到符合特征的函数名或者类名,则不记录。
函数信息的查找是在新、旧版本的代码工程文件中的逻辑是一样的;以在旧版本的代码工程文件中查找为例,比如变更起始行是第90行,那么就在旧工程的变更文件里找第90行,开始向上逐行查找,直到找到有“@implement”开头的行,从中取出类名,找到有函数名特征的符号取出函数名;向下查找就是从第90行开始,如果一共变更了8行,那么就找到第97行,把中间符合类名和函数名规则的行找到,提取出类名和函数名,并提取第一个有函数名特征的行所对应的函数名。
步骤S520、结合向上查找类名和函数名的结果和向下查找类名和函数名的结果,得到所述变更文件存在函数变更的函数信息。
可选的,图8示出了结合向上查找结果和向下查找结果的方法流程图,参照图8,该方法可以包括:
步骤S600、将在所述变更文件中向上查找及向下查找所提取的函数名和类名依据所在行号按序排列;
可选的,可按升序排列。
步骤S610、将排在两个类名之间的函数所属于的类确定为第一个类;
步骤S620、若存在两个类名之间没有任何函数的情况,则删除第一个类;
步骤S630、若排在最后一个的是类名,则删除最后的类名;
步骤S640、若排在第一个的是函数,则记录排在第一个的函数为无类名的函数。
值得注意的是,步骤S610~步骤S640为函数名和类名按序排列后的不同处理分支,步骤之间可以没有明显顺序。
在本发明实施例中,向上查找和向下查找所获取的函数名和类名依据所在行号进行升序排列;排在两个类名之间的函数所属于的类即是第一个类;如果两个类名之间没有任何函数,则删除第一个类(具体可删除第一个类的类名);如果排在最后一个的是类名,则删除最后的类名;如果排在第一个的是函数名,则记录为没有类名的函数。通过上述处理,则可实现向上查找和向下查找内容的结合,得到代码工程文件中发生代码变更的函数信息。
可选的,在确定第一版本和第二版本的代码变更函数信息的过程中,本发明实施例主要是确定函数在第一代码工程文件和第二代码工程文件中的变更类型;变更类型反应了函数在第一代码工程文件和第二代码工程文件中的函数变更情况,包括:函数在第二代码工程文件中删除,函数在第二代码工程文件中新增,函数在第二代码工程文件中修改等;
对应的,图9示出了本发明实施例提供的确定第一版本和第二版本的代码变更函数信息的方法流程图,参照图9,该方法可以包括:
步骤S700、在同一文件路径下,确定第一函数信息和第二函数信息的函数在第一代码工程文件和第二代码工程文件中的变更类型;
步骤S710、记录函数对应的变更类型标识、函数名及所属类名和文件路径,得到第一版本和第二版本的代码变更函数信息。
具体的,函数在第二代码工程文件中删除时,对应的变更类型标识为删除标识;函数在第二代码工程文件中新增时,对应的变更类型标识为新增标识;函数在第二代码工程文件中修改时,对应的变更类型标识为修改标识;
在确定第一函数信息和第二函数信息后,本发明实施例可逐个变更文件的查找和对比函数的变更情况;如果是新版本的代码工程文件中独有的函数,则说明新版本的代码中有新增函数,记录新增标识、函数名及所属类名和文件路径;如果是旧版本的代码工程文件中独有的函数,则说明新版本的代码中删除了该函数,记录该函数的删除标识、函数名及所属类名和文件路径;如果是新、旧版本工程文件中均有的函数,则说明新版本的代码对该函数作了修改,记录该函数的修改标识,函数名及所属类名和文件路径;
可选的,第一版本可以为旧版本,第二版本可以为新版本。
下面对本发明实施例提供的代码变更信息确定方法的一个应用例进行介绍:
1、调用“svn diff”命令获取新、旧版本的原始代码变更位置信息,保存到svn_diff.txt文件中(文件名可根据需要设定);
2、逐行读取svn_diff.txt文件,根据标志位“Index”提取有代码变更的变更文件路径,根据标志符号“@@”提取变更代码涉及的起止行号;再通过文件路径是否以“.m”结尾将不可执行文件的代码相关变更信息去除,最后将所有有效的变更文件路径和行号信息写入另一个文件,命名为ocdiffi.tx文件(文件名可根据需要设定);ocdiffi.tx文件中记录有新版本的变更文件路径和变更行,及旧版本的变更文件路径和变更行;
3、逐行读取ocdiff.txt文件,根据ocdiffi.tx文件中记录的变更文件路径,在新版本的代码工程文件中查找相应变更文件、在旧版本的代码工程文件中查找相应变更文件;
4、根据新、旧版本的代码工程文件的变更文件所涉及的变更行,在变更文件中查找新版本的变更函数信息,和旧版本的变更函数信息;新版本的变更函数信息写入文件diff_new.txt(文件名可根据需要设定),旧版本的变更函数信息写入diff_old.txt(文件名可根据需要设定);
新版本的变更函数信息,和旧版本的变更函数信息的查找原理类似,主要流程为:
(1)、以变更起始行为基准,在变更文件中逐行向上查找,将找到的第一个有类名特征的字符串保留,所谓有类名特征在OC语言的可执行文件中,是以“@implementation”开头的行,读取该行的类名信息,并记录行号;同时将查找到的第一个出现的有函数名特征的字符串保留,所谓有函数名特征在OC语言的可执行文件中,是以加减号和括号开头且结尾没有分号的行,读取该行的函数名信息,并记录行号;如果找到文件的第一行都未曾遇到符合特征的函数名或者类名,则不记录
(2)、逐行向下查找,在没有超出变更行数的情况下,遇到的所有符合类名特征的字符串保留,也即是以“@implementation”开头的行,读取该行的类名信息,并记录行号;同时,向下查找到第一个出现的有函数名特征的字符串,则保留,读取该行的函数名信息,并记录行号;如果找到文件的最大变更行号都未曾遇到符合特征的函数名或者类名则不记录;
(3)、将(1)和(2)获取的函数名和类名依据所在行号进行升序排列;排在两个类名之间的函数所属于的类即是第一个类;如果两个类名之间没有任何函数,则删除第一个类;如果排在最后一个的是类名,则删除;排在第一个的是函数名,则记录为没有类名的函数。
5、读取diff_new.txt和diff_old.txt文件,在diff_new.txt和diff_old.txt表示的变更文件中,逐个变更文件的查找和对比函数的变更情况;如果是新版本的代码工程文件中独有的函数,说明新版本的代码有新增函数,如果是旧版本的代码工程文件中独有的函数,说明新版本的代码删除了该函数,如果是新、旧版本的代码工程文件中都有的函数,说明该函数在新版本的代码中作了修改;
根据查找对比的变更情况,记录变更类型标识(新增标识、删除标识、修改标识)、函数名及其所属类名和文件路径,写入diff_all.txt文件中(文件名可根据需要设定);至此,确定出新、旧版本的代码变更函数信息。
本发明实施例实现了两个对比版本的代码变更函数信息的确定,而且整个代码变更函数信息的确定过程,无需人工查看源代码工程文件,代码变更函数信息的确定极为便捷,为后续进行代码变更的分析工作提供了快速、有效的参考。
下面对本发明实施例提供的代码变更信息确定装置进行介绍,下文描述的代码变更信息确定装置可认为是设置于电子设备中,用于实现上文描述的代码变更信息确定方法的功能模块架构;下文描述的代码变更信息确定装置,可与上文描述的代码变更信息确定方法相互对应参照。
图10为本发明实施例提供的代码变更信息确定装置的结构框图,该装置可应用于电子设备,该电子设备可如电脑等用户侧设备,服务器等网络侧设备;
参照图10,该装置可以包括:
变更位置获取模块100,用于获取第一版本和第二版本的代码变更位置信息,所述代码变更位置信息记录有第一版本的代码变更位置,及第二版本的代码变更位置;
第一函数信息提取模块200,用于根据所述第一版本的代码变更位置,在第一版本对应的第一代码工程文件中,提取第一代码工程文件中发生代码变更的第一函数信息;
第二函数信息提取模块300,用于根据第二版本的代码变更位置,在第二版本对应的第二代码工程文件中,提取第二代码工程文件中发生代码变更的第二函数信息;
可选的,虽然第一函数信息提取模块200和第二函数信息提取模块300的处理对象不一致,但第一函数信息提取模块200和第二函数信息提取模块300的处理逻辑类似。
变更函数确定模块400,用于根据所述第一函数信息和第二函数信息,比对第一代码工程文件和第二代码工程文件中同一文件路径的函数变更情况,确定第一版本和第二版本的代码变更函数信息。
可选的,所述代码变更位置可以包括:变更文件路径,和变更文件路径对应变更行;对应的,图11示出了本发明实施例提供的第一函数信息提取模块200的一种可选结构,参照图11,第一函数信息提取模块200可以包括:
变更文件确定单元210,用于在第一代码工程文件中确定与第一版本的变更文件路径对应的变更文件;
查找单元220,用于在所述变更文件中查找对应变更行的函数信息,以得到第一函数信息。
可选的,图12示出了本发明实施例提供的查找单元220的一种可选结构,参照图12,查找单元220可以包括:
第一提取单元221,用于在所述变更文件中,从对应变更行的起始行向上查找类名和函数名,提取第一个有类名特征的行所对应的类名,及第一个有函数名特征的行所对应的函数名;
第二提取单元222,用于在所述变更文件中,以对应变更行的起始行和终止行为查找范围,向下查找类名和函数名,提取所有有类名特征的行所对应的类名,及第一个有函数名特征的行所对应的函数名;
结合单元223,用于结合向上查找类名和函数名的结果和向下查找类名和函数名的结果,得到所述变更文件存在函数变更的函数信息。
可选的,结合单元223具体可用于,将在所述变更文件中向上查找及向下查找所提取的函数名和类名依据所在行号按序排列;将排在两个类名之间的函数所属于的类确定为第一个类;若存在两个类名之间没有任何函数的情况,则删除第一个类;若排在最后一个的是类名,则删除最后的类名;若排在第一个的是函数,则记录排在第一个的函数为无类名的函数。
可选的,图13示出了本发明实施例提供的变更位置获取模块100的一种可选结构,参照图13,变更位置获取模块100可以包括:
原始信息获取单元110,用于通过SVN日志获取第一版本和第二版本的原始代码变更位置信息;
变更位置提取单元120,用于从所述原始代码变更位置信息中提取第一版本和第二版本中发生代码变更的代码变更位置信息。
可选的,变更位置提取单元120具体可用于,从所述原始代码变更位置信息中提取发生代码变更的变更文件路径;从所述原始代码变更位置信息中提取各变更文件路径对应的变更行;将所提取的各变更文件路径中的无效文件路径剔除,得到有效的变更文件路径,及有效的变更文件路径对应的变更行;其中,无效文件路径为文件路径对应的文件不可执行。
可选的,图14示出了本发明实施例提供的变更函数确定模块400的一种可选结构,参照图14,变更函数确定模块400可以包括:
变更类型确定单元410,用于在同一文件路径下,确定第一函数信息和第二函数信息的函数在第一代码工程文件和第二代码工程文件中的变更类型;
记录单元420,用于记录函数对应的变更类型标识、函数名及所属类名和文件路径,得到第一版本和第二版本的代码变更函数信息;
其中,变更类型包括:函数在第二代码工程文件中删除,对应的变更类型标识为删除标识;函数在第二代码工程文件中新增,对应的变更类型标识为新增标识;函数在第二代码工程文件中修改,对应的变更类型标识为修改标识。
本发明实施例还提供一种电子设备,该电子设备可以包括上述所述的代码变更信息确定装置,采用本发明实施例提供的电子设备确定代码变更信息,可实现两个对比版本的代码变更函数信息的确定,而且整个代码变更函数信息的确定过程,无需人工查看源代码工程文件,代码变更函数信息的确定极为便捷,为后续进行代码变更的分析工作提供了快速、有效的参考。
图15示出了本发明实施例提供的电子设备的硬件结构框图,该电子设备可以如电脑等用户侧设备,服务器等网络侧设备;参照图15,该电子设备可以包括:处理器1,通信接口2,存储器3和通信总线4;
其中处理器1、通信接口2、存储器3通过通信总线4完成相互间的通信;
可选的,通信接口2可以为通信模块的接口,如GSM模块的接口;
处理器1,用于执行程序;
存储器3,用于存放程序;
程序可以包括程序代码,所述程序代码包括计算机操作指令。
处理器1可能是一个中央处理器CPU,或者是特定集成电路ASIC(ApplicationSpecific Integrated Circuit),或者是被配置成实施本发明实施例的一个或多个集成电路。
存储器3可能包含高速RAM存储器,也可能还包括非易失性存储器(non-volatilememory),例如至少一个磁盘存储器。
其中,程序可具体用于:
获取第一版本和第二版本的代码变更位置信息,所述代码变更位置信息记录有第一版本的代码变更位置,及第二版本的代码变更位置;
根据所述第一版本的代码变更位置,在第一版本对应的第一代码工程文件中,提取第一代码工程文件中发生代码变更的第一函数信息;及根据第二版本的代码变更位置,在第二版本对应的第二代码工程文件中,提取第二代码工程文件中发生代码变更的第二函数信息;
根据所述第一函数信息和第二函数信息,比对第一代码工程文件和第二代码工程文件中同一文件路径的函数变更情况,确定第一版本和第二版本的代码变更函数信息。
本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。对于实施例公开的装置而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。
专业人员还可以进一步意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。
结合本文中所公开的实施例描述的方法或算法的步骤可以直接用硬件、处理器执行的软件模块,或者二者的结合来实施。软件模块可以置于随机存储器(RAM)、内存、只读存储器(ROM)、电可编程ROM、电可擦除可编程ROM、寄存器、硬盘、可移动磁盘、CD-ROM、或技术领域内所公知的任意其它形式的存储介质中。
对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本发明。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本发明的精神或范围的情况下,在其它实施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。
Claims (11)
1.一种代码变更信息确定方法,其特征在于,包括:
获取第一版本和第二版本的代码变更位置信息,所述代码变更位置信息记录有第一版本的代码变更位置,及第二版本的代码变更位置;
根据所述第一版本的代码变更位置,在第一版本对应的第一代码工程文件中,提取第一代码工程文件中发生代码变更的第一函数信息;及根据第二版本的代码变更位置,在第二版本对应的第二代码工程文件中,提取第二代码工程文件中发生代码变更的第二函数信息;
根据所述第一函数信息和第二函数信息,比对第一代码工程文件和第二代码工程文件中同一文件路径的函数变更情况,确定第一版本和第二版本的代码变更函数信息。
2.根据权利要求1所述的代码变更信息确定方法,其特征在于,所述代码变更位置包括:变更文件路径,和变更文件路径对应变更行;
所述根据所述第一版本的代码变更位置,在第一版本对应的第一代码工程文件中,提取第一代码工程文件中发生代码变更的第一函数信息包括:
在第一代码工程文件中确定与第一版本的变更文件路径对应的变更文件;
在所述变更文件中查找对应变更行的函数信息,以得到第一函数信息。
3.根据权利要求2所述的代码变更信息确定方法,其特征在于,所述在所述变更文件中查找对应变更行的函数信息包括:
在所述变更文件中,从对应变更行的起始行向上查找类名和函数名,提取第一个有类名特征的行所对应的类名,及第一个有函数名特征的行所对应的函数名;
在所述变更文件中,以对应变更行的起始行和终止行为查找范围,向下查找类名和函数名,提取所有有类名特征的行所对应的类名,及第一个有函数名特征的行所对应的函数名;
结合向上查找类名和函数名的结果和向下查找类名和函数名的结果,得到所述变更文件存在函数变更的函数信息。
4.根据权利要求3所述的代码变更信息确定方法,其特征在于,所述结合向上查找类名和函数名的结果和向下查找类名和函数名的结果包括:
将在所述变更文件中向上查找及向下查找所提取的函数名和类名依据所在行号按序排列;
将排在两个类名之间的函数所属于的类确定为第一个类;
若存在两个类名之间没有任何函数的情况,则删除第一个类;
若排在最后一个的是类名,则删除最后的类名;
若排在第一个的是函数,则记录排在第一个的函数为无类名的函数。
5.根据权利要求1所述的代码变更信息确定方法,其特征在于,所述获取第一版本和第二版本的代码变更位置信息包括:
通过SVN日志获取第一版本和第二版本的原始代码变更位置信息;
从所述原始代码变更位置信息中提取第一版本和第二版本中发生代码变更的代码变更位置信息。
6.根据权利要求5所述的代码变更信息确定方法,其特征在于,所述从所述原始代码变更位置信息中提取第一版本和第二版本中发生代码变更的代码变更位置信息包括:
从所述原始代码变更位置信息中提取发生代码变更的变更文件路径;
从所述原始代码变更位置信息中提取各变更文件路径对应的变更行;
将所提取的各变更文件路径中的无效文件路径剔除,得到有效的变更文件路径,及有效的变更文件路径对应的变更行;其中,无效文件路径为文件路径对应的文件不可执行。
7.根据权利要求1-6中任一项所述的代码变更信息确定方法,其特征在于,所述比对第一代码工程文件和第二代码工程文件中同一文件路径的函数变更情况,确定第一版本和第二版本的代码变更函数信息包括:
在同一文件路径下,确定第一函数信息和第二函数信息的函数在第一代码工程文件和第二代码工程文件中的变更类型;
记录函数对应的变更类型标识、函数名及所属类名和文件路径,得到第一版本和第二版本的代码变更函数信息;
其中,变更类型包括:函数在第二代码工程文件中删除,对应的变更类型标识为删除标识;函数在第二代码工程文件中新增,对应的变更类型标识为新增标识;函数在第二代码工程文件中修改,对应的变更类型标识为修改标识。
8.一种代码变更信息确定装置,其特征在于,包括:
变更位置获取模块,用于获取第一版本和第二版本的代码变更位置信息,所述代码变更位置信息记录有第一版本的代码变更位置,及第二版本的代码变更位置;
第一函数信息提取模块,用于根据所述第一版本的代码变更位置,在第一版本对应的第一代码工程文件中,提取第一代码工程文件中发生代码变更的第一函数信息;
第二函数信息提取模块,用于根据第二版本的代码变更位置,在第二版本对应的第二代码工程文件中,提取第二代码工程文件中发生代码变更的第二函数信息;
变更函数确定模块,用于根据所述第一函数信息和第二函数信息,比对第一代码工程文件和第二代码工程文件中同一文件路径的函数变更情况,确定第一版本和第二版本的代码变更函数信息。
9.根据权利要求8所述的代码变更信息确定装置,其特征在于,所述第一函数信息提取模块包括:
变更文件确定单元,用于在第一代码工程文件中确定与第一版本的变更文件路径对应的变更文件;
查找单元,用于在所述变更文件中查找对应变更行的函数信息,以得到第一函数信息;
所述查找单元包括:
第一提取单元,用于在所述变更文件中,从对应变更行的起始行向上查找类名和函数名,提取第一个有类名特征的行所对应的类名,及第一个有函数名特征的行所对应的函数名;
第二提取单元,用于在所述变更文件中,以对应变更行的起始行和终止行为查找范围,向下查找类名和函数名,提取所有有类名特征的行所对应的类名,及第一个有函数名特征的行所对应的函数名;
结合单元,用于结合向上查找类名和函数名的结果和向下查找类名和函数名的结果,得到所述变更文件存在函数变更的函数信息。
10.一种电子设备,其特征在于,包括权利要求8或9所述的代码变更信息确定装置。
11.一种存储介质,其特征在于,所述存储介质中存储有计算机可执行指令,所述计算机可执行指令被处理器加载并执行时,实现如上权利要求1至7任一项所述的代码变更信息确定方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510490603.9A CN106445476B (zh) | 2015-08-11 | 2015-08-11 | 一种代码变更信息确定方法、装置及电子设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510490603.9A CN106445476B (zh) | 2015-08-11 | 2015-08-11 | 一种代码变更信息确定方法、装置及电子设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN106445476A CN106445476A (zh) | 2017-02-22 |
CN106445476B true CN106445476B (zh) | 2020-04-07 |
Family
ID=58093821
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510490603.9A Active CN106445476B (zh) | 2015-08-11 | 2015-08-11 | 一种代码变更信息确定方法、装置及电子设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN106445476B (zh) |
Families Citing this family (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109002295B (zh) * | 2018-10-19 | 2022-01-04 | 武汉斗鱼网络科技有限公司 | 一种静态代码扫描方法、系统、服务器及存储介质 |
CN109582300A (zh) * | 2018-11-30 | 2019-04-05 | 阿里巴巴集团控股有限公司 | 基于路径的代码变更分析方法、装置及设备 |
CN109710519A (zh) * | 2018-12-13 | 2019-05-03 | 平安普惠企业管理有限公司 | 项目差异报告生成方法、装置、计算机设备及存储介质 |
CN109491923B (zh) * | 2018-12-14 | 2021-11-12 | 东软集团股份有限公司 | 新增异常代码的确定方法、装置、介质及电子设备 |
CN110134595A (zh) * | 2019-04-19 | 2019-08-16 | 平安科技(深圳)有限公司 | Svn资源库测试前的分析方法、装置、计算机设备 |
CN110716739A (zh) * | 2019-09-19 | 2020-01-21 | 平安科技(深圳)有限公司 | 一种代码变更信息统计方法、系统和可读存储介质 |
CN111045723B (zh) * | 2019-12-11 | 2024-01-26 | 腾讯科技(深圳)有限公司 | 关联系统间的代码变更通知方法、装置 |
CN112035358B (zh) * | 2020-08-31 | 2024-04-16 | 中国银行股份有限公司 | 一种确定检测信息的方法、装置、设备 |
CN113568620B (zh) * | 2021-06-16 | 2023-08-22 | 杭州华橙软件技术有限公司 | 一种代码文件处理方法、装置、设备及介质 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102279749A (zh) * | 2011-08-30 | 2011-12-14 | 大唐移动通信设备有限公司 | 一种代码归并方法和设备 |
CN103092761A (zh) * | 2013-02-05 | 2013-05-08 | 烽火通信科技股份有限公司 | 基于差异信息文件识别和检查修改代码块的方法及装置 |
CN103198010A (zh) * | 2012-01-06 | 2013-07-10 | 腾讯科技(深圳)有限公司 | 软件测试方法、装置及系统 |
CN103473075A (zh) * | 2013-09-23 | 2013-12-25 | 迈普通信技术股份有限公司 | 代码变更控制系统及方法 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP4826497B2 (ja) * | 2007-02-19 | 2011-11-30 | 日本電気株式会社 | プログラム変更内容通知システム、プログラム変更内容通知方法およびプログラム変更内容通知用プログラム |
-
2015
- 2015-08-11 CN CN201510490603.9A patent/CN106445476B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102279749A (zh) * | 2011-08-30 | 2011-12-14 | 大唐移动通信设备有限公司 | 一种代码归并方法和设备 |
CN103198010A (zh) * | 2012-01-06 | 2013-07-10 | 腾讯科技(深圳)有限公司 | 软件测试方法、装置及系统 |
CN103092761A (zh) * | 2013-02-05 | 2013-05-08 | 烽火通信科技股份有限公司 | 基于差异信息文件识别和检查修改代码块的方法及装置 |
CN103473075A (zh) * | 2013-09-23 | 2013-12-25 | 迈普通信技术股份有限公司 | 代码变更控制系统及方法 |
Also Published As
Publication number | Publication date |
---|---|
CN106445476A (zh) | 2017-02-22 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN106445476B (zh) | 一种代码变更信息确定方法、装置及电子设备 | |
US9135289B2 (en) | Matching transactions in multi-level records | |
US8732199B2 (en) | System, method, and computer readable media for identifying a user-initiated log file record in a log file | |
JP2018532171A (ja) | Sql審査方法、サーバ及び記憶デバイス | |
CN111651173B (zh) | key码数据烧录方法、装置、终端设备和可读存储介质 | |
CN111061643B (zh) | Sdk集群的兼容性检测方法、装置、电子设备及存储介质 | |
CN110569147B (zh) | 一种基于索引的删除文件恢复方法、终端设备及存储介质 | |
CN109241003B (zh) | 文件管理方法和装置 | |
CN107426041B (zh) | 一种解析命令的方法和装置 | |
CN108920691B (zh) | 前端静态资源的管理方法、装置、计算机设备及存储介质 | |
KR20140083556A (ko) | SQLite 데이터베이스에서 삭제된 데이터의 복원 방법 및 장치 | |
CN107783766A (zh) | 对应用程序的文件进行清理的方法和装置 | |
CN111159497A (zh) | 正则表达式的生成方法及基于正则表达式的数据提取方法 | |
KR100397021B1 (ko) | 데이터 처리 시스템에서 재귀 하드 링크를 처리하기 위한방법 및 장치 | |
CN108494728B (zh) | 防止流量劫持的黑名单库创建方法、装置、设备及介质 | |
CN110704573B (zh) | 目录存储方法、装置、计算机设备及存储介质 | |
CN111460629B (zh) | 图形数据校核方法、装置、电子设备和计算机存储介质 | |
CN111176901B (zh) | 一种hdfs删除文件恢复方法、终端设备及存储介质 | |
CN110795915A (zh) | xml文件批量修改方法、系统、设备和计算机可读存储介质 | |
CN106802860B (zh) | 无用类检测方法及装置 | |
CN111045991B (zh) | 一种基于命令行模式快速打开文件的实现方法 | |
JP4527697B2 (ja) | 漏洩個人情報検索システム、漏洩個人情報検索方法、漏洩個人情報検索装置およびプログラム | |
CN111125743B (zh) | 权限管理方法、系统、计算机设备及计算机可读存储介质 | |
CN114594987A (zh) | 一种多模块项目源码分离方法及设备 | |
CN111651531A (zh) | 数据导入方法、装置、设备及计算机存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
TR01 | Transfer of patent right | ||
TR01 | Transfer of patent right |
Effective date of registration: 20221213 Address after: 1402, Floor 14, Block A, Haina Baichuan Headquarters Building, No. 6, Baoxing Road, Haibin Community, Xin'an Street, Bao'an District, Shenzhen, Guangdong 518000 Patentee after: Shenzhen Yayue Technology Co.,Ltd. Address before: 2, 518000, East 403 room, SEG science and Technology Park, Zhenxing Road, Shenzhen, Guangdong, Futian District Patentee before: TENCENT TECHNOLOGY (SHENZHEN) Co.,Ltd. |