一种代码工作量统计方法、装置和设备与流程

文档序号:29132982发布日期:2022-03-05 01:32阅读:135来源:国知局
一种代码工作量统计方法、装置和设备与流程

1.本发明涉及程序开发领域,具体涉及一种代码工作量统计方法、装置和设备。


背景技术:

2.代码量统计在很多公司都是用来衡量一个员工、一个团队、一个部门工作量的一项重要指标之一。通过进行代码量的统计,可对一个员工对团队贡献有一个可靠的评价指标,从而更好的衡量一个员工的绩效情况。现阶段大部分公司的代码管理通过gitlab进行,统计代码工作量的做法都是通过gitlab接口做一个简单的增删改的代码量统计,通过对gitlab接口进行调用,首先获取用户可见的所有项目,然后获取所有项目的分支列表,再遍历分支并根据分支名称获取代码的commits数据,最后再根据commits数据中的commitid获取该commit id对应用户的代码量,以此来实现对个人进行代码的统计。但是这种方法很容易造成工作量的重复统计,例如:用户a的代码中合并了用户b的代码,在用户a将代码push到线上服务器之前,用户b已经push了其自身的代码,并且该代码的commits信息中有唯一commitid被统计到用户b名下,之后在用户a push代码时会把用户b之前的commits信息重新统计一次,并且重复统计的代码会依据唯一的commitid再次统计到用户b的名下,使得用户b的代码工作量翻倍。因此,如何避免代码的重复统计是亟待解决的问题。


技术实现要素:

