掌桥专利:专业的专利平台
掌桥专利
首页

一种代码量统计方法、装置、电子设备及存储介质

文献发布时间:2023-06-19 10:02:03


一种代码量统计方法、装置、电子设备及存储介质

技术领域

本申请中一个或多个实施例涉及数据处理技术领域,尤其涉及一种代码量统计方法、装置、电子设备及存储介质。

背景技术

现有技术中,利用源代码统计工具,通过抓取代码仓库中的提交代码的日志文件,获取用户生成的全部代码,并将全部代码都计入代码量数据中,导致代码量的统计数据严重失真。

发明内容

有鉴于此,本申请中一个或多个实施例的目的在于提出一种代码量统计方法、装置、电子设备及存储介质,以解决现有技术存在的上述至少一个问题。

基于上述目的,本申请中一个或多个实施例提供了一种代码量统计方法,包括:

获取目标代码;

根据所述目标代码确定目标代码提交数据;

根据所述目标代码提交数据判断所述目标代码是否为无效代码;

若不是,则统计所述目标代码的代码量。

可选的,所述根据所述目标代码提交数据判断所述目标代码是否为无效代码,具体包括:

根据所述目标代码提交数据确定所述目标代码的提交行为;

判断所述目标代码的提交行为是否为预设无效提交行为;

若是,则所述目标代码为所述无效代码。

可选的,所述判断所述目标代码的提交行为是否为预设无效提交行为,之后还包括:

若不是,则获取所述目标代码的文件类型;

判断所述目标代码的文件类型是否为预设无效文件类型;

若是,则所述目标代码为所述无效代码。

可选的,所述判断所述目标代码的文件类型是否为预设无效文件类型,之后还包括:

若不是,则获取所述目标代码的编码格式变更次数;

判断所述目标代码的编码格式变更次数是否为0;

若是,则所述目标代码不为所述无效代码。

可选的,所述统计所述目标代码的代码量,之后还包括:

将所述目标代码按统计时间顺序进行排序;

按预设时间间隔将排列后的所述目标代码划分为若干个代码数据集;

确定所有所述代码数据集的代码量;

判断是否存在所述代码量大于预设代码量阈值的所述代码数据集;

若是,则审核所述代码数据集中的所述目标代码的真实性。

可选的,所述审核所述代码数据集中的所述目标代码的真实性,具体包括:

运行所述目标代码,判断所述目标代码是否存在运行错误;

若存在,则删除所述目标代码的代码量。

可选的,所述获取目标代码,具体包括:

获取管理员信息;

根据所述管理员信息通过访问代码数据库的方式获取所述目标代码。

基于同一发明构思,本申请中一个或多个实施例还提出了一种代码量统计装置,包括:

获取模块,被配置为获取目标代码;

确定模块,被配置为根据所述目标代码确定目标代码提交数据;

判断模块,被配置为根据所述目标代码提交数据判断所述目标代码是否为无效代码;

统计模块,被配置为若不是,则统计所述目标代码的代码量。

基于同一发明构思,本申请中一个或多个实施例还提出了一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现上述任意一项所述的代码量统计方法。

基于同一发明构思,本申请中一个或多个实施例还提出了一种非暂态计算机可读存储介质,所述非暂态计算机可读存储介质存储计算机指令,所述计算机指令用于使所述计算机执行上述任意一项所述的代码量统计方法。

从上面所述可以看出,本申请中一个或多个实施例提供的一种代码量统计方法,包括:获取目标代码;根据所述目标代码确定目标代码提交数据;根据所述目标代码提交数据判断所述目标代码是否为无效代码;若不是,则统计所述目标代码的代码量。本申请提供的方法在获取目标代码后,考虑到目标代码可能存在的异常操作,对其进行判断,在确认目标代码不是无效代码后,再统计目标代码的代码量,从而避免了统计无效代码的代码量,造成代码量统计数据的严重失真,难以作为研发工作量的有效衡量指标,需要浪费大量人力成本对失真的代码量统计数据进行进一步的校对和审核。

附图说明

为了更清楚地说明本申请中一个或多个实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请中一个或多个实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1为本申请中一个或多个实施例中一种代码量统计方法的流程图;

图2为本申请中一个或多个实施例中一种代码量统计装置的结构示意图;

图3为本申请中一个或多个实施例中一种电子设备的结构示意图。

具体实施方式

为使本公开的目的、技术方案和优点更加清楚明白,以下结合具体实施例,并参照附图,对本公开进一步详细说明。

