CN112181430A - 代码变更统计方法、装置、电子设备及存储介质 - Google Patents
代码变更统计方法、装置、电子设备及存储介质 Download PDFInfo
- Publication number
- CN112181430A CN112181430A CN202011054016.2A CN202011054016A CN112181430A CN 112181430 A CN112181430 A CN 112181430A CN 202011054016 A CN202011054016 A CN 202011054016A CN 112181430 A CN112181430 A CN 112181430A
- Authority
- CN
- China
- Prior art keywords
- code
- code line
- line
- target
- determining
- 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
- 230000008859 change Effects 0.000 title claims abstract description 143
- 238000007619 statistical method Methods 0.000 title claims abstract description 11
- 238000000034 method Methods 0.000 claims abstract description 44
- 230000011218 segmentation Effects 0.000 claims description 18
- 238000005516 engineering process Methods 0.000 claims description 12
- 238000004590 computer program Methods 0.000 claims description 11
- 230000004048 modification Effects 0.000 claims description 3
- 238000012986 modification Methods 0.000 claims description 3
- 230000008569 process Effects 0.000 abstract description 14
- 238000010276 construction Methods 0.000 abstract description 2
- 238000010586 diagram Methods 0.000 description 9
- 238000013461 design Methods 0.000 description 8
- 238000004891 communication Methods 0.000 description 5
- 230000006870 function Effects 0.000 description 4
- 230000004075 alteration Effects 0.000 description 2
- 230000018109 developmental process Effects 0.000 description 2
- 238000012545 processing Methods 0.000 description 2
- 230000006399 behavior Effects 0.000 description 1
- 238000011161 development Methods 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/42—Syntactic analysis
- G06F8/425—Lexical analysis
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F40/00—Handling natural language data
- G06F40/20—Natural language analysis
- G06F40/205—Parsing
- G06F40/216—Parsing using statistical methods
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F40/00—Handling natural language data
- G06F40/20—Natural language analysis
- G06F40/279—Recognition of textual entities
- G06F40/284—Lexical analysis, e.g. tokenisation or collocates
Abstract
本申请提供一种代码变更统计方法、装置、电子设备及存储介质,包括:获取第一源代码文件中的第一代码,以及代码变更后的第二源代码文件中的第二代码,其中,所述第一代码包括至少一个第一代码行,所述第二代码包括至少一个第二代码行;针对每个第二代码行,在确定所述至少一个第一代码行中不存在与该第二代码行相同的代码行时,确定该第二代码行为目标代码行;根据所述目标代码行,确定出表征程序员对所述第一代码所作变更的变更量。由于此方法是直接对代码行进行比较,并不涉及语法分析和语法树构建过程,因此,与现有技术相比,所需时长较短,继而提高代码变更量的统计效率。
Description
技术领域
本申请涉及软件开发技术领域,具体而言,涉及一种代码变更统计方法、装置、电子设备及存储介质。
背景技术
一般而言,程序员在进行软件开发时,通常是基于之前编写的代码进行后续开发,因此,为了比较合理地统计程序员的工作量,因此,现有技术基于第一代码文件中的代码建立第一抽象语法树,以及基于代码变更后的第二代码文件中的代码建立第二抽象语法树,通过计算第一抽象语法树和第二抽象语法树之间节点的差异,以统计程序员编写的第二代码文件所作出的代码贡献量;然而,在构建语法树时,需要将代码文件中的源代码进行词法分析和语法分析之后,才能构建出语法树,复杂度高,耗时较长;其次,在构建出的语法树比较大时,比较语法树之间的节点差异的过程也非常耗时。
发明内容
鉴于此,本申请实施例的目的在于提供一种代码变更统计方法、装置、电子设备及存储介质,以提高统计效率。
第一方面,本申请实施例提供一种代码变更统计方法,所述方法包括:获取第一源代码文件中的第一代码,以及代码变更后的第二源代码文件中的第二代码,其中,所述第一代码包括至少一个第一代码行,所述第二代码包括至少一个第二代码行;针对每个第二代码行,在确定所述至少一个第一代码行中不存在与该第二代码行相同的代码行时,确定该第二代码行为目标代码行;根据所述目标代码行,确定出表征程序员对所述第一代码所作变更的变更量。
在上述实现过程中,在获取到第一源代码文件中的至少一个第一代码行,以及代码变更后的第二源代码文件中的至少一个第二代码行之后,针对每个第二代码行,通过将该第二代码行与所述至少一个第二代码行中的各行代码进行比较,在确定所述至少一个第一代码行中不存在与该第二代码行相同的代码行时,确定该第二代码行为目标代码行,继而根据所述目标代码行,确定出表征程序员对所述第一代码所作变更的变更量,由于上述过程是直接对代码行进行比较,且不涉及语法分析和语法树构建过程,因此,与现有技术相比,所需时长较短,继而提高代码变更量的统计效率。
基于第一方面,在一种可能的设计中,在所述第二代码中还包括各个第二代码行的行号时,在所述在确定所述至少一个第一代码行中不存在与该第二代码行相同的代码行时,确定该第二代码行为目标代码行之后,所述方法还包括:将该第二代码行的行号记录为所述目标代码行的行号;根据所述目标代码行的行号对所述目标代码行进行汇总。
在目标代码行的数量比较多的情况下,若确定出一个目标代码行,就将记录该目标代码行的代码,在目标代码行的数量较多的情况下,需要记录的内容也会变得非常多,因此,在上述实现过程中,在确定出一个目标代码行之后,只需要记录目标代码行的行号,无需直接记录该目标代码行的代码,需要记录的内容较少,最后根据所述目标代码行的行号对所述目标代码行进行汇总,以根据汇总后的目标代码行确定出代码变更量。
基于第一方面,在一种可能的设计中,所述根据所述目标代码行,确定出表征程序员对所述第一代码所作变更的变更量,包括:根据所述目标代码行,确定所述至少一个第一代码行中是否存在与该目标代码行部分相同的代码行;在确定所述至少一个第一代码行中存在与该目标代码行部分相同的代码行时,确定该目标代码行为变更后的代码行,否则确定该目标代码行为新增代码行;根据所述变更后的代码行、所述新增代码行和预设规则,确定出表征程序员对所述第一代码所作变更的变更量。
针对每个目标代码行,将其与至少一个第一代码行相比,该目标代码行可能是新增代码行,也可能是对某个第一代码行进行部分修改后的变更后的代码行,可以理解的是,新增一行代码的工作量通常比修改一行代码的工作量大,因此,在上述实现过程中,通过对变更后的代码行和新增代码行进行区分,继而根据所述变更后的代码行、所述新增代码行和所述预设规则,更为准确地确定出程序员的工作量。
基于第一方面,在一种可能的设计中,在所述确定出表征程序员对所述第一代码所作变更的变更量之前,所述方法还包括:在确定所述至少一个第一代码行中存在与该目标代码行部分相同的代码行时,确定所述部分相同的代码行为与该目标代码行对应的变更前的代码行;对应的,所述根据所述变更后的代码行、所述新增代码行和预设规则,确定出表征程序员对所述第一代码所作变更的变更量,包括:针对每个变更后的代码行,基于词法分析技术,将该变更后的代码行和与该变更后的代码行对应的变更前的代码行进行分词并比较,确定存在差异的第一单词数量;基于所述词法分析技术,对所述新增代码行进行分词,确定出第二单词数量;基于所述第一单词数量和所述第二单词数量,确定出所述变更量。
某些场景下(比如if条件判断语句层级的变动、代码层级缩进等),针对现有技术,即使只对代码文件中的代码作一个比较小的修改,也会导致语法树结构发生较大的变化,继而导致代码变更前后的代码文件所对应的语法树之间的节点差异较大,最终导致程序员的工作量统计不够准确,因此,在上述实现过程中,基于词法分析技术,将该变更后的代码行和与该变更后的代码行对应的变更前的代码行进行分词并比较,确定存在差异的第一单词数量,由于第一单词数量能较为准确地度量变更后的代码行和与该变更后的代码行对应的变更前的代码行之间的差异,可以理解的是,第一单词的数量越多,工作量越大,反之,越小;继而根据第一单词数量和第二单词数量能更为准确地确定出程序员的工作量。
基于第一方面,在一种可能的设计中,所述根据所述目标代码行,确定出表征程序员对所述第一代码所作变更的变更量,包括:基于词法分析技术,对所述目标代码行中的代码进行分词,确定单词的数量为所述变更量。
在上述实现过程中,通过确定目标代码行中的单词的数量为变更量,能够快速、且合理地确定出程序员的工作量。
第二方面,本申请实施例提供一种代码变更统计装置,所述装置包括:获取单元,用于获取第一源代码文件中的第一代码,以及代码变更后的第二源代码文件中的第二代码,其中,所述第一代码包括至少一个第一代码行,所述第二代码包括至少一个第二代码行;目标代码行确定单元,用于针对每个第二代码行,在确定所述至少一个第一代码行中不存在与该第二代码行相同的代码行时,确定该第二代码行为目标代码行;变更量确定单元,用于根据所述目标代码行,确定出表征程序员对所述第一代码所作变更的变更量。
基于第二方面,在一种可能的设计中,在所述第二代码中还包括各个第二代码行的行号时,所述装置还包括:汇总单元,用于将该第二代码行的行号记录为所述目标代码行的行号;以及根据所述目标代码行的行号对所述目标代码行进行汇总。
基于第二方面,在一种可能的设计中,所述变更量确定单元,具体用于根据所述目标代码行,确定所述至少一个第一代码行中是否存在与该目标代码行部分相同的代码行;以及在确定所述至少一个第一代码行中存在与该目标代码行部分相同的代码行时,确定该目标代码行为变更后的代码行,否则确定该目标代码行为新增代码行;根据所述变更后的代码行、所述新增代码行和预设规则,确定出表征程序员对所述第一代码所作变更的变更量。
基于第二方面,在一种可能的设计中,所述装置还包括:变更前的代码行确定单元,用于在确定所述至少一个第一代码行中存在与该目标代码行部分相同的代码行时,确定所述存在部分相同的代码行为与该目标代码行对应的变更前的代码行;对应的,所述变更量确定单元,还用于针对每个变更后的代码行,基于词法分析技术,将该变更后的代码行和与该变更后的代码行对应的变更前的代码行进行分词并比较,确定存在差异的第一单词数量;以及基于所述词法分析技术,对所述新增代码行进行分词,确定出第二单词数量;基于所述第一单词数量和所述第二单词数量,确定出所述变更量。
基于第二方面,在一种可能的设计中,所述变更量确定单元,还用于基于词法分析技术,对所述目标代码行中的代码进行分词,确定单词的数量为所述变更量。
第三方面,本申请实施例提供一种电子设备,包括处理器以及与所述处理器连接的存储器,所述存储器内存储计算机程序,当所述计算机程序被所述处理器执行时,使得所述电子设备执行第一方面所述的方法。
第四方面,本申请实施例提供一种存储介质,所述存储介质中存储有计算机程序,当所述计算机程序在计算机上运行时,使得所述计算机执行第一方面所述的方法。
本申请的其他特征和优点将在随后的说明书阐述,并且,部分地从说明书中变得显而易见,或者通过实施本申请实施例了解。本申请的目的和其他优点可通过在所写的说明书、权利要求书、以及附图中所特别指出的结构来实现和获得。
附图说明
为了更清楚地说明本申请实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本申请的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。
图1为本申请实施例提供的代码变更统计方法的流程示意图。
图2为本申请实施例提供的代码变更统计装置的结构示意图。
图3为本申请实施例提供的电子设备的结构示意图。
图标:200-代码变更统计装置;210-获取单元;220-目标代码行确定单元;230-变更量确定单元;300-电子设备;301-处理器;302-存储器;303-通信接口。
具体实施方式
下面将结合本申请实施例中附图,对本申请实施例中的技术方案进行描述。
应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。同时,在本申请的描述中,术语“第一”、“第二”等仅用于区分描述,而不能理解为指示或暗示相对重要性。
请参照图1,图1为本申请实施例提供的一种代码变更统计方法的流程图,下面将对图1所示的流程进行详细阐述,所述方法包括步骤:S11、S12和S13。
S11:获取第一源代码文件中的第一代码,以及代码变更后的第二源代码文件中的第二代码,其中,所述第一代码包括至少一个第一代码行,所述第二代码包括至少一个第二代码行。
S12:针对每个第二代码行,在确定所述至少一个第一代码行中不存在与该第二代码行相同的代码行时,确定该第二代码行为目标代码行。
S13:根据所述目标代码行,确定出表征程序员对所述第一代码所作变更的变更量。
下面对上述方法进行详细介绍。
S11:获取第一源代码文件中的第一代码,以及代码变更后的第二源代码文件中的第二代码,其中,所述第一代码包括至少一个第一代码行,所述第二代码包括至少一个第二代码行。
可以理解的是,第二源代码文件是程序员在第一源代码文件中的第一代码的基础上进行代码编写之后,所形成的代码变更后的源代码文件。
在实际实施过程中,S11可以按照如下方式实施,在获取到第一源代码文件,通过对所述第一源代码文件进行解析,得到至少一个第一代码行,同理,在获取到第二源代码文件,通过对所述第二源代码文件进行解析,得到至少一个第二代码行。
作为一种实施方式,在S11中,也可以直接从第三方获取解析后的所述至少一个第一代码行,以及解析后的所述至少一个第二代码行。
在获取到至少一个第一代码行和至少一个第二代码行之后,执行步骤S12。
S12:针对每个第二代码行,在确定所述至少一个第一代码行中不存在与该第二代码行相同的代码行时,确定该第二代码行为目标代码行。
针对任意两行代码,若这两行代码相同,则这两行代码中的单词数量相同,且对应位置处的单词完全相同,因此,作为一种实施方式,S12可以按照如下方式实施,针对每个第二代码行,在基于分词分析算法对该第二代码行和各个第一代码行进行分词之后,针对每个第一代码行,在确定该第一代码行中的单词数量和第二代码行中的单词数量相同时,按照该第一代码行中的各个第一单词的位置,以及该第二代码行中的各个第二单词的位置,分别将位置索引相同的各个第一单词和各个第二单词进行差异比较,在该第一代码行中的各个第一单词与该第二代码行中的各个第二单词对应相同时,确定该第一代码行与该第二代码行相同,否则确定该第一代码行与该第二代码行不相同,继而能得到所述第一代码行中是否存在与该第二代码行中相同的代码行的比较结果,其中,在所述比较结果表征所述第一代码行中不存在与该第二代码行相同的代码行时,确定该第二代码行为目标代码行。
为了进一步降低目标代码行确定过程的复杂度,作为一种实施方式,S12可以按照如下方式实施,从所述至少一个第二代码行中任意选取一个第二代码行,将该第二代码行与所述至少一个第一代码行中的各个代码行进行比较,在确定所述至少一个第一代码行中存在与该第二代码行相同的代码行时,确定该第二代码行为非目标代码行;接着,从未进行比较的第二代码行中选取下一个第二代码行,并将该下一个第二代码行与所述至少一个第一代码行中除所述非目标代码行对应的第一代码行之外的其余代码行进行比较,在确定所述其余代码行中不存在与所述下一个第二代码行相同的代码行时,确定所述下一个第二代码行为目标代码行;接着,从未进行比较的第二代码行中选取再下一个第二代码行,并将该再下一个第二代码行与所述其余代码行进行比较,在确定所述其余代码行中不存在与所述再下一个第二代码行相同的代码行时,确定所述再下一个第二代码行为所述目标代码行;依次类推,直至完成对所有第二代码行与所有第一代码行的比较。
作为一种实施方式,S12可以按照如下方式实施,针对每个第二代码行,基于diff算法将该第二代码行与所述至少一个第一代码行中的各个第一代码行进行差异比较,在比较结果表征所述至少一个第一代码行中不存在与该第二代码行相同的第一代码行时,确定该第二代码行为目标代码行。其中,根据diff算法对代码行进行差异比较的具体实施方式为本领域熟知技术,因此,在此不再赘述。
S13:根据所述目标代码行,确定出表征程序员对所述第一代码所作变更的变更量。
作为一种实施方式,S13包括:基于词法分析技术,对所述目标代码行中的代码进行分词,确定单词的数量为所述变更量。
在完成对所有第二代码行与所有第一代码行的比较,得到目标代码行之后,基于分词分析算法,对获取到的目标代码行中的每行代码分别进行分词,得到多个单词,对所述多个单词的数量进行统计,确定所述多个单词的数量为所述变更量。
可以理解的是,空格不属于单词。
针对每个目标代码行,将其与至少一个第一代码行相比,该目标代码行可能是新增代码行,也可能是对某个第一代码行进行部分修改后的变更后的代码行,可以理解的是,新增一行代码的工作量通常比修改一行代码的工作量大,因此,作为一种实施方式,S13包括步骤:B1、B2和B3。
B1:根据所述目标代码行,确定所述至少一个第一代码行中是否存在与该目标代码行部分相同的代码行。
可以理解的是,在所述目标代码行的数量为至少两个时,针对每个目标代码行,在基于分词分析算法对该目标代码行和各个第一代码行进行分词之后,针对每个第一代码行,按照该第一代码行中的各个第一单词的位置,以及该目标代码行中的各个第二单词的位置,分别将位置索引相同的各个第一单词和各个第二单词进行差异比较,确定出相同的单词的数量,继而在确定所述相同的单词的数量与该第一代码行中的第一单词的数量的比值大于第一预设值时,确定该第一代码行为与该目标代码行部分相同的待选代码行,否则确定该第一代码行不为与该目标代码行部分相同的代码行;
其中,在所述待选代码行的数量为至少两个时,从至少两个待选代码行中确定出比值最大的代码行,并确定所述比值最大的代码行为与该目标代码行部分相同的代码行;在所述待选代码行的数量为一个时,确定所述待选代码行为与该目标代码行部分相同的代码行。
其中,所述第一预设值根据实际需求设定,所述第一预设值为大于0,小于1的数,在本实施例中,所述第一预设值为0.8,在其他实施例中,所述第一预设值也可以为0.7、0.75、0.85等,可以理解的是,在所述第一代码和所述第二代码不变的情况下,所述第一预设值越高,所述部分相同的代码行的数量越少,反之越多。
在所述目标代码行的数量为一个时,利用上述实施方式确定所述至少一个第一代码行中是否存在与该目标代码行部分相同的代码行。
作为一种实施方式,在目标代码行的数量为至少两个时,针对每个目标代码行,基于diff算法确定该目标代码行与所述至少一个第一代码行中的各个第一代码行的相似度,在确定相似度的值最大的第一代码行大于第二预设值时,确定所述相似度的值最大的第一代码行为与该目标代码行部分相同的代码行,在确定相似度的值最大的第一代码行小于等于所述第二预设值时,确定所述至少一个第一代码行中不存在与该目标代码行部分相同的代码行。
其中,所述第二预设值根据实际需求设定,在本实施例中,所述第二预设值为0.7,在其他实施例中,所述第二预设值也可以为0.6,0.8,0.9等。可以理解的是,在所述第一代码和所述第二代码不变的情况下,所述第二预设值越高,所述存在部分相同的代码行的数量越少,反之越多。
其中,根据diff算法计算代码行之间的相似度的具体实施方式为本领域熟知技术,因此,在此不再赘述。
在目标代码行的数量为一个时,也可以利用上述实施方式确定所述至少一个第一代码行中是否存在与该目标代码行部分相同的代码行。
在得到所述至少一个第一代码行中是否存在与该目标代码行部分相同的代码行的结果之后,执行步骤B2。
B2:在确定所述至少一个第一代码行中存在与该目标代码行部分相同的代码行时,确定该目标代码行为变更后的代码行,否则确定该目标代码行为新增代码行。
在所述结果表征所述至少一个第一代码行中存在与该目标代码行部分相同的代码行时,确定该目标代码行为变更后的代码行,否则确定该目标代码行为新增代码行。
作为一种实施方式,B2可以按照如下方式实施,在确定所述至少一个第一代码行中存在与该目标代码行部分相同的代码行时,将该目标代码行的行号记录为所述变更后的代码行的行号,否则将目标代码行的行号记录为所述新增代码行的行号,根据所述变更后的代码行的行号对所述变更后的代码行进行汇总,根据所述新增代码行的行号对所述新增代码行进行汇总。
B3:根据所述变更后的代码行、所述新增代码行和预设规则,确定出表征程序员对所述第一代码所作变更的变更量。
基于所述词法分析技术,对所述新增代码行进行分词,确定出第二单词数量,对所述变更后的代码行进行分词,确定出第三单词的数量,将所述第二单词数量乘以第一预设权重,得到第一变更量;将所述第三单词数量乘以第二预设权重,得到第二变更量;通过对所述第一变更量和所述第二变更量进行求和,得到所述变更量。
其中,所述第一预设权重和所述第二预设权重根据实际需求设定,只要满足所述第一预设权重和所述第二预设权重之和为1,所述第一预设权重大于所述第二预设权重就行。
在本实施例中,所述第一预设权重为0.7,所述第二预设权重为0.3。
为了快速地确定出所述变更量,因此,作为一种实施方式,B3可以按照如下方式实施,确定所述变更后的代码行的第一数量,确定所述新增代码行的第二数量,将所述第一数量乘以第三预设权重,得到第三变更量;将所述第二数量乘以第四预设权重,得到第四变更量;通过对所述第三变更量和所述第四变更量进行求和,得到所述变更量。
其中,所述第三预设权重和所述第四预设权重根据实际需求设定,只要满足所述第一预设权重和所述第二预设权重之和为1,所述第四预设权重大于所述第三预设权重就行。
在本实施例中,所述第四预设权重为0.8,所述第三预设权重为0.2。
作为一种实施方式,在步骤B3之前,所述方法还包括:在确定所述至少一个第一代码行中存在与该目标代码行部分相同的代码行时,确定所述存在部分相同的代码行为与该目标代码行对应的变更前的代码行。
可以理解的是,变更后的代码行和变更前的代码行一一对应。
在所述第一代码中包括各个第一代码行的行号时,作为一种实施方式,在确定所述至少一个第一代码行中存在与该目标代码行部分相同的代码行时,从所述第一代码中确定出所述存在部分相同的代码行的第一行号,并将所述第一行号记录为与该目标代码行对应的变更前的代码行的行号,根据变更前的代码行的行号对所述变更前的代码行进行汇总。
对应的,步骤B3包括步骤:B31、B32和B33。
B31:针对每个变更后的代码行,基于词法分析技术,将该变更后的代码行和与该变更后的代码行对应的变更前的代码行进行分词并比较,确定存在差异的第一单词数量。
在变更后的代码行的数量为至少两个时,针对每个变更后的代码行,在基于分词分析算法对该变更后的代码行进行分词,以及对与该变更后的代码对应的变更前的代码行进行分词之后,根据相似性算法,确定出该变更后的代码中与对应的变更前的代码行中存在差异的第一单词的数量。
在变更后的代码行的数量为一个时,也可以按照上述实施方式确定出与该变更后的代码行对应的第一单词数量。
B32:基于所述词法分析技术,对所述新增代码行进行分词,确定出第二单词数量。
其中,B32的具体实施方式可以参照前述实施方式,因此,在此不再赘述。
B33:基于所述第一单词数量和所述第二单词数量,确定出所述变更量。
通过对所述第一单词数量和所述第二单词数量进行求和,得到所述变更量的值。
作为一种实施方式,可以将所述第一单词数量乘以第五权重,得到第五变更量,将所述第二单词数量乘以第六权重,得到第六变更量,对所述第五变更量和所述第六变更量进行求和,得到所述变更量。
其中,所述第五权重可以和所述第六权重根据实际需求设定,只要保证所述第六权重大于等于所述第五权重,且所述第五权重和所述第五权重之和等于1就行。
在目标代码行的数量比较多的情况下,若确定出一个目标代码行,就将记录该目标代码行的代码,在目标代码行的数量较多的情况下,需要记录的内容也会变得非常多,因此,作为一种实施方式,在S12之后,所述方法还包括:A1和A2。
A1:将该第二代码行的行号记录为所述目标代码行的行号。
可以理解的是,各个第二代码行的行号不同,所述第二代码中的第二代码行与行号一一对应。
针对该第二代码行,在确定所述至少一个第一代码行中不存在与该第二代码行相同的代码行时,从所述第二代码中确定出与该第二代码行对应的行号,并将该第二代码行的行号记录为所述目标代码行的行号。
A2:根据所述目标代码行的行号对所述目标代码行进行汇总。
根据所述目标代码行的行号,从所述第二代码中查找出与所述目标代码行的行号对应的目标代码行,并对所述对应的目标代码行进行汇总。
在上述实现过程中,在确定出一个目标代码行之后,只需要记录目标代码行的行号,无需直接记录该目标代码行的代码,记录的内容较少,最后根据所述目标代码行的行号对所述目标代码行进行汇总,以根据汇总后的目标代码行确定出代码变更量。
请参照图2,图2是本申请实施例提供的一种代码变更统计装置200的结构框图。下面将对图2所示的结构框图进行阐述,所示装置包括:
获取单元210,用于获取第一源代码文件中的第一代码,以及代码变更后的第二源代码文件中的第二代码,其中,所述第一代码包括至少一个第一代码行,所述第二代码包括至少一个第二代码行。
目标代码行确定单元220,用于针对每个第二代码行,在确定所述至少一个第一代码行中不存在与该第二代码行相同的代码行时,确定该第二代码行为目标代码行。
变更量确定单元230,用于根据所述目标代码行,确定出表征程序员对所述第一代码所作变更的变更量。
作为一种实施方式,在所述第二代码中还包括各个第二代码行的行号时,所述装置还包括:汇总单元,用于将该第二代码行的行号记录为所述目标代码行的行号;以及根据所述目标代码行的行号对所述目标代码行进行汇总。
作为一种实施方式,所述变更量确定单元230,具体用于根据所述目标代码行,确定所述至少一个第一代码行中是否存在与该目标代码行部分相同的代码行;以及在确定所述至少一个第一代码行中存在与该目标代码行部分相同的代码行时,确定该目标代码行为变更后的代码行,否则确定该目标代码行为新增代码行;根据所述变更后的代码行、所述新增代码行和预设规则,确定出表征程序员对所述第一代码所作变更的变更量。
作为一种实施方式,所述装置还包括:变更前的代码行确定单元,用于在确定所述至少一个第一代码行中存在与该目标代码行部分相同的代码行时,确定所述存在部分相同的代码行为与该目标代码行对应的变更前的代码行;对应的,所述变更量确定单元230,还用于针对每个变更后的代码行,基于词法分析技术,将该变更后的代码行和与该变更后的代码行对应的变更前的代码行进行分词并比较,确定存在差异的第一单词数量;以及基于所述词法分析技术,对所述新增代码行进行分词,确定出第二单词数量;基于所述第一单词数量和所述第二单词数量,确定出所述变更量。
作为一种实施方式,所述变更量确定单元230,还用于基于词法分析技术,对所述目标代码行中的代码进行分词,确定单词的数量为所述变更量。
本实施例对的各功能单元实现各自功能的过程,请参见上述图1所示实施例中描述的内容,此处不再赘述。
请参照图3,图3为本申请实施例提供一种电子设备300的结构示意图,电子设备300可以包括:存储器302、处理301、通信接口303和通信总线,通信总线用于实现这些组件的连接通信。
所述存储器302用于存储本申请实施例提供的代码变更统计方法和装置对应的计算程序指令等各种数据,其中,存储器302可以是,但不限于,随机存取存储器(RandomAccess Memory,RAM),只读存储器(Read Only Memory,ROM),可编程只读存储器(Programmable Read-Only Memory,PROM),可擦除只读存储器(Erasable ProgrammableRead-Only Memory,EPROM),电可擦除只读存储器(Electric Erasable ProgrammableRead-Only Memory,EEPROM)等。
处理器301用于读取并运行存储于存储器中的代码变更统计方法和装置对应的计算机程序指令,以获取第一源代码文件中的第一代码,以及代码变更后的第二源代码文件中的第二代码,其中,所述第一代码包括至少一个第一代码行,所述第二代码包括至少一个第二代码行;针对每个第二代码行,在确定所述至少一个第一代码行中不存在与该第二代码行相同的代码行时,确定该第二代码行为目标代码行;根据所述目标代码行,确定出表征程序员对所述第一代码所作变更的变更量。
其中,处理器301可能是一种集成电路芯片,具有信号的处理能力。上述的处理器301可以是通用处理器,包括中央处理器(Central Processing Unit,CPU)、网络处理器(Network Processor,NP)等;还可以是数字信号处理器(DSP)、专用集成电路(ASIC)、现场可编程门阵列(FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。可以实现或者执行本申请实施例中的公开的各方法、步骤及逻辑框图。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。
通信接口303,用于接收或者发送数据。
此外,本申请实施例还提供了一种存储介质,在该存储介质中存储有计算机程序,当所述计算机程序在计算机上运行时,使得所述计算机执行本申请任一项实施方式所提供的方法。
综上所述,本申请各实施例提出的代码变更统计方法、装置、电子设备及存储介质,在获取到第一源代码文件中的至少一个第一代码行,以及代码变更后的第二源代码文件中的至少一个第二代码行之后,针对每个第二代码行,通过将该第二代码行与所述至少一个第二代码行中的各行代码进行比较,在确定所述至少一个第一代码行中不存在与该第二代码行相同的代码行时,确定该第二代码行为目标代码行,继而根据所述目标代码行,确定出表征程序员对所述第一代码所作变更的变更量,由于上述过程是直接对代码行进行比较,且不涉及语法分析和语法树构建过程,因此,与现有技术相比,所需时长较短,继而提高代码变更量的统计效率。
在本申请所提供的实施例中,应该理解到,所揭露的装置和方法,也可以通过其它的方式实现。以上所描述的装置实施例仅仅是示意性的,例如,附图中的流程图和框图显示了根据本申请的多个实施例的装置、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或代码的一部分,所述模块、程序段或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现方式中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或动作的专用的基于硬件的装置来实现,或者可以用专用硬件与计算机指令的组合来实现。
另外,在本申请各个实施例中的各功能模块可以集成在一起形成一个独立的部分,也可以是各个模块单独存在,也可以两个或两个以上模块集成形成一个独立的部分。
Claims (10)
1.一种代码变更统计方法,其特征在于,所述方法包括:
获取第一源代码文件中的第一代码,以及代码变更后的第二源代码文件中的第二代码,其中,所述第一代码包括至少一个第一代码行,所述第二代码包括至少一个第二代码行;
针对每个第二代码行,在确定所述至少一个第一代码行中不存在与该第二代码行相同的代码行时,确定该第二代码行为目标代码行;
根据所述目标代码行,确定出表征程序员对所述第一代码所作变更的变更量。
2.根据权利要求1所述的方法,其特征在于,在所述第二代码中还包括各个第二代码行的行号时,在所述在确定所述至少一个第一代码行中不存在与该第二代码行相同的代码行时,确定该第二代码行为目标代码行之后,所述方法还包括:
将该第二代码行的行号记录为所述目标代码行的行号;
根据所述目标代码行的行号对所述目标代码行进行汇总。
3.根据权利要求1所述的方法,其特征在于,所述根据所述目标代码行,确定出表征程序员对所述第一代码所作变更的变更量,包括:
根据所述目标代码行,确定所述至少一个第一代码行中是否存在与该目标代码行部分相同的代码行;
在确定所述至少一个第一代码行中存在与该目标代码行部分相同的代码行时,确定该目标代码行为变更后的代码行,否则确定该目标代码行为新增代码行;
根据所述变更后的代码行、所述新增代码行和预设规则,确定出表征程序员对所述第一代码所作变更的变更量。
4.根据权利要求3所述的方法,其特征在于,在所述确定出表征程序员对所述第一代码所作变更的变更量之前,所述方法还包括:
在确定所述至少一个第一代码行中存在与该目标代码行部分相同的代码行时,确定所述存在部分相同的代码行为与该目标代码行对应的变更前的代码行;
对应的,所述根据所述变更后的代码行、所述新增代码行和预设规则,确定出表征程序员对所述第一代码所作变更的变更量,包括:
针对每个变更后的代码行,基于词法分析技术,将该变更后的代码行和与该变更后的代码行对应的变更前的代码行进行分词并比较,确定存在差异的第一单词数量;
基于所述词法分析技术,对所述新增代码行进行分词,确定出第二单词数量;
基于所述第一单词数量和所述第二单词数量,确定出所述变更量。
5.根据权利要求1所述的方法,其特征在于,所述根据所述目标代码行,确定出表征程序员对所述第一代码所作变更的变更量,包括:
基于词法分析技术,对所述目标代码行中的代码进行分词,确定单词的数量为所述变更量。
6.一种代码变更统计装置,其特征在于,所述装置包括:
获取单元,用于获取第一源代码文件中的第一代码,以及代码变更后的第二源代码文件中的第二代码,其中,所述第一代码包括至少一个第一代码行,所述第二代码包括至少一个第二代码行;
目标代码行确定单元,用于针对每个第二代码行,在确定所述至少一个第一代码行中不存在与该第二代码行相同的代码行时,确定该第二代码行为目标代码行;
变更量确定单元,用于根据所述目标代码行,确定出表征程序员对所述第一代码所作变更的变更量。
7.根据权利要求6所述的装置,其特征在于,在所述第二代码中还包括各个第二代码行的行号时,所述装置还包括:汇总单元,用于将该第二代码行的行号记录为所述目标代码行的行号;以及根据所述目标代码行的行号对所述目标代码行进行汇总。
8.根据权利要求6所述的装置,其特征在于,所述变更量确定单元,具体用于根据所述目标代码行,确定所述至少一个第一代码行中是否存在与该目标代码行部分相同的代码行;以及在确定所述至少一个第一代码行中存在与该目标代码行部分相同的代码行时,确定该目标代码行为变更后的代码行,否则确定该目标代码行为新增代码行;根据所述变更后的代码行、所述新增代码行和预设规则,确定出表征程序员对所述第一代码所作变更的变更量。
9.一种电子设备,其特征在于,包括存储器以及处理器,所述存储器中存储有计算机程序指令,所述计算机程序指令被所述处理器读取并运行时,执行如权利要求1-5中任一项所述的方法。
10.一种存储介质,其特征在于,所述存储介质上存储有计算机程序指令,所述计算机程序指令被计算机读取并运行时,执行如权利要求1-5中任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011054016.2A CN112181430A (zh) | 2020-09-29 | 2020-09-29 | 代码变更统计方法、装置、电子设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011054016.2A CN112181430A (zh) | 2020-09-29 | 2020-09-29 | 代码变更统计方法、装置、电子设备及存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN112181430A true CN112181430A (zh) | 2021-01-05 |
Family
ID=73945970
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202011054016.2A Pending CN112181430A (zh) | 2020-09-29 | 2020-09-29 | 代码变更统计方法、装置、电子设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112181430A (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112948478A (zh) * | 2021-04-07 | 2021-06-11 | 深圳市易博天下科技有限公司 | 基于链路的代码分析方法、装置、电子设备及存储介质 |
CN112965741A (zh) * | 2021-02-10 | 2021-06-15 | 中国工商银行股份有限公司 | 变更程序识别方法及装置 |
CN116088934A (zh) * | 2023-04-10 | 2023-05-09 | 荣耀终端有限公司 | 一种软件开发工作量确定方法及服务器 |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103235729A (zh) * | 2013-04-18 | 2013-08-07 | 南京大学 | 一种基于代码变更的软件模型同步方法 |
CN109271321A (zh) * | 2018-09-20 | 2019-01-25 | 杭州安恒信息技术股份有限公司 | 一种贡献代码数统计方法及装置 |
US20190057014A1 (en) * | 2017-08-17 | 2019-02-21 | Entlt Software Llc | Test relevancy prediction for code changes |
CN109799990A (zh) * | 2017-11-16 | 2019-05-24 | 中标软件有限公司 | 源代码注释自动生成方法及系统 |
CN110262966A (zh) * | 2019-06-03 | 2019-09-20 | 深圳前海微众银行股份有限公司 | 一种覆盖信息获取方法及装置 |
CN111324375A (zh) * | 2020-02-17 | 2020-06-23 | 深圳壹账通智能科技有限公司 | 代码管理方法、装置、计算机设备和存储介质 |
CN111367529A (zh) * | 2020-03-02 | 2020-07-03 | 浙江中控技术股份有限公司 | 代码贡献统计方法及装置 |
-
2020
- 2020-09-29 CN CN202011054016.2A patent/CN112181430A/zh active Pending
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103235729A (zh) * | 2013-04-18 | 2013-08-07 | 南京大学 | 一种基于代码变更的软件模型同步方法 |
US20190057014A1 (en) * | 2017-08-17 | 2019-02-21 | Entlt Software Llc | Test relevancy prediction for code changes |
CN109799990A (zh) * | 2017-11-16 | 2019-05-24 | 中标软件有限公司 | 源代码注释自动生成方法及系统 |
CN109271321A (zh) * | 2018-09-20 | 2019-01-25 | 杭州安恒信息技术股份有限公司 | 一种贡献代码数统计方法及装置 |
CN110262966A (zh) * | 2019-06-03 | 2019-09-20 | 深圳前海微众银行股份有限公司 | 一种覆盖信息获取方法及装置 |
CN111324375A (zh) * | 2020-02-17 | 2020-06-23 | 深圳壹账通智能科技有限公司 | 代码管理方法、装置、计算机设备和存储介质 |
CN111367529A (zh) * | 2020-03-02 | 2020-07-03 | 浙江中控技术股份有限公司 | 代码贡献统计方法及装置 |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112965741A (zh) * | 2021-02-10 | 2021-06-15 | 中国工商银行股份有限公司 | 变更程序识别方法及装置 |
CN112948478A (zh) * | 2021-04-07 | 2021-06-11 | 深圳市易博天下科技有限公司 | 基于链路的代码分析方法、装置、电子设备及存储介质 |
CN116088934A (zh) * | 2023-04-10 | 2023-05-09 | 荣耀终端有限公司 | 一种软件开发工作量确定方法及服务器 |
CN116088934B (zh) * | 2023-04-10 | 2023-08-29 | 荣耀终端有限公司 | 一种软件开发工作量确定方法及服务器 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111428462B (zh) | 通讯协议模板构建的方法及终端设备 | |
CN112181430A (zh) | 代码变更统计方法、装置、电子设备及存储介质 | |
CN110474900B (zh) | 一种游戏协议测试方法及装置 | |
CN112181804A (zh) | 一种参数校验方法、设备以及存储介质 | |
CN111414402A (zh) | 一种日志威胁分析规则生成方法及装置 | |
CN110688111A (zh) | 业务流程的配置方法、装置、服务器和存储介质 | |
CN111338622B (zh) | 供应链代码识别方法、装置、服务器及可读存储介质 | |
JP2017174418A (ja) | モデルチェックのためのデータ構造抽象化 | |
CN111124883B (zh) | 一种基于树形表格的测试用例库引入方法、系统及设备 | |
CN112069052A (zh) | 一种异常对象检测方法、装置、设备及存储介质 | |
CN110020166B (zh) | 一种数据分析方法及相关设备 | |
CN116010499A (zh) | 一种确定解析规则的方法、装置及电子设备 | |
CN116204396A (zh) | 一种针对分析型数据库性能的测试方法和装置 | |
CN111736848B (zh) | 包冲突定位方法、装置、电子设备及可读存储介质 | |
CN114462381A (zh) | 数据处理方法、装置、设备及存储介质 | |
CN112988215A (zh) | 评价规则的实现与用户数据的评价方法、装置及电子设备 | |
CN112231232A (zh) | 确定测试数据模型及生成测试数据的方法、装置及设备 | |
CN116483735B (zh) | 一种代码变更的影响分析方法、装置、存储介质及设备 | |
CN112612471B (zh) | 代码处理方法、装置、设备及存储介质 | |
CN116661792A (zh) | 一种代码检验方法、装置、设备及存储介质、程序产品 | |
CN117390023A (zh) | 数据合计方法、数据合计装置、设备及存储介质 | |
CN117033203A (zh) | 变更代码的关联影响的确定方法、装置和电子设备 | |
CN117520426A (zh) | 一种数据转换方法、装置及电子设备 | |
CN115292178A (zh) | 测试数据搜索方法、装置、存储介质以及终端 | |
CN112114861A (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 |