代码工作量的度量方法及装置、电子设备及程序产品与流程

摘要: 本发明涉及金融科技领域或其他相关领域,具体而言,涉及一种代码工作量的度量方法及装置、电子设备及程序产品。背景技术:1、在软件开发过程中,需评估开发人员的工作量,...
代码工作量的度量方法及装置、电子设备及程序产品与流程

本发明涉及金融科技领域或其他相关领域,具体而言,涉及一种代码工作量的度量方法及装置、电子设备及程序产品。

背景技术:

1、在软件开发过程中,需评估开发人员的工作量,相关技术中,开发人员代码工作量的方式多通过代码行数来评估,虽然代码行数体现的数据更为直观,但是仅仅通过代码行数来评估开发人员的工作量,存在明显的弊端:一方面,代码行数极易受非语义性因素干扰,例如容易受到代码风格、换行习惯、注释、格式化操作等的干扰;无法识别出对代码的实际修改,简单的复制粘贴、移动代码块等会产生大量的行数增删变化。另一方面,如果仅用代码行数来评估开发工作量,开发团队所面临的最大难题便是垃圾代码的增加,降低了开发人员的效率、延误了项目进程,生产质量更低的代码,增加团队的资源浪费。

2、针对上述的问题,目前尚未提出有效的解决方案。

技术实现思路

1、本发明实施例提供了一种代码工作量的度量方法及装置、电子设备及程序产品,以至少解决相关技术中基于代码行数的工作量评估方式,准确性低,且降低开发效率的技术问题。

2、为了实现上述目的,根据本技术的一个方面,提供了一种代码工作量的度量方法,包括:对代码源文件和目标代码文件分别进行分析,生成源文件抽象语法树和目标文件抽象语法树;计算所述源文件抽象语法树与所述目标文件抽象语法树之间的最短编辑距离以及对应的编辑路径;基于所述编辑路径生成包含所有操作记录的差异文件,并结合所述差异文件计算每项编辑操作的工作量;累加所有所述编辑操作的工作量,输出本次提交的总代码工作量值。

3、可选地,对代码源文件和目标代码文件分别进行分析,生成源文件抽象语法树和目标文件抽象语法树的步骤,包括:响应代码提交操作,通过项目源代码系统获取提交的代码文件的最近两次提交记录;从项目源代码仓库下载最近两次提交记录对应的代码文件,得到上一次提交的所述代码源文件和本次提交的所述目标代码文件;对上一次提交的所述代码源文件进行词法分析和语法分析,生成所述源文件抽象语法树;对本次提交的所述目标代码文件进行词法分析和语法分析,生成所述目标文件抽象语法树。

4、可选地,对上一次提交的所述代码源文件进行词法分析和语法分析,生成所述源文件抽象语法树的步骤,包括:对所述代码源文件进行词法分析,对所述代码源文件中的词法单元进行扫描以及切分处理,生成词法单元序列;基于目标编程语言的文法规则以及产生式规则,对所述词法单元序列进行语法分析,构建初始解析树;对所述初始解析树进行精简处理,移除语法冗余节点,保留语义结构,生成所述源文件抽象语法树,其中冗余节点包括下述至少之一:分号节点、括号节点、缩进符号节点。

5、可选地,计算所述源文件抽象语法树与所述目标文件抽象语法树之间的最短编辑距离以及编辑路径的步骤,包括:提取所述源文件抽象语法树与所述目标文件抽象语法树中各操作类型对应的操作数,其中,所述操作类型包括下述至少之一:增加操作、删除操作、更新操作、移动操作;基于所述源文件抽象语法树与所述目标文件抽象语法树,利用树编辑距离算法,计算从所述源文件抽象语法树至所述目标文件抽象语法树所需要执行的最少操作数,得到所述最短编辑距离;基于所述源文件抽象语法树与所述目标文件抽象语法树,确定所述最短编辑距离所经过的起点、中间节点以及终点,得到所述编辑路径。

6、可选地,基于所述编辑路径生成包含所有操作记录的差异文件的步骤,包括:基于所述编辑路径的起点和终点,识别每次编辑操作的操作类型及操作对象类型;将识别到的每个所述操作类型及对应的操作对象类型合并为一条操作记录;将所有所述操作记录写入预定文件,生成包含所有操作记录的所述差异文件。

7、可选地,结合所述差异文件计算每项编辑操作的工作量的步骤,包括:读取所述差异文件,得到所有所述操作记录;根据预设的操作类型权重表为每条所述操作记录中操作类型赋予第一权重参数,并根据预设的节点类型权重表为每种操作对象类型赋予第二权重参数;对于每项所述编辑操作,基于所述操作类型以及对应的第一权重参数、所述操作对象类型以及对应的第二权重参数,进行加权计算,得到所述编辑操作对应的加权工作量。

8、可选地,代码工作量的度量方法还包括:采用json格式存储所述源文件抽象语法树和所述目标文件抽象语法树。