3.有鉴于此,本发明实施方式提供了一种代码工作量统计方法、装置和设备,从而解决了代码工作量重复统计到用户名下的问题。
4.根据第一方面,本发明提供了一种代码工作量统计方法,所述方法包括:获取目标时间段内的目标数据列表,所述目标数据列表中包括用户提交的commits数据,所述commits数据至少包括commit id和提交时间;删除所述目标数据列表中的第一类重复commits数据,所述第一类重复commits数据中的commitid在所述目标数据列表中不唯一,且所述第一类重复commits数据的提交时间与具有相同commitid的commits数据相比不是最早的;基于删除后的所述目标数据列表中的commits数据统计各个用户在所述目标时间段内的代码工作量。
5.可选地,在所述删除所述目标数据列表中第一类重复commits数据之后,所述方法还包括:获取第二时间段内的第二数据列表,所述第二时间段在所述目标时间段之前,所述第二数据列表中包括用户提交的commits数据;删除所述目标数据列表中第二类重复commits数据,所述第二类重复commits数据中的commitid存在于所述第二数据列表中。
6.可选地,所述commits数据中还包括commits信息,在所述删除所述目标数据列表中第二类重复commits数据之后,所述方法还包括:删除所述目标数据列表中第三类重复commits数据,所述第三类重复commits数据中的commits信息具有合并操作的关键词。
7.可选地,在所述删除所述目标数据列表中第三类重复commits数据之后,所述方法还包括:判断所述目标数据列表中各个commits数据对应源代码的操作文件是否包括代码
类型文件,所述代码类型文件包括头文件和用于执行头文件声明方法的实现文件;在当前commits数据对应源代码的操作文件不包括代码类型文件时,删除所述目标数据列表中的所述当前commits数据。
8.可选地,所述方法还包括:在当前commits数据对应源代码的操作文件包括代码类型文件时,判断所述当前commits数据对应的代码类型文件的操作指令是否全部是删除操作;在当前commits数据对应的代码类型文件的操作指令全部是删除操作时,将所述当前commits数据从所述目标数据列表中删除。
9.可选地,所述基于删除后的所述目标数据列表中的commits数据统计各个用户在所述目标时间段内的代码工作量,包括:基于所述目标数据列表中当前commits数据提取对应的当前代码;基于所述当前代码确定所述当前commits数据中commitid对应的用户在所述目标时间段内的代码工作量;遍历所述目标数据列表中的全部commits数据,直至所述目标时间段内各个用户的代码工作量统计完毕为止。
10.可选地,所述基于所述目标数据列表中当前commits数据提取对应的当前代码,包括:通过gitlab接口提取所述目标数据列表中当前commits数据对应的有效代码,所述有效代码是对所述代码类型文件进行新增和修改的源代码。
11.根据第二方面,本发明提供了一种代码工作量统计装置,所述装置包括:采集模块,用于获取目标时间段内的目标数据列表,所述目标数据列表中包括用户提交的commits数据,所述commits数据至少包括commit id和提交时间;去重模块,用于删除所述目标数据列表中的第一类重复commits数据,所述第一类重复commits数据中的commit id在所述目标数据列表中不唯一,且所述第一类重复commits数据的提交时间与具有相同commit id的commits数据相比不是最早的;统计模块,用于基于删除后的所述目标数据列表中的commits数据统计各个用户在所述目标时间段内的代码工作量。
12.根据第三方面,本发明实施例提供了一种代码工作量统计设备,包括:存储器和处理器,所述存储器和所述处理器之间互相通信连接,所述存储器中存储有计算机指令,所述处理器通过执行所述计算机指令,从而执行第一方面,或者第一方面任意一种可选实施方式中所述的方法。
13.根据第四方面,本发明实施例提供了一种计算机可读存储介质,所述计算机可读存储介质存储有计算机指令,所述计算机指令用于使所述计算机从而执行第一方面,或者第一方面任意一种可选实施方式中所述的方法。
14.本技术提供的技术方案,具有如下优点:
15.本技术提供的技术方案,在统计目标时间段内各个用户的代码工作量时,首先获取目标时间段内的目标数据列表,目标数据列表中包括在目标时间段内各个用户提交的commits数据,在统计代码工作量之前,首先将目标时间段内commitid不唯一,且提交时间较晚的commits数据删除,在目标时间段内只保留唯一的commitid对应的commits数据,再进行代码工作量的统计,从而避免重复的commits数据在目标时间段内均被统计上,提高了用户代码工作量统计的准确率。
16.此外,在目标时间段内的重复commits数据被删除后,还获取目标时间段之前一段时间的第二数据列表,再将第二数据列表和目标数据列表中均出现的相同commitid对应的commits数据从目标数据列表中删除,避免有部分用户在目标时间段之前提交过相同的代
码,进一步避免了代码工作量的重复统计。之后,还将commits信息具有合并操作关键词的commits数据从目标数据列表中删除,避免有合并操作的遗漏数据存在于目标数据列表中。
17.此外,在实际情况中,代码有意义的工作量主要是针对代码类型文件进行新增和修改的操作。除了重复信息之外,本技术还判断提交的commits数据对应的源代码是否是针对代码类型文件进行的操作,若不是则删除对应的commits数据。之后将只有针对代码类型文件进行删除操作的commits数据删除,再调用gitlab接口将剩余的各个commits数据中属于对代码类型文件进行新增和修改的操作的源代码提取出来,最后针对这部分代码统计各个用户的实际代码工作量,大大提高了代码工作量的统计准确度。
附图说明
18.通过参考附图会更加清楚的理解本发明的特征和优点,附图是示意性的而不应理解为对本发明进行任何限制,在附图中:
19.图1示出了本发明一个实施方式中一种代码工作量统计方法的步骤示意图;
20.图2示出了本发明一个实施方式中一种代码工作量统计方法的流程示意图;
21.图3示出了本发明一个实施方式中用户提交commits数据的示例图;
22.图4示出了本发明一个实施方式中一种代码工作量统计装置的结构示意图;
23.图5示出了本发明一个实施方式中一种代码工作量统计设备的结构示意图。
具体实施方式
24.为使本发明实施方式的目的、技术方案和优点更加清楚,下面将结合本发明实施方式中的附图,对本发明实施方式中的技术方案进行清楚、完整地描述,显然,所描述的实施方式是本发明一部分实施方式,而不是全部的实施方式。基于本发明中的实施方式,本领域技术人员在没有作出创造性劳动前提下所获得的所有其他实施方式,都属于本发明保护的范围。
25.请参阅图1和图2,在一个实施方式中,一种代码工作量统计方法,具体包括以下步骤:
26.步骤s101:获取目标时间段内的目标数据列表,目标数据列表中包括用户提交的commits数据,commits数据至少包括commit id和提交时间。
27.步骤s102:删除目标数据列表中的第一类重复commits数据,第一类重复commits数据中的commitid在目标数据列表中不唯一,且第一类重复commits数据的提交时间与具有相同commitid的commits数据相比不是最早的。
28.步骤s103:基于删除后的目标数据列表中的commits数据统计各个用户在目标时间段内的代码工作量。
29.具体地,本方法在gitlab代码管理程序中进行实现,后台服务器的代码在提交时,各个项目上都加有git hook(git hooks是定制化的脚本程序),当向后台服务器推送代码时,会通过git hook自动触发后台服务器接口,该push所对应的众多关键信息(如commit id、commit信息、增删改的文件名、增删改的代码量等),被实时统计到后台服务器上,图3是用户提交的commits数据的示意图。在本实施例中,统计各个用户在一段时间内的代码工作量之前,首先需要确定统计的目标时间段,再从后台服务器调取目标时间段内的目标数据
列表。针对目标数据数列表,将列表中具有重复commit id的commits数据筛选出来,针对同一commit id,比对各个commit数据的提交时间,将提交时间较晚的commits数据从目标数据列表中删除,从而目标数据列表中保存下来的commits数据,在目标时间段内有且仅有最早上传用户的数据存在,之后基于各个剩余数据的commit id统计对应用户的代码工作量,从而实现各个用户代码工作量的准确统计,避免了重复统计的情况出现。
30.具体地,在一实施例中,在上述步骤s102之后,还包括如下步骤:
31.步骤一:获取第二时间段内的第二数据列表,第二时间段在目标时间段之前,第二数据列表中包括用户提交的commits数据。
32.步骤二:删除目标数据列表中第二类重复commits数据,第二类重复commits数据中的commitid存在于第二数据列表中。
33.具体地,除目标时间段内可能出现代码重复统计的情况之外,还存在用户在目标时间段之前就提交了部分代码,而这部分代码在目标时间段又被其他用户合并和提交了,这种情况同样会造成代码工作量的重复统计。因此,在本实施例中,获取在目标时间段之前的第二时间段内的第二数据列表,再遍历检查目标数据列表中的commits数据的commit id是否出现在了第二数据列表中,如果某一条commit id出现,则说明该commit id对应的commits数据以及代码在目标时间段之前就被提交过了,因此将该commit id对应的commits数据从目标数据列表中删除,进一步保证了用户的代码工作量不被重复统计,提高了用户代码工作量统计的准确率。
34.具体地,在一实施例中,用户提交的commits数据中包括commits信息,在上述步骤二之后,还包括如下步骤:
35.步骤三:删除目标数据列表中第三类重复commits数据,第三类重复commits数据中的commits信息具有合并操作的关键词。具体地,用户在进行代码合并操作时,commits信息中会记录有merge、合并等操作关键词,为了避免上述基于commit id剔重的工作有遗漏数据,再次基于commits信息中的合并关键词进行剔重,进一步避免目标数据列表中的commits数据被重复统计。
36.具体地,在一实施例中,在上述步骤三之后,还包括如下步骤:
37.步骤四:判断目标数据列表中各个commits数据对应源代码的操作文件是否包括代码类型文件,代码类型文件包括头文件和用于执行头文件声明方法的实现文件。
38.步骤五:在当前commits数据对应源代码的操作文件不包括代码类型文件时,删除目标数据列表中的当前commits数据。
39.具体地,在本实施例中,针对实际情况,除commits数据被重复统计外,commits数据对应的源代码还包括操作大量图片资源、修改配置文件、大量整体删除整个头文件(例如.h文件)、实现文件(例如.m文件)的代码,这类代码最终也会被统计到代码量的变化中,但这些代码量实际是无意义的操作,并不适合用作衡量真正代码贡献量的代码量统计。而真正有意义的源代码是针对头文件和实现文件进行新增、修改操作的源代码。为了进一步提高用户代码工作量的统计准确率。在步骤三之后,针对目标数据列表中的剩余数据,遍历检查各个commits数据对应的源代码的操作文件是否包含代码类型文件,若任意commits数据对应的源代码的操作文件不包括代码类型文件,则该commits数据可被视为实质上是无意义的操作,从而将该commits数据删除,进一步提高用户代码工作量统计的准确率。
40.具体地,在一实施例中,在上述步骤四之后,还包括如下步骤:
41.步骤六:在当前commits数据对应源代码的操作文件包括代码类型文件时,判断当前commits数据对应的代码类型文件的操作指令是否全部是删除操作。
42.步骤七:在当前commits数据对应的代码类型文件的操作指令全部是删除操作时,将当前commits数据从目标数据列表中删除。
43.具体地,在本实施例中,针对代码类型文件的操作,实质上有意义的操作是对代码类型文件的新增和修改。因此,当识别到commits数据对应的源代码的操作文件包括代码类型文件之后,还需判别该commits数据的源代码对代码类型文件的操作是否全部是删除操作,如果全部是删除操作,该源代码实质上进行的是无意义操作,不存在对代码工作的实质性贡献。因此针对源代码的操作指令全部是删除操作代码类型文件的,删除该部分源代码对应的commits数据,进一步提高统计用户代码工作量的准确率。
44.具体地,在一实施例中,上述步骤s103,具体包括如下步骤:
45.步骤八:基于目标数据列表中当前commits数据提取对应的当前代码。
46.步骤九:基于当前代码确定当前commits数据中commitid对应的用户在目标时间段内的代码工作量。
47.步骤十:遍历目标数据列表中的全部commits数据,直至目标时间段内各个用户的代码工作量统计完毕为止。
48.具体地,当重复以及无效commits数据从目标数据列表中被剔除后,基于当前的目标数据列表,遍历各个commits数据,获取commits数据对应的源代码,从而将代码工作量统计到各个commit id唯一对应的用户名下,实现目标时间段内各个用户代码工作量的准确统计。
49.具体地,在一实施例中,上述步骤九,具体包括如下步骤:
50.步骤十一:通过gitlab接口提取目标数据列表中当前commits数据对应的有效代码,有效代码是对代码类型文件进行新增和修改的源代码。具体地,当前目标数据列表中commits信息的源代码并不能保证其操作文件全都是代码类型文件,也不能保证对代码类型文件的操作都是新增和修改操作。还存在少量的无统计意义的数据,因此,在很大程度上剔除了重复数据和无实际意义的操作图片、删除操作等工作数据之后。调用gitlab接口从剩余数据中提取出对代码类型文件进行新增和修改的源代码,再根据提取的源代码对应的commit id将代码工作量统计到唯一对应的用户名下,从而完成高精度、高可靠性的代码工作量统计工作。
51.通过上述步骤,本技术提供的技术方案,在统计目标时间段内各个用户的代码工作量时,首先获取目标时间段内的目标数据列表,目标数据列表中包括在目标时间段内各个用户提交的commits数据,在统计代码工作量之前,首先将目标时间段内commitid不唯一,且提交时间较晚的commits数据删除,在目标时间段内只保留唯一的commitid对应的commits数据,再进行代码工作量的统计,从而避免重复的commits数据在目标时间段内均被统计上,提高了用户代码工作量统计的准确率。
52.此外,在目标时间段内的重复commits数据被删除后,还获取目标时间段之前一段时间的第二数据列表,再将第二数据列表和目标数据列表中均出现的相同commitid对应的commits数据从目标数据列表中删除,避免有部分用户在目标时间段之前提交过相同的代
码,进一步避免了代码工作量的重复统计。之后,还将commits信息具有合并操作关键词的commits数据从目标数据列表中删除,避免有合并操作的遗漏数据存在于目标数据列表中。
53.此外,在实际情况中,代码有意义的工作量主要是针对代码类型文件进行新增和修改的操作。除了重复信息之外,本技术还判断提交的commits数据对应的源代码是否是针对代码类型文件进行的操作,若不是则删除对应的commits数据。之后将只有针对代码类型文件进行删除操作的commits数据删除,再调用gitlab接口将剩余的各个commits数据中属于对代码类型文件进行新增和修改的操作的源代码提取出来,最后针对这部分代码统计各个用户的实际代码工作量,大大提高了代码工作量的统计准确度。
54.如图4所示,本实施例还提供了一种代码工作量统计装置,该装置包括:
55.采集模块101,用于获取目标时间段内的目标数据列表,目标数据列表中包括用户提交的commits数据,commits数据至少包括commit id和提交时间。详细内容参见上述方法实施例中步骤s101的相关描述,在此不再进行赘述。
56.去重模块102,用于删除目标数据列表中的第一类重复commits数据,第一类重复commits数据中的commit id在目标数据列表中不唯一,且第一类重复commits数据的提交时间与具有相同commit id的commits数据相比不是最早的。详细内容参见上述方法实施例中步骤s102的相关描述,在此不再进行赘述。
57.统计模块103,用于基于删除后的目标数据列表中的commits数据统计各个用户在目标时间段内的代码工作量。详细内容参见上述方法实施例中步骤s103的相关描述,在此不再进行赘述。
58.本发明实施例提供的代码工作量统计装置,用于执行上述实施例提供的代码工作量统计方法,其实现方式与原理相同,详细内容参见上述方法实施例的相关描述,不再赘述。
59.通过上述各个组成部分的协同合作,在统计目标时间段内各个用户的代码工作量时,首先获取目标时间段内的目标数据列表,目标数据列表中包括在目标时间段内各个用户提交的commits数据,在统计代码工作量之前,首先将目标时间段内commitid不唯一,且提交时间较晚的commits数据删除,在目标时间段内只保留唯一的commitid对应的commits数据,再进行代码工作量的统计,从而避免重复的commits数据在目标时间段内均被统计上,提高了用户代码工作量统计的准确率。
60.此外,在目标时间段内的重复commits数据被删除后,还获取目标时间段之前一段时间的第二数据列表,再将第二数据列表和目标数据列表中均出现的相同commitid对应的commits数据从目标数据列表中删除,避免有部分用户在目标时间段之前提交过相同的代码,进一步避免了代码工作量的重复统计。之后,还将commits信息具有合并操作关键词的commits数据从目标数据列表中删除,避免有合并操作的遗漏数据存在于目标数据列表中。
61.此外,在实际情况中,代码有意义的工作量主要是针对代码类型文件进行新增和修改的操作。除了重复信息之外,本技术还判断提交的commits数据对应的源代码是否是针对代码类型文件进行的操作,若不是则删除对应的commits数据。之后将只有针对代码类型文件进行删除操作的commits数据删除,再调用gitlab接口将剩余的各个commits数据中属于对代码类型文件进行新增和修改的操作的源代码提取出来,最后针对这部分代码统计各个用户的实际代码工作量,大大提高了代码工作量的统计准确度。
62.图5示出了本发明实施例的一种代码工作量统计设备,该设备包括处理器901和存储器902,可以通过总线或者其他方式连接,图5中以通过总线连接为例。
63.处理器901可以为中央处理器(central processing unit,cpu)。处理器901还可以为其他通用处理器、数字信号处理器(digital signal processor,dsp)、专用集成电路(application specific integrated circuit,asic)、现场可编程门阵列(field-programmable gate array,fpga)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等芯片,或者上述各类芯片的组合。
64.存储器902作为一种非暂态计算机可读存储介质,可用于存储非暂态软件程序、非暂态计算机可执行程序以及模块,如上述方法实施例中的方法所对应的程序指令/模块。处理器901通过运行存储在存储器902中的非暂态软件程序、指令以及模块,从而执行处理器的各种功能应用以及数据处理,即实现上述方法实施例中的方法。
65.存储器902可以包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需要的应用程序;存储数据区可存储处理器901所创建的数据等。此外,存储器902可以包括高速随机存取存储器,还可以包括非暂态存储器,例如至少一个磁盘存储器件、闪存器件、或其他非暂态固态存储器件。在一些实施例中,存储器902可选包括相对于处理器901远程设置的存储器,这些远程存储器可以通过网络连接至处理器901。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
66.一个或者多个模块存储在存储器902中,当被处理器901执行时,执行上述方法实施例中的方法。
67.上述代码工作量统计设备具体细节可以对应参阅上述方法实施例中对应的相关描述和效果进行理解,此处不再赘述。
68.本领域技术人员可以理解,实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,实现的程序可存储于一计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,存储介质可为磁碟、光盘、只读存储记忆体(read-only memory,rom)、随机存储记忆体(random access memory,ram)、快闪存储器(flash memory)、硬盘(hard disk drive,缩写:hdd)或固态硬盘(solid-state drive,ssd)等;存储介质还可以包括上述种类的存储器的组合。
69.虽然结合附图描述了本发明的实施例,但是本领域技术人员可以在不脱离本发明的精神和范围的情况下作出各种修改和变型,这样的修改和变型均落入由所附权利要求所限定的范围之内。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1