需要说明的是,除非另外定义,本申请中一个或多个实施例使用的技术术语或者科学术语应当为本公开所属领域内具有一般技能的人士所理解的通常意义。本申请中一个或多个实施例中使用的“第一”、“第二”以及类似的词语并不表示任何顺序、数量或者重要性,而只是用来区分不同的组成部分。“包括”或者“包含”等类似的词语意指出现该词前面的元件或者物件涵盖出现在该词后面列举的元件或者物件及其等同,而不排除其他元件或者物件。“连接”或者“相连”等类似的词语并非限定于物理的或者机械的连接,而是可以包括电性的连接,不管是直接的还是间接的。“上”、“下”、“左”、“右”等仅用于表示相对位置关系,当被描述对象的绝对位置改变后,则该相对位置关系也可能相应地改变。

申请人通过研究发现现有技术中,随着信息产业的不断发展,信息系统成倍增长,研发队伍日益壮大,对软件贡献的代码行数逐渐成为衡量开发人员关于软件研发工作量的一个更加直观且有效的指标。现有技术中,常常使用GitStats源代码统计工具,通过抓取代码仓库Git中提交代码的日志文件,获取用户的代码量数据,并做数据展现,但是此种方法统计的代码量是源代码统计工具抓取的全部代码对应的代码量,而抓取的全部代码中很可能存在一些异常操作,当统计了这些存在异常操作的代码的代码量后,导致代码量统计数据严重失真,难以作为研发工作量有效的衡量指标,在统计了严重失真的代码量数据后,还需要进行大量的人工核对和矫正,从而浪费了大量的人力成本。正因如此,本申请通过对获取的目标代码进行判断,在确定其不是无效代码后,再统计目标代码的代码量,从而确保了目标代码的有效性,根据有效的目标代码统计的代码量,真实性得到了很大的提升,避免了现有技术中的代码量统计方法导致的代码量统计数据严重失真的问题,从而使得代码量能够成为被信任的衡量软件研发工作量的有效指标,也确保了存入数据库的目标代码的质量得到了提升。

参考图1,因此本申请中一个或多个实施例提供的一种代码量统计方法,具体包括以下步骤:

S101:获取目标代码。

本实施例中,统计代码量,必然要获取目标代码,目标代码为需要进行统计的代码。例如需要对某个开发人员的代码贡献量进行统计时,则目标代码为该开发人员在工作期间编写的代码。在一些可选的实施方式中,可以在软件开发人员完成代码的编写后,将代码统一发送至接收服务器,目标代码可以直接通过接收服务器获取。

可以理解的是,当代码需要在安全等级更高的代码数据库中存储时,可以先获取数据库管理员的信息,例如管理员ID,通过管理员信息访问代码数据库,然后从中获取目标代码。

S102:根据所述目标代码确定目标代码提交数据。

本实施例中,在通过步骤S101获取到目标代码后,通过源代码统计工具抓取目标代码的日志文件,通过日志文件获取提交日志时的原始数据,从而通过原始数据确定目标代码提交数据。

S103:根据所述目标代码提交数据判断所述目标代码是否为无效代码。

S104:若不是,则统计所述目标代码的代码量。

本实施例中,根据步骤S102确定的目标代码提交数据,对目标代码进行判断,判断其是否为无效代码。实现对无效代码的识别,将无效代码从代码库中区分出来。如果判断出目标代码不是无效代码,则对目标代码进行统计,从而得到目标代码的代码量。

在一些可选实施方式中,根据目标代码提交数据判断目标代码是否为无效代码,首先需要根据目标代码提交数据确定目标代码的提交行为;然后判断目标代码的提交行为是否为预设无效提交行为,如果是,则确认目标代码为无效代码。具体地,目标代码的提交行为有很多种,例如,代码分支间的合并操作提交行为、增加源代码的新增提交行为、删除源代码的删除提交行为、修改源代码的修改提交行为和整体迁移目录结构的迁移提交行为等。定义其中的部分提交行为为预设无效提交行为,具体包括:合并操作提交行为、删除提交行为、修改提交行为中的删除提交行为以及迁移提交行为。

