CN110413307B - 代码功能的关联方法、装置及电子设备 - Google Patents
代码功能的关联方法、装置及电子设备 Download PDFInfo
- Publication number
- CN110413307B CN110413307B CN201910687386.0A CN201910687386A CN110413307B CN 110413307 B CN110413307 B CN 110413307B CN 201910687386 A CN201910687386 A CN 201910687386A CN 110413307 B CN110413307 B CN 110413307B
- Authority
- CN
- China
- Prior art keywords
- function
- information
- code
- program module
- target code
- 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
- 238000000034 method Methods 0.000 title claims abstract description 99
- 230000006870 function Effects 0.000 claims abstract description 805
- 238000012986 modification Methods 0.000 claims abstract description 86
- 230000004048 modification Effects 0.000 claims abstract description 86
- 238000004458 analytical method Methods 0.000 claims description 33
- 230000011218 segmentation Effects 0.000 claims description 18
- 230000000007 visual effect Effects 0.000 claims description 10
- 239000003999 initiator Substances 0.000 claims description 5
- 230000018109 developmental process Effects 0.000 description 9
- 238000010586 diagram Methods 0.000 description 8
- 238000012545 processing Methods 0.000 description 8
- 238000004891 communication Methods 0.000 description 6
- 230000008569 process Effects 0.000 description 6
- 240000007087 Apium graveolens Species 0.000 description 3
- 235000015849 Apium graveolens Dulce Group Nutrition 0.000 description 3
- 235000010591 Appio Nutrition 0.000 description 3
- 238000011161 development Methods 0.000 description 3
- 239000000284 extract Substances 0.000 description 3
- 238000005457 optimization Methods 0.000 description 3
- 230000000694 effects Effects 0.000 description 2
- 238000005516 engineering process Methods 0.000 description 2
- 238000012216 screening Methods 0.000 description 2
- 238000006467 substitution reaction Methods 0.000 description 2
- 230000009471 action Effects 0.000 description 1
- 238000013459 approach Methods 0.000 description 1
- 238000003491 array Methods 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 238000004590 computer program Methods 0.000 description 1
- 230000007547 defect Effects 0.000 description 1
- 238000011156 evaluation Methods 0.000 description 1
- 238000000802 evaporation-induced self-assembly Methods 0.000 description 1
- 230000014509 gene expression Effects 0.000 description 1
- 238000002372 labelling Methods 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 230000033772 system development Effects 0.000 description 1
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
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
Abstract
本申请提供了一种代码功能的关联方法、装置及电子设备,其中,该方法包括:获取目标代码功能的功能信息;在数据库中查找与该功能信息对应的程序模块;其中,该数据库中预先绑定存储有根据上述目标代码功能对应的代码日志和修改文件分别确定的功能信息和程序模块,该程序模块包括函数或类;以程序模块为检索词,在数据库中查找除该功能信息之外的其他功能信息;将查找到的其他功能信息对应的代码功能确定为该目标代码功能关联的功能。本申请将代码功能的功能信息和对应修改的程序模块绑定存储在数据库中,通过查找具有相同程序模块的功能信息来确定关联功能,可以自动查找得到关联结果,更加便捷高效,且查找结果更加精确和全面。
Description
技术领域
本申请涉及软件开发技术领域,尤其是涉及一种代码功能的关联方法、装置及电子设备。
背景技术
大的软件系统往往由成千上万个不同的模块组成,随着新功能开发和旧功能迭代进行,软件功能也越来越复杂。在软件开发过程中,往往会遇到修改了A功能模块,但是影响B功能模块的情况。对于已上线的产品,当添加的新功能影响了旧的功能模块时,若没有及时识别,则很可能导致线上旧功能的故障。
目前,在面对如何确定开发的新功能对哪些功能会产生影响的技术问题时,一般是通过分析提交日志信息来判断改动的文件和哪些功能相关联。但是,这种方式存在以下不足:
(1)需要查看的信息非常多,而且由于修改文件和关联功能不存在一一对应关系,通过修改文件难以看出关联的功能;
(2)用修改文件来判断关联性,其范围过于宽泛;例如:A修改了文件X的函数M,B修改了文件X的函数N,A和B其实并非关联,而直接看提交文件的日志信息无法区分此种情况;
(3)在关联结果评判中,需依赖开发人员的经验或文档识别关联模块,主观性强,易遗漏出错。
发明内容
有鉴于此,本申请的目的在于提供一种代码功能的关联方法、装置及电子设备,可以自动分析出与目标代码功能相关联的其他功能,更加便捷高效,并且得到的关联功能项更加精确和全面。
第一方面,本申请实施例提供了一种代码功能的关联方法,该方法包括:获取目标代码功能的功能信息;在数据库中查找与该功能信息对应的程序模块;其中,该数据库中预先绑定存储有根据上述目标代码功能对应的代码日志和修改文件分别确定的功能信息和程序模块,该程序模块包括函数或类;以程序模块为检索词,在数据库中查找除该功能信息之外的其他功能信息;将查找到的其他功能信息对应的代码功能确定为该目标代码功能关联的功能。
在本申请较佳的实施例中,上述方法还包括:提供用于功能关联查询的客户端,该客户端包含功能ID查询通道、日志查询通道和功能关键词查询通道;上述获取目标代码功能的功能信息的步骤包括:通过客户端接收用户的功能查询请求;如果该功能查询请求来自功能ID查询通道,从该功能查询请求中提取目标代码功能的功能ID,将提取的功能ID作为该目标代码功能的功能信息;如果该功能查询请求来自日志查询通道,从该功能查询请求中提取目标代码功能的代码日志,从代码日志中解析出该目标代码功能的功能信息;如果该功能查询请求来自功能关键词查询通道,从该功能查询请求中提取目标代码功能的功能关键词,将提取的功能关键词作为该目标代码功能的功能信息。
在本申请较佳的实施例中,上述代码日志为预设格式;该预设格式规定按照预设符号对代码日志中的功能信息进行标注;上述从代码日志中解析出该目标代码功能的功能信息的步骤包括:从该代码日志中提取预设符号标注的功能信息;对代码日志中未标注的信息按照预设的分词算法提取功能信息;将提取出的所有功能信息作为该目标代码功能的功能信息。
在本申请较佳的实施例中,上述数据库按照以下方式建立:收集提交信息;该提交信息包括代码日志和该代码日志对应的修改文件;对于每次收集到的提交信息,均基于提交信息中的代码日志确定该提交信息对应的功能信息,并根据提交信息中的修改文件确定该提交信息对应的程序模块,以及将该功能信息与该程序模块绑定保存至数据库中。
在本申请较佳的实施例中,上述基于提交信息中的代码日志确定该提交信息对应的功能信息的步骤,包括:将提交信息的代码日志中使用预设符号标注的信息作为该提交信息的功能信息;对提交信息中未使用预设符号标注的信息,按照预设的分词算法提取功能信息,或从未使用预设符号标注的信息中提取预设的功能ID。
在本申请较佳的实施例中,上述根据提交信息中的修改文件确定该提交信息对应的程序模块的步骤,包括:解析提交信息中的修改文件,得到该修改文件的语法树信息;其中,该语法树信息包括每个程序模块所在的行号和各个程序模块间的嵌套关系;为该嵌套关系中的各节点增添指向父节点的指针;根据嵌套关系,以行号为主键,程序模块名为键值,建立每行代码所在行号的关联字典;根据提交信息中的修改文件确定修改代码行号,并根据修改代码行号查询关联字典,得到该提交信息对应的程序模块。
在本申请较佳的实施例中,上述根据嵌套关系,以行号为主键,程序模块名为键值,建立每行代码所在行号的关联字典的步骤,包括:获取每个程序模块的定义行的行号,以行号为主键,程序模块名为键值,建立每个程序模块的定义行的行号对应的关联字典;根据该嵌套关系和每个程序模块的定义行的行号对应的关联字典,建立每行代码所在行号的关联字典;其中,该关联字典包括:当前代码行的行号、当前代码行归属的程序模块名、当前代码行的父节点的行号和当前代码行父节点的程序模块名。
在本申请较佳的实施例中,上述以程序模块为检索词,在数据库中查找除该功能信息之外的其他功能信息的步骤包括:当程序模块为函数,以该函数为检索词,在数据库中查找除该功能信息之外的第一其他功能信息;以该函数的父节点对应的程序模块为检索词,在数据库中查找除该功能信息之外的第二其他功能信息。
在本申请较佳的实施例中,在上述将查找到的其他功能信息对应的代码功能确定为该目标代码功能关联的功能的步骤之后,该方法还包括:以可视化方式显示该目标代码功能关联的功能。
在本申请较佳的实施例中,上述以可视化方式显示该目标代码功能关联的功能的步骤,包括:计算每个目标代码功能关联的功能与该目标代码功能共同对应的程序模块的数目;根据该数目对目标代码功能关联的功能排序;显示排序后的上述目标代码功能关联的功能。
在本申请较佳的实施例中,该数据库中还保存有与功能信息关联的修改提示信息,该修改提示信息包括以下至少之一:修改时间信息、修改版本信息和修改发起者信息;以可视化方式显示该目标代码功能关联的功能的步骤包括:在该数据库中查找上述其他功能信息关联的修改提示信息;将该目标代码功能关联的功能和查找到的修改提示信息以可视化方式显示。
在本申请较佳的实施例中,在上述将查找到的该其他功能信息对应的代码功能确定为该目标代码功能关联的功能的步骤之后,该方法还包括:将该目标代码功能关联的功能保存在缓存中,并在缓存时长达到设定时长时清除;当再次获取到该目标代码功能的功能信息时,从缓存中查找该目标代码功能关联的功能。
第二方面,本申请实施例还提供了一种代码功能的关联装置,该装置包括:功能信息获取模块,用于获取目标代码功能的功能信息;程序模块查找模块,用于在数据库中查找与该功能信息对应的程序模块;其中,该数据库中预先绑定存储有根据该目标代码功能对应的代码日志和修改文件分别确定的功能信息和程序模块,该程序模块包括函数或类;其他功能信息查找模块,用于以程序模块为检索词,在数据库中查找除该功能信息之外的其他功能信息;关联功能确定模块,用于将查找到的上述其他功能信息对应的代码功能确定为该目标代码功能关联的功能。
第三方面,本申请实施例还提供了一种电子设备,包括处理器和存储器,该存储器存储有能够被该处理器执行的计算机可执行指令,该处理器执行该计算机可执行指令以实现上述代码功能的关联方法。
第四方面,本申请实施例还提供了一种计算机可读存储介质,该计算机可读存储介质存储有计算机可执行指令,该计算机可执行指令在被处理器调用和执行时,计算机可执行指令促使处理器实现上述代码功能的关联方法。
本申请实施例带来了以下有益效果:
本申请实施例提供的一种代码功能的关联方法、装置及电子设备,首先获取目标代码功能的功能信息;然后在数据库中查找与该功能信息对应的程序模块;其中,该数据库中预先绑定存储有根据上述目标代码功能对应的代码日志和修改文件分别确定的功能信息和程序模块,该程序模块包括函数或类;并且以程序模块为检索词,在数据库中查找除该功能信息之外的其他功能信息;进而将查找到的其他功能信息对应的代码功能确定为该目标代码功能关联的功能。该方法中,将代码功能的功能信息和对应的程序模块(也即修改的函数或类)绑定存储在数据库中,通过目标代码的功能信息可以查找到对应的程序模块,进而查找到这些程序模块对应的其他功能信息;基于修改了同一函数或类的功能则认为他们是相互关联的原则,因而上述查找到的其他功能信息对应的功能即为目标代码功能的关联功能。该方法可以自动分析得到目标代码功能的关联功能,不仅便捷高效,而且查找结果更加精确和全面。
本公开的其他特征和优点将在随后的说明书中阐述,或者,部分特征和优点可以从说明书推知或毫无疑义地确定,或者通过实施本公开的上述技术即可得知。
为使本公开的上述目的、特征和优点能更明显易懂,下文特举较佳实施例,并配合所附附图,作详细说明如下。
附图说明
为了更清楚地说明本申请具体实施方式或现有技术中的技术方案,下面将对具体实施方式或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本申请的一些实施方式,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本申请实施例提供的一种代码功能的关联方法的流程示意图;
图2为本申请实施例提供的另一种代码功能的关联方法的流程示意图;
图3为本申请实施例提供的一种基于代码功能的关联方法的功能信息获取的流程示意图;
图4为本申请实施例提供的一种用于代码功能关联查询的数据库的建立流程示意图;
图5为本申请实施例提供的另一种代码功能的关联方法的流程示意图;
图6为本申请实施例提供的一种代码功能的关联装置的结构示意图;
图7为本申请实施例提供的另一种代码功能的关联装置的结构示意图;
图8为本申请实施例提供的一种电子设备的结构示意图。
图标:61-功能信息获取模块;62-程序模块查找模块;63-其他功能信息查找模块;64-关联功能确定模块;700-代码功能的关联装置;71-提交信息收集模块;72-修改文件分析模块;73-代码日志分析模块;74-数据库;75-WEB服务端;76-WEB客户端;80-存储器;81-处理器;82-总线;83-通信接口。
具体实施方式
为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合附图对本申请的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
考虑到现有技术在确定新开发软件功能对旧有功能的影响时,需要依赖开发人员的经验人为识别功能之间的关联关系,导致识别结果易遗漏出错的问题,本申请实施例提供了一种代码功能的关联方法、装置及电子设备,该技术可以应用于计算机、手机、平板电脑、游戏设备等可以实现关联查询的设备上。
为便于对本实施例进行理解,首先对本申请实施例所公开的一种代码功能的关联方法进行详细介绍。
图1所示为一种代码功能的关联方法的流程示意图,由图1可见,该方法包括以下步骤:
步骤S102:获取目标代码功能的功能信息。
在软件开发中,软件的某一项功能通常是通过代码的形式实现。对于某一段代码,其对应的功能称为代码功能。这里,目标代码功能是指该代码功能是本实施例的研究对象,它是需要通过本实施例的代码功能关联方法获得其关联功能的代码功能。在实际操作中,该目标代码功能可以是软件开发中的某一项新开发功能。
并且,功能信息是指可以表达该目标代码功能的功能特点的信息,它可以文本,例如:功能关键词、功能ID、短语介绍等。这里,对于某一代码功能,其可以有一项或多项功能信息,并且,对于不同的代码功能,它们也可以有相同的功能信息。
以某格斗游戏场景为例,其中一项代码功能为“起跳”,用于实现控制对象作出起跳的动作,从而躲避攻击,则该代码功能的功能信息可以是“起跳”、“躲避攻击”等;对于另一项代码功能“起跳踢腿”,用于实现控制对象作出跳起并踢腿的动作,可以进行攻击,则该代码功能的功能信息可以是“起跳”、“踢腿”、“攻击”等。对于上述例举的两项代码功能,均具有多项功能信息,并且,它们还具有相同的功能信息“起跳”。
另外,获取目标代码功能的功能信息的方式可以是通过分析与目标代码功能的相关文件的方式得到,例如通过分析该目标代码功能的代码日志,或者通过分析该目标代码功能的文本介绍,或者通过分析该目标代码功能对应代码文件中的注释说明等等方式,以获得目标代码功能的功能信息。此外,还可以直接由外部输入获得该功能信息,例如,以该代码功能的关联方法应用与游戏设备为例,当用户在该设备上输入目标代码的功能信息时,该设备可以直接获得该功能信息。
步骤S104:在数据库中查找与该功能信息对应的程序模块;其中,该数据库中预先绑定存储有根据上述目标代码功能对应的代码日志和修改文件分别确定的功能信息和程序模块,该程序模块包括函数或类。
在获得目标代码功能的功能信息之后,首先在数据库中查找与该功能信息对应的程序模块,其中,该程序模块包括函数或类。这里,函数是一段程序代码,用以执行特定的任务,而类则往往包括多个函数。
在该数据库中,程序模块和功能信息是相互对应的,因为它们被预先绑定存储在数据库中。对于上述目标代码功能,其功能信息和对应的程序模块也被预先绑定存储在该数据库中。并且,该功能信息是根据上述目标代码功能对应的代码日志确定的,这里,该代码日志是用于记录与目标代码功能对应的代码实现的功能以及其他相关事件信息,例如对代码进行的操作记录、编辑时间等等。
在实际操作中,可以通过分析目标代码功能对应的代码日志来确定其功能信息。例如,在获得代码日志后,可以通过文本分析方法或者分词算法来提取其中的功能信息。
另外,数据库中的上述程序模块是根据该目标代码功能对应的修改文件确定的,这里,该修改文件是指修改的代码文件。例如,假设在某一代码文件的基础上,通过修改其中的某一部分代码,实现了该目标代码功能,则修改的这部分代码即为目标代码功能对应的修改文件。对于该修改文件,其中可能包含多个程序模块,而根据该修改文件确定的程序模块为进行了修改的程序模块。例如,假设该修改文件包括类A,类B,函数C,函数D;而实际修改的为类A和函数D,则根据该修改文件确定的程序模块为类A和函数D。
在上述数据库中,由于功能信息和程序模块之间相互绑定,因此,可以通过其中一方查找到另一方。例如,可以通过在数据库中查找某一功能信息而找的与其对应的程序模块,也可以通过在该数据库中查找某一程序模块而找的与其对应的功能信息。
这里,如果功能信息有多项,则逐一查找每一项功能信息对应的程序模块。对于每一项功能信息,其对应的程序模块可能是多个。这样,查找到的所有的程序模块即为实现该目标代码功能所修改的程序模块。
步骤S106:以程序模块为检索词,在数据库中查找除该功能信息之外的其他功能信息。
在根据功能信息查找到对应的程序模块之后,再以查找到的程序模块为检索词在数据库中查找除目标代码功能对应的功能信息之外的其他功能信息。这里,若查找到的程序模块有多个,则以这些程序模块为检索词逐一在数据库中进行查找。
在其中一种实施方式中,可以设置查找结果筛选条件,将除目标代码功能对应的功能信息之外的其他功能信息筛选出来。这样,查找到的上述其他功能信息,即表示与目标代码功能对应的功能信息对应有共同的程序模块,也即对应有共同的修改函数或修改类,或者说是修改了相同的函数或相同的类。
步骤S108:将查找到的其他功能信息对应的代码功能确定为该目标代码功能关联的功能。
经过上述步骤S104和S106的查找,即从数据库中获得了这样一些功能信息,它们与目标代码功能对应的功能信息有共同对应的程序模块。这里,根据这些功能信息可以相应获得它们对应的代码功能,从而,将它们对应的代码功能确定为该目标代码功能关联的功能。也即,由于这些代码功能和目标代码功能修改了相同的函数或相同的类,则认为它们是相互关联的。
相比于现有技术中通过修改文件来判断功能之间的关联关系,本实施例中,依据代码功能对应的修改文件中的函数或类的改动来判断功能之间的关联关系,对于改动了相同函数或相同类的功能,确定为关联功能,这种方式更加科学合理,得到的关联结果更加准确。
这样,本实施例提供的代码功能的关联方法,该方法将代码功能的功能信息和对应的程序模块(也即修改的函数或类)绑定存储在数据库中,通过目标代码的功能信息可以查找到对应的程序模块,进而查找到这些程序模块对应的其他功能信息;基于修改了同一函数或类的功能则认为他们是相互关联的原则,因而上述查找到的其他功能信息对应的功能即为目标代码功能的关联功能。该方法实现自动分析目标代码功能的关联功能,不依赖于开发人员的经验,避免了人为主观性的影响,缓解了关联结果易遗漏出错的问题。
本申请实施例提供的一种代码功能的关联方法,首先获取目标代码功能的功能信息;然后在数据库中查找与该功能信息对应的程序模块;其中,该数据库中预先绑定存储有根据上述目标代码功能对应的代码日志和修改文件分别确定的功能信息和程序模块,该程序模块包括函数或类;并且以程序模块为检索词,在数据库中查找除该功能信息之外的其他功能信息;进而将查找到的其他功能信息对应的代码功能确定为该目标代码功能关联的功能。该方法可以自动分析得到目标代码功能的关联功能,不仅便捷高效,而且查找结果更加精确和全面。
在图1所示代码功能的关联方法的基础上,本实施例提供了另一种代码功能的关联方法,该方法重点描述了获取目标代码功能的功能信息的实现过程,并且,在本实施例的关联方法中,还提供了用于功能关联查询的客户端。如图2所示,其为该方法的流程示意图,由图2可见,该方法包括以下步骤:
步骤S202:通过客户端接收用户的功能查询请求;该客户端包含功能ID查询通道、日志查询通道和功能关键词查询通道。
这里,客户端可以是计算机、手机、平板电脑、游戏设备等可以实现查询的设备,用户通过客户端发出功能查询请求。在其中一种可能的实施方式中,客户端可以提供用户查询的页面,用户通过查询页面输入自己想要查询的功能信息,并提交从而触发功能查询请求。
在本实施例中,该客户端包含多个查询通道,每个查询通道对应不同的查询方式,其中,本实施例中的客户端包括功能ID查询通道、日志查询通道和功能关键词查询通道。这里,不同的通道代表不同的用户输入,也即,用户可以通过在客户端输入功能ID或代码日志或功能关键词进行关联功能查询。例如,功能ID查询通道是以功能ID作为功能信息进行查询的通道,用户可以在客户端输入功能ID进行关联功能查询;并且,日志查询通道允许用户直接在客户端输入代码日志进行关联功能查询;而功能关键词查询通道则允许用户在客户端通过输入功能关键词进行关联查询。
步骤S204:判断该功能查询请求的来源通道;如果该功能查询请求来自日志查询通道,则执行步骤S206;如果该功能查询请求来自功能ID查询通道,则执行步骤S208;如果该功能查询请求来自功能关键词查询通道,则执行步骤S210。
对于本实施例中代码功能的关联方法的运行端,其与客户端通信连接,当其通过客户端接收到用户的功能查询请求时,首先对该功能查询请求的来源通道进行判断,然后根据不同通道的请求进行相应的响应。在本实施例中,该功能查询请求可以来自日志查询通道、功能ID查询通道或功能关键词查询通道。
如果判断结果是该功能查询请求来自日志查询通道,则执行步骤S206。也即,从该功能查询请求中提取目标代码功能的代码日志,从代码日志中解析出该目标代码功能的功能信息。
如果判断结果是该功能查询请求来自功能ID查询通道,则执行步骤S208,也即,从该功能查询请求中提取目标代码功能的功能ID,将提取的功能ID作为该目标代码功能的功能信息。
如果判断结果是该功能查询请求来自功能关键词查询通道,则执行步骤S210,也即,从该功能查询请求中提取目标代码功能的功能关键词,将提取的功能关键词作为该目标代码功能的功能关键词。
步骤S206:从该功能查询请求中提取目标代码功能的代码日志,从代码日志中解析出该目标代码功能的功能信息。
当该功能查询请求来自日志查询通道时,代码功能的关联方法的运行端首先从该功能查询请求中提取目标代码功能的代码日志,然后从代码日志中解析出该目标代码功能的功能信息。这里,从代码日志中解析出功能信息的方式可以有多种,例如,可以通过分词算法提取代码日志中的关键词汇作为功能信息,其中,分词算法可以采用隐性马尔可夫模型(Hidden Markov Model,HMM)或者条件随机场模型(Conditional random fields,CRF)。
此外,从代码日志中解析出功能信息的方式还可以通过预先设置代码日志的规范格式,例如在代码日志中以特殊符号(中括号、下划线等)标注功能信息,从而方法运行端在获得代码日志时,可以通过提取特殊符号标注的字符的方式获得功能信息。
步骤S208:从该功能查询请求中提取目标代码功能的功能ID,将提取的功能ID作为该目标代码功能的功能信息。
当该功能查询请求来自功能ID查询通道时,代码功能的关联方法的运行端直接从该功能查询请求中提取目标代码功能的功能ID,并将提取到的功能ID作为该目标代码功能的功能信息。
这里,在一些使用项目管理工具的软件项目中,每个功能开发都有唯一的ID。其中,项目管理工具以Redmine为例进行说明,其为网页界面的项目管理与缺陷跟踪管理系统的自由及开放源代码软件工具,当在Redmine上新建任务时,会自动生成唯一的任务ID编号,则可以将该ID编号作为对应开发功能的功能ID。从而后续在进行关联功能查询时,可以通过该唯一的功能ID作为目标代码功能的功能信息。
步骤S210:从该功能查询请求中提取目标代码功能的功能关键词,将提取的功能关键词作为该目标代码功能的功能信息。
当该功能查询请求来自功能关键词通道时,也即,用户通过客户端输入功能关键词进行查询,此时,代码功能的关联方法的运行端从该功能查询请求中提取该功能关键词,并将提取的功能关键词作为该目标代码功能的功能信息。
步骤S212:在数据库中查找与该功能信息对应的程序模块;其中,该数据库中预先绑定存储有根据上述目标代码功能对应的代码日志和修改文件分别确定的功能信息和程序模块,该程序模块包括函数或类。
对于上述任一种查询通道输入的信息,在获得目标代码功能的功能信息之后,根据该功能信息在数据库中查找对应的程序模块。
步骤S214:以程序模块为检索词,在数据库中查找除该功能信息之外的其他功能信息。
步骤S216:将查找到的其他功能信息对应的代码功能确定为该目标代码功能关联的功能。
这样,本实施例提供的代码功能的关联方法,通过提供用于功能关联查询的客户端,用户可以在客户端通过输入代码日志、功能ID或功能关键词实现关联功能的自动查询,并快速获得功能关联的分析结果。该方法有效缓解了现有技术中在查找软件某功能的关联功能时,需要查看该软件所有提交代码文件,以及依赖人力评估的问题。在该方法中,对修改文件的分析是依据类或函数级别的改动分析,也缓解了现有技术中依赖文件分析带来的结果宽泛性的问题。
基于图2所示的代码功能的关联方法,针对该功能查询请求来自日志查询通道的情况,本实施例还介绍了从代码日志中解析出该目标代码功能的功能信息的实现过程,其中,参见图3,其为一种基于代码功能的关联方法的功能信息获取的流程示意图,由图3可见,该方法包括以下步骤:
步骤S302:通过客户端接收用户的功能查询请求;该功能查询请求来自日志查询通道,该代码日志为预设格式;该预设格式规定按照预设符号对代码日志中的功能信息进行标注。
这里,代码日志的预设格式规定按照预设符号对代码日志中的功能信息进行标注。其中,该预设符号可以是中括号、下划线、双引号等等,用于标注代码日志中的功能信息,使之区分于代码日志中的其他信息。
在软件系统开发中,通常都有自己的版本控制工具,例如开放源代码的版本控制系统(Subversion,Svn)或分布式版本控制软件(Git)。并且,版本控制工具往往都有一些相关的外部接口,供第三方工具做一些合规性检查或分析。以Svn为例,外部接口可分为PreHook和PostHook两种。其中,PreHook可在开发者提交前主动触发外部请求,一般用于对提交格式进行校验等。PostHook可在开发者提交后进行主动触发外部请求,一般用于检查用户提交的内容是否合规等。
对于本实施例中的代码功能的关联方法的运行端,通过上述接口可以对开发者提交的信息进行规则化。例如,通过PreHook可以限制开发者每次提交必须按照要求填写好本次提交对应功能的相关信息,通过PostHook可以将每次提交的信息自动传送给该运行端进行分析和处理。继续以Svn为例说明,通过PreHook对开发者每次提交的代码日志进行了规则设置,也即需要填写提交对应的功能信息才允许提交。在规则设置中,可以采用统一的规则,将对应的功能信息标注,本实施例中按照预设符号对代码日志中的功能信息进行标注。通过上述设置,对于符合上述规则设置的代码日志才予以提交,否则,不予以提交。这样,即可保证从客户端的日志查询通道获取到的代码日志是符合预设格式。
步骤S304:从该代码日志中提取预设符号标注的功能信息。
当接收到代码日志时,按照上述预设格式从该代码日志中提取功能信息,这里,从该代码日志中提取出预设符号标注的功能信息。例如,如果设置规则为对代码日志中的功能信息以中括号进行标注,则从代码日志中提取用中括号标注的字符,并作为功能信息。
步骤S306:对代码日志中未标注的信息按照预设的分词算法提取功能信息。
这里,预设的分词算法可以是隐性马尔可夫模型(Hidden Markov Model,HMM)或者条件随机场模型(Conditional random fields,CRF)。以HMM为例进行说明,通过HMM分词算法可以将代码日志分割成不同的短语,例如,若提交日志为“斗技场景迭代”,则通过HMM分词得到的分词结果可以为“斗技”,“场景”和“迭代”。在其中一种实施方式中,用户可以预先设置关键信息的自定义词库,在对代码日志进行分词之后,再结合自定义词库进行功能信息筛选,以上述例子说明,如果自定义词库中包含“斗技”,则可以将“斗技”识别为功能信息;如果没有,则上述三组词语都认为是功能信息。
步骤S308:将提取出的所有功能信息作为该目标代码功能的功能信息。
将根据预设符号标注提取的功能信息,以及根据预设的分词算法提取的功能信息都作为该目标代码功能的功能信息。并在数据库中查找与该功能信息对应的程序模块;再以查找到的程序模块为检索词,在数据库中查找除该功能信息之外的其他功能信息;进而将查找到的其他功能信息对应的代码功能确定为该目标代码功能关联的功能。
基于图1中所示的代码功能的关联方法,本实施例介绍了用于该方法中关联功能查询的数据库的一种建立方式,参加图4,其为该数据库的建立流程示意图,由图4可见,其包括以下步骤:
步骤S402:收集提交信息;该提交信息包括代码日志和该代码日志对应的修改文件。
以软件开发的应用场景为例,对于每一次代码提交,方法运行端收集其提交信息,其中,该提交信息包括代码日志和该代码日志对应的修改文件。在其他可能的实施方式中,上述提交信息还可以包括提交人、提交版本号和修改时间。
步骤S404:对于每次收集到的提交信息,均基于提交信息中的代码日志确定该提交信息对应的功能信息,并根据提交信息中的修改文件确定该提交信息对应的程序模块,以及将该功能信息与该程序模块绑定保存至数据库中。
这里,分别通过代码日志和修改文件确定对应的功能信息和程序模块。在其中一种可能的实施方式中,上述基于提交信息中的代码日志确定该提交信息对应的功能信息的步骤包括:
首先,将提交信息的代码日志中使用预设符号标注的信息作为该提交信息的功能信息。
其次,对提交信息中未使用预设符号标注的信息,按照预设的分词算法提取功能信息,或从未使用预设符号标注的信息中提取预设的功能ID。
这里,关于从代码日志中提取预设符号标准的信息作为功能信息的方式,以及按预设的分词算法提取功能信息的方式,可以参考上述实施例中对应的描述,在此不再赘述。
另外,对于上述预设的功能ID,可以通过预设的代码日志格式,规定在代码日志中以特定的格式或在特定的位置记录该功能ID,从而,在读取该代码日志时,可以根据上述预设的规则,提前到相应的功能ID。
此外,当根据提交信息中的修改文件确定该提交信息对应的程序模块时,在其中一种可能的实施方式中,可以按下述步骤进行确定:
(1)解析提交信息中的修改文件,得到该修改文件的语法树信息;其中,该语法树信息包括每个程序模块所在的行号和各个程序模块间的嵌套关系。
这里,运用语法解析工具对修改文件进行解析,例如,可以运用语法抽象树(Abstract syntax tree,AST)解析,从而得到该修改文件的语法树信息。在实际操作中,Python语言自带ast.py模块,可以解析Python的语法;C++语言中有ParseAST类解析语法树模块也可解析语法。
通过解析得到的语法树信息包括每个程序模块所在的行号,并且还包括各个程序模块间的嵌套关系。这样,即得到了修改文件中语法的层次关系,例如:通过对某修改文件进行语法解析之后,得到各程序模块间的嵌套关系如下,该修改文件总共有类A和类H两个类,并且,类A所包含的成员函数有函数B、函数C;类H包含的成员函数有函数P。
(2)为该嵌套关系中的各节点增添指向父节点的指针。
经过上述语法解析之后,即得到了程序模块之间的嵌套关系,以及该嵌套关系中各个节点的子节点信息。这里,节点对应的是语法分析的结果,每一行代码可以算一个大节点,代码行的大节点中包含具体语法的小节点。例如:某行代码为a=b+c;这行代码是一个大节点,它包含a,b,c三个定义节点和“=”、“+”两个操作符节点。
为了获得每个节点的父节点信息,这里,对每个节点进行预处理,遍历每个节点,并为每个节点增添指向父节点的指针,例如,为其增加一个成员变量ParentNode,以指向自己的父节点。这样,每个节点均可获取其父子节点的信息。
(3)根据嵌套关系,以行号为主键,程序模块名为键值,建立每行代码所在行号的关联字典。
为了获得该修改文件的每行代码的行号归属的程序模块,在本实施例中,设置了与行号对应的关联字典,其中该关联字典以代码行的行号为主键,以程序模块名为键值,进而结合上述嵌套关系,建立每行代码所在行号的关联字典。在其中一种实施方式中,建立每行代码所在行号的关联字典的步骤包括:
<31>获取每个程序模块的定义行的行号,以行号为主键,程序模块名为键值,建立每个程序模块的定义行的行号对应的关联字典。
这里,首先找到修改文件中每个程序模块的定义行的行号,也即,找到每个函数以及类的定义行的行号。其中,在Python解析结果中,可以通过lineno变量直接找到程序模块所在行。如果无法直接获取,那么可以通过AST语法解析先拿到所有的程序模块名(也即程序模块的名称),然后装置通过扫描定义关键词加上程序模块名,找到所有包含函数定义或者类定义的行的行号。
然后,以上述定义行的行号为主键,以对应的程序模块名为键值,建立每个程序模块的定义行的行号对应的关联字典。例如,在修改文件中第2行定义了类A,则该定义行对应的关联字典记录为{2:[A]}。其中,行号2为主键,中括号中的A为程序模块名。
这样,即得到了每个程序模块的定义行的行号对应的关联字典。
<32>根据该嵌套关系和每个程序模块的定义行的行号对应的关联字典,建立每行代码所在行号的关联字典;其中,该关联字典包括:当前代码行的行号、当前代码行归属的程序模块名、当前代码行的父节点的行号和当前代码行父节点的程序模块名。
对于该修改文件语法解析得到的嵌套关系,其中的每个节点均可获得其父节点信息和子节点信息,这里,节点信息包括该节点的所属程序模块的名称,以及所属程序模块定义行的行号。这样,根据该嵌套关系,可以得到每行代码所在行号的关联字典。并且,该关联字典包括:当前代码行的行号、当前代码行归属的程序模块名、当前代码行的父节点的行号和当前代码行父节点的程序模块名。该关联字典的键值构成一个数组。
实际操作中,对于某一代码行,如果其有父节点,且父节点的关联字典不为空,则先将其父节点的键值拷贝到本节点的关联字典键值中,再将本节点定义放入该键值数组。例如,修改文件中第2行定义了类A,第5行定义了类A的成员函数a_func,则第5行的关联字典记录为:{2:[A],5:[A,a_func]}。
这样,通过上述步骤即获得了修改文件中每一行代码行行号对应的关联字典。
(4)根据提交信息中的修改文件确定修改代码行号,并根据修改代码行号查询关联字典,得到该提交信息对应的程序模块。
在其中一种实施方式中,修改文件中的修改代码行号可以直接通过版本控制工具相关的命令行获得,例如,Svn工具中可以采用Svn diff命令获得修改文件的修改行行号和对应内容。
在获得修改代码行号的前提下,结合上述获得的每一行的关联字典,可以根据修改代码行的行号查询对应的关联字典,并从关联字典中提取出程序模块名,从而得到该提交信息对应的程序模块。这里,得到的程序模块即为本次提交中修改了的函数或类。
另外,在某些情况下,一些新的功能可以仅仅通过直接添加类而实现,并未改动该类所包含的成员函数,而通过修改的函数进行关联查询时,则会遗漏这一关联功能。例如,功能A改动了ClassA的FunctionA函数,数据库存储为ClassA->FunctionA。检索时,可以检索改动到ClassA->FunctionA的功能。但是,假定功能B直接增加了ClassA这个类,但没有添加ClassA中的FunctionA函数,那么在进行上述检索时,检索结果无法匹配到功能B,而实际功能B和功能A是相关联的。
故此,为了提高关联查询结果的完整性,当以函数为检索词在数据库中查找除该功能信息之外的其他功能信息时,首先以该函数为检索词,在数据库中查找除该功能信息之外的第一其他功能信息;然后,以该函数的父节点对应的程序模块为检索词,在数据库中查找除该功能信息之外的第二其他功能信息;最后,将该第一其他功能信息和该第二其他功能信息作为最终的功能信息查找结果输出。
进一步地,由于有些修改的代码行属于共同的程序模块,则根据上述步骤得到的程序模块存在重复,这里,在输出查找到的程序模块时,可以预先进行去重优化,也即,在同时修改了子函数以及其父函数时,只记录其父函数;对于修改了类中的所有成员函数时,只记录该类。例如,在某一次提交中,增加一个新的类A,类A有成员函数a_func和b_func。在未去重优化前,本次提交分析后确定修改的程序模块包括[A,a_func,b_func],由于a_func和b_func属于类A,且本次就是新增了类A,则优化后修改的程序模块输出结果为[A]。
这样,即实现了根据提交信息中的修改文件确定该提交信息对应的程序模块。从而可以将上述确定的功能信息以及确定的程序模块绑定保存至数据库中,进而实现数据库的建立。
在图1所示代码功能的关联方法的基础上,为了方便用户更加直观和及时地获取关联查询的信息,本实施例提供了另一种代码功能的关联方法,如图5所示,其为该方法的流程示意图,其中,该方法包括以下步骤:
步骤S502:获取目标代码功能的功能信息。
步骤S504:在数据库中查找与该功能信息对应的程序模块;其中,该数据库中预先绑定存储有根据上述目标代码功能对应的代码日志和修改文件分别确定的功能信息和程序模块,该程序模块包括函数或类。
步骤S506:以程序模块为检索词,在数据库中查找除该功能信息之外的其他功能信息。
步骤S508:将查找到的其他功能信息对应的代码功能确定为该目标代码功能关联的功能。
步骤S510:以可视化方式显示该目标代码功能关联的功能。
在获得该目标代码功能关联的功能之后,还通过可视化的方式显示查到的关联功能,这里,可视化可以是通过表格、图形或动画等形式展现。在其中一种可能的实施方式中,可以先计算每个目标代码功能关联的功能与该目标代码功能共同对应的程序模块的数目,然后根据该数目对目标代码功能关联的功能排序,最后显示排序后的上述目标代码功能关联的功能。这里,目标代码功能关联的功能与该目标代码功能共同对应的程序模块是指他们共同修改的程序模块,如果两个功能彼此修改的相同的程序模块数量越多,则认为它们之间的关联越紧密。
在另一种实施方式中,在建立上述数据库时,还将与功能信息关联的修改提示信息保存到数据库中,其中,该修改提示信息至少包括修改时间信息、修改版本信息和修改发起者信息中的一个。这样,在进行关联功能的可视化显示时,还可以在该数据库中查找与检索到的其他功能信息关联的修改提示信息;并将该目标代码功能关联的功能和查找到的修改提示信息一起以可视化方式显示。这样,对于相互关联的功能,如果后更新功能的修改对之前功能有较大影响,用户可以根据修改提示信息寻找到对应的修改发起者,以便协商解决方法。
在实际操作中,对于同一份代码可能有多个程序员同时进行开发,若多个开发者同时提交代码以进行功能关联查询,由于每次处理提交的时间较长,两次提交分析直接可能产生影响,此时,可以对每次提交缓存到Celery任务队列中,然后每次从队列中取出一次提交进行分析,任务处理完成后,再分析下一次提交,这样很好保证了每次提交之间相互独立。
并且,随着提交次数的增加,关联功能查询的过程耗时越来越长,为了提高查询速度,提升用户体验,这里,提供了一种数据缓存的方式,其步骤如下:
当获得目标代码功能关联的功能之后,将该目标代码功能关联的功能保存在缓存中,并在缓存时长达到设定时长时清除;当再次获取到该目标代码功能的功能信息时,从缓存中查找该目标代码功能关联的功能。这里,预定时长由用户根据实际需要设定,可以是几个小时,可以是几天等等。例如,设定时长为两周,则对于每一次得到的关联功能查询结果,将其保存在缓存中两周,两周之内,若再次获取到该目标代码功能的功能信息时,也即在两周内再次输入同一代码功能的功能信息进行查询时,直接从缓存中查找该目标代码功能关联的功能,从而提高了查询速度。当缓存时间达到两周时,则清除缓存中的该查询结果。
对应于上述实施例中的代码功能的关联方法,本实施例提供了一种代码功能的关联装置,如图6所示,为该代码功能的关联装置的结构示意图,由图6可见,该装置包括依次连接的功能信息获取模块61、程序模块查找模块62、其他功能信息查找模块63和关联功能确定模块64,其中,各个模块的功能如下:
功能信息获取模块61,用于获取目标代码功能的功能信息;
程序模块查找模块62,用于在数据库中查找与该功能信息对应的程序模块;其中,该数据库中预先绑定存储有根据该目标代码功能对应的代码日志和修改文件分别确定的功能信息和程序模块,该程序模块包括函数或类;
其他功能信息查找模块63,用于以程序模块为检索词,在数据库中查找除该功能信息之外的其他功能信息;
关联功能确定模块64,用于将查找到的上述其他功能信息对应的代码功能确定为该目标代码功能关联的功能。
上述代码功能的关联装置,首先获取目标代码功能的功能信息;然后在数据库中查找与该功能信息对应的程序模块;其中,该数据库中预先绑定存储有根据上述目标代码功能对应的代码日志和修改文件分别确定的功能信息和程序模块,该程序模块包括函数或类;并且以程序模块为检索词,在数据库中查找除该功能信息之外的其他功能信息;进而将查找到的其他功能信息对应的代码功能确定为该目标代码功能关联的功能。该装置可以自动分析得到目标代码功能的关联功能,不仅便捷高效,而且查找结果更加精确和全面。
在其中一种可能的实施方式中,上述装置还提供用于功能关联查询的客户端,该客户端包含功能ID查询通道、日志查询通道和功能关键词查询通道。并且,上述功能信息获取模块61还用于:通过客户端接收用户的功能查询请求;如果该功能查询请求来自功能ID查询通道,从该功能查询请求中提取目标代码功能的功能ID,将提取的功能ID作为该目标代码功能的功能信息;如果该功能查询请求来自日志查询通道,从该功能查询请求中提取目标代码功能的代码日志,从代码日志中解析出该目标代码功能的功能信息;如果该功能查询请求来自功能关键词查询通道,从该功能查询请求中提取目标代码功能的功能关键词,将提取的功能关键词作为该目标代码功能的功能关键词。
在另一种可能的实施方式中,上述代码日志为预设格式,该预设格式规定按照预设符号对代码日志中的功能信息进行标注,并且上述功能信息获取模块61还用于:从该代码日志中提取预设符号标注的功能信息;对代码日志中未标注的信息按照预设的分词算法提取功能信息;将提取出的所有功能信息作为该目标代码功能的功能信息。
在另一种可能的实施方式中,上述代码功能的关联装置中的数据库按照以下方式建立:收集提交信息;该提交信息包括代码日志和该代码日志对应的修改文件;对于每次收集到的提交信息,均基于提交信息中的代码日志确定该提交信息对应的功能信息,并根据提交信息中的修改文件确定该提交信息对应的程序模块,以及将该功能信息与该程序模块绑定保存至数据库中。
在另一种可能的实施方式中,上述基于提交信息中的代码日志确定该提交信息对应的功能信息的步骤,包括:将提交信息的代码日志中使用预设符号标注的信息作为该提交信息的功能信息;对提交信息中未使用预设符号标注的信息,按照预设的分词算法提取功能信息,或从未使用预设符号标注的信息中提取预设的功能ID。
在另一种可能的实施方式中,上述根据提交信息中的修改文件确定该提交信息对应的程序模块的步骤,包括:解析提交信息中的修改文件,得到该修改文件的语法树信息;其中,该语法树信息包括每个程序模块所在的行号和各个程序模块间的嵌套关系;为该嵌套关系中的各节点增添指向父节点的指针;根据嵌套关系,以行号为主键,程序模块名为键值,建立每行代码所在行号的关联字典;根据提交信息中的修改文件确定修改代码行号,并根据修改代码行号查询关联字典,得到该提交信息对应的程序模块。
在另一种可能的实施方式中,上述根据嵌套关系,以行号为主键,程序模块名为键值,建立每行代码所在行号的关联字典的步骤,包括:获取每个程序模块的定义行的行号,以行号为主键,程序模块名为键值,建立每个程序模块的定义行的行号对应的关联字典;根据该嵌套关系和每个程序模块的定义行的行号对应的关联字典,建立每行代码所在行号的关联字典;其中,该关联字典包括:当前代码行的行号、当前代码行归属的程序模块名、当前代码行的父节点的行号和当前代码行父节点的程序模块名。
在另一种可能的实施方式中,上述其他功能信息查找模块63还用于:当程序模块为函数,以该函数为检索词,在数据库中查找除该功能信息之外的第一其他功能信息;以该函数的父节点对应的程序模块为检索词,在数据库中查找除该功能信息之外的第二其他功能信息。
在另一种可能的实施方式中,上述装置还包括可视化显示模块,该可视化显示模块用于以可视化方式显示该目标代码功能关联的功能。
在另一种可能的实施方式中,上述可视化显示模块还用于:计算每个目标代码功能关联的功能与该目标代码功能共同对应的程序模块的数目;根据该数目对目标代码功能关联的功能排序;显示排序后的上述目标代码功能关联的功能。
在另一种可能的实施方式中,上述数据库中还保存有与功能信息关联的修改提示信息,该修改提示信息包括以下至少之一:修改时间信息、修改版本信息和修改发起者信息;并且,上述可视化显示模块还用于:以可视化方式显示该目标代码功能关联的功能的步骤包括:在该数据库中查找上述其他功能信息关联的修改提示信息;将该目标代码功能关联的功能和查找到的修改提示信息以可视化方式显示。
在另一种可能的实施方式中,上述装置还包括缓存模块,该缓存模块用于将该目标代码功能关联的功能保存在缓存中,并在缓存时长达到设定时长时清除;当再次获取到该目标代码功能的功能信息时,从缓存中查找该目标代码功能关联的功能。
本申请实施例所提供的代码功能的关联装置,其实现原理及产生的技术效果和前述代码功能的关联方法实施例相同,为简要描述,代码功能的关联装置实施例部分未提及之处,可参考前述代码功能的关联方法实施例中相应内容。
本申请实施例还提供了代码功能的关联装置另一种实现方式,参见图7,为该装置的结构示意图,其中,该代码功能的关联装置700包括提交信息收集模块71,分别与提交信息收集模块71相连的修改文件分析模块72和代码日志分析模块73,以及与修改文件分析模块72和代码日志分析模块73相连的数据库74,以及WEB客户端76和WEB服务端75,其中,WEB服务端75分别与WEB客户端76和上述数据库74相连。
在实际操作中,该装置通过提交信息收集模块71自动收集每次提交的信息,包括代码日志、修改文件、修改时间等。并且,在收集到提交信息后,还对该提交信息进行分析,主要分为两个部分:修改文件分析和代码日志分析。其中,修改文件分析会对本次提交的内容进行解析,解析过程需要具体到函数或类级别的修改;代码日志分析会解析本次提交的软件功能信息,作为后续判断关联功能的依据。在完成上述修改文件分析和代码日志分析之后,装置对收集到的信息进行整合和合并,并存储到数据库74中。在其中一种可能的实施方式中,上述收集到的信息包括代码日志的分析结果,修改文件的分析结果,提交人,提交版本号和修改时间。
另外,该装置中的WEB客户端76用于提供用户查询页面和接口,用户可以输入自己提交的功能,Web页面返回查询到的与该功能关联的其他功能结果。WEB服务端75接收WEB客户端76输入的信息,在上述数据库74中检索关联功能的信息,并对信息进行整合,返回给WEB客户端76。
在实际软件开发中,如果项目数据较少,可以采用mysql数据库保存每次提交的日志信息和修改类或修改函数信息。如果项目数据较多,可以将结果输入Elasticsearch中,加快WEB系统的查询速度。这里,考虑到项目中很多开发者可能同时提交,每次处理提交的时间较长,两次提交分析之间可能产生影响,装置对每次提交缓存到Celery任务队列中,然后每次从队列中取出一次提交进行分析,任务处理完成后,再分析下一次提交,这样很好保证了每次提交之间相互独立。
在至少一种可能的实施方式中,本实施例中的代码功能的关联装置700可以采用Svn作为代码版本管理工具,采用Redmine工具进行进度管理。并且,该装置通过Svn的PreHook限制每次提交必须包含Redmine任务单号,通过PostHook自动获取每次提交信息。再者,在代码日志分析模块73进行语法解析时,通过Python的AST模块实现解析语法树,并通过Celery任务队列依次对每次提交数据进行处理分析。另外,数据库74采用Mysql存储,WEB客户端76端采用AngularJS框架,和Web服务器交互采用Ajax异步请求,同时配合了Highcharts图形库来做定制化展示,WEB服务端75采用Flask框架实现。
本申请实施例提供的代码功能的关联装置,与上述实施例提供的代码功能的关联方法具有相同的技术特征,所以也能解决相同的技术问题,达到相同的技术效果。
本申请实施例还提供了一种电子设备,如图8所示,为该电子设备的结构示意图,其中,该电子设备包括处理器81和存储器80,该存储器80存储有能够被该处理器81执行的计算机可执行指令,该处理器81执行该计算机可执行指令以实现上述代码功能的关联方法。
在图8示出的实施方式中,该电子设备还包括总线82和通信接口83,其中,处理器81、通信接口83和存储器80通过总线82连接。
其中,存储器80可能包含高速随机存取存储器(RAM,Random Access Memory),也可能还包括非不稳定的存储器(non-volatile memory),例如至少一个磁盘存储器。通过至少一个通信接口83(可以是有线或者无线)实现该系统网元与至少一个其他网元之间的通信连接,可以使用互联网,广域网,本地网,城域网等。总线82可以是ISA总线、PCI总线或EISA总线等。所述总线82可以分为地址总线、数据总线、控制总线等。为便于表示,图8中仅用一个双向箭头表示,但并不表示仅有一根总线或一种类型的总线。
处理器81可能是一种集成电路芯片,具有信号的处理能力。在实现过程中,上述方法的各步骤可以通过处理器81中的硬件的集成逻辑电路或者软件形式的指令完成。上述的处理器81可以是通用处理器,包括中央处理器(Central Processing Unit,简称CPU)、网络处理器(Network Processor,简称NP)等;还可以是数字信号处理器(Digital SignalProcessor,简称DSP)、专用集成电路(Application Specific Integrated Circuit,简称ASIC)、现场可编程门阵列(Field-Programmable Gate Array,简称FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。结合本申请实施例所公开的方法的步骤可以直接体现为硬件译码处理器执行完成,或者用译码处理器中的硬件及软件模块组合执行完成。软件模块可以位于随机存储器,闪存、只读存储器,可编程只读存储器或者电可擦写可编程存储器、寄存器等本领域成熟的存储介质中。该存储介质位于存储器,处理器81读取存储器中的信息,结合其硬件完成前述实施例的代码功能的关联方法的步骤。
本申请实施例还提供了一种计算机可读存储介质,该计算机可读存储介质存储有计算机可执行指令,该计算机可执行指令在被处理器调用和执行时,该计算机可执行指令促使处理器实现上述代码功能的关联方法,具体实现可参见前述方法实施例,在此不再赘述。
本申请实施例所提供的代码功能的关联方法、代码功能的关联装置和电子设备的计算机程序产品,包括存储了程序代码的计算机可读存储介质,所述程序代码包括的指令可用于执行前面方法实施例中所述的代码功能的关联方法,具体实现可参见方法实施例,在此不再赘述。
除非另外具体说明,否则在这些实施例中阐述的部件和步骤的相对步骤、数字表达式和数值并不限制本申请的范围。
所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个处理器可执行的非易失的计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
最后应说明的是:以上所述实施例,仅为本申请的具体实施方式,用以说明本申请的技术方案,而非对其限制,本申请的保护范围并不局限于此,尽管参照前述实施例对本申请进行了详细的说明,本领域的普通技术人员应当理解:任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,其依然可以对前述实施例所记载的技术方案进行修改或可轻易想到变化,或者对其中部分技术特征进行等同替换;而这些修改、变化或者替换,并不使相应技术方案的本质脱离本申请实施例技术方案的精神和范围,都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应以所述权利要求的保护范围为准。
Claims (15)
1.一种代码功能的关联方法,其特征在于,包括:
获取目标代码功能的功能信息;所述功能信息为表达所述目标代码功能的功能特点的信息,所述功能信息基于代码功能的代码日志、代码功能的文本或代码功能的代码文件中的注释说明分析得到;
在数据库中查找与所述功能信息对应的程序模块;其中,所述数据库中预先绑定存储有根据所述目标代码功能对应的代码日志和修改文件分别确定的所述功能信息和所述程序模块,所述程序模块包括函数或类;
以所述程序模块为检索词,在所述数据库中查找除所述功能信息之外的其他功能信息;
将查找到的所述其他功能信息对应的代码功能确定为所述目标代码功能关联的功能。
2.根据权利要求1所述的方法,其特征在于,所述方法还包括:提供用于功能关联查询的客户端,所述客户端包含功能ID查询通道、日志查询通道和功能关键词查询通道;
所述获取目标代码功能的功能信息的步骤包括:
通过所述客户端接收用户的功能查询请求;
如果所述功能查询请求来自所述功能ID查询通道,从所述功能查询请求中提取目标代码功能的功能ID,将提取的功能ID作为所述目标代码功能的功能信息;
如果所述功能查询请求来自所述日志查询通道,从所述功能查询请求中提取目标代码功能的代码日志,从所述代码日志中解析出所述目标代码功能的功能信息;
如果所述功能查询请求来自所述功能关键词查询通道,从所述功能查询请求中提取目标代码功能的功能关键词,将提取的功能关键词作为所述目标代码功能的功能信息。
3.根据权利要求2所述的方法,其特征在于,所述代码日志为预设格式;所述预设格式规定按照预设符号对所述代码日志中的功能信息进行标注;
从所述代码日志中解析出所述目标代码功能的功能信息的步骤包括:
从所述代码日志中提取所述预设符号标注的功能信息;
对所述代码日志中未标注的信息按照预设的分词算法提取功能信息;
将提取出的所有功能信息作为所述目标代码功能的功能信息。
4.根据权利要求1所述的方法,其特征在于,所述数据库按照以下方式建立:
收集提交信息;所述提交信息包括代码日志和所述代码日志对应的修改文件;
对于每次收集到的提交信息,均基于所述提交信息中的代码日志确定该提交信息对应的功能信息,并根据该提交信息中的修改文件确定该提交信息对应的程序模块,以及将该功能信息与该程序模块绑定保存至数据库中。
5.根据权利要求4所述的方法,其特征在于,基于所述提交信息中的代码日志确定该提交信息对应的功能信息的步骤,包括:
将该提交信息的代码日志中使用预设符号标注的信息作为该提交信息的功能信息;
对该提交信息中未使用所述预设符号标注的信息,按照预设的分词算法提取功能信息,或从未使用所述预设符号标注的信息中提取预设的功能ID。
6.根据权利要求4所述的方法,其特征在于,所述根据该提交信息中的修改文件确定该提交信息对应的程序模块的步骤,包括:
解析所述提交信息中的修改文件,得到所述修改文件的语法树信息;其中,所述语法树信息包括每个程序模块所在的行号和各个程序模块间的嵌套关系;
为所述嵌套关系中的各节点增添指向父节点的指针;
根据所述嵌套关系,以行号为主键,程序模块名为键值,建立每行代码所在行号的关联字典;
根据所述提交信息中的修改文件确定修改代码行号,并根据修改代码行号查询所述关联字典,得到该提交信息对应的程序模块。
7.根据权利要求6所述的方法,其特征在于,所述根据所述嵌套关系,以行号为主键,程序模块名为键值,建立每行代码所在行号的关联字典的步骤,包括:
获取每个程序模块的定义行的行号,以行号为主键,程序模块名为键值,建立每个程序模块的定义行的行号对应的关联字典;
根据所述嵌套关系和每个程序模块的定义行的行号对应的关联字典,建立每行代码所在行号的关联字典;其中,该关联字典包括:当前代码行的行号、当前代码行归属的程序模块名、当前代码行的父节点的行号和当前代码行父节点的程序模块名。
8.根据权利要求1所述的方法,其特征在于,以所述程序模块为检索词,在所述数据库中查找除所述功能信息之外的其他功能信息的步骤包括:
当所述程序模块为函数,以所述函数为检索词,在所述数据库中查找除所述功能信息之外的第一其他功能信息;
以所述函数的父节点对应的程序模块为检索词,在所述数据库中查找除所述功能信息之外的第二其他功能信息。
9.根据权利要求1所述的方法,其特征在于,在所述将查找到的所述其他功能信息对应的代码功能确定为所述目标代码功能关联的功能的步骤之后,所述方法还包括:以可视化方式显示所述目标代码功能关联的功能。
10.根据权利要求9所述的方法,其特征在于,以可视化方式显示所述目标代码功能关联的功能的步骤,包括:
计算每个所述目标代码功能关联的功能与所述目标代码功能共同对应的程序模块的数目;
根据所述数目对所述目标代码功能关联的功能排序;
显示排序后的所述目标代码功能关联的功能。
11.根据权利要求9所述的方法,其特征在于,所述数据库中还保存有与功能信息关联的修改提示信息,所述修改提示信息包括以下至少之一:修改时间信息、修改版本信息和修改发起者信息;
以可视化方式显示所述目标代码功能关联的功能的步骤包括:
在所述数据库中查找所述其他功能信息关联的修改提示信息;
将所述目标代码功能关联的功能和查找到的修改提示信息以可视化方式显示。
12.根据权利要求1所述的方法,其特征在于,在所述将查找到的所述其他功能信息对应的代码功能确定为所述目标代码功能关联的功能的步骤之后,所述方法还包括:
将所述目标代码功能关联的功能保存在缓存中,并在缓存时长达到设定时长时清除;
当再次获取到所述目标代码功能的功能信息时,从所述缓存中查找所述目标代码功能关联的功能。
13.一种代码功能的关联装置,其特征在于,包括:
功能信息获取模块,用于获取目标代码功能的功能信息;所述功能信息为表达所述目标代码功能的功能特点的信息,所述功能信息基于代码功能的代码日志、代码功能的文本或代码功能的代码文件中的注释说明分析得到;
程序模块查找模块,用于在数据库中查找与所述功能信息对应的程序模块;其中,所述数据库中预先绑定存储有根据所述目标代码功能对应的代码日志和修改文件分别确定的所述功能信息和所述程序模块,所述程序模块包括函数或类;
其他功能信息查找模块,用于以所述程序模块为检索词,在所述数据库中查找除所述功能信息之外的其他功能信息;
关联功能确定模块,用于将查找到的所述其他功能信息对应的代码功能确定为所述目标代码功能关联的功能。
14.一种电子设备,其特征在于,包括处理器和存储器,所述存储器存储有能够被所述处理器执行的计算机可执行指令,所述处理器执行所述计算机可执行指令以实现权利要求1至12任一项所述的代码功能的关联方法。
15.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储有计算机可执行指令,所述计算机可执行指令在被处理器调用和执行时,计算机可执行指令促使处理器实现权利要求1至12任一项所述的代码功能的关联方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910687386.0A CN110413307B (zh) | 2019-07-26 | 2019-07-26 | 代码功能的关联方法、装置及电子设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910687386.0A CN110413307B (zh) | 2019-07-26 | 2019-07-26 | 代码功能的关联方法、装置及电子设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110413307A CN110413307A (zh) | 2019-11-05 |
CN110413307B true CN110413307B (zh) | 2023-11-24 |
Family
ID=68363671
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910687386.0A Active CN110413307B (zh) | 2019-07-26 | 2019-07-26 | 代码功能的关联方法、装置及电子设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110413307B (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112114861B (zh) * | 2020-09-29 | 2024-03-26 | 北京云族佳科技有限公司 | 统计程序开发中使用的技能的方法、装置及电子设备 |
CN115328812B (zh) * | 2022-10-11 | 2023-02-28 | 深圳华锐分布式技术股份有限公司 | 基于网络爬虫的ui界面测试方法、装置、设备及介质 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107861753A (zh) * | 2017-06-26 | 2018-03-30 | 平安普惠企业管理有限公司 | App生成索引、检索方法和系统及可读存储介质 |
CN108459874A (zh) * | 2018-03-05 | 2018-08-28 | 中国人民解放军国防科技大学 | 融合深度学习和自然语言处理的代码自动化摘要方法 |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20040054520A1 (en) * | 2002-07-05 | 2004-03-18 | Dehlinger Peter J. | Text-searching code, system and method |
CN110019295B (zh) * | 2017-09-25 | 2021-07-27 | 北京国双科技有限公司 | 数据库检索方法、装置、系统以及存储介质 |
CN108446380B (zh) * | 2018-03-17 | 2021-07-30 | 上海锐垚科技有限公司 | 基于模块化信息存储结构提升产业质量水平的系统 |
-
2019
- 2019-07-26 CN CN201910687386.0A patent/CN110413307B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107861753A (zh) * | 2017-06-26 | 2018-03-30 | 平安普惠企业管理有限公司 | App生成索引、检索方法和系统及可读存储介质 |
CN108459874A (zh) * | 2018-03-05 | 2018-08-28 | 中国人民解放军国防科技大学 | 融合深度学习和自然语言处理的代码自动化摘要方法 |
Also Published As
Publication number | Publication date |
---|---|
CN110413307A (zh) | 2019-11-05 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108460014B (zh) | 企业实体的识别方法、装置、计算机设备及存储介质 | |
CN104850554B (zh) | 一种搜索方法和系统 | |
CN100462976C (zh) | 错误超链接检测设备及其方法 | |
US11797607B2 (en) | Method and apparatus for constructing quality evaluation model, device and storage medium | |
EP3584728B1 (en) | Method and device for analyzing open-source license | |
WO2022218186A1 (zh) | 个性化知识图谱的生成方法、装置及计算机设备 | |
US9754083B2 (en) | Automatic creation of clinical study reports | |
CN111079029B (zh) | 敏感账号的检测方法、存储介质和计算机设备 | |
CN110555205B (zh) | 否定语义识别方法及装置、电子设备、存储介质 | |
US20210073257A1 (en) | Logical document structure identification | |
CN110413307B (zh) | 代码功能的关联方法、装置及电子设备 | |
CN112307303A (zh) | 基于云计算的网络页面高效精准去重系统 | |
CN111126058B (zh) | 文本信息自动抽取方法、装置、可读存储介质和电子设备 | |
CN112818200A (zh) | 基于静态网站的数据爬取及事件分析方法及系统 | |
US20090204889A1 (en) | Adaptive sampling of web pages for extraction | |
CN113419721B (zh) | 基于web的表达式编辑方法、装置、设备和存储介质 | |
CN111753536A (zh) | 一种专利申请文本的自动撰写方法和装置 | |
Yu et al. | Web content information extraction based on DOM tree and statistical information | |
CN111158973B (zh) | 一种web应用动态演化监测方法 | |
CN112613176A (zh) | 慢sql语句预测方法及系统 | |
CN104778232A (zh) | 一种基于长查询的搜索结果的优化方法和装置 | |
CN110674033A (zh) | 处理代码的方法、装置、设备及存储介质 | |
CN113127776A (zh) | 面包屑路径生成方法、装置及终端设备 | |
US11195115B2 (en) | File format prediction based on relative frequency of a character in the file | |
CN115238078A (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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |