一种贡献代码数统计方法及装置与流程

文档序号:16735980发布日期:2019-01-28 12:37阅读:180来源:国知局
一种贡献代码数统计方法及装置与流程

本发明涉及统计技术领域,尤其是涉及一种贡献代码数统计方法及装置。



背景技术:

一个项目通常是由大量代码构成的,统计一个稳定项目中每个开发人员贡献的有效代码数,可以体现出开发人员的编码效率和质量。管理者可以参考这类统计数据考核工作。开发人员可以了解自己的代码质量和编码习惯,做出调整和改进。因此,随着项目的不断扩展,对于项目代码的数据统计变得越来越重要。

目前,大多数的it公司使用版本管理工具托管项目代码,然而代码管理工具无法快速、客观、全面地获取源代码的统计信息。随着项目不断扩展,没有全面、客观的操作统计数据,无法直观地体现项目成长的过程和趋势,粗略地统计各个开发人员提交数量或项目代码增长,无法评估开发人员对项目真实的贡献。



技术实现要素:

有鉴于此,本发明的目的在于提供一种贡献代码数统计方法及装置,能够过滤第三方类库引用造成的较大统计误差,并通过细化代码统计粒度,使得统计的开发人员贡献代码数更加精确,从而实现开发人员对项目的真实贡献的准确评估。

第一方面,本发明实施例提供了一种贡献代码数统计方法,包括:

获取第一目标统计时间段内的多个单次提交的目标代码日志;

统计所述多个单次提交的目标代码日志中的代码变更数;所述代码变更数包括:添加行数、删除行数或修改行数;

过滤掉所述多个单次提交的目标代码日志中添加行数超过预设行数阈值的目标代码日志;

统计所述过滤处理后的多个目标代码日志中代码变更数所涉及的开发人员代码行数变动明细;所述代码行数变动明细至少包括:新增代码行数、修改自己代码行数、修改他人代码行数、删除自己代码行数、删除他人代码行数、代码被他人修改行数、代码被他人删除行数、个人代码总添加行数及个人代码总减少行数中的多种;

基于多个目标代码日志中代码变更数所涉及的开发人员代码行数变动明细,确定所述第一目标统计时间段内的各开发人员贡献代码总行数。

结合第一方面,本发明实施例提供了第一方面的第一种可能的实施方式,其中,所述统计所述过滤处理后的多个目标代码日志中代码变更数所涉及的开发人员代码行数变动明细,包括:

将相邻两次提交的目标代码日志进行数据比对,得到后一次提交的目标代码日志的新增代码行数、修改自己代码行数、修改他人代码行数、删除自己代码行数、删除他人代码行数、代码被他人修改行数及代码被他人删除行数;

将所述新增代码行数与所述修改他人代码行数相加,得到后一次提交的目标代码日志的个人代码总添加行数;

将所述修改自己代码行数、所述代码被他人修改行数及所述代码被他人删除行数相加,得到后一次提交的目标代码日志的个人代码总减少行数;

将多次提交的目标代码日志的所述新增代码行数、所述修改自己代码行数、所述修改他人代码行数、所述删除自己代码行数、所述删除他人代码行数、所述代码被他人修改行数、所述代码被他人删除行数、所述个人代码总添加行数及所述个人代码总减少行数作为所述多个目标代码日志中代码变更数所涉及的开发人员代码行数变动明细。

结合第一方面,本发明实施例提供了第一方面的第二种可能的实施方式,其中,所述基于多个目标代码日志中代码变更数所涉及的开发人员代码行数变动明细,确定所述第一目标统计时间段内的各开发人员贡献代码总行数,包括:

利用每个目标代码日志对应的开发人员的所述个人代码总添加行数减去所述个人代码总减少行数,得到每个所述目标代码日志对应的开发人员的贡献代码总行数;

基于多个所述目标代码日志对应的开发人员的贡献代码总行数,确定所述第一目标统计时间段内的各开发人员贡献代码总行数。

结合第一方面,本发明实施例提供了第一方面的第三种可能的实施方式,其中,在所述基于多个目标代码日志中代码变更数所涉及的开发人员代码行数变动明细,确定所述第一目标统计时间段内的各开发人员贡献代码总行数之后,还包括:

基于所述第一目标统计时间段内的各开发人员贡献代码总行数,及上一次项目统计的各开发人员贡献代码总行数,得到所述项目中个人代码贡献总行数;

基于所述第一目标统计时间段内的各开发人员贡献代码总行数、所述项目中个人代码贡献总行数及对应开发人员标识,生成统计结果文件,并将所述统计结果文件保存于版本库中。

结合第一方面,本发明实施例提供了第一方面的第四种可能的实施方式,其中,在所述统计所述多个单次提交的目标代码日志中代码变更数之前,还包括:

判断预设版本库中是否存在所述第一目标统计时间段对应的统计结果文件;

如果否,则判断所述预设版本库中是否存在与所述第一目标统计时间段重复的时间段所对应的统计结果文件;

如果存在,则将第二目标统计时间段内的代码日志作为所述目标代码日志;其中,所述第二目标统计时间段为所述第一目标统计时间段减去所述重复的时间段。

结合第一方面,本发明实施例提供了第一方面的第五种可能的实施方式,其中,在所述判断预设版本库中是否存在所述第一目标统计时间段对应的统计结果文件之后,还包括:

如果是,则将所述统计结果文件中的各开发人员贡献代码总行数,作为所述第一目标统计时间段内的各开发人员贡献代码总行数。

结合第一方面,本发明实施例提供了第一方面的第六种可能的实施方式,其中,在所述判断预设版本库中是否存在与所述第一目标统计时间段重复的时间段所对应的统计结果文件之后,还包括:

如果不存在,则执行步骤:统计所述多个单次提交的目标代码日志中代码变更数。

结合第一方面,本发明实施例提供了第一方面的第七种可能的实施方式,其中,在所述统计所述多个单次提交的目标代码日志中代码变更数之前,还包括:

过滤掉所述多个单次提交的目标代码日志中,包括通过合并操作所提交的代码日志的目标代码日志。

第二方面,本发明实施例还提供一种贡献代码数统计装置,包括:

日志获取模块,用于获取第一目标统计时间段内的多个单次提交的目标代码日志;

代码数统计模块,用于统计所述多个单次提交的目标代码日志中代码变更数;所述代码变更数包括:添加行数、删除行数和修改行数;

过滤模块,用于过滤掉所述多个单次提交的目标代码日志中代码变更数中,添加行数超过预设行数阈值的目标代码日志;

变动明细统计模块,用于统计所述过滤处理后的多个目标代码日志中代码变更数所涉及的开发人员代码行数变动明细;

贡献计算模块,基于多个目标代码日志中代码变更数所涉及的开发人员代码行数变动明细,确定所述第一目标统计时间段内的各开发人员贡献代码总行数。

第三方面,本发明实施例还提供一种具有处理器可执行的非易失的程序代码的计算机可读介质,所述程序代码使所述处理器执行第一方面及第一方面任一可能的实施方式所述的方法。

本发明实施例带来了以下有益效果:

在本发明实施例提供的贡献代码数统计方法中,首先获取第一目标统计时间段内的多个单次提交的目标代码日志,代码日志中记录有对应开发人员的标识和代码内容;然后统计多个单次提交的目标代码日志中的代码变更数;其中,代码变更数包括:添加行数、删除行数、修改行数三种类型;过滤掉多个单次提交的目标代码日志中添加行数超过预设行数阈值的目标代码日志,以避免将第三方类库中的代码行数统计成有效代码,减少统计结果的偏差。进一步通过统计过滤处理后的多个目标代码日志中代码变更数所涉及的开发人员代码行数变动明细,确定出第一目标统计时间段内的各开发人员贡献代码总行数。该代码行数变动明细中所述代码行数变动明细至少包括:新增代码行数、修改自己代码行数、修改他人代码行数、删除自己代码行数、删除他人代码行数、代码被他人修改行数、代码被他人删除行数、个人代码总添加行数及个人代码总减少行数中的多种,通过细化代码统计粒度,使得统计的开发人员贡献代码数更加准确。

本发明的其他特征和优点将在随后的说明书中阐述,并且,部分地从说明书中变得显而易见,或者通过实施本发明而了解。本发明的目的和其他优点在说明书、权利要求书以及附图中所特别指出的结构来实现和获得。

为使本发明的上述目的、特征和优点能更明显易懂,下文特举较佳实施例,并配合所附附图,作详细说明如下。

附图说明

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

图1为本发明实施例一提供的一种贡献代码数统计方法的流程图;

图2为本发明实施例一提供的另一种贡献代码数统计方法的流程图;

图3为本发明实施例一提供的另一种贡献代码数统计方法的流程图;

图4为本发明实施例二提供的一种贡献代码数统计装置的示意图。

具体实施方式

为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合附图对本发明的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

现有的通过版本管理工具托管项目代码的方式,无法准确地统计各个开发人员实际贡献代码数。基于此,本发明实施例提供一种贡献代码数统计方法及装置,能够过滤第三方类库引用造成的较大统计误差,并通过细化代码统计粒度,使得统计的开发人员贡献代码数更加精确,从而实现开发人员对项目的真实贡献的准确评估。

为便于对本实施例进行理解,首先对本发明实施例所公开的一种贡献代码数统计方法进行详细介绍。

实施例一:

本发明实施例提供了一种贡献代码数统计方法,参见图1所示,该方法包括以下步骤:

s101:获取第一目标统计时间段内的多个单次提交的目标代码日志。

在实际应用中,开发人员在完成一部分代码后会通过代码日志的方式提交到版本库中,每当有开发人员提交代码后,版本库会因为代码变更而生成一条代码日志,该日志会记录提交时间,提交者,记录的唯一编号,同时日志还会记录本次修改所影响到的文件及对应的行数。

在统计代码时,首先需要选定一个统计时间范围,如上述第一目标统计时间段,其中,第一用于和下述的第二进行区分,表示两个不同的时间段。在具体实现的时候,可以使用svn或git从版本库中获取项目源码,即获取第一目标统计时间段内的多个单次提交的目标代码日志。

s102:统计多个单次提交的目标代码日志中的代码变更数。

在获取第一目标统计时间段内的多个单次提交的目标代码日志之后,进行代码变更数的统计,可以通过前后两次提交的代码日志中的代码数据进行比对,初步得到代码变更数,这里的代码变更数包括:添加行数、删除行数、修改行数三种类型。

s103:过滤掉多个单次提交的目标代码日志中添加行数超过预设行数阈值的目标代码日志。

进一步,根据代码变更数中的添加行数进行判断,添加行数也就是贡献行数,将该添加行数超过预设行数阈值时,可以判断提交的代码日志中包括第三方类库代码,对该条代码日志终止统计,也就是过滤掉多个单次提交的目标代码日志中添加行数超过预设行数阈值的目标代码日志。当添加行数小于预设行数阈值时,则进行后续统计明细步骤。通过这种方式,可以避免将第三方类库中的代码行数统计成有效代码,减少统计结果的偏差。

s104:统计过滤处理后的多个目标代码日志中代码变更数所涉及的开发人员代码行数变动明细。

在实际应用中,开发人员在完成一部分代码后会通过代码日志的方式提交到版本库中,而其完成的代码并不完全是自己编写的,有可能是通过引用第三方类库进行编写,也可能是通过修改他人的代码来完成等,因此,为了提高代码统计的精确度,真正地掌握各个开发人员的编写效率与质量,需要对代码修改明细进行统计,本实施例中进一步给出了步骤s104:统计过滤处理后的多个目标代码日志中代码变更数所涉及的开发人员代码行数变动明细的具体实现过程,包括如下步骤:

(1)将相邻两次提交的目标代码日志进行数据比对,得到后一次提交的目标代码日志的新增代码行数、修改自己代码行数、修改他人代码行数、删除自己代码行数、删除他人代码行数、代码被他人修改行数及代码被他人删除行数七种数据。这种方式可以细化代码统计粒度,使得最后统计的实际贡献代码数更加精确,而且可以更方便地确定各开发人员的编码效率及质量。

(2)将新增代码行数与修改他人代码行数相加,得到后一次提交的目标代码日志的个人代码总添加行数。即:个人代码总添加行数=新增代码行数+修改他人代码行数。

(3)将修改自己代码行数、代码被他人修改行数及代码被他人删除行数相加,得到后一次提交的目标代码日志的个人代码总减少行数。即:个人代码总减少行数=删除自己代码行数+代码被他人修改行数+代码被他人删除行数。

(4)将多次提交的目标代码日志的新增代码行数、修改自己代码行数、修改他人代码行数、删除自己代码行数、删除他人代码行数、代码被他人修改行数、代码被他人删除行数、个人代码总添加行数及个人代码总减少行数作为多个目标代码日志中代码变更数所涉及的开发人员代码行数变动明细。

s105:基于多个目标代码日志中代码变更数所涉及的开发人员代码行数变动明细,确定第一目标统计时间段内的各开发人员贡献代码总行数。