需要说明的是,基于提交日志的原始数据中,对代码分支间的合并操作也算作是一种有效的代码提交行为。例如开发人员在代码分支A上提交了200行代码,在代码分支B上提交了400行代码。当代码分支A已经发布或者稳定后,为保持源代码的可持续维护和一致性,需要将代码分支A上的代码合并至代码分支B中,以供代码分支B进行归回测试及发布。这种代码分支之间的合并操作是以处理代码分支A向代码分支B发起的合并请求(也可称为merge request)来完成的。这种处理行为在原始统计中记为向代码分支B又提交了200行代码。但实际情况来看,代码分支之间的合并并不是代码的产出,而是一种单纯的逻辑合并甚至直接合并。所以考虑将这种处理合并请求的合并行为类型进行筛选,将其定义为预设无效提交行为,以使此类数据符合真实情况。

需要说明的是,在原始提交日志中,提交行为有两类,一类是删除,一类是增加。实际情况中,开发人员对源代码有三种基本操作:增加一行源码、删除一行源码、修改一行源码。日志与开发人员基本操作的对应关系是:实际增加一行源码,日志记录增加一行源码;实际修改一行源码,日志记录删除一行源码,并增加一行源码;实际删除一行源码,日志记录删除一行源码。从上面所述关系可以看出,增加一行源码行为的统计与实际相符,修改一行源码的统计数据是实际的两倍。而单纯的删除源码不是智慧贡献的产物,不是一种有效的代码提交劳动。基于以上实施情况,考虑对原始数据中删除的提交行为进行筛选,只统计新增的提交行为,这样修正了修改一行代码和删除一行代码的统计数据,将单纯的删除提交行为以及修改提交行为中涉及的删除提交行为定义为预设无效提交行为,以使全部提交行为统计数据符合真实情况。

此外,在实际提交代码行为中,由于架构调整或者其他一些原因,需要对某一个目录结构下的代码位置进行迁移,这种提交行行为是单纯的移动目录行为,不涉及有效地开发贡献。例如,一次目录A/B/C下面a、b、c三个文件,挪动至A/C/目录下,在统计日志中会出现一条整个目录及目录下文件删除记录,即A/B/C下删除a、b、c,和一条整个目录下文件增加记录,即A/C下增加a、b、c,以及目录下文件增加记录,对应目录下所有文件代码总行数会被统计至少两次。提取上述步骤中提到的全部原始提交记录。查找单次提交或多次记录中存在对某一个目录及目录下的所有全量文件的提交记录,且该目录所属上级路径不同,对所有该类型的重复提交数据记录按提交时间进行排序。若最早提交记录为删除,且后续存在新增,此类数据为原有的目录结构及目录下的文件进行目录结构迁移,对新增提交数据做剔除,其中删除提交数据已在上述将删除提交行为定义为预设无效提交行为的步骤中做了剔除,此处无需重复剔除;若最早提交记录为新增,后续存在删除或删除和新增,认为最早的一次提交记录为首次提交新增有效代码,最早新增记录做保留,后续不同目录的新增目录及目录下文件的统计数据为目录迁移,进行剔除。在代码量实际统计过程中,由于目录结构迁移的重复统计造成的代码量统计严重失真情况占据代码量统计失真情况的绝大多数比例,所以将以上迁移提交行为定义为预设无效提交行为,避免此类代码量严重失真情况的统计行为产生。

在一些可选实施方式中,判断目标代码的提交行为是否为预设无效提交行为之后,如果判断出目标代码的提交行为不是预设无效提交行为,则进一步获取目标代码的文件类型;判断目标代码的文件类型是否为预设无效文件类型,如果是,则确认目标代码为无效代码。

需要说明的是,实际开发中,开发人员也会向代码仓库中提交一些无效代码。比如“.log”后缀的日志文件,vue前端本底编译生成单纯用于环境部署的静态资源文件,将此类文件类型定义为预设无效文件类型。此类日志或编译后产生的文件,非提交源码,但由于存在提交记录,且其中包含了大量开源组件,会产生大量非有效提交记录。对含有无效类型的后缀(.log)文件或编译后文件存放路径(/dist/)中的提交记录进行去除,以进一步提高代码统计的准确性。

在一些可选的实施方式中,在判断目标代码的文件类型是否为预设无效文件类型之后,如果判断出目标代码的文件类型不是预设无效类型,则进一步获取目标代码的编码格式变更次数;判断目标代码的编码格式变更次数是否为0,如果是,则目标代码不为无效代码,则统计目标代码的代码量。

需要说明的是,在一些已经集成了代码仓库提交的集成开发工具中,如对编码格式进行变更,提交时,提交日志会认为是对整个文件进行了全部的修改,但这种只是变更了编码格式,但并没有变更编码内容的提交行为,实际也是无效的开发行为。所以需要判断目标代码的编码格式变更次数是否为0,如果不为0,则对原始单次提交记录中对单个已存在文件进行整个文件总行数的删除并新增的记录进行剔除,以规避编码格式变化而产生的重复统计数据。如果为0,则最终确定目标代码不为无效代码,统计目标代码的代码量。

在一些可选的实施方式中,统计目标代码的代码量之后,还需要对异常的代码量进行进一步审核。具体地,将目标代码按统计时间顺序进行排序;按照预设时间间隔将排列后的目标代码划分为若干个代码数据集,其中预设时间间隔可以为一天、一周或一个月;确定所有代码数据集的代码量;判断是否存在代码量大于预设代码量阈值的代码数据集,如果存在,则对该代码数据集中的目标代码的真实性进行审核。其中,预设代码量阈值可以通过对单个开发人员的每天、每周或每月提交的代码量平均值或最高值进行设定,将计算的单人数据与预设代码量阈值进行对比,如果超过该阈值,说明该开发人员对应的代码数据集中的代码量超过预设代码量阈值,则认为有一定的可能性存在单纯的提交欺骗行为,需要对该开发人员提交的目标代码内容进行人工审核,验证其真实性。

在一些可选实施方式中,对目标代码的审核,可以通过运行目标代码,判断其是否存在运行错误来实现,如果存在运行错误,则删除目标代码的代码量,重新对目标代码的代码量进行统计。如果目标代码的真实性存在问题,则需要修正代码量统计数据,如果经过审核,目标代码的真实性得到了确定,则将被审核的目标代码的代码量进行正常统计,并将其更新至历史阈值数据中,便于制定新的预设代码量阈值。

从上面所述可以看出,本申请中一个或多个实施例提供的一种代码量统计方法,包括:获取目标代码;根据所述目标代码确定目标代码提交数据;根据所述目标代码提交数据判断所述目标代码是否为无效代码;若不是,则统计所述目标代码的代码量。本申请提供的方法在获取目标代码后,考虑到目标代码可能存在的异常操作,对其进行判断,在确认目标代码不是无效代码后,再统计目标代码的代码量,从而避免了统计无效代码的代码量,造成代码量统计数据的严重失真,难以作为研发工作量的有效衡量指标,需要浪费大量人力成本对失真的代码量统计数据进行进一步的校对和审核。本申请提供的方法,通过对原始提交代码提交记录的数据进行处理,去除无效提交记录,筛选出与实际提交情况相符合的数据,从而解决了吸纳有技术中利用统计工具只能单纯抓取原始数据,而不能对数据进行有效性分析和筛选而造成的数据严重失真,无法真实衡量开发人员真实工作量的问题。

上述对本申请中特定实施例进行了描述。其它实施例在所附权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。

基于同一发明构思,本申请中一个或多个实施例还提出了一种代码量统计装置,参考图2,所述代码量统计装置包括:

获取模块,被配置为获取目标代码;

确定模块,被配置为根据所述目标代码确定目标代码提交数据;

判断模块,被配置为根据所述目标代码提交数据判断所述目标代码是否为无效代码;

统计模块,被配置为若不是,则统计所述目标代码的代码量。

在一些可选的实施方式中,所述根据所述目标代码提交数据判断所述目标代码是否为无效代码,具体包括:

根据所述目标代码提交数据确定所述目标代码的提交行为;

判断所述目标代码的提交行为是否为预设无效提交行为;

若是,则所述目标代码为所述无效代码。

在一些可选的实施方式中,所述判断所述目标代码的提交行为是否为预设无效提交行为,之后还包括:

若不是,则获取所述目标代码的文件类型;

判断所述目标代码的文件类型是否为预设无效文件类型;

若是,则所述目标代码为所述无效代码。

在一些可选的实施方式中,所述判断所述目标代码的文件类型是否为预设无效文件类型,之后还包括:

若不是,则获取所述目标代码的编码格式变更次数;

判断所述目标代码的编码格式变更次数是否为0;

若是,则所述目标代码不为所述无效代码。

在一些可选的实施方式中,所述统计所述目标代码的代码量,之后还包括:

将所述目标代码按统计时间顺序进行排序;

按预设时间间隔将排列后的所述目标代码划分为若干个代码数据集;

确定所有所述代码数据集的代码量;