9、根据本发明实施例的另一方面,还提供了一种代码工作量的度量装置,包括:语法树生成单元,用于对代码源文件和目标代码文件分别进行分析,生成源文件抽象语法树和目标文件抽象语法树;编辑路径生成单元,用于计算所述源文件抽象语法树与所述目标文件抽象语法树之间的最短编辑距离以及对应的编辑路径;差异文件生成单元,用于基于所述编辑路径生成包含所有操作记录的差异文件,并结合所述差异文件计算每项编辑操作的工作量;代码工作量度量单元,用于累加所有所述编辑操作的工作量,输出本次提交的总代码工作量值。

10、可选地,所述语法树生成单元包括:提交记录获取模块,用于响应代码提交操作,通过项目源代码系统获取提交的代码文件的最近两次提交记录;代码文件下载模块,用于从项目源代码仓库下载最近两次提交记录对应的代码文件,得到上一次提交的所述代码源文件和本次提交的所述目标代码文件;第一语法树生成模块,用于对上一次提交的所述代码源文件进行词法分析和语法分析,生成所述源文件抽象语法树;第二语法树生成模块,用于对本次提交的所述目标代码文件进行词法分析和语法分析,生成所述目标文件抽象语法树。

11、可选地,所述第一语法树生成模块包括:词法分析子模块,用于对所述代码源文件进行词法分析,对所述代码源文件中的词法单元进行扫描以及切分处理,生成词法单元序列;语法分析子模块,用于基于目标编程语言的文法规则以及产生式规则,对所述词法单元序列进行语法分析,构建初始解析树;精简处理子模块,用于对所述初始解析树进行精简处理,移除语法冗余节点,保留语义结构,生成所述源文件抽象语法树,其中冗余节点包括下述至少之一:分号节点、括号节点、缩进符号节点。

12、可选地,所述编辑路径生成单元包括:操作数提取模块,用于提取所述源文件抽象语法树与所述目标文件抽象语法树中各操作类型对应的操作数,其中,所述操作类型包括下述至少之一:增加操作、删除操作、更新操作、移动操作;编辑距离计算模块,用于基于所述源文件抽象语法树与所述目标文件抽象语法树,利用树编辑距离算法,计算从所述源文件抽象语法树至所述目标文件抽象语法树所需要执行的最少操作数,得到所述最短编辑距离;编辑路径生成模块,用于基于所述源文件抽象语法树与所述目标文件抽象语法树,确定所述最短编辑距离所经过的起点、中间节点以及终点,得到所述编辑路径。

13、可选地,所述差异文件生成单元包括:操作类型识别模块,用于基于所述编辑路径的起点和终点,识别每次编辑操作的操作类型及操作对象类型;操作记录合并模块,用于将识别到的每个所述操作类型及对应的操作对象类型合并为一条操作记录;差异文件生成模块,用于将所有所述操作记录写入预定文件,生成包含所有操作记录的所述差异文件。

14、可选地,所述差异文件生成单元包括:操作记录读取模块,用于读取所述差异文件,得到所有所述操作记录;权重参数赋值模块,用于根据预设的操作类型权重表为每条所述操作记录中操作类型赋予第一权重参数,并根据预设的节点类型权重表为每种操作对象类型赋予第二权重参数;加权模块,用于对于每项所述编辑操作,基于所述操作类型以及对应的第一权重参数、所述操作对象类型以及对应的第二权重参数,进行加权计算,得到所述编辑操作对应的加权工作量。

15、可选地,代码工作量的度量装置还包括:采用json格式存储所述源文件抽象语法树和所述目标文件抽象语法树。

16、根据本发明实施例的另一方面,还提供了一种计算机可读存储介质,所述计算机可读存储介质包括存储的计算机程序,其中,在所述计算机程序运行时控制所述计算机可读存储介质所在设备执行上述任意一项的代码工作量的度量方法。

17、根据本发明实施例的另一方面,还提供了一种电子设备,包括一个或多个处理器和存储器,所述存储器用于存储一个或多个程序,其中,当所述一个或多个程序被所述一个或多个处理器执行时,使得所述一个或多个处理器实现上述任意一项的代码工作量的度量方法。

18、根据本发明实施例的另一方面,还提供了一种计算机程序产品,包括计算机程序,所述计算机程序被处理器执行时实现上述任意一项所述的代码工作量的度量方法的步骤。

19、在本公开中,对代码源文件和目标代码文件分别进行分析,生成源文件抽象语法树和目标文件抽象语法树;计算源文件抽象语法树与目标文件抽象语法树之间的最短编辑距离以及对应的编辑路径;基于编辑路径生成包含所有操作记录的差异文件,并结合差异文件计算每项编辑操作的工作量;累加所有编辑操作的工作量,输出本次提交的总代码工作量值。

20、由上述公开内容,可以通过将源代码解析为抽象语法树,以语法结构的语义级变化替代文本行数的统计,消除代码风格、注释、空行、格式化等非语义因素对工作量评估的干扰,同时通过计算源文件抽象语法树与目标文件抽象语法树之间的最短编辑距离以及对应的编辑路径,精准识别代码变更中的编辑操作,对比前后版本的抽象语法树,无需人工干预或代码插桩,实现无侵入式、自动化的工作量度量,有效提升代码开发效率,从而解决相关技术中基于代码行数的工作量评估方式,准确性低,且降低开发效率的技术问题。