具体的实现过程包括如下步骤:

(1)利用每个目标代码日志对应的开发人员的个人代码总添加行数减去个人代码总减少行数,得到每个目标代码日志对应的开发人员的贡献代码总行数。

(2)基于多个目标代码日志对应的开发人员的贡献代码总行数,确定第一目标统计时间段内的各开发人员贡献代码总行数。具体的,将第一目标统计时间段内的每个开发人员的多个贡献代码总行数进行叠加,即可得到每个开发人员的贡献代码总行数。

在确定出第一目标统计时间段内的开发人员的的贡献代码总行数后,就可以利用上一次的统计结果,来确定各开发人员截止到目前时间点时对该项目所作出的总的贡献,一方面,可以使工作人员根据总的贡献代码数对开发人员进行排名,以对各开发人员的工作绩效进行评估,另一方面,还可以将上述各种统计结果加入到版本库中,以便后续统计时可以进行数据对比,从而防止重复统计的发生。

因此,本实施例在执行步骤s105:基于多个目标代码日志中代码变更数所涉及的开发人员代码行数变动明细,确定第一目标统计时间段内的各开发人员贡献代码总行数之后,还包括以下步骤,参见图2所示:

s201:基于第一目标统计时间段内的各开发人员贡献代码总行数,及上一次项目统计的各开发人员贡献代码总行数,得到项目中个人代码贡献总行数。

具体的,项目个人贡献代码的总行数=上一次统计项目个人贡献代码的总行数+本次提交个人代码总添加行数-个人代码总减少行数。若不存在上一次统计项目个人贡献代码的总行数,则新建开发者的信息,将上诉变量初始为0进行计算。

s202:基于第一目标统计时间段内的各开发人员贡献代码总行数、项目中个人代码贡献总行数及对应开发人员标识,生成统计结果文件,并将统计结果文件保存于版本库中。

保存统计结果文件时需记录提交记录编号,提交记录编号是代码托管工具生成的,用于标示提交代码日志的唯一性,所以记录编号可防止重复统计。统计结果文件中还包括:第一目标统计时间段内的各开发人员贡献代码总行数、项目中个人代码贡献总行数及对应开发人员标识(比如姓名或者代号或者工号)。将统计结果文件进行保存,进入版本库托管,可以避免同项目重复统计相同数据。

本发明实施例所提供的贡献代码数统计方法,在每次统计完目标统计时间段内的贡献代码数后,将统计结果保存在版本库中,以确保统计结果文件随着项目的进行而不断更新,避免重复统计相同数据。在一种优选的实施方式中,在统计多个单次提交的目标代码日志中代码变更数之前,还包括以下步骤,参见图3所示:

s301:判断预设版本库中是否存在第一目标统计时间段对应的统计结果文件。

如果否,则执行步骤s302:判断预设版本库中是否存在与第一目标统计时间段重复的时间段所对应的统计结果文件。

如果存在,则执行步骤s303:将第二目标统计时间段内的代码日志作为目标代码日志;其中,第二目标统计时间段为第一目标统计时间段减去重复的时间段。在此之后,执行步骤305(与图1中的步骤s102相同):统计多个单次提交的目标代码日志中代码变更数。

在判断预设版本库中是否存在第一目标统计时间段对应的统计结果文件之后,还包括:

如果是,则执行步骤s304:将统计结果文件中的各开发人员贡献代码总行数,作为第一目标统计时间段内的各开发人员贡献代码总行数。

在判断预设版本库中是否存在与第一目标统计时间段重复的时间段所对应的统计结果文件之后,还包括:

如果不存在,则执行步骤s305(与图1中的步骤s102相同):统计多个单次提交的目标代码日志中代码变更数。

具体实现的时候,在获取到第一目标统计时间段内的多个单次提交的目标代码日志后,首先去版本库中进行查找,判断是否有该统计时间段内的统计结果文件,如果有,就不用再进行统计操作,直接将版本库中的统计结果文件中的统计数据作为第一目标统计时间段对应的统计结果即可。如果版本库中没有第一目标统计时间段对应的统计结果文件,那么再进一步判断是否有重复时间段内的统计结果文件,如果有,该重复时间段的统计结果就可以直接得到,不需要再进行统计,只需要将非重复时间段,即第二目标统计时间段内的代码进行统计即可。

