CN111158742B - 一种代码交接过程的识别方法、设备及介质 - Google Patents
一种代码交接过程的识别方法、设备及介质 Download PDFInfo
- Publication number
- CN111158742B CN111158742B CN201911380380.5A CN201911380380A CN111158742B CN 111158742 B CN111158742 B CN 111158742B CN 201911380380 A CN201911380380 A CN 201911380380A CN 111158742 B CN111158742 B CN 111158742B
- Authority
- CN
- China
- Prior art keywords
- code
- submission
- code submission
- array
- date
- 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.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/70—Software maintenance or management
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
Abstract
本发明实施例公开了一种代码交接过程的识别方法、设备及介质。其中,代码交接过程的识别方法,包括:根据软件项目的代码提交日志集合,得到与各开发者对应的代码提交数组;计算两两代码提交数组间的活跃天数重合程度,并根据重合程度计算结果,获取与代码交接的继任者对应的目标代码提交数组;在目标代码提交数组中,根据各代码提交日期的时间分布,识别交接开始日期以及代码贡献结束日期;根据与交接开始日期和代码贡献结束日期匹配的代码提交数量,识别交接结束日期。本发明实施例的技术方案,实现了在非固定软件开发团队中,根据代码提交日志,准确识别发生代码交接的双方以及交接起止时间,方便后续对代码交接行为的研究和管理。
Description
技术领域
本发明实施例涉及软件开发技术,尤其涉及一种代码交接过程的识别方法、设备及介质。
背景技术
交接是软件开发过程中的一个重要过程,是指开发责任从前任者转移到继任者的过程,继任者在软件项目开发中途加入该项目,需要对项目的整体概况、接手的具体代码以及其相关技术进行全面的学习,因此,继任者想要达到前任者的水平,需要一个漫长的周期,如果交接没有合理地执行,一方面,开发团队会浪费大量的人力,另一方面,会有项目无法按时完工的风险,因此,研究、管理和改进交接过程至关重要。
现有技术中,针对项目交接的研究多集中于对固定项目团队内部的交接过程,其项目团队相对稳定,但一些大型的企业会主持开源,或内源项目,开源项目是对每一个连入互联网的开发人员开放的,每个人都有向其贡献代码的资格,而内源项目是对企业内的所有员工开放。这两类项目的共同点是,项目开放,开发团队不固定,人员流动性高。显然现有技术对于固定项目团队的交接过程的研究不适用于开源项目和内源项目,其主要困难在于对交接过程的起止时间的识别。
发明内容
本发明实施例提供一种代码交接过程的识别方法、设备及介质,根据软件开发过程中生成的代码提交日志,识别交接过程和交接起止时间。
第一方面,本发明实施例提供了一种代码交接过程的识别方法,所述方法包括:
根据软件项目的代码提交日志集合,得到与各开发者对应的代码提交数组,所述代码提交数组按照时间顺序存储开发者在开发周期内设定时间周期的代码提交数量;
计算两两代码提交数组间的活跃天数重合程度,并根据重合程度计算结果,获取与代码交接的继任者对应的目标代码提交数组;
在所述目标代码提交数组中,根据各代码提交日期的时间分布,识别交接开始日期以及代码贡献结束日期;
在所述目标代码提交数组中,根据与所述交接开始日期和所述代码贡献结束日期匹配的代码提交数量,识别交接结束日期。
第二方面,本发明实施例还提供了一种计算机设备,包括处理器和存储器,存储器用于存储指令,当指令执行时使得处理器执行以下操作:
根据软件项目的代码提交日志集合,得到与各开发者对应的代码提交数组,所述代码提交数组按照时间顺序存储开发者在开发周期内设定时间周期的代码提交数量;
计算两两代码提交数组间的活跃天数重合程度,并根据重合程度计算结果,获取与代码交接的继任者对应的目标代码提交数组;
在所述目标代码提交数组中,根据各代码提交日期的时间分布,识别交接开始日期以及代码贡献结束日期;
在所述目标代码提交数组中,根据与所述交接开始日期和所述代码贡献结束日期匹配的代码提交数量,识别交接结束日期。
第三方面,本发明实施例还提供了一种存储介质,存储介质用于存储指令,指令用于执行:
根据软件项目的代码提交日志集合,得到与各开发者对应的代码提交数组,所述代码提交数组按照时间顺序存储开发者在开发周期内设定时间周期的代码提交数量;
计算两两代码提交数组间的活跃天数重合程度,并根据重合程度计算结果,获取与代码交接的继任者对应的目标代码提交数组;
在所述目标代码提交数组中,根据各代码提交日期的时间分布,识别交接开始日期以及代码贡献结束日期;
在所述目标代码提交数组中,根据与所述交接开始日期和所述代码贡献结束日期匹配的代码提交数量,识别交接结束日期。
本发明实施例的技术方案,根据软件项目的代码提交日志集合,得到与各开发者对应的代码提交数组,并通过计算两两代码提交数组间的活跃天数重合程度,并根据重合程度计算结果,获取与代码交接的继任者对应的目标代码提交数组,然后在目标代码提交数组中根据各代码提交日期的时间分布,识别交接开始日期以及代码贡献结束日期,并根据与交接开始日期和代码贡献结束日期匹配的代码提交数量,识别交接结束日期,实现了在非固定软件开发团队中,根据代码提交日志,准确识别发生代码交接的双方以及交接起止时间,方便后续对代码交接行为的研究和管理。
附图说明
图1a是本发明实施例一中的一种代码交接过程的识别方法的流程图;
图1b是本发明实施例一中的一种文本格式代的码提交日志示意图;
图1c是本发明实施例一中的一种CSV格式代的码提交日志示意图;
图1d是本发明实施例一中的一种代码交接过程的识别方法执行示意图;
图2a是本发明实施例二中的一种代码交接过程的识别方法的流程图;
图2b是本发明实施例二中的一种交接开始日期的识别过程的流程图;
图2c是本发明实施例二中的一种交接结束日期的识别过程的流程图;
图3是本发明实施例三中的一种代码交接过程的识别方法的流程图;
图4是本发明实施例四中的一种代码交接过程的识别装置的结构示意图;
图5是本发明实施例五提供的一种计算机设备的结构示意图。
具体实施方式
下面结合附图和实施例对本发明作进一步的详细说明。可以理解的是,此处所描述的具体实施例仅仅用于解释本发明,而非对本发明的限定。另外还需要说明的是,为了便于描述,附图中仅示出了与本发明相关的部分而非全部结构。
在更加详细地讨论示例性实施例之前应当提到的是,一些示例性实施例被描述成作为流程图描绘的处理或方法。虽然流程图将各项操作(或步骤)描述成顺序的处理,但是其中的许多操作可以被并行地、并发地或者同时实施。此外,各项操作的顺序可以被重新安排。当其操作完成时所述处理可以被终止,但是还可以具有未包括在附图中的附加步骤。所述处理可以对应于方法、函数、规程、子例程、子程序等等。
本文使用的术语“代码提交数组”是与软件项目的各开发者对应的,表示各开发者的代码提交情况的数组,代码提交数组包括开发者在软件项目的开发周期内设定时间周期的代码提交数量。
本文使用的术语“代码提交日志集合”是软件项目开发过程中,各开发者提交代码的信息记录日志。
本文使用的术语“目标代码提交数组”是指与继任者对应的代码提交数组,表示在软件项目的开发过程中发生交接的双方中继任者的代码提交情况。
本文使用的术语“交接开始日期”是继任者持续向软件项目提交代码的第一天。
本文使用的术语“代码贡献结束日期”是继任者持续向软件项目提交代码的最后一天。
本文使用的术语“交接结束日期”是继任者的代码贡献能力达到自身的平均贡献水平的第一天。
本文使用的术语“平均贡献水平”是继任者在交接开始日期到代码贡献结束日期之间的平均代码贡献量。
为了便于理解,将本发明实施例的主要发明构思进行简述。
通过对各开发者针对软件项目的代码提交数组进行分析,识别出各开发者中发生代码交接的前任和继任者,然后在与继任者对应的目标代码提交数组中根据各代码提交日期的时间分布,识别交接开始日期以及代码贡献结束日期,并根据与交接开始日期和代码贡献结束日期匹配的代码提交数量,识别交接结束日期,实现了在非固定软件开发团队中,根据代码提交日志,准确识别发生代码交接的双方以及交接起止时间,方便后续对代码交接行为的研究和管理。
实施例一
图1a为本发明实施例一中的一种代码交接过程的识别方法的流程图,本实施例的技术方案适用于根据代码提交日志识别代码交接过程的情况,该方法可以由代码交接过程的识别装置执行,该装置可以由软件和/或硬件来实现,并可以集成在各种通用计算机设备中,具体包括如下步骤:
步骤110、根据软件项目的代码提交日志集合,得到与各开发者对应的代码提交数组,代码提交数组按照时间顺序存储开发者在开发周期内设定时间周期的代码提交数量。
其中,代码提交数组是与软件项目的各开发者对应的,表示各开发者的代码提交情况的数组,代码提交数组包括开发者在软件项目的开发周期内设定时间周期的代码提交数量。示例性的,以天为步长获取开发者m在软件项目开发周期内每天的代码提交数量,并将这些代码提交数量按软件项目开发日期先后排序,得到一个数组Nm=[x1,x2,...,xk],该数组Nm即为与开发者m对应的代码提交数组,其中,xk是开发者m在软件项目开发的第k天的代码提交数量。
本实施例中,将软件项目的代码提交日志集合以开发者为单位进行划分,获取各开发者的代码提交日志,并根据各开发者的代码提交日志生成与各开发者对应的代码提交数组。示例性的,根据各开发者的代码提交日志,获取在设定周期中的代码提交,例如,以天为单位统计各开发者在开发周期内,每天的代码提交数量,将这些代码提交数量按照日期进行排序,最终得到各开发者对应的代码提交数组。
步骤120、计算两两代码提交数组间的活跃天数重合程度,并根据重合程度计算结果,获取与代码交接的继任者对应的目标代码提交数组。
本实施例中,根据各开发者针对软件项目的代码提交数组,识别开发者中发生过代码交接的双方,并进一步根据发生代码交接双方的代码提交时间,确定代码交接的前任和继任者。其中,前任是先指先在软件项目中贡献代码且先离开项目的开发者,继任者是后加入软件项目的开发者。
具体的,可以对各开发者对应的代码提交数组进行两两比对,算两两代码提交数组间的活跃天数重合程度,当两者中一方的代码提交数量在两者代码提交发生重叠的日期之后逐渐减少并最终消失,另一方在上述重叠日期之后逐渐增多并达到稳定提交水平,则认为二者发生了代码交接,示例性的,在软件项目开发的第30天开发者A和B的提交日期发生重叠,在此之后,开发者A的提交数量逐渐减少并最终不再提交,开发者B的提交数量在发生重叠后,逐渐增加并最终达到稳定,则认为开发者A和B之间发生代码交接。进一步的,可以通过二者最开始进行代码提交的时间来区分交接过程中的前任和继任者,例如,在确认开发者A和B之间发生代码交接后,分别获取开发者A和B最开始向软件项目提交代码的日期,并得到A对应的最早提交日期为软件项目周期的第10天,B对应的最早提交日期为软件项目周期的第30天,显然A向软件项目提交代码的日期要早于B,则最终确定开始提交日期较早的开发者A为前任,开始提交日期较晚的开发者B为继任者,最终获取继任者B对应的代码提交数组,作为目标代码提交数组。
可选的,根据软件项目的代码提交日志集合,得到与各开发者对应的代码提交数组,包括:
获取与所述软件项目匹配的代码提交日志集合,所述代码提交日志集合包括:开发者以及代码提交时间。
将所述代码提交日志集合,按照开发者进行分类,得到与各所述开发者分别对应的代码提交日志子集合;
在各所述代码提交日志子集合中,按照代码提交时间所属的代码提交日期进行统计,并根据统计结果,得到与各开发者分别对应的代码提交数组。
本可选的实施例中,提供了一种得到与各开发者对应的代码提交数组的方式。具体的,首先从软件项目的代码仓库中导出所有的代码提交日志,例如,直接使用“git log”命令从GIT仓库导出代码提交日志,导出的文本格式的代码提交日志如图1b所示。为了方便得到代码提交日志中的代码提交信息,利用脚本将导出的文本格式的代码提交日志转换为CSV格式数据,具体如图1c所示,并将同一天同一作者的代码提交信息进行合并,数据中包含作者名、作者邮箱、代码提交时间、提交代码次数、增加代码行数和减少代码行数。然后,将代码提交日志按照开发者进行分类,得到与各开发者对应的代码提交日志子集合,一个代码提交日志子集合中包含一个开发者的全部代码提交信息,最终在提交日志子集合中,按照代码提交时间对代码提交日志子集合进行统计,具体统计各日期中代码提交次数,并根据统计结果,得到与开发者对应的代码提交数组,代码提交数组中包括的数组元素的个数与软件项目开发天数相同,各元素表示软件项目开发过程中该开发者每一天提交的代码数量。
步骤130、在目标代码提交数组中,根据各代码提交日期的时间分布,识别交接开始日期以及代码贡献结束日期。
其中,目标代码提交数组是指与继任者对应的代码提交数组,表示在软件项目的开发过程中发生交接的双方中继任者的代码提交情况;交接开始日期是指代码交接双方开始进行代码交接的日期,代码交接开始的标志是继任者自这一天起开始持续不断向软件项目提交代码,也就是说,交接开始时间可定义为继任者持续向软件项目提交代码的第一天;代码贡献结束日期是指继任者结束向软件项目持续贡献代码的日期,代码贡献结束的标志是自这一天起继任者不再持续向软件项目提交代码,也就是说,代码贡献结束日期可定义为继任者持续向软件项目提交代码的最后一天。
本实施例中,在继任者对应的目标代码提交数组中,根据各代码提交日期的分布,以上述交接开始日期和代码贡献结束日期的定义为判断标准,识别交接开始日期和继任者的代码贡献结束日期。以识别交接开始日期为例,如图1d所示,首先将满足任意两次提交日期间隔不超过3天,持续提交天数超过2天的第一个时间区间,定义为继任者开始持续向软件项目贡献代码的时间区间,则该时间区间的第一天即交接开始日期,然后,遍历目标代码提交数组,同时进行持续提交天数和提交间隔时间的计数,其中持续提交天数是用于计数间隔时间不超过3天的相邻代码提交日期的数量,提交间隔时间用于计数相邻两次代码提交动作的间隔时间,也就是说间隔时间不超过3天的相邻两次代码提交定义为持续提交,当判断到持续提交天数超过2天,则认为该持续提交时间区间的第一天为交接开始日期。
在获得交接开始日期的基础上,进一步的,根据各代码提交日期的时间分布,以代码贡献结束日期的定义为判断标准,识别代码贡献结束日期,即需要判断出继任者向软件项目持续贡献代码的最后一天,由于该识别过程同样涉及持续贡献代码的判断,可将目标代码提交数组进行反序排列,并参照交接开始日期的识别过程,最终将识别出的反序排列数组中持续提交代码的第一天即为原目标代码提交数组中,继任者向软件项目持续提交代码的最后一天,即代码贡献结束日期。
步骤140、在目标代码提交数组中,根据与交接开始日期和代码贡献结束日期匹配的代码提交数量,识别交接结束日期。
其中,交接结束日期是指代码交接双方结束代码交接工作的日期,代码交接结束的标志是继任者自这一天起代码贡献能力达到了其自身的平均贡献水平,也就是说交接结束时间可以定义为继任者的代码贡献能力达到自身的平均贡献水平的第一天,其中,继任者的平均贡献水平可以是继任者在交接开始日期到代码贡献结束日期之间的平均代码贡献量。
本实施例中,在目标代码提交数组中,根据与交接开始日期和代码贡献结束日期匹配的代码提交数量,以上述交接结束日期的定义为判断标准,来识别交接结束日期。具体的,首先计算继任者的平均贡献水平,即计算继任者在交接开始日期到代码贡献结束日期之间的平均代码贡献量,然后从交接开始日期对应的数组元素开始,遍历目标代码提交数组,当检测到代码提交量达到上述平均贡献水平时,确定代码交接结束,而当前遍历的数组元素对应的日期即为交接结束日期。优选的,为了提高判断的准确性,可以在遍历目标代码提交数组时,计算当前遍历数组元素及当前遍历数组元素之前设定数量的数组元素对应的代码提交数量的平均值,当该平均值达到上述平均贡献水平时,将当前遍历数组元素之前设定数量的数组元素对应的日期作为交接结束日期。
本发明实施例的技术方案,根据软件项目的代码提交日志集合,得到与各开发者对应的代码提交数组,并通过计算两两代码提交数组间的活跃天数重合程度,并根据重合程度计算结果,获取与代码交接的继任者对应的目标代码提交数组,然后在目标代码提交数组中根据各代码提交日期的时间分布,识别交接开始日期以及代码贡献结束日期,并根据与交接开始日期和代码贡献结束日期匹配的代码提交数量,识别交接结束日期,实现了在非固定软件开发团队中,根据代码提交日志,准确识别发生代码交接的双方以及交接起止时间,方便后续对代码交接行为的研究和管理。
实施例二
图2a为本发明实施例二中的一种代码交接过程的识别方法的流程图,本实施例在上述实施例的基础上进一步细化,提供了在目标代码提交数组中,根据各代码提交日期的时间分布,识别交接开始日期以及代码贡献结束日期的具体步骤。下面结合图2a对本发明实施例二提供的一种代码交接过程的识别方法进行说明,包括以下步骤:
步骤210、根据软件项目的代码提交日志集合,得到与各开发者对应的代码提交数组,代码提交数组按照时间顺序存储开发者在开发周期内设定时间周期的代码提交数量。
步骤220、计算两两代码提交数组间的活跃天数重合程度,并根据重合程度计算结果,获取与代码交接的继任者对应的目标代码提交数组。
步骤230、在目标代码提交数组中,获取首个满足持续提交条件的第一时间区间,将所述第一时间区间的时间起点,作为交接开始日期。
本实施例中,提供了一种根据目标代码提交数组,识别交接开始日期的具体方案,首先获取首个满足持续提交条件的第一时间区间,即在第一时间区间内,继任者首次满足持续提交条件,则将第一时间区间的时间起点,作为交接开始日期。
示例性的,代码提交数组包括90个数组元素,分别表示接任者在软件项目开发的90天内每天的代码提交数量,若检测到继任者在第30-40天的时间区间内,首次满足持续提交条件,则将该时间区间确定为第一时间区间,并将第一时间区间中的第一天,即软件项目开发的第30天作为交接开始日期。
可选的,所述持续提交条件包括:时间区间内任意相邻代码提交日期的间隔不超过预设的时间间隔阈值,且所述时间区间内包括的代码提交日期的数量超过预设的提交数量阈值。
本可选的实施例中,提供了一种具体的持续提交条件,时间区间内任意相邻代码提交日期的间隔不超过预设的时间间隔阈值,且时间区间内包括的代码提交日期的数量超过预设的提交数量阈值。示例性的,时间间隔阈值为2,提交数量阈值为3,持续提交条件为在一个时间区间内任意相邻的两次提交日期的时间间隔不超过2天,且提交天数超过3天。
可选的,在所述目标代码提交数组中,获取首个满足持续提交条件的第一时间区间,将所述第一时间区间的时间起点,作为所述交接开始日期,包括:
设置间隔时间变量的初始大于预设的间隔时间阈值,并设置持续时间变量为0;
从所述目标代码提交数组中依次获取一个数组元素作为当前操作元素,并将指针指向所述当前操作元素;
如果所述持续时间变量的当前值小于等于所述持续时间阈值,则执行:
在确定所述当前操作元素大于等于1且所述间隔时间变量大于所述间隔时间阈值时,将所述指针的当前值赋值给交接开始时间变量值,并将所述间隔时间变量以及所述持续时间变量同时置0;
在确定所述当前操作元素大于等于1且所述间隔时间变量小于等于所述间隔时间阈值时,将所述间隔时间变量置0,并将所述持续时间变量加1;
在确定所述当前操作元素小于1时,则将所述间隔时间变量加1;
返回执行从所述目标代码提交数组中依次获取一个数组元素作为当前操作元素,直至满足所述持续时间变量的当前值大于所述持续时间阈值。
本可选的实施例中,提供了具体的遍历目标代码提交数组,识别交接开始日期的方式,如图2b所示,具体步骤如下:步骤221、接收用户输入的继任者对应的目标代码提交数组N,时间间隔阈值K,以及提交数量阈值P,示例性的,时间间隔阈值K=60,提交数量阈值P=10;步骤222、初始化间隔时间变量值k和持续时间变量p,其中,k=K+1,p=0,同时初始化交接开始时间变量值Ds;步骤223、遍历目标代码提交数组N,判断当前数组元素对应的持续时间变量是否满足p>P,若是,则结束循环,并进入下一阶段(即交接结束日期识别阶段),若否,则执行步骤224;步骤224、判断当前遍历的数组元素是否满足xi≥1且k>K,若是,则执行Ds=i,k=0,p=0,其中,i为数组指针,指向当前遍历的数组元素,并返回执行步骤223,若否,执行步骤225;步骤225、判断当前遍历的数组元素是否满足xi≥1且k≤K,若是,则执行k=0,p=p+1,并返回执行步骤223,若否,则执行k=k+1,并返回执行步骤223。最终,将循环结束时的交接开始时间变量值Ds作为交接开始日期。
步骤240、对目标代码提交数组进行反序操作后,获取首个满足持续提交条件的第二时间区间,并将第二时间区间的时间起点,作为代码贡献结束日期。
本实施例中,提供了一种具体的识别代码贡献结束日期的方式,如图2c所示,具体步骤如下:步骤231、将目标代码提交数组N进行反序操作,示例性的,将N=[x1,x2,...,xk],转换为N'=[xk,xk-1,...,x1];步骤232、初始化间隔时间变量值k和持续时间变量p,其中,k=K+1,p=0,同时初始化代码贡献结束时间变量值Ie,代码提交总量Tc,以及代码提交总天数Td;步骤233、遍历数组N',判断当前数组元素对应的持续时间变量是否满足p>P,若是,则结束循环,并进入下一阶段(即识别交接结束日期阶段),若否,则执行步骤234;步骤234、判断当前遍历的数组元素是否满足xi≥1且k>K,若是,则执行Ie=i,k=0,p=0,其中,i为数组指针,指向当前遍历的数组元素,并返回执行步骤233,若否,执行步骤235;步骤235、判断当前遍历的数组元素是否满足xi≥1且k≤K,若是,则执行k=0,p=p+1,并返回执行步骤233,若否,则执行k=k+1,并返回执行步骤233。最终,将循环结束时的代码贡献结束时间变量值Ie作为代码贡献结束日期。
步骤250、在目标代码提交数组中,根据与交接开始日期和代码贡献结束日期匹配的代码提交数量,识别交接结束日期。
可选的,在所述目标代码提交数组中,根据与所述交接开始日期和所述代码贡献结束日期匹配的代码提交数量,识别交接结束日期,包括:
根据所述目标代码提交数组中,所述交接开始日期与所述代码贡献结束日期之间的时间间隔和代码提交数量,计算与所述目标代码提交数组对应的继任者的平均贡献水平;
将所述交接开始日期赋值给交接结束日期变量值;
以所述交接开始日期为起点,遍历所述目标代码提交数组,当设定时长内的代码提交平均量小于所述平均贡献水平时,则将所述交接结束日期变量值加1,并遍历下一数组元素;
当设定时长内的代码提交平均量大于或者等于所述平均贡献水平时,则将当前交接结束日期变量值作为所述交接结束日期。
本可选的实施例中,提供了根据与交接开始日期和代码贡献结束日期匹配的代码提交数量,识别交接结束日期的方式,如图2c所示,具体步骤如下:步骤241、遍历继任者对应的目标代码提交数组N,判断是否满足j>Ds,且j<Ie,若是,则执行Tc=Tc+xj,Td=Td+1,若否,则执行步骤242;步骤242、判断是否满足j>Ie,若是,则跳出循环并执行步骤243,若否,则返回执行步骤241;步骤243、初始化平均贡献水平xavg=Tc/Td;步骤244、执行De=Ds,获得Ds对应的数组元素xs,并从De开始遍历N,并判断是否满足若是,则执行De=De+1,并返回执行步骤244,若否,则跳出循环,执行步骤245;步骤245、返回交接开始日期Ds和交接结束日期De。
本发明实施例的技术方案,通过对继任者对应的目标代码提交数组进行遍历,获取首个满足持续提交条件的第一时间区间,将第一时间区间的时间起点,作为交接开始时间,然后通过将目标代码提交数组进行反序操作,采用同样方式获取首个满足提交条件的第二时间区间,并将第二时间区间的时间起点作为代码贡献结束日期,最终根据与交接开始日期和代码贡献结束日期匹配的代码提交数量,识别交接结束日期,实现了在非固定软件开发团队中,通过遍历继任者对应的目标代码提交数组,准确识别发生代码交接的起止时间,方便后续对代码交接行为的研究和管理。
实施例三
图3为本发明实施例三提供的一种代码交接过程的识别方法的流程图,本实施例在上述实施例的基础上,进一步进行细化,提供了计算两两代码提交数组间的活跃天数重合程度,并根据重合程度计算结果,获取与代码交接的继任者对应的目标代码提交数组的具体步骤,以及在所述目标代码提交数组中,根据与所述交接开始日期和所述代码贡献结束日期匹配的代码提交数量,识别交接结束日期的具体步骤。下面结合图3对本发明实施例三提供的一种代码交接过程的识别方法进行说明,还包括以下步骤:
步骤310、根据各开发者针对软件项目的代码提交数组,计算各开发者两两之间的活跃天数的重合程度。
本实施例中,为了判断发生代码交接的开发者组合,需要计算各开发者两两之间的活跃天数的重合程度,具体的,Nm=[x1,x2,...,xk]表示开发者m对应的代码提交数组,将全部开发者对应的代码提交数组进行两两匹配,计算两者之间活跃天数的重合程度Cad,具体计算方法如下:
步骤320、在当前两个开发者的活跃天数的重合程度符合交接条件时,分别获取当前两个开发者最早的代码提交日期。
本实施例中,根据计算出的量开发者之间的活跃天数的重合程度,确定两者之间是否发生代码交接,具体的,判断是否满足Cad∈(0,0.1),若是,则认为当前两个开发者之间发生代码交接,其中0.1为经验值,具体实验验证数据如表1所示,从表1中可以看出,当Cad∈(0,0.1)时,在精确率、召回率和准确率这三项指标上均表现最好,因此这里选取的经验值为0.1,另外,值得注意的是,可以根据具体的软件项目,比较不同的Cad取值,以确定最佳的取值范围。
表1
C<sub>ad</sub> | 精准率 | 召回率 | 准确率 |
(0,0.06) | 0.42 | 0.71 | 0.55 |
(0,0.08) | 0.64 | 0.64 | 0.60 |
(0,0.1) | 0.67 | 0.73 | 0.65 |
(0,0.12) | 0.67 | 0.67 | 0.60 |
(0,0.14) | 0.75 | 0.60 | 0.55 |
在确定两个开发者之间发生代码交接后,为了识别交接过程中的前任和继任者,需要获取当前两个开发者最早的代码提交日期,以根据加入软件项目的先后顺序确定在交接过程中的身份。
步骤330、在当前两个开发者中,将距离当前日期最近的最早的代码提交日期对应的开发者作为继任者,并获取继任者对应的目标代码提交数组。
本实施例中,在获得两个开发者最早的代码提交日期后,距离当前日期最远的最早的代码提交日期对应的开发者为先加入项目的开发者,因此确定该开发者为前任,另一开发者为继任者。示例性的,确定发生代码交接的开发者A和B对应的最早代码提交日期分别为软件项目开发的第15天和第40天,说明开发者A相较于开发者B先加入软件项目的开发,则将开发者A确定为前任,开发者B确定为继任者。
步骤340、在目标代码提交数组中,根据各代码提交日期的时间分布,识别交接开始日期以及代码贡献结束日期。
步骤350、在目标代码提交数组中,根据与交接开始日期和代码贡献结束日期匹配的代码提交数量,识别交接结束日期。
在识别出多个软件项目的代码交接起止日期后,可以根据识别结果进一步分析影响代码交接过程持续时长的影响因子,具体的,采用软件开发过程中的多种变量,利用逐步回归法构建关于交接过程持续时长的多元回归模型。示例性的,多种变量可以包括:通过代码提交日志获取的总体提交次数、代码增加行数以及代码减少行数;通过代码仓库,例如GitHub提供的应用程序编程接口(Application Programming Interface,API)获取的拉代码次数、问题数以及贡献者数量;通过代码扫描工具,例如Sonarqube,进行代码扫描获取的代码总行数、总目录数、总文件数、代码总类数、代码总方法数以及总语句数。最终通过数据分析工具SPSS(Statistical Product and Service Solutions,统计产品与服务解决方案)进行逐步回归,最终结果如表2所示。
表2
其中,t表示各变量的系数,Sig.表示显著性,R2表示模型拟合程度。
由表2中的数据可知,模型7的拟合程度最高,达到了0.493,利用该模型可以进行交接持续时长的估计,以提前调整项目计划。
本发明实施例的技术方案,通过计算软件项目中各开发者两两之间的活跃天数的重合程度,当两个开发者的活跃天数重合程度符合交接条件时,根据二者提交代码的时间确定交接过程中的前任和继任者,并在遍历继任者对应的目标代码提交数组确定交接开始日期和代码贡献结束日期后,计算继任者的平均贡献水平,当设定时长内的代码提交平均量大于或者等于平均贡献水平时,则认为代码交接结束,实现了在非固定软件开发团队中,根据代码提交日志,准确识别发生代码交接的双方以及交接起止时间,方便后续对代码交接行为的研究和管理。
实施例四
图4为本发明实施例四提供的一种代码交接过程的识别装置的结构示意图,该代码交接过程的识别装置,包括:代码提交数组获取模块410、目标代码提交数组获取模块420、交接开始日期识别模块430和交接结束日期识别模块440。
其中,代码提交数组获取模块410,用于根据软件项目的代码提交日志集合,得到与各开发者对应的代码提交数组,所述代码提交数组按照时间顺序存储开发者在开发周期内设定时间周期的代码提交数量;
目标代码提交数组获取模块420,用于计算两两代码提交数组间的活跃天数重合程度,并根据重合程度计算结果,获取与代码交接的继任者对应的目标代码提交数组;
交接开始日期识别模块430,用于在所述目标代码提交数组中,根据各代码提交日期的时间分布,识别交接开始日期以及代码贡献结束日期;
交接结束日期识别模块440,用于在所述目标代码提交数组中,根据与所述交接开始日期和所述代码贡献结束日期匹配的代码提交数量,识别交接结束日期。
本发明实施例的技术方案,根据软件项目的代码提交日志集合,得到与各开发者对应的代码提交数组,并通过计算两两代码提交数组间的活跃天数重合程度,并根据重合程度计算结果,获取与代码交接的继任者对应的目标代码提交数组,然后在目标代码提交数组中根据各代码提交日期的时间分布,识别交接开始日期以及代码贡献结束日期,并根据与交接开始日期和代码贡献结束日期匹配的代码提交数量,识别交接结束日期,实现了在非固定软件开发团队中,根据代码提交日志,准确识别发生代码交接的双方以及交接起止时间,方便后续对代码交接行为的研究和管理。
可选的,所述代码提交数组获取模块410,包括:
代码提交日志集合获取单元,用于获取与所述软件项目匹配的代码提交日志集合,所述代码提交日志集合包括:开发者以及代码提交时间;
代码提交日志子集合获取单元,用于将所述代码提交日志集合,按照开发者进行分类,得到与各所述开发者分别对应的代码提交日志子集合;
代码提交数组获取单元,用于在各所述代码提交日志子集合中,按照代码提交时间所属的代码提交日期进行统计,并根据统计结果,得到与各开发者分别对应的代码提交数组。
可选的,所述目标代码提交数组获取模块420,包括:
重合程度计算单元,用于根据各开发者针对软件项目的代码提交数组,计算所述各开发者两两之间的活跃天数的重合程度;
最早代码提交日期获取单元,用于在当前两个开发者的所述活跃天数的重合程度符合交接条件时,分别获取所述当前两个开发者最早的代码提交日期;
目标代码提交数组获取单元,用于在所述当前两个开发者中,将距离当前日期最近的所述最早的代码提交日期对应的开发者作为继任者,并获取所述继任者对应的目标代码提交数组。
可选的,所述交接开始日期识别模块420,包括:
交接开始日期识别单元,用于在所述目标代码提交数组中,获取首个满足持续提交条件的第一时间区间,将所述第一时间区间的时间起点,作为所述交接开始日期;
代码贡献结束日期识别单元,用于对所述目标代码提交数组进行反序操作后,获取首个满足所述持续提交条件的第二时间区间,并将所述第二时间区间的时间起点,作为所述代码贡献结束日期。
可选的,所述持续提交条件包括:时间区间内任意相邻代码提交日期的间隔不超过预设的时间间隔阈值,且所述时间区间内包括的代码提交日期的数量超过预设的提交数量阈值。
可选的,所述交接开始日期识别单元,具体用于:
设置间隔时间变量的初始大于预设的间隔时间阈值,并设置持续时间变量为0;
从所述目标代码提交数组中依次获取一个数组元素作为当前操作元素,并将指针指向所述当前操作元素;
如果所述持续时间变量的当前值小于等于所述持续时间阈值,则执行:
在确定所述当前操作元素大于等于1且所述间隔时间变量大于所述间隔时间阈值时,将所述指针的当前值赋值给交接开始时间变量值,并将所述间隔时间变量以及所述持续时间变量同时置0;
在确定所述当前操作元素大于等于1且所述间隔时间变量小于等于所述间隔时间阈值时,将所述间隔时间变量置0,并将所述持续时间变量加1;
在确定所述当前操作元素小于1时,则将所述间隔时间变量加1;
返回执行从所述目标代码提交数组中依次获取一个数组元素作为当前操作元素,直至满足所述持续时间变量的当前值大于所述持续时间阈值。
可选的,所述交接结束日期识别模块430,具体用于:
根据所述目标代码提交数组中,所述交接开始日期与所述代码贡献结束日期之间的时间间隔和代码提交数量,计算与所述目标代码提交数组对应的继任者的平均贡献水平;
将所述交接开始日期赋值给交接结束日期变量值;
以所述交接开始日期为起点,遍历所述目标代码提交数组,当设定时长内的代码提交平均量小于所述平均贡献水平时,则将所述交接结束日期变量值加1,并遍历下一数组元素;
当设定时长内的代码提交平均量大于或者等于所述平均贡献水平时,则将当前交接结束日期变量值作为所述交接结束日期。
本发明实施例所提供的代码交接过程的识别装置可执行本发明任意实施例所提供的代码交接过程的识别方法,具备执行方法相应的功能模块和有益效果。
实施例五
图5为本发明实施例五提供的一种计算机设备的结构示意图。图5示出了适于用来实现本发明实施方式的示例性计算机设备512的框图。图5显示的计算机设备512仅仅是一个示例,不应对本发明实施例的功能和使用范围带来任何限制。
如图5所示,计算机设备512以通用计算设备的形式表现。计算机设备512的组件可以包括但不限于:一个或者多个处理器516,存储器528,连接不同系统组件(包括存储器528和处理器516)的总线518。
总线518表示几类总线结构中的一种或多种,包括存储器总线或者存储器控制器,外围总线,图形加速端口,处理器或者使用多种总线结构中的任意总线结构的局域总线。举例来说,这些体系结构包括但不限于工业标准体系结构(ISA)总线,微通道体系结构(MAC)总线,增强型ISA总线、视频电子标准协会(VESA)局域总线以及外围组件互连(PCI)总线。
计算机设备512典型地包括多种计算机系统可读介质。这些介质可以是任何能够被计算机设备512访问的可用介质,包括易失性和非易失性介质,可移动的和不可移动的介质。
存储器528用于存储指令。存储器528可以包括易失性存储器形式的计算机系统可读介质,例如随机存取存储器(RAM)530和/或高速缓存存储器532。计算机设备512可以进一步包括其它可移动/不可移动的、易失性/非易失性计算机系统存储介质。仅作为举例,存储系统534可以用于读写不可移动的、非易失性磁介质(图5未显示,通常称为“硬盘驱动器”)。尽管图5中未示出,可以提供用于对可移动非易失性磁盘(例如“软盘”)读写的磁盘驱动器,以及对可移动非易失性光盘(例如CD-ROM,DVD-ROM或者其它光介质)读写的光盘驱动器。在这些情况下,每个驱动器可以通过一个或者多个数据介质接口与总线518相连。存储器528可以包括至少一个程序产品,该程序产品具有一组(例如至少一个)程序模块,这些程序模块被配置以执行本发明各实施例的功能。
具有一组(至少一个)程序模块542的程序/实用工具540,可以存储在例如存储器528中,这样的程序模块542包括——但不限于——操作系统、一个或者多个应用程序、其它程序模块以及程序数据,这些示例中的每一个或某种组合中可能包括网络环境的实现。程序模块542通常执行本发明所描述的实施例中的功能和/或方法。
计算机设备512也可以与一个或多个外部设备514(例如键盘、指向设备、显示器524等)通信,还可与一个或者多个使得用户能与该计算机设备512交互的设备通信,和/或与使得该计算机设备512能与一个或多个其它计算设备进行通信的任何设备(例如网卡,调制解调器等等)通信。这种通信可以通过输入/输出(I/O)接口522进行。并且,计算机设备512还可以通过网络适配器520与一个或者多个网络(例如局域网(LAN),广域网(WAN)和/或公共网络,例如因特网)通信。如图所示,网络适配器520通过总线518与计算机设备512的其它模块通信。应当明白,尽管图5中未示出,可以结合计算机设备512使用其它硬件和/或软件模块,包括但不限于:微代码、设备驱动器、冗余处理单元、外部磁盘驱动阵列、RAID系统、磁带驱动器以及数据备份存储系统等。
处理器516通过运行存储在存储器528中的指令,从而执行各种功能应用以及数据处理,例如执行以下操作:根据软件项目的代码提交日志集合,得到与各开发者对应的代码提交数组,所述代码提交数组按照时间顺序存储开发者在开发周期内设定时间周期的代码提交数量;计算两两代码提交数组间的活跃天数重合程度,并根据重合程度计算结果,获取与代码交接的继任者对应的目标代码提交数组;在所述目标代码提交数组中,根据各代码提交日期的时间分布,识别交接开始日期以及代码贡献结束日期;在所述目标代码提交数组中,根据与所述交接开始日期和所述代码贡献结束日期匹配的代码提交数量,识别交接结束日期。
在上述各实施例的基础上,处理器516是设置为通过以下方式获取代码提交数组:获取与所述软件项目匹配的代码提交日志集合,所述代码提交日志集合包括:开发者以及代码提交时间;将所述代码提交日志集合,按照开发者进行分类,得到与各所述开发者分别对应的代码提交日志子集合;在各所述代码提交日志子集合中,按照代码提交时间所属的代码提交日期进行统计,并根据统计结果,得到与各开发者分别对应的代码提交数组。
在上述各实施例的基础上,处理器516是设置为通过以下方式获取代码交接的继任者对应的目标代码提交数组:根据各开发者针对软件项目的代码提交数组,计算所述各开发者两两之间的活跃天数的重合程度;在当前两个开发者的所述活跃天数的重合程度符合交接条件时,分别获取所述当前两个开发者最早的代码提交日期;在所述当前两个开发者中,将距离当前日期最近的所述最早的代码提交日期对应的开发者作为继任者,并获取所述继任者对应的目标代码提交数组。
在上述各实施例的基础上,处理器516是设置为通过以下方式识别交接开始日期以及代码贡献结束日期:在所述目标代码提交数组中,获取首个满足持续提交条件的第一时间区间,将所述第一时间区间的时间起点,作为所述交接开始日期;对所述目标代码提交数组进行反序操作后,获取首个满足所述持续提交条件的第二时间区间,并将所述第二时间区间的时间起点,作为所述代码贡献结束日期。其中,所述持续提交条件包括:时间区间内任意相邻代码提交日期的间隔不超过预设的时间间隔阈值,且所述时间区间内包括的代码提交日期的数量超过预设的提交数量阈值。
在上述各实施例的基础上,处理器516是设置为通过以下方式获取交接开始日期:设置间隔时间变量的初始大于预设的间隔时间阈值,并设置持续时间变量为0;从所述目标代码提交数组中依次获取一个数组元素作为当前操作元素,并将指针指向所述当前操作元素;如果所述持续时间变量的当前值小于等于所述持续时间阈值,则执行:在确定所述当前操作元素大于等于1且所述间隔时间变量大于所述间隔时间阈值时,将所述指针的当前值赋值给交接开始时间变量值,并将所述间隔时间变量以及所述持续时间变量同时置0;在确定所述当前操作元素大于等于1且所述间隔时间变量小于等于所述间隔时间阈值时,将所述间隔时间变量置0,并将所述持续时间变量加1;在确定所述当前操作元素小于1时,则将所述间隔时间变量加1;返回执行从所述目标代码提交数组中依次获取一个数组元素作为当前操作元素,直至满足所述持续时间变量的当前值大于所述持续时间阈值。
在上述各实施例的基础上,处理器516是设置为通过以下方式识别交接结束日期:根据所述目标代码提交数组中,所述交接开始日期与所述代码贡献结束日期之间的时间间隔和代码提交数量,计算与所述目标代码提交数组对应的继任者的平均贡献水平;将所述交接开始日期赋值给交接结束日期变量值;以所述交接开始日期为起点,遍历所述目标代码提交数组,当设定时长内的代码提交平均量小于所述平均贡献水平时,则将所述交接结束日期变量值加1,并遍历下一数组元素;当设定时长内的代码提交平均量大于或者等于所述平均贡献水平时,则将当前交接结束日期变量值作为所述交接结束日期。
实施例六
本发明实施例六还提供一种存储计算机程序的计算机存储介质,所述计算机程序在由计算机处理器执行时用于执行本发明上述实施例任一所述的代码交接过程的识别方法。
本发明实施例的计算机存储介质,可以采用一个或多个计算机可读的介质的任意组合。计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质。计算机可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子(非穷举的列表)包括:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机存取存储器(RAM)、只读存储器(Read Only Memory,ROM)、可擦式可编程只读存储器((Erasable Programmable ReadOnly Memory,EPROM)或闪存)、光纤、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本文件中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。
计算机可读的信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。计算机可读的信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。
计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括——但不限于无线、电线、光缆、射频(Radio Frequency,RF)等等,或者上述的任意合适的组合。
可以以一种或多种程序设计语言或其组合来编写用于执行本发明操作的计算机程序代码,所述程序设计语言包括面向对象的程序设计语言—诸如Java、Smalltalk、C++,还包括常规的过程式程序设计语言——诸如“C”语言或类似的程序设计语言。程序代码可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络——包括局域网(LAN)或广域网(WAN)—连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。
注意,上述仅为本发明的较佳实施例及所运用技术原理。本领域技术人员会理解,本发明不限于这里所述的特定实施例,对本领域技术人员来说能够进行各种明显的变化、重新调整和替代而不会脱离本发明的保护范围。因此,虽然通过以上实施例对本发明进行了较为详细的说明,但是本发明不仅仅限于以上实施例,在不脱离本发明构思的情况下,还可以包括更多其他等效实施例,而本发明的范围由所附的权利要求范围决定。
Claims (13)
1.一种代码交接过程的识别方法,其特征在于,包括:
根据软件项目的代码提交日志集合,得到与各开发者对应的代码提交数组,所述代码提交数组按照时间顺序存储开发者在开发周期内设定时间周期的代码提交数量;
计算两两代码提交数组间的活跃天数重合程度,并根据重合程度计算结果,获取与代码交接的继任者对应的目标代码提交数组;
在所述目标代码提交数组中,根据各代码提交日期的时间分布,识别交接开始日期以及代码贡献结束日期;
在所述目标代码提交数组中,根据与所述交接开始日期和所述代码贡献结束日期匹配的代码提交数量,识别交接结束日期;
其中,在所述目标代码提交数组中,根据各代码提交日期的时间分布,识别交接开始日期以及代码贡献结束日期,包括:
在所述目标代码提交数组中,获取首个满足持续提交条件的第一时间区间,将所述第一时间区间的时间起点,作为所述交接开始日期;
对所述目标代码提交数组进行反序操作后,获取首个满足所述持续提交条件的第二时间区间,并将所述第二时间区间的时间起点,作为所述代码贡献结束日期。
2.根据权利要求1所述的方法,其特征在于,根据软件项目的代码提交日志集合,得到与各开发者对应的代码提交数组,包括:
获取与所述软件项目匹配的代码提交日志集合,所述代码提交日志集合包括:开发者以及代码提交时间;
将所述代码提交日志集合,按照开发者进行分类,得到与各所述开发者分别对应的代码提交日志子集合;
在各所述代码提交日志子集合中,按照代码提交时间所属的代码提交日期进行统计,并根据统计结果,得到与各开发者分别对应的代码提交数组。
3.根据权利要求1所述的方法,其特征在于,计算两两代码提交数组间的活跃天数重合程度,并根据重合程度计算结果,获取与代码交接的继任者对应的目标代码提交数组,包括:
根据各开发者针对软件项目的代码提交数组,计算所述各开发者两两之间的活跃天数的重合程度;
在当前两个开发者的所述活跃天数的重合程度符合交接条件时,分别获取所述当前两个开发者最早的代码提交日期;
在所述当前两个开发者中,将距离当前日期最近的所述最早的代码提交日期对应的开发者作为继任者,并获取所述继任者对应的目标代码提交数组。
4.根据权利要求1所述的方法,其特征在于,所述持续提交条件包括:时间区间内任意相邻代码提交日期的间隔不超过预设的时间间隔阈值,且所述时间区间内包括的代码提交日期的数量超过预设的提交数量阈值。
5.根据权利要求4所述的方法,其特征在于,在所述目标代码提交数组中,获取首个满足持续提交条件的第一时间区间,将所述第一时间区间的时间起点,作为所述交接开始日期,包括:
设置间隔时间变量的初始大于预设的间隔时间阈值,并设置持续时间变量为0;
从所述目标代码提交数组中依次获取一个数组元素作为当前操作元素,并将指针指向所述当前操作元素;
如果所述持续时间变量的当前值小于等于所述持续时间阈值,则执行:
在确定所述当前操作元素大于等于1且所述间隔时间变量大于所述间隔时间阈值时,将所述指针的当前值赋值给交接开始时间变量值,并将所述间隔时间变量以及所述持续时间变量同时置0;
在确定所述当前操作元素大于等于1且所述间隔时间变量小于等于所述间隔时间阈值时,将所述间隔时间变量置0,并将所述持续时间变量加1;
在确定所述当前操作元素小于1时,则将所述间隔时间变量加1;
返回执行从所述目标代码提交数组中依次获取一个数组元素作为当前操作元素,直至满足所述持续时间变量的当前值大于所述持续时间阈值。
6.根据权利要求1所述的方法,其特征在于,在所述目标代码提交数组中,根据与所述交接开始日期和所述代码贡献结束日期匹配的代码提交数量,识别交接结束日期,包括:
根据所述目标代码提交数组中,所述交接开始日期与所述代码贡献结束日期之间的时间间隔和代码提交数量,计算与所述目标代码提交数组对应的继任者的平均贡献水平;
将所述交接开始日期赋值给交接结束日期变量值;
以所述交接开始日期为起点,遍历所述目标代码提交数组,当设定时长内的代码提交平均量小于所述平均贡献水平时,则将所述交接结束日期变量值加1,并遍历下一数组元素;
当设定时长内的代码提交平均量大于或者等于所述平均贡献水平时,则将当前交接结束日期变量值作为所述交接结束日期。
7.一种计算机设备,包括处理器和存储器,所述存储器用于存储指令,当所述指令执行时使得所述处理器执行以下操作:
根据软件项目的代码提交日志集合,得到与各开发者对应的代码提交数组,所述代码提交数组按照时间顺序存储开发者在开发周期内设定时间周期的代码提交数量;
计算两两代码提交数组间的活跃天数重合程度,并根据重合程度计算结果,获取与代码交接的继任者对应的目标代码提交数组;
在所述目标代码提交数组中,根据各代码提交日期的时间分布,识别交接开始日期以及代码贡献结束日期;
在所述目标代码提交数组中,根据与所述交接开始日期和所述代码贡献结束日期匹配的代码提交数量,识别交接结束日期;
其中,所述处理器通过以下方式识别交接开始日期以及代码贡献结束日期:
在所述目标代码提交数组中,获取首个满足持续提交条件的第一时间区间,将所述第一时间区间的时间起点,作为所述交接开始日期;
对所述目标代码提交数组进行反序操作后,获取首个满足所述持续提交条件的第二时间区间,并将所述第二时间区间的时间起点,作为所述代码贡献结束日期。
8.根据权利要求7所述的计算机设备,其特征在于,所述处理器通过以下方式获取代码提交数组:
获取与所述软件项目匹配的代码提交日志集合,所述代码提交日志集合包括:开发者以及代码提交时间;
将所述代码提交日志集合,按照开发者进行分类,得到与各所述开发者分别对应的代码提交日志子集合;
在各所述代码提交日志子集合中,按照代码提交时间所属的代码提交日期进行统计,并根据统计结果,得到与各开发者分别对应的代码提交数组。
9.根据权利要求7所述的计算机设备,其特征在于,所述处理器通过以下方式获取与代码交接的继任者对应的目标代码提交数组:
根据各开发者针对软件项目的代码提交数组,计算所述各开发者两两之间的活跃天数的重合程度;
在当前两个开发者的所述活跃天数的重合程度符合交接条件时,分别获取所述当前两个开发者最早的代码提交日期;
在所述当前两个开发者中,将距离当前日期最近的所述最早的代码提交日期对应的开发者作为继任者,并获取所述继任者对应的目标代码提交数组。
10.根据权利要求7所述的计算机设备,其特征在于,所述持续提交条件包括:时间区间内任意相邻代码提交日期的间隔不超过预设的时间间隔阈值,且所述时间区间内包括的代码提交日期的数量超过预设的提交数量阈值。
11.根据权利要求10所述的计算机设备,其特征在于,所述处理器通过以下方式获取交接开始日期:
设置间隔时间变量的初始大于预设的间隔时间阈值,并设置持续时间变量为0;
从所述目标代码提交数组中依次获取一个数组元素作为当前操作元素,并将指针指向所述当前操作元素;
如果所述持续时间变量的当前值小于等于所述持续时间阈值,则执行:
在确定所述当前操作元素大于等于1且所述间隔时间变量大于所述间隔时间阈值时,将所述指针的当前值赋值给交接开始时间变量值,并将所述间隔时间变量以及所述持续时间变量同时置0;
在确定所述当前操作元素大于等于1且所述间隔时间变量小于等于所述间隔时间阈值时,将所述间隔时间变量置0,并将所述持续时间变量加1;
在确定所述当前操作元素小于1时,则将所述间隔时间变量加1;
返回执行从所述目标代码提交数组中依次获取一个数组元素作为当前操作元素,直至满足所述持续时间变量的当前值大于所述持续时间阈值。
12.根据权利要求7所述的计算机设备,其特征在于,所述处理器通过以下方式识别交接结束日期:
根据所述目标代码提交数组中,所述交接开始日期与所述代码贡献结束日期之间的时间间隔和代码提交数量,计算与所述目标代码提交数组对应的继任者的平均贡献水平;
将所述交接开始日期赋值给交接结束日期变量值;
以所述交接开始日期为起点,遍历所述目标代码提交数组,当设定时长内的代码提交平均量小于所述平均贡献水平时,则将所述交接结束日期变量值加1,并遍历下一数组元素;
当设定时长内的代码提交平均量大于或者等于所述平均贡献水平时,则将当前交接结束日期变量值作为所述交接结束日期。
13.一种存储介质,所述存储介质用于存储指令,所述指令用于执行如权利要求1-6中任一所述的代码交接过程的识别方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911380380.5A CN111158742B (zh) | 2019-12-27 | 2019-12-27 | 一种代码交接过程的识别方法、设备及介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911380380.5A CN111158742B (zh) | 2019-12-27 | 2019-12-27 | 一种代码交接过程的识别方法、设备及介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111158742A CN111158742A (zh) | 2020-05-15 |
CN111158742B true CN111158742B (zh) | 2020-11-03 |
Family
ID=70558751
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201911380380.5A Active CN111158742B (zh) | 2019-12-27 | 2019-12-27 | 一种代码交接过程的识别方法、设备及介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111158742B (zh) |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
SE0001336D0 (sv) * | 2000-04-11 | 2000-04-11 | Ericsson Telefon Ab L M | Method and arrangement in a telecommunication system |
CN105740132A (zh) * | 2016-01-25 | 2016-07-06 | 中国人民解放军国防科学技术大学 | 基于修改日志的软件包来源自动分析方法 |
CN106355108A (zh) * | 2016-09-28 | 2017-01-25 | 郑州云海信息技术有限公司 | 一种文件交接方法、装置、系统及计算机可读介质 |
CN109271321A (zh) * | 2018-09-20 | 2019-01-25 | 杭州安恒信息技术股份有限公司 | 一种贡献代码数统计方法及装置 |
CN110348714A (zh) * | 2019-06-28 | 2019-10-18 | 成都场量科技有限公司 | 基于代码日志对研发人员的产出水平评价的方法 |
CN110442369A (zh) * | 2019-07-15 | 2019-11-12 | 上海易点时空网络有限公司 | 适用于git的代码清理方法及装置、存储介质 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2005311626A (ja) * | 2004-04-20 | 2005-11-04 | Matsushita Electric Ind Co Ltd | 制御局装置及びハンドオーバ方法 |
EP1708423A1 (en) * | 2005-03-29 | 2006-10-04 | Matsushita Electric Industrial Co., Ltd. | Inter-domain context transfer using context tranfer managers |
-
2019
- 2019-12-27 CN CN201911380380.5A patent/CN111158742B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
SE0001336D0 (sv) * | 2000-04-11 | 2000-04-11 | Ericsson Telefon Ab L M | Method and arrangement in a telecommunication system |
CN105740132A (zh) * | 2016-01-25 | 2016-07-06 | 中国人民解放军国防科学技术大学 | 基于修改日志的软件包来源自动分析方法 |
CN106355108A (zh) * | 2016-09-28 | 2017-01-25 | 郑州云海信息技术有限公司 | 一种文件交接方法、装置、系统及计算机可读介质 |
CN109271321A (zh) * | 2018-09-20 | 2019-01-25 | 杭州安恒信息技术股份有限公司 | 一种贡献代码数统计方法及装置 |
CN110348714A (zh) * | 2019-06-28 | 2019-10-18 | 成都场量科技有限公司 | 基于代码日志对研发人员的产出水平评价的方法 |
CN110442369A (zh) * | 2019-07-15 | 2019-11-12 | 上海易点时空网络有限公司 | 适用于git的代码清理方法及装置、存储介质 |
Non-Patent Citations (1)
Title |
---|
git_stats代码统计;feiniao8651;《CSDN》;20170726;2 * |
Also Published As
Publication number | Publication date |
---|---|
CN111158742A (zh) | 2020-05-15 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US20200257659A1 (en) | Method and apparatus for determing description information, electronic device and computer storage medium | |
CN110782129B (zh) | 一种业务进度监控方法、装置、系统及计算机可读存储介质 | |
US9195910B2 (en) | System and method for classification with effective use of manual data input and crowdsourcing | |
CN111343161B (zh) | 异常信息处理节点分析方法、装置、介质及电子设备 | |
US11372942B2 (en) | Method, apparatus, computer device and storage medium for verifying community question answer data | |
CN111611458A (zh) | 大数据治理中基于元数据和数据分析技术实现系统数据架构梳理的方法 | |
US20170322931A1 (en) | Integration and combination of random sampling and document batching | |
CN111143556A (zh) | 软件功能点自动计数方法、装置、介质及电子设备 | |
CN111652667A (zh) | 一种企业主要相关自然人实体数据对齐方法 | |
CN111340584A (zh) | 一种资金方的确定方法、装置、设备及存储介质 | |
CN110851324A (zh) | 基于日志的巡检处理方法、装置以及电子设备、存储介质 | |
CN110348471B (zh) | 异常对象识别方法、装置、介质及电子设备 | |
CN117370065B (zh) | 一种异常任务确定方法、电子设备及存储介质 | |
CN110297820A (zh) | 一种数据处理方法、装置、设备和存储介质 | |
KR102155793B1 (ko) | 인공지능 학습데이터 생성을 위한 크라우드소싱 기반 프로젝트의 작업단가 관리 방법 및 장치 | |
CN113032834A (zh) | 一种数据库表格处理方法、装置、设备及存储介质 | |
CN111158742B (zh) | 一种代码交接过程的识别方法、设备及介质 | |
CN113138906A (zh) | 一种调用链数据采集方法、装置、设备及存储介质 | |
CN110930106A (zh) | 线上面试系统的信息处理方法、装置和系统 | |
CN111209214B (zh) | 代码测试处理方法、装置、电子设备及介质 | |
KR102156586B1 (ko) | 인공지능 학습데이터 생성을 위한 크라우드소싱 기반 프로젝트의 작업 및 검수의 순차적인 배정 방법 | |
CN114841663A (zh) | Gps设备安装质量的核验方法、装置、设备及存储介质 | |
US9275358B1 (en) | System, method, and computer program for automatically creating and submitting defect information associated with defects identified during a software development lifecycle to a defect tracking system | |
CN113946601A (zh) | 一种人员数据查询方法、装置、设备及存储介质 | |
CN109542986B (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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
CP01 | Change in the name or title of a patent holder | ||
CP01 | Change in the name or title of a patent holder |
Address after: 200233 11-12 / F, building B, 88 Hongcao Road, Xuhui District, Shanghai Patentee after: Star link information technology (Shanghai) Co.,Ltd. Address before: 200233 11-12 / F, building B, 88 Hongcao Road, Xuhui District, Shanghai Patentee before: TRANSWARP TECHNOLOGY (SHANGHAI) Co.,Ltd. |