判断是否存在所述代码量大于预设代码量阈值的所述代码数据集;

若是,则审核所述代码数据集中的所述目标代码的真实性。

在一些可选的实施方式中,所述审核所述代码数据集中的所述目标代码的真实性,具体包括:

运行所述目标代码,判断所述目标代码是否存在运行错误;

若存在,则删除所述目标代码的代码量。

在一些可选的实施方式中,所述获取目标代码,具体包括:

获取管理员信息;

根据所述管理员信息通过访问代码数据库的方式获取所述目标代码。

为了描述的方便,描述以上装置时以功能分为各种模块分别描述。当然,在实施本说明书一个或多个实施例时可以把各模块的功能在同一个或多个软件和/或硬件中实现。

上述实施例的装置用于实现前述实施例中相应的方法,并且具有相应的方法实施例的有益效果,在此不再赘述。

基于同一发明构思,与上述任意实施例方法相对应的,本说明书一个或多个实施例还提供了一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现上任意一实施例所述的代码量统计方法。

图3示出了本实施例所提供的一种更为具体的电子设备硬件结构示意图,该设备可以包括:处理器310、存储器320、输入/输出接口330、通信接口340和总线350。其中处理器310、存储器320、输入/输出接口330和通信接口340通过总线350实现彼此之间在设备内部的通信连接。

处理器310可以采用通用的CPU(Central Processing Unit,中央处理器)、微处理器、应用专用集成电路(Application Specific Integrated Circuit,ASIC)、或者一个或多个集成电路等方式实现,用于执行相关程序,以实现本说明书实施例所提供的技术方案。

存储器320可以采用ROM(Read Only Memory,只读存储器)、RAM(Random AccessMemory,随机存取存储器)、静态存储设备,动态存储设备等形式实现。存储器320可以存储操作系统和其他应用程序,在通过软件或者固件来实现本说明书实施例所提供的技术方案时,相关的程序代码保存在存储器320中,并由处理器310来调用执行。

输入/输出接口330用于连接输入/输出模块,以实现信息输入及输出。输入输出/模块可以作为组件配置在设备中(图中未示出),也可以外接于设备以提供相应功能。其中输入设备可以包括键盘、鼠标、触控屏、麦克风、各类传感器等,输出设备可以包括显示器、扬声器、振动器、指示灯等。

通信接口340用于连接通信模块(图中未示出),以实现本设备与其他设备的通信交互。其中通信模块可以通过有线方式(例如USB、网线等)实现通信,也可以通过无线方式(例如移动网络、WIFI、蓝牙等)实现通信。

总线350包括一通路,在设备的各个组件(例如处理器310、存储器320、输入/输出接口330和通信接口340)之间传输信息。

需要说明的是,尽管上述设备仅示出了处理器310、存储器320、输入/输出接口330、通信接口340以及总线350,但是在具体实施过程中,该设备还可以包括实现正常运行所必需的其他组件。此外,本领域的技术人员可以理解的是,上述设备中也可以仅包含实现本说明书实施例方案所必需的组件,而不必包含图中所示的全部组件。

基于同一发明构思,与上述任意实施例方法相对应的,本说明书一个或多个实施例还提供了一种非暂态计算机可读存储介质,所述非暂态计算机可读存储介质存储计算机指令,所述计算机指令用于使所述计算机执行如上任一实施例所述的代码量统计方法。

本实施例的非暂态计算机可读存储介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。

上述实施例的存储介质存储的计算机指令用于使所述计算机执行如上任一实施例所述的代码量统计方法,并且具有相应的方法实施例的有益效果,在此不再赘述。

所属领域的普通技术人员应当理解:以上任何实施例的讨论仅为示例性的,并非旨在暗示本公开的范围(包括权利要求)被限于这些例子;在本公开的思路下,以上实施例或者不同实施例中的技术特征之间也可以进行组合,步骤可以以任意顺序实现,并存在如上所述的本申请中一个或多个实施例的不同方面的许多其它变化,为了简明它们没有在细节中提供。

本申请中一个或多个实施例旨在涵盖落入所附权利要求的宽泛范围之内的所有这样的替换、修改和变型。因此,凡在本申请中一个或多个实施例的精神和原则之内,所做的任何省略、修改、等同替换、改进等,均应包含在本公开的保护范围之内。

相关技术
  • 一种代码量统计方法、装置、电子设备及存储介质
  • 代码变更统计方法、装置、电子设备及存储介质
技术分类

06120112390023