在实际应用中,当开发人员提交代码日志时,不一定只是提交当前时间线的代码,有时候,开发人员会将不同时间线下(包括当前时间线和之前的时间线)的代码合并在一起进行提交,而之前时间线下的代码往往已经是被统计过的数据,这种合并操作会造成重复统计,影响代码统计的准确性,因此,本实施例在统计多个单次提交的目标代码日志中代码变更数之前,还包括以下步骤:过滤掉多个单次提交的目标代码日志中,包括通过合并操作所提交的代码日志的目标代码日志。

本发明实施例提供的贡献代码数统计方法具有以下优点:

1.在每次统计完目标统计时间段内的贡献代码数后,将统计结果文件保存在版本库中,以确保统计结果文件随着项目的进行而不断更新,避免重复统计相同数据。

2.过滤掉多个单次提交的目标代码日志中,包括通过合并操作所提交的代码日志的目标代码日志,以避免合并操作造成的重复数据。

3.过滤掉多个单次提交的目标代码日志中添加行数超过预设行数阈值的目标代码日志,以避免将第三方类库中的代码行数统计成有效代码,减少统计结果的偏差。

4.统计代码变动明细,如新增代码行数、修改自己代码行数、修改他人代码行数、删除自己代码行数、删除他人代码行数、代码被他人修改行数及代码被他人删除行数七种数据,这种方式可以细化代码统计粒度,使得最后统计的实际贡献代码数更加精确。

5.基于统计时间段的各开发人员的贡献代码数,可以对其贡献进行排名,体现开发人员编写代码的效率和质量。

实施例二:

本发明实施例还提供一种贡献代码数统计装置,参见图4所示,该装置包括:日志获取模块41、代码数统计模块42、过滤模块43、变动明细统计模块44和贡献计算模块45。

其中,日志获取模块41,用于获取第一目标统计时间段内的多个单次提交的目标代码日志;代码数统计模块42,用于统计多个单次提交的目标代码日志中代码变更数;代码变更数包括:添加行数、删除行数和修改行数;过滤模块43,用于过滤掉多个单次提交的目标代码日志中代码变更数中,添加行数超过预设行数阈值的目标代码日志;变动明细统计模块44,用于统计过滤处理后的多个目标代码日志中代码变更数所涉及的开发人员代码行数变动明细;贡献计算模块45,基于多个目标代码日志中代码变更数所涉及的开发人员代码行数变动明细,确定第一目标统计时间段内的各开发人员贡献代码总行数。

本发明实施例所提供的贡献代码数统计装置中,各个模块与前述贡献代码数统计方法具有相同的技术特征,因此,同样可以实现上述功能。本装置中各个模块的具体工作过程参见上述方法实施例,在此不再赘述。

本发明实施例所提供的贡献代码数统计方法的计算机程序产品,包括存储了处理器可执行的非易失的程序代码的计算机可读存储介质,所述程序代码包括的指令可用于执行前面方法实施例中所述的方法,具体实现可参见方法实施例,在此不再赘述。

所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的装置及电子设备的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。

附图中的流程图和框图显示了根据本发明的多个实施例方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或代码的一部分,所述模块、程序段或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或动作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。

在本发明的描述中,需要说明的是,术语“中心”、“上”、“下”、“左”、“右”、“竖直”、“水平”、“内”、“外”等指示的方位或位置关系为基于附图所示的方位或位置关系,仅是为了便于描述本发明和简化描述,而不是指示或暗示所指的装置或元件必须具有特定的方位、以特定的方位构造和操作,因此不能理解为对本发明的限制。此外,术语“第一”、“第二”、“第三”仅用于描述目的,而不能理解为指示或暗示相对重要性。

在本申请所提供的几个实施例中,应该理解到,所揭露的系统、装置和方法,可以通过其它的方式实现。以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,又例如,多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些通信接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。

所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。

另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。

所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个处理器可执行的非易失的计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(rom,read-onlymemory)、随机存取存储器(ram,randomaccessmemory)、磁碟或者光盘等各种可以存储程序代码的介质。

最后应说明的是:以上所述实施例,仅为本发明的具体实施方式,用以说明本发明的技术方案,而非对其限制,本发明的保护范围并不局限于此,尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,其依然可以对前述实施例所记载的技术方案进行修改或可轻易想到变化,或者对其中部分技术特征进行等同替换;而这些修改、变化或者替换,并不使相应技术方案的本质脱离本发明实施例技术方案的精神和范围,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应所述以权利要求的保护范围为准。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1