CN116088934B - 一种软件开发工作量确定方法及服务器 - Google Patents
一种软件开发工作量确定方法及服务器 Download PDFInfo
- Publication number
- CN116088934B CN116088934B CN202310373220.8A CN202310373220A CN116088934B CN 116088934 B CN116088934 B CN 116088934B CN 202310373220 A CN202310373220 A CN 202310373220A CN 116088934 B CN116088934 B CN 116088934B
- Authority
- CN
- China
- Prior art keywords
- code
- workload
- newly added
- server
- correction coefficient
- 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
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
- G06F8/77—Software metrics
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/44—Encoding
- G06F8/443—Optimisation
- G06F8/4432—Reducing the energy consumption
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Debugging And Monitoring (AREA)
- Stored Programmes (AREA)
Abstract
一种软件开发工作量确定方法及服务器,涉及软件工程技术领域,可以解决现有的软件开发工作量确定方法无法精准的确定出开发人员的工作量的问题。该方法应用于服务器,包括:服务器获取历史代码和待确定工作量的目标代码后,根据历史代码和目标代码,确定目标代码对应的差异代码。差异代码包括新增代码、删除代码和修改代码中的至少一种代码。然后,服务器对差异代码进行修正,确定修正后的工作量后,根据差异代码的代码行数和修正后的工作量,确定目标代码的目标工作量。其中,历史代码是代码提交者在目标代码之前提交至同一代码仓库的,且与目标代码属于同一个软件开发项目的代码。
Description
技术领域
本申请涉及软件工程技术领域,尤其涉及一种软件开发工作量确定方法及服务器。
背景技术
软件开发工作量评估是软件开发过程管理和效能分析的重要环节之一。现有的开发工作量评估方法有基于代码行、基于功能点、基于故事点等多种评估方法,其中大部分评估方法都依赖于对历史数据的分析。相关技术中,采用开发历史中已有软件开发任务与代码提交中涉及的代码行的数量对开发工作量进行评估是较为常见的方式。
然而,由于代码行是相当容易通过复制、粘贴操作进行大量扩增的,从而导致虚假的工作量评估。并且,纯代码行的工作量评估方法往往容易被开发人员恶意利用,比如,开发人员通过编写无用的、劣质的代码来伪造工作量。因此,现有的软件开发工作量确定方法,存在一定的弊端,无法准确的确定出开发人员的工作量。
发明内容
本申请实施例提供一种软件开发工作量确定方法及服务器,该方法通过服务器从同一代码仓库中获取历史代码和待确定工作量的目标代码后,确定历史代码与目标代码之间的差异代码,其中,差异代码包括新增代码、删除代码和修改代码中的至少一种代码,服务器对差异代码的代码行数进行修正,确定修正后的工作量,然后,服务器根据差异代码的代码行数和修正后的工作量,确定目标代码的目标工作量。由此,服务器对新增代码、删除代码和修改代码中的至少一种代码进行修正,确定修正后的工作量,以根据修正后的工作量和差异代码的代码行数,确定目标代码的目标工作量,从而统计得到更加符合开发人员实际工作量的工作量值,提高了确定软件开发工作量的精度。
为达到上述目的,本申请采用如下技术方案:
第一方面,本申请提供一种软件开发工作量确定方法,该方法中服务器获取历史代码和待确定工作量的目标代码后,根据历史代码和目标代码,确定目标代码对应的差异代码;其中,差异代码包括新增代码、删除代码和修改代码中的至少一种代码;服务器对差异代码的代码行数进行修正,确定修正后的工作量后,根据差异代码的代码行数和修正后的工作量,确定目标代码的目标工作量。
也就是说,服务器对差异代码进行修正,根据修正后的工作量和差异代码的代码行数,确定目标代码的目标工作量,由于修正后的工作量更加真实的反映开发人员的工作量,因此,提高确定开发人员的工作量的精度。
在第一方面的一种可能的实现方式中,上述差异代码可以包括新增代码,上述对差异代码的代码行数进行修正,确定修正后的工作量,可以包括:
采用新增代码修正系数对新增代码的代码行数进行加权计算,得到修正后新增代码的工作量,修正后的工作量包括修正后新增代码的工作量;其中,新增代码修正系数包括第一修正系数、第二修正系数、第三修正系数和第四修正系数中的至少一个。这样,服务器根据新增代码修正系数对新增代码的代码行数进行修正,可以得到更加符合开发人员的实际工作量的修正后新增代码的工作量。
在第一方面的另一种可能的实现方式中,第一修正系数是根据新增代码的复杂度与第一修正系数之间的映射关系确定的。也就是说,新增代码的复杂度与第一修正系数之间存在一定的对应关系,当服务器确定新增代码的复杂度后,可以通过查询复杂度与第一修正系数之间的对应关系,确定与新增代码的复杂度对应的第一修正系数。然后,服务器采用第一修正系数对新增代码的代码行数进行修正,提高了开发人员的工作量统计的精度。
第二修正系数是根据新增重复代码的代码行数与新增代码的代码行数的比值,与第二修正系数之间的映射关系确定的。新增重复代码是指新增代码中与历史代码中的部分代码重复的代码。也就是说,服务器确定新增代码中的新增重复代码后,确定新增重复代码的代码行数与新增代码的代码行数的比值,然后,服务器根据比值与第二修正系数之间的映射关系,确定与比值对应的第二修正系数。然后,服务器采用第二修正系数对新增代码的代码行数进行修正,提高了开发人员的工作量统计的精度。
第四修正系数是根据新增代码对应的修改文件的数量与第四修正系数之间的映射关系确定的。也就是说,服务器确定新增代码对应的修改文件的数量后,根据修改文件的数量与第四修正系数之间的映射关系,确定与修改文件的数量对应的第四修正系数。服务器采用第二修正系数对新增代码的代码行数进行修正,提高了开发人员的工作量统计的精度。
在第一方面的另一种可能的实现方式中,第三修正系数是根据下述任一方式确定:
在新增代码的提交者与新增代码对应的部分历史代码的提交者相同时,第三修正系数为第一预设系数值;
在新增代码的提交者与新增代码对应的部分历史代码的提交者不相同时,第三修正系数为第二预设系数值;第一预设系数值大于第二预设系数值。
可以理解为,开发人员在其他开发人员编写的代码的基础上增加代码时,开发人员需要付出一定的工作量,而当开发人员在自己编写的代码的基础上增加代码时,无需付出较多的工作量,需要减少开发人员的有效工作量。因此,服务器可以根据新增代码的提交者与新增代码对应的部分历史代码的提交者是否相同,以确定是否对新增代码的代码行数进行修正,有利于提高开发人员的工作量统计的精确度。
在第一方面的另一种可能的实现方式中,上述差异代码还可以包括删除代码,对差异代码的代码行数进行修正,确定修正后的工作量,包括:
采用删除代码修正系数对删除代码的代码行数进行加权计算,得到修正后删除代码的工作量,修正后的工作量包括修正后删除代码的工作量;其中,删除代码修正系数包括第五修正系数和/或第六修正系数。
在第一方面的另一种可能的实现方式中,第五修正系数是根据删除重复代码的代码行数与第五修正系数之间的映射关系确定的;删除重复代码是指删除代码中与历史代码中的代码重复的代码。
可以理解为,服务器可以根据删除代码中删除重复代码与第五修正系数之间的映射关系,确定与删除重复代码对应的第五修正系数,以采用第五修正系数对删除代码的代码行数进行修正。
在第一方面的另一种可能的实现方式中,第六修正系数是根据下述任一方式确定:
在不包括删除代码的目标代码的提交者与历史代码中原有的删除代码的提交者相同时,第六修正系数为第三预设系数值;
在不包括删除代码的目标代码的提交者与历史代码中原有的删除代码的提交者不相同时,第六修正系数为第四预设系数值;第三预设系数值小于第四预设系数值。
也就是说,当开发人员对其他开发人员编写的代码进行删除时,开发人员需要付出一定的工作量。当开发人员对自己编写的代码进行删除时,开发人员无需付出较多的工作量,因此,服务器可以根据目标代码的提交者与历史代码中原有的删除代码的提交者是否相同,以确定是否对删除代码的代码行数进行修正。
在第一方面的另一种可能的实现方式中,差异代码还可以包括修改代码,对差异代码的代码行数进行修正,确定修正后的工作量,包括:
采用第七修正系数对修改代码的代码行数进行加权计算,得到修正后修改代码的工作量,修正后的工作量包括修正后修改代码的工作量。
在第一方面的另一种可能的实现方式中,第七修正系数是根据下述任一方式确定:
在修改代码的提交者与历史代码中对应于修改代码的原有的代码的提交者相同时,第七修正系数为第五预设系数值;
在修改代码的提交者与历史代码中对应于修改代码的原有的代码的提交者不相同时,第七修正系数为第六预设系数值;第五预设系数值小于第六预设系数值。
也就是说,当开发人员对其他开发人员编写的代码进行修改时,开发人员需要额外付出一定的工作量去理解其他开发人员编写的代码。当开发人员对自己编写的代码进行删除时,开发人员无需额外付出较多的工作量,因此,服务器可以根据修改代码的提交者与历史代码中对应于修改代码的原有的代码的提交者是否相同,以确定是否对修改代码的代码行数进行修正。
在第一方面的另一种可能的实现方式中,根据差异代码的代码行数和修正后的工作量,确定目标代码的目标工作量之前,方法还包括:
根据新增代码的代码行数、删除代码的代码行数和修改代码的代码行数中的至少一种代码,确定差异代码的代码行数。
比如,当差异代码包括新增代码、删除代码和修改代码时,服务器可以对新增代码的代码行数、删除代码的代码行数和修改代码的代码行数进行求和,以确定差异代码的代码行数。
在第一方面的另一种可能的实现方式中,根据差异代码的代码行数和修正后的工作量,确定目标代码的目标工作量之前,方法还包括:
获取修正后新增代码的工作量、修正后删除代码的工作量和修正后修改代码的工作量中的至少一项;根据修正后新增代码的工作量、修正后删除代码的工作量和修正后修改代码的工作量中的至少一项,确定修正后的工作量。
第二方面,本申请提供一种服务器,包括:触摸屏,触摸屏包括触摸传感器和显示屏;一个或多个处理器;存储器;其中,存储器中存储有一个或多个计算机程序,一个或多个计算机程序包括指令,当指令被服务器执行时,使得服务器执行如上述第一方面中任一项所述的软件开发工作量确定方法。
第三方面,本申请提供一种计算机可读存储介质,计算机可读存储介质中存储有指令,当指令在服务器上运行时,使得服务器执行如第一方面中任一项所述的软件开发工作量确定方法。
第四方面,本申请提供一种计算机程序产品,计算机程序产品包括计算机指令,当计算机指令在服务器上运行时,使得服务器执行如第一方面中任一项所述的软件开发工作量确定方法。
可以理解地,上述提供的第二方面所述的服务器、第三方面所述的计算机存储介质,以及第四方面所述的计算机程序产品均用于执行上文所提供的对应的方法,因此,其所能达到的有益效果可参考上文所提供的对应的方法中的有益效果,此处不再赘述。
附图说明
图1为本申请实施例提供的一种服务器的结构示意图;
图2为本申请实施例提供的软件开发工作量确定方法的流程图一;
图3为本申请实施例提供的软件开发工作量确定方法的流程图二;
图4为本申请实施例提供的差异代码的代码行数的确定方法的流程图;
图5为本申请实施例提供的修正后的工作量的确定方法的流程图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行描述。其中,在本申请实施例的描述中,除非另有说明,“/”表示或的意思,例如,A/B可以表示A或B;本文中的“和/或”仅仅是一种描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。
以下,术语“第一”、“第二”仅用于描述目的,而不能理解为指示或暗示相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或者隐含地包括一个或者更多个该特征。在本申请实施例的描述中,除非另有说明,“多个”的含义是两个或两个以上。
在本申请实施例中,“示例性的”或者“例如”等词用于表示作例子、例证或说明。本申请实施例中被描述为“示例性的”或者“例如”的任何实施例或设计方案不应被解释为比其它实施例或设计方案更优选或更具优势。确切而言,使用“示例性的”或者“例如”等词旨在以具体方式呈现相关概念。
相关技术中,基于代码仓库自带的代码量统计工具对开发人员的工作量进行量统计时,只能对开发人员提交的代码中代码行的增加、删除或修改的工作量进行简单统计。基于代码行的工作量评估方法存在工作量统计不准确、高估或低估的情况。比如,代码中普遍存在超长的文件和函数、重复代码、依赖结构、深层嵌套结构等代码质量问题,使得开发人员破坏代码质量的责任以及改进代码质量的贡献很难被了解。此外,重复代码往往被认为是一种重要的劣质代码,通过对现有代码的重复,开发人员一方面可以快速完成所需的功能,另一方面还能增加代码量从而欺骗以代码行数为基准的工作量度量方法。而编写高质量的代码,往往会花费开发人员更多的思考与投入,这部分的工作量难以被准确评估。
为此,本申请实施例提供一种软件开发工作量确定方法,该方法中服务器从同一代码仓库中获取历史代码和待确定工作量的目标代码后,确定历史代码与目标代码之间的差异代码,其中,差异代码包括新增代码、删除代码和修改代码中的至少一种代码。服务器可以对差异代码的代码行数进行修正,确定修正后的工作量,然后,服务器根据差异代码的代码行数和修正后的工作量,确定目标代码的目标工作量。由此,服务器对新增代码、删除代码和修改代码中的至少一种代码进行修正,确定修正后的工作量,然后,服务器根据修正后的工作量,确定目标代码的目标工作量,从而统计得到更加符合开发人员实际工作量的工作量值,提高了确定软件开发工作量的精度。
图1为本申请实施例提供的一种服务器的结构框图。下面对服务器进行具体说明。可以理解的是,本申请实施例示意的结构并不构成对服务器的具体限定。在另一些实施例中,服务器可以包括比图1中更多或更少的部件,或者组合某些部件,或者拆分某些部件,或者不同的部件布置。图示的部件可以以硬件,软件或软件和硬件的组合实现。
如图1所示,服务器可以包括处理器110、存储器120及通信模块130。处理器110可用于读取和执行计算机可读指令。可选地,处理器110还可以包括控制器、运算器和寄存器。其中,控制器主要负责指令译码,并为指令对应的操作发出控制信号。运算器主要负责保存指令执行过程中临时存放的寄存器操作数和中间操作结果等。寄存器是有限存贮容量的高速存贮部件,可用来暂存指令、数据和地址。
具体实现中,处理器110的硬件架构可以是专用集成电路(application specificintegrated circuit,ASIC)架构、无内锁流水线微处理器(microprocessor withoutinterlocked piped stages,MIPS)架构、ARM(advanced risc machines)架构或者网络处理器(net processor,NP)架构等等。
存储器120与处理器110耦合,用于存储各种软件程序和/或多组指令。本申请实施例中,服务器的数据存储方法除了可以集成在服务器的一个处理器中实现以外,也可以以程序代码的形式存储于服务器的存储器中,由服务器的一个处理器调用服务器的存储器中存储的代码,执行以上方法。具体实现中,存储器120可包括高速随机存取的存储器,并且也可包括非易失性存储器,例如一个或多个磁盘存储设备、闪存设备或其他非易失性固态存储设备。存储器120可以存储操作系统,例如uCOS,VxWorks、RTLinux等嵌入式操作系统。
通信模块130可用于通过网络建立服务器与其它通信终端之间的通信连接,并用于通过网络收发数据。例如,服务器通过通信模块130与电子设备建立连接,以便于后续指令的传输。
可以理解的是,本实施例示意的结构并不构成对服务器的具体限定。在另一些实施例中,服务器可以包括比图示更多或更少的部件,或者组合某些部件,或者拆分某些部件,或者不同的部件布置。图示的部件可以以硬件,软件或软件和硬件的组合实现。
下面结合附图和示例对本申请提供的软件开发工作量统计方法进行详细介绍。
如图2所示,在本申请实施例中,开发人员将待确定工作量的目标代码提交至代码仓库后,服务器可以从代码仓库中获取目标代码和历史代码。服务器确定目标代码和历史代码之间的差异后,根据目标代码和历史代码之间的代码差异,确定目标代码中开发人员的目标工作量。
其中,代码仓库又称为储存库、资源库、版本库、代码库或存放库,是指在磁盘存储上的数据结构,其中包含了文件、目录以及元数据。代码仓库是一个公共或私有的保存大量源代码的地方。历史代码是代码提交者在目标代码之前提交至同一代码仓库的,且与目标代码属于同一个软件开发项目的代码。历史代码的提交者与目标代码的提交者可以是同一个开发人员,也可以是不同的开发人员,此处不做限定。上述软件开发项目是指软件开发人员获取用户的需求后,根据用户的需求构建出软件系统或者系统中的软件部分的项目。
服务器从同一代码仓库中获取到目标代码和历史代码后,服务器可以对目标代码和历史代码进行相似度分析,以确定目标代码与历史代码之间的差异。然后,服务器可以根据目标代码与历史代码之间的差异,确定开发人员对历史代码进行了代码的新增、删除或修改操作中的至少一项操作,使得目标代码和历史代码之间存在差异代码。其中,差异代码包括新增代码、删除代码或修改代码中的至少一种代码。其中,新增代码是指与历史代码相比,在目标代码中新增加的代码。删除代码是指与历史代码相比,在目标代码中删除的历史代码中原有的代码。修改代码是指对历史代码中原有的代码进行修改得到的目标代码中的代码。
在本申请实施例中,服务器确定差异代码包括新增代码、删除代码或修改代码中的至少一种代码后,服务器可以对新增代码、删除代码或修改代码中的至少一种代码进行标识,以区分差异代码中的不同代码。比如,服务器可以将新增代码标识为1、将删除代码标识为2或将修改代码标识为0。
在本申请实施例的一种可能的场景下,如图3所示,服务器对目标代码和历史代码进行相似度分析后,根据目标代码与历史代码之间的差异代码,确定开发人员对目标代码进行了代码新增、代码删除和代码修改的操作,使得目标代码中包括了新增代码、删除代码和修改代码。服务器可以根据新增代码的代码行数、删除代码的代码行数和修改代码的代码行数,确定目标代码中差异代码的代码行数。
此外,服务器还可以对新增代码的代码行数、删除代码的代码行数和修改代码的代码行数进行修正,分别得到修正后新增代码的工作量、修正后删除代码的工作量和修正后修改代码的工作量。
示例性的,服务器可以将新增代码与历史代码进行相似度分析,以确定新增代码中的新增重复代码。其中,新增重复代码是指在目标代码中新增加的,与历史代码中的原有的代码重复的代码。然后,服务器可以根据新增代码的复杂度、提交者、新增重复代码的代码行数和修改文件的数量中的至少一项,对新增代码的代码行数进行修正,得到修正后新增代码的工作量。其中,复杂度是度量代码内部逻辑复杂程度的指标。
服务器还可以将删除代码与历史代码进行相似度分析,以确定删除代码中的删除重复代码。其中,删除重复代码是指与历史代码相比较,删除的历史代码中原有重复的代码。然后,服务器可以根据不包含删除代码的目标代码的提交者与历史代码中原有的删除代码的提交者是否相同,和/或删除重复代码的代码行数,对删除代码的代码行数进行修正,得到修正后删除代码的工作量。
此外,服务器还可以根据修改代码的提交者与历史代码中对应于修改代码的原有的代码的提交者是否相同,对修改代码的代码行数进行修正,得到修正后修改代码的工作量。
服务器可以根据修正后新增代码的工作量、修正后删除代码的工作量和修正后修改代码的工作量,确定修正后的工作量。然后,服务器可以根据差异代码的代码行数和修正后的工作量,确定开发人员的目标工作量。具体的实现过程见下述实施例。
在本申请实施例中,在服务器对目标代码和历史代码进行相似度分析的过程中,服务器获取待分析的目标代码的代码片段和历史代码的代码片段。然后,服务器分别对目标代码的代码片段和历史代码的代码片段进行单语句token化,以分别确定两处代码片段token化后的token数量。其中,token是指把代码进行类似分词得到单语句的操作。
在一种可能的情况下,若服务器确定两处代码片段的token数量大于第一阈值(比如,第一阈值可以为50、60或80等),且两处代码片段中的任意两个单语句的相似度大于相似度阈值(比如,相似度阈值可以为70%、80%或90%等),则服务器确定两个单语句为相似语句。若服务器确定两处代码片段的连续N个(比如,N可以为5、6或8等)单语句均为相似语句,则服务器可以确定该两处代码片段为重复代码。
作为一种示例,假设服务器对目标代码中新增代码的代码片段进行单语句token化,确定新增代码的token数量为60,大于第一阈值,且新增代码中连续10个单语句与历史代码中连续10个单语句均为相似语句。这种情况下,服务器确定新增代码的代码片段为新增重复代码。
在本申请实施例中,服务器可以将目标代码中的单语句与历史代码中的单语句进行比对,以确定目标代码对应的新增代码、删除代码或修改代码。
需要解释的是,上述服务器对目标代码和历史代码进行相似度分析的方法仅作为一种实现方式,其它判断代码相似度的方法也适用于本申请中,此处不做限定。
在本申请实施例中,如图4所示,当服务器根据新增代码、删除代码和修改代码的代码行数,确定目标代码中差异代码的代码行数时,服务器可以将新增代码的代码行数、删除代码的代码行数与修改代码的代码行数进行求和,以确定差异代码的代码行数。
作为一种示例,假设服务器确定开发人员对目标代码所作的修改情况包括:新增代码的代码行数为274,删除代码的代码行数为771,修改代码的代码行数为47。由此,服务器对上述新增代码的代码行数、删除代码的代码行数与修改代码的代码行数进行求和,得到差异代码的代码行数为274+771+47=1092。
在本申请实施例中,如图5所示,服务器获取修正后的新增代码的工作量的方式包括:根据新增代码的复杂度、提交者、新增重复代码的代码行数和修改文件的数量中的至少一项,对新增代码的代码行数进行修正。
当服务器根据新增代码的复杂度,对新增代码的代码行数进行修正时,服务器可以根据新增代码的圈复杂度,对新增代码的代码行数进行修正。其中,圈复杂度用来衡量一个模块判定结构的复杂程度,数量上表现为线性无关的路径条数。
若服务器确定新增代码中不包含控制流语句(比如,选择语句、条件语句或决策点,等),则服务器确定新增代码的圈复杂度为1。可以理解为,这段新增代码中只会有一条路径。若服务器确定新增代码中仅包含一个if语句,且if语句仅有一个条件,则服务器确定新增代码的圈复杂度为2。若服务器确定新增代码中包含两个嵌套的if语句,或是一个if语句有两个条件的代码块,则服务器确定新增代码的圈复杂度为3。
需要解释的是,上述服务器根据if语句,确定新增代码的圈复杂度的方法仅作为一种示例性描述,此处不做限定。当服务器实际确定新增代码的圈复杂度时,服务器根据新增代码中包括的所有的控制流语句确定新增代码的圈复杂度。
可选地,服务器确定新增代码的圈复杂度后,可以根据圈复杂度与第一修正系数之间的对应关系,确定与新增代码的圈复杂度对应的第一修正系数。然后,服务器根据第一修正系数与新增代码的代码行数的乘积,确定第一工作量修正值。其中,第一工作量修正值是指服务器根据新增代码的圈复杂度对新增代码的代码行数进行修正后的代码行数。
示例性的,表1中示例性的示出了圈复杂度与第一修正系数之间的对应关系,具体参见如下表1。需要解释的是,表1中示出的圈复杂度与第一修正系数之间的对应关系,仅作为本申请的一种示例性描述,具体的对应关系根据实际情况而定。
表1
需要解释的是,上述服务器以新增代码的圈复杂度作为新增代码的复杂度的衡量标准,对新增代码的代码行数进行修正,仅作为一种示例性描述。服务器还可以根据新增代码的认知复杂度、文件平均圈复杂度等衡量新增代码的复杂度,此处不做限定。
在本申请实施例中,开发人员在历史代码的基础上对代码进行新增时,可能存在新增代码中的一些代码与历史代码中的原有代码存在重复的情况,而这种“复制、粘贴和/或修改”式的编程方法往往省去了开发人员的工作量。这种情况下,服务器可以根据目标代码中新增重复代码的代码行数在所有新增代码的代码行数中的占比,对新增代码的代码行数进行修正。比如,当服务器确定目标代码中包括新增代码时,服务器可以根据其中的新增重复代码的代码行数在所有新增代码的代码行数中的占比,对开发人员的工作量进行适当减小。
需要解释的是,当服务器确定新增重复代码的代码行数在新增代码的代码行数中的占比较小(比如,占比小于第二阈值)时,可以不对开发人员的工作量进行减小。比如,服务器确定新增重复代码的代码行数在新增代码的代码行数中的占比为0.001%。由于新增重复代码的代码行数在新增代码的代码行数中的占比很小,排除了开发人员恶意对代码进行复制以增加工作量的情况。这种情况下,服务器可以不对开发人员的工作量进行修正。
在本申请实施例中,服务器确定新增重复代码的代码行数在新增代码的代码行数中的第一比值后,服务器根据第一比值与第二修正系数之间的对应关系,确定与第一比值对应的第二修正系数。然后,服务器根据第二修正系数与新增重复代码的代码行数的乘积,确定第二工作量修正值。其中,第二工作量修正值是指服务器对新增重复代码的代码行数进行修正后的代码行数。由此,服务器根据新增重复代码的代码行数在新增代码的代码行数中占比,对新增重复代码的代码行数进行修正,解决了开发人员在软件开发中对代码进行复制、粘贴操作来伪造工作量的问题,提高了开发人员的工作量的统计的准确度。
示例性的,表2中示例性的示出了第一比值与第二修正系数之间的对应关系,具体参见如下表2。需要解释的是,表2中示出的第一比值与第二修正系数之间的对应关系,仅作为本申请的一种示例性描述,具体的对应关系根据实际情况而定。
表2
作为一种示例,假设服务器对目标代码和历史代码进行分析,确定新增代码的代码行数为150,新增代码中的新增重复代码的代码行数为50,服务器确定新增重复代码的代码行数在新增代码的代码行数中的第一比值为0.33,服务器根据上述表2中第一比值与第二修正系数之间的对应关系,确定第二修正系数为0.3。然后,服务器根据第二修正系数与新增重复代码的代码行数的乘积,确定第二工作量修正值为1.5。
在本申请实施例中,当开发人员在其他开发人员编写的代码的基础上增加代码时,开发人员需要付出一定的工作量,而当开发人员在自己编写的代码增加代码时,无需付出较多的工作量,需要减少开发人员的有效工作量。因此,为了提高服务器对开发人员的目标工作量统计的准确性,服务器还可以根据新增代码的提交者,与对应的历史代码中的提交者是否为同一开发人员,以确定是否对新增代码的代码行数进行修正。
在本申请实施例中,服务器可以获取新增代码对应的第一提交信息,以及与新增代码对应的部分历史代码对应的第二提交信息,根据第一提交信息和第二提交信息中记录的提交者,判断新增代码和对应的部分历史代码的提交者是否为同一开发人员。其中,提交信息中包括代码提交者每次提交代码到代码仓库时,对该部分代码进行添加相关解释描述、索引描述的信息,该提交信息还包括代码提交时间、提交者、提交部门、代码所属工程、所属项目、所属分支等等。
若服务器确定新增代码的提交者与新增代码对应的部分历史代码的提交者不相同,则服务器无需对新增代码的代码行数进一步的进行修正。若服务器确定新增代码的提交者与历史代码的提交者相同,则说明新增代码是提交者对自己编写代码进行的新增。这种情况下,服务器对新增代码的代码行数进一步的进行修正时,需要减少较多的有效工作量。
在本申请实施例中,服务器可以根据第三修正系数与新增代码的代码行数的乘积,确定第三工作量修正值。其中,第三修正系数可以为服务器根据新增代码和历史代码中的原有代码的提交者是否相同,预先设定的固定值。第三修正系数小于或等于1,且大于0。比如,假设服务器确定新增代码的提交者与历史代码中的原有代码的提交者不相同,第三修正系数可以取值为1。假设服务器确定新增代码的提交者与历史代码中的原有代码的提交者相同,第三修正系数可以取值为0.7。第三工作量修正值是指服务器对新增代码的提交者进行修正后的代码行数。
假设服务器确定新增代码的代码行数为150,若服务器确定目标代码中新增代码的提交者,与历史代码中的原有代码的提交者不相同,则服务器确定第三修正系数为1。即服务器无需对新增代码的代码行数进行修正。若服务器确定目标代码中新增代码的提交者,与历史代码中的原有代码的提交者相同,则服务器确定第三修正系数为0.7。然后,服务器可以确定对新增代码的提交者均进行修正后的第三工作量修正值为0.7*150=105。
需要解释的是,上述示例中新增代码的代码行数、新增重复代码的代码行数以及第三修正系数的取值等仅作为一种示例,实际的取值可以根据具体情况而定,此处不做限定。
在本申请实施例中,相较于开发人员在目标代码中新增的代码涉及一个文件,开发人员对该一个文件的代码进行理解,需要花费大量的时间和精力。当开发人员在目标代码中新增的代码涉及多个文件时,多个文件中的每一个文件中代码的数量均小于新增的代码涉及一个文件中代码的数量,开发人员对多个文件的代码进行理解时,无需花费过多的时间和精力,这种情况下,可能需要额外减少开发人员的工作量。因此,服务器还可以根据目标代码中新增代码对应的修改文件的数量,对新增代码的代码行数进行修正。
示例性的,服务器可以采用与修改文件的数量对应的第四修正系数对新增代码的代码行数进行修正,得到第四工作量修正值。其中,第四工作量修正值是指服务器根据第四修正系数对新增代码的代码行数进行修正后的代码行数。
示例性的,表3中示出了修改文件的数量与第四修正系数的对应关系,具体参见如下表3。比如,假设服务器确定新增代码的代码行数为135,目标代码对应的修改文件的数量为13。服务器根据表3中修改文件的数据与第四修正系数之间的对应关系,确定第四修正系数为0.15。服务器采用第四修正系数对新增代码的代码行数进行修正,得到第四工作量修正值为1.95。
表3
需要解释的是,上述表3中示出的修改文件的数量与第四修正系数的对应关系,仅作为本申请的一种示例性描述,具体的对应关系根据实际情况而定,此处不做限定。
在本申请实施例中,服务器根据新增代码的圈复杂度、新增重复代码的代码行数、新增代码的提交者与对应的部分历史代码的提交者是否相同和新增代码对应的修改文件的数量中的至少一项,对新增代码的代码行数进行修正包括但不限于以下几种情况。
第一种情况,假设服务器确定新增代码的圈复杂度不为1,新增重复代码的代码行数占新增代码的代码行数的占比小于第二阈值,且新增代码的提交者与历史代码中的原有代码的提交者不相同。这种情况下,服务器可以仅根据第一修正系数和第四修正系数对新增代码的代码行数进行修正,得到修正后的新增代码的代码行数。即服务器对第一修正系数、第四修正系数与新增代码的代码行数进行加权求和,确定修正后新增代码的工作量。
作为一种示例,假设服务器确定新增代码的代码行数为150,新增代码的圈复杂度为15,新增重复代码的代码行数在新增代码的代码行数中的占比为0.02,新增代码的提交者与历史代码中的原有代码的提交者不相同,且新增代码对应的修改文件的数量为3。这种情况下,服务器根据第一修正系数和第四修正系数对新增代码的代码行数进行修正。服务器通过查询上述表1和表3,可以确定与新增代码的圈复杂度对应的第一修正系数为0.05,以及与新增代码对应的修改文件的数量对应的第四修正系数为0.05。服务器根据第一修正系数和第四修正系数对新增代码的代码行数进行修正,确定修正后新增代码的工作量为150*0.05+150*0.05=15。
第二种情况,假设服务器确定新增代码的圈复杂度为1,新增重复代码的代码行数占新增代码的代码行数的占比大于第二阈值,且新增代码的提交者与历史代码中的原有代码的提交者不相同。这种情况下,服务器可以根据仅第二修正系数对新增代码的代码行数进行修正,得到修正后新增代码的工作量。即服务器根据第二修正系数与新增代码的代码行数的乘积值,确定修正后新增代码的工作量。
作为一种示例,假设服务器确定新增代码的代码行数为150,新增代码的圈复杂度为1,新增重复代码的代码行数在新增代码的代码行数中的第一比值为0.15,且新增代码的提交者与历史代码中的原有代码的提交者不相同。这种情况下,服务器仅根据第二修正系数对新增代码的代码行数进行修正。服务器通过查询上述表2中,可以确定与第一比值对应的第二修正系数为0.2。服务器根据第二修正系数对新增代码的代码行数进行修正,确定修正后新增代码的工作量为150*0.2=30。
第三种情况,假设服务器确定新增代码的圈复杂度为1,新增重复代码的代码行数占新增代码的代码行数的占比小于第二阈值,且新增代码的提交者与历史代码中的原有代码的提交者相同。这种情况下,服务器可以根据第三修正系数对新增代码的代码行数进行修正,得到修正后新增代码的工作量。即服务器根据第三修正系数与新增代码的代码行数的乘积值,确定修正后新增代码的工作量。
作为一种示例,假设服务器确定新增代码的代码行数为150,新增代码的圈复杂度为1,新增重复代码的代码行数在新增代码的代码行数中的第一比值为0.05,且新增代码的提交者与历史代码中的原有代码的提交者相同。这种情况下,服务器仅根据第三修正系数对新增代码的代码行数进行修正。假设服务器确定第三修正系数为0.7。服务器根据第三修正系数对新增代码的代码行数进行修正,确定修正后新增代码的工作量为150*0.7=105。
第四种情况,假设服务器确定新增代码的圈复杂度不为1,新增重复代码的代码行数占新增代码的代码行数的占比较大,且新增代码的提交者与历史代码中的原有代码的提交者不相同。这种情况下,服务器可以根据第一修正系数和第二修正系数对新增代码的代码行数进行修正,得到修正后的新增代码的代码行数。即服务器对第一修正系数、第二修正系数与新增代码的代码行数进行加权求和,确定修正后新增代码的工作量。
作为一种示例,假设服务器确定新增代码的代码行数为150,新增代码的圈复杂度为15,新增重复代码的代码行数在新增代码的代码行数中的第一比值为0.5,且新增代码的提交者与历史代码中的原有代码的提交者不相同。这种情况下,服务器根据第一修正系数和第二修正系数对新增代码的代码行数进行修正。服务器通过查询上述表1可以确定与新增代码的圈复杂度对应的第一修正系数为0.05,服务器查询上述表2可以确定与第一比值对应的第二修正系数为0.4。服务器根据第一修正系数和第二修正系数对新增代码的代码行数进行修正,确定修正后新增代码的工作量为150*0.05+150*0.4=67.5。
第五种情况,假设服务器确定新增代码的圈复杂度不为1,新增重复代码的代码行数占新增代码的代码行数的占比较小,且新增代码的提交者与历史代码中的原有代码的提交者相同。这种情况下,服务器可以根据第一修正系数和第三修正系数对新增代码的代码行数进行修正,得到修正后的新增代码的代码行数。即服务器对第一修正系数、第三修正系数与新增代码的代码行数进行加权求和,确定修正后新增代码的工作量。
作为一种示例,假设服务器确定新增代码的代码行数为150,新增代码的圈复杂度为15,新增重复代码的代码行数在新增代码的代码行数中的第一比值为0.05,且新增代码的提交者与历史代码中的原有代码的提交者相同。这种情况下,服务器根据第一修正系数和第三修正系数对新增代码的代码行数进行修正。服务器通过查询上述表1,可以确定与新增代码的圈复杂度对应的第一修正系数为0.05。假设服务器确定新增代码的提交者与历史代码中的原有代码的提交者相同时的第三修正系数为0.6。服务器根据第一修正系数和第三修正系数对新增代码的代码行数进行修正,确定修正后新增代码的工作量为150*0.05+150*0.6=97.5。
第六种情况,假设服务器确定新增代码的圈复杂度为1,新增重复代码的代码行数占新增代码的代码行数的占比较大,且新增代码的提交者与历史代码中的原有代码的提交者相同。这种情况下,服务器可以根据第二修正系数和第三修正系数对新增代码的代码行数进行修正,得到修正后新增代码的工作量。即服务器对第二修正系数、第三修正系数与新增代码的代码行数进行加权求和,确定修正后新增代码的工作量。
作为一种示例,假设服务器确定新增代码的代码行数为150,新增代码的圈复杂度为1,新增重复代码的代码行数在新增代码的代码行数中的第一比值为0.4,且新增代码的提交者与历史代码中的原有代码的提交者相同。这种情况下,服务器根据第二修正系数和第三修正系数对新增代码的代码行数进行修正。服务器通过查询上述表2,可以确定与第一比值对应的第二修正系数为0.4。假设服务器确定新增代码的提交者与历史代码中的原有代码的提交者相同时的第三修正系数为0.6。服务器根据第二修正系数和第三修正系数对新增代码的代码行数进行修正,确定修正后新增代码的工作量为150*0.4+150*0.6=150。
第七种情况,假设服务器确定新增代码的圈复杂度不为1,新增重复代码的代码行数占新增代码的代码行数的占比较大,且新增代码的提交者与历史代码中的原有代码的提交者相同。这种情况下,服务器可以根据第一修正系数、第二修正系数和第三修正系数对新增代码的代码行数进行修正,得到修正后新增代码的工作量。即服务器对第一修正系数、第二修正系数、第三修正系数与新增代码的代码行数进行加权求和,确定修正后新增代码的工作量。
作为一种示例,假设服务器确定新增代码的代码行数为150,新增代码的圈复杂度为15,新增重复代码的代码行数在新增代码的代码行数中的第一比值为0.4,且新增代码的提交者与历史代码中的原有代码的提交者相同。这种情况下,服务器根据第一修正系数、第二修正系数和第三修正系数对新增代码的代码行数进行修正。服务器通过查询上述表1,可以确定与新增代码的圈复杂度对应的第一修正系数为0.05,服务器查询上述表2确定与第一比值对应的第二修正系数为0.4。假设服务器确定新增代码的提交者与历史代码中的原有代码的提交者相同时的第三修正系数为0.6。服务器根据第一修正系数、第二修正系数和第三修正系数对新增代码的代码行数进行修正,确定修正后新增代码的工作量为150*0.05+150*0.4+150*0.6=157.5。
需要解释的是,上述服务器确定修正后新增代码的工作量的几种情况仅作为示例性描述,在服务器确定开发人员的目标工作量的过程中,可以根据实际情况确定如何对新增代码的代码行数进行修正,此处不做限定。
在本申请实施例中,如图5所示,服务器获取修正后的删除代码的工作量的方式包括根据删除重复代码的代码行数和/或删除代码提交者与历史代码中原有的删除代码的提交者是否相同。
服务器对目标代码和历史代码进行相似度分析,确定删除重复代码的代码行数后,服务器可以根据删除重复代码的代码行数与第五修正系数之间的对应关系,确定与删除重复代码的代码行数对应的第五修正系数。然后,服务器根据第五修正系数与删除重复代码的代码行数的乘积,确定第五工作量修正值。其中,第五工作量修正值是指服务器对删除重复代码的代码行数进行修正后的代码行数。由于开发人员删除历史代码中的重复代码需要额外付出一定的工作量,因此,服务器对删除重复代码的代码行数进行修正后,提高了开发人员的工作量的统计的准确度。
示例性的,表4中示例性的示出了删除重复代码的代码行数与第五修正系数之间的对应关系,具体参见如下表4。
表4
需要解释的是,由于开发人员删除了历史代码中的重复代码需要额外付出一定的工作量,因此,第五修正系数为大于1的数值。但是,服务器不能根据删除重复代码的代码行数的增加,无限的增加开发人员的工作量,因此,第五修正系数小于某一固定值。比如,表4中第五修正系数的最大值为1.1。表4中示出的删除重复代码的代码行数与第五修正系数之间的对应关系,仅作为本申请的一种示例性描述,具体的对应关系根据实际情况而定。
作为一种示例,假设服务器对目标代码和历史代码进行分析,确定删除代码的代码行数为770,删除代码中的删除重复代码的代码行数为158。服务器根据上述表4中删除重复代码的代码行数与第五修正系数之间的对应关系,确定第五修正系数为1.1。然后,服务器根据第五修正系数与删除重复代码的代码行数的乘积,确定第五工作量修正值为173.8。
在本申请实施例中,当开发人员对其他开发人员编写的代码进行删除时,开发人员需要付出一定的工作量。当开发人员对自己编写的代码进行删除时,开发人员无需付出较多的工作量,这种情况下,服务器可以对开发人员的工作量进行核减。为了提高服务器对开发人员的目标工作量统计的准确性,服务器还可以根据目标代码的提交者,与历史代码中原有的删除代码的提交者是否为同一开发人员,以确定是否对删除代码的代码行数进行修正。
在一种可能的情况下,若服务器确定目标代码的提交者与历史代码中原有的删除代码的提交者为同一开发人员,则服务器可以根据第六修正系数对删除代码的代码行数进行修正得到第六工作量修正值。其中,第六工作量修正值是指服务器根据第六修正系数对删除代码的代码行数进行修正后的代码行数。第六修正系数可以为第三预设系数值。
在本申请实施例中,服务器可以获取删除代码的第三提交信息,以及相应的历史代码中原有删除代码的第四提交信息,以根据第三提交信息和第四提交信息中记录的提交者,判断删除代码的提交者和历史代码中原有代码的提交者是否为同一开发人员,以确定是否对删除代码的代码行数进行修正。
比如,若服务器根据第三提交信息和第四提交信息,确定删除代码的提交者与历史代码中原有代码的提交者不是同一开发人员,则服务器确定无需对删除代码的代码行数进行修正。若服务器根据第三提交信息和第四提交信息,确定删除代码的提交者与历史代码中原有代码的提交者为同一开发人员,则说明删除代码是提交者对自己编写代码的删除。这种情况下,服务器对删除代码的代码行数进一步的进行修正时,需要减少较多的有效工作量。
在本申请实施例中,服务器可以采用第六修正系数,对删除代码的代码行数进行修正。比如,服务器根据第六修正系数与删除代码的代码行数的乘积,确定第六工作量修正值。其中,第六修正系数为服务器根据删除代码和历史代码中的原有代码的提交者是否是同一开发人员,预先设定的固定值,第六修正系数为大于0,并且小于或等于1的数。比如,第六修正系数可以为0.5、0.8或1,等等。比如,假设服务器确定删除代码的提交者与历史代码中的原有代码的提交者为同一开发人员,第六修正系数可以取值为0.5。假设服务器确定删除代码的提交者与历史代码中的原有代码的提交者不是同一开发人员,第六修正系数可以取值为1。
在本申请实施例中,服务器根据删除重复代码的代码行数和/或删除代码提交者与历史代码中原有的删除代码的提交者是否相同,对删除代码的代码行数进行修正可以包括以下几种情况。
第一种情况,假设服务器确定删除重复代码的代码行数后,服务器可以根据删除重复代码的代码行数与第五修正系数之间的对应关系,确定与删除重复代码的代码行数对应的第五修正系数,且服务器确定删除代码提交者与对应的历史代码中原有的删除代码的提交者不是同一开发人员,则服务器确定采用第五修正系数对删除代码的代码行数进行修正,得到修正后删除代码的工作量。
作为一种示例,假设服务器确定删除代码的代码行数为200,删除重复代码的代码行数为30,服务器查询上述表4,可以确定与删除重复代码的代码行数对应的第五修正系数为1.05,服务器确定删除代码提交者与对应的历史代码中原有的删除代码的提交者不是同一开发人员,服务器确定采用第五修正系数对删除代码的代码行数进行修正,得到修正后删除代码的工作量为200*1.05=210。
第二种情况,假设服务器确定删除重复代码的代码行数后,服务器可以根据删除重复代码的代码行数与第五修正系数之间的对应关系,确定与删除重复代码的代码行数对应的第五修正系数为1,即服务器确定无需采用第五修正系数对删除代码的代码行数进行修正。服务器确定删除代码提交者与对应的历史代码中原有的删除代码的提交者是同一开发人员,则服务器确定采用第六修正系数对删除代码的代码行数进行修正,得到修正后删除代码的工作量。
作为一种示例,假设服务器确定删除代码的代码行数为200,删除重复代码的代码行数为10,服务器查询上述表4,可以确定与删除重复代码的代码行数对应的第五修正系数为1,即服务器确定无需采用第五修正系数对删除代码的代码行数进行修正。服务器确定删除代码提交者与对应的历史代码中原有的删除代码的提交者是同一开发人员后,服务器确定预设的第六修正系数为0.5,服务器采用第六修正系数对删除代码的代码行数进行修正,得到修正后删除代码的工作量为200*0.5=100。
第三种情况,假设服务器确定删除重复代码的代码行数后,服务器可以根据删除重复代码的代码行数与第五修正系数之间的对应关系,确定与删除重复代码的代码行数对应的第五修正系数,且服务器确定删除代码提交者与对应的历史代码中原有的删除代码的提交者是同一开发人员,则服务器确定采用第五修正系数和第六修正系数对删除代码的代码行数进行修正,得到修正后删除代码的工作量。
作为一种示例,假设服务器确定删除代码的代码行数为200,删除重复代码的代码行数为30,服务器查询上述表4,可以确定与删除重复代码的代码行数对应的第五修正系数为1.05,服务器确定删除代码提交者与对应的历史代码中原有的删除代码的提交者是同一开发人员后,服务器确定预设的第六修正系数为0.5,服务器采用第五修正系数和第六修正系数对删除代码的代码行数进行修正,得到修正后删除代码的工作量为200*1.05+200*0.5=310。
在本申请实施例中,如图5所示,当开发人员对其他开发人员编写的代码进行修改时,开发人员需要付出一定的工作量。当开发人员对自己编写的代码进行修改时,开发人员无需付出较多的工作量,这种情况下,服务器可以对开发人员的工作量进行核减。为了提高服务器对开发人员的目标工作量统计的准确性,服务器还可以根据目标代码对应的修改代码的提交者,与历史代码中原有代码的提交者是否为同一开发人员,以确定是否对修改代码的代码行数进行修正。
在本申请实施例中,服务器还可以获取修改代码的第五提交信息,以及对应的历史代码中原有的代码的第六提交信息,以根据第五提交信息和第六提交信息中记录的提交者,判断修改代码的开发人员和历史代码中原有代码的提交者是否为同一开发人员,以确定是否对修改代码的代码行数进行修正。
比如,若服务器根据第五提交信息和第六提交信息,确定修改代码的提交者与历史代码中原有代码的提交者不是同一开发人员,则服务器确定无需对修改代码的代码行数进行修正。若服务器根据第五提交信息和第六提交信息,确定修改代码的提交者与历史代码中原有代码的提交者为同一开发人员,则服务器可以采用第七修正系数,对修改代码的代码行数进行修正。比如,服务器根据第七修正系数与修改代码的代码行数的乘积,确定第七工作量修正值。其中,第七修正系数为大于0,并且小于或等于1的数。比如,第七修正系数可以为0.3、0.5或1,等等。其中,第七工作量修正值是指服务器根据第七修正系数对修改代码的代码行数进行修正后的代码行数。
作为一种示例,假设服务器确定修改代码的提交者与历史代码中原有代码的提交者是同一开发人员,则服务器可以采用第七修正系数(比如,0.3)对修改代码的代码行数(比如,47)进行修正,得到修正后修改代码的工作量为47*0.3=14.1。
在本申请实施例中,服务器对新增代码的代码行数、删除代码的代码行数和修改代码的代码行数进行修正,得到修正后新增代码的工作量、修正后删除代码的工作量和修正后修改代码的工作量后,服务器可以对修正后新增代码的工作量、修正后删除代码的工作量和修正后修改代码的工作量进行求和,确定修正后的工作量。然后,服务器对差异代码的代码行数和修正后的工作量进行求和,确定开发人员的目标工作量。
作为一种示例,假设服务器确定新增代码的代码行数为274、删除代码的代码行数为771,修改代码的代码行数为47,服务器可以确定差异代码的代码行数为274+771+47=1092。假设服务器对新增代码的代码行数、删除代码的代码行数和修改代码的代码行数进行修正,分别得到修正后新增代码的工作量为65.76、修正后删除代码的工作量为424.05,以及修正后修改代码的工作量为14.1,服务器确定修正后的工作量为424.05+14.1-65.76=372.39。然后,服务器对差异代码的代码行数和修正后的工作量进行求和,确定开发人员的目标工作量为1092+372.39=1464.39。
需要解释的是,由于开发人员在历史代码的基础上,在目标代码中增加了新增代码,开发人员可能无需重新构思编写代码的过程,因此,服务器对新增代码的代码行数进行修正时,需要对新增代码的代码行数进行核减。这样,服务器根据修正后新增代码的工作量、修正后删除代码的工作量以及修正后修改代码的工作量,确定修正后的工作量时,服务器对修正后删除代码的工作量和修正后修改代码的工作量进行求和,然后再减去修正后新增代码的工作量。
此外,上述实施例中服务器以差异代码包括新增代码、删除代码和修改代码对开发人员的目标工作量的确定过程进行示例性介绍,在实际确定开发人员的目标工作量时,服务器可以根据差异代码中实际包括的新增代码、删除代码和修改代码中的至少一项,确定开发人员的目标工作量,具体实现过程可以参见上述实施例,此处不再介绍具体实现过程。
本申请实施例中的代码行数并非代码的物理行,而是指代码中逻辑行的数量,逻辑行是根据程序设计语言语法分析得到的语句数量,逻辑行不包括:类声明代码行、空行、语句中的回车换行、注释代码行、配置文件代码行、注解代码行、部署脚本代码行以及测试代码行等。示例性的,表5中示出了服务器确定代码的逻辑行的几种常见场景。
表5
需要解释的是,上述表5中仅介绍了服务器确定代码中的逻辑行的几种示例性场景,在实际场景中,服务器可以根据代码的实际情况确定代码的逻辑行,此处不做限定。
综上所述,在本申请实施例中,服务器确定在历史代码的基础上,目标代码中包括新增代码、删除代码或修改代码中的至少一项后,服务器可以根据新增代码的代码行数、删除代码的代码行数和修改代码的代码行数中的至少一项,确定差异代码的代码行数。然后,服务器可以对新增代码的代码行数、删除代码的代码行数和修改代码的代码行数中的至少一项进行修正,得到修正后新增代码的工作量、修正后删除代码的工作量或修正后修改代码的工作量中的至少一项。服务器根据修正后新增代码的工作量、修正后删除代码的工作量和修正后修改代码的工作量中的至少一项,以及差异代码的代码行数,确定开发人员的目标工作量。由此,服务器对目标代码中包括的新增代码的代码行数、删除代码的代码行数和修改代码的代码行数中的至少一项进行修正,使得修正后的工作量能够更加精确的衡量开发人员的目标工作量。
在本申请实施例的一种可能的情况下,当服务器根据修正后新增代码的工作量、修正后删除代码的工作量或修正后修改代码的工作量中的至少一项,以及差异代码的代码行数,确定开发人员的目标工作量后,服务器可以将开发人员的目标工作量与人工统计的实际工作量进行比较,以校验服务器确定的开发人员的目标工作量的准确度。其中,实际工作量是指开发人员编辑目标代码实际所用的工作量。
作为一种示例,假设某一目标代码对应的开发人员的实际工作量为2,而服务器确定开发人员的目标工作量为1.8。这种情况下,服务器确定开发人员的目标工作量与实际工作量之间的差值小于预设值(比如,预设值为0.3或0.5等),即服务器可以准确的技术得到开发人员的目标工作量。
假设某一目标代码对应的开发人员的实际工作量为50,而服务器确定开发人员的目标工作量为5。服务器确定开发人员的目标工作量与实际工作量之间的差值大于预设值(比如,预设值为0.5)。这种情况,服务器可以确定开发人员编写的目标代码的代码质量存在问题。比如,开发人员在编写目标代码的过程中,可能由于编写的目标代码的质量存在一些问题而对目标代码进行了多次修改,导致开发人员的实际工作量较大。
此外,服务器还可以获取目标代码的提交信息对应的提交次数和/或提交天数,以根据提交次数和/或提交天数,判断目标代码的代码质量。其中,提交次数是指开发人员对目标代码添加提交信息的总次数。提交天数是指开发人员将目标代码的提交信息添加至代码仓库对应的总天数。
若服务器确定提交次数大于预设次数,和/或,提交天数大于预设提交天数,则服务器可以确定开发人员在编写目标代码的过程中,可能由于编写的目标代码的质量存在一些问题而对目标代码进行了多次修改,从而导致开发人员的实际工作量大于目标工作量。
可以理解的是,上述服务器等为了实现上述功能,其包含了执行各个功能相应的硬件结构和/或软件模块。本领域技术人员应该很容易意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,本申请实施例能够以硬件或硬件和计算机软件的结合形式来实现。某个功能究竟以硬件还是计算机软件驱动硬件的方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明实施例的范围。
本申请实施例可以根据上述方法示例对上述服务器等进行功能模块的划分,例如,可以对应各个功能划分各个功能模块,也可以将两个或两个以上的功能集成在一个处理模块中。上述集成的模块既可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。需要说明的是,本发明实施例中对模块的划分是示意性的,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式。
在采用对应各个功能划分各个功能模块的情况下,上述实施例中涉及的服务器的一种可能的组成示意图,该服务器可以包括:显示单元、传输单元和处理单元等。需要说明的是,上述方法实施例涉及的各步骤的所有相关内容均可以援引到对应功能模块的功能描述,在此不再赘述。
本申请实施例还提供一种服务器,包括一个或多个处理器以及一个或多个存储器。该一个或多个存储器与一个或多个处理器耦合,一个或多个存储器用于存储计算机程序代码,计算机程序代码包括计算机指令,当一个或多个处理器执行计算机指令时,使得服务器执行上述相关方法步骤实现上述实施例中的软件开发工作量确定方法。
本申请的实施例还提供一种计算机可读存储介质,该计算机可读存储介质中存储有计算机指令,当该计算机指令在服务器上运行时,使得服务器执行上述相关方法步骤实现上述实施例中的软件开发工作量确定方法。
本申请的实施例还提供了一种计算机程序产品,该计算机程序产品包括计算机指令,当该计算机指令在服务器上运行时,使得服务器执行上述相关方法步骤实现上述实施例中的软件开发工作量确定方法。
另外,本申请的实施例还提供一种装置,这个装置具体可以是芯片,组件或模块,该装置可包括相连的处理器和存储器;其中,存储器用于存储计算机执行指令,当装置运行时,处理器可执行存储器存储的计算机执行指令,以使装置执行上述各方法实施例中服务器执行的软件开发工作量确定方法。
其中,本实施例提供的服务器、计算机可读存储介质、计算机程序产品或装置均用于执行上文所提供的对应的方法,因此,其所能达到的有益效果可参考上文所提供的对应的方法中的有益效果,此处不再赘述。
通过以上的实施方式的描述,所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将装置的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。上述描述的系统,装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
在本申请实施例各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请实施例的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)或处理器执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:快闪存储器、移动硬盘、只读存储器、随机存取存储器、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述,仅为本申请的具体实施方式,但本申请的保护范围并不局限于此,任何在本申请揭露的技术范围内的变化或替换,都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应以所述权利要求的保护范围为准。
Claims (10)
1.一种软件开发工作量确定方法,应用于服务器,其特征在于,所述方法包括:
获取历史代码和待确定工作量的目标代码;其中,所述历史代码是代码提交者在所述目标代码之前提交至同一代码仓库的,且与所述目标代码属于同一个软件开发项目的代码;
根据所述历史代码和所述目标代码,确定所述目标代码对应的差异代码;其中,所述差异代码包括新增代码、删除代码和修改代码中的至少一种代码;所述新增代码是指与所述历史代码相比,在所述目标代码中新增加的代码;所述删除代码是指与所述历史代码相比,在所述目标代码中删除的所述历史代码中原有的代码;所述修改代码是指所述目标代码中对所述历史代码中的原有的代码进行修改得到的代码;
对所述差异代码的代码行数进行修正,确定修正后的工作量;当所述差异代码包括所述新增代码时,采用新增代码修正系数对所述新增代码的代码行数进行加权计算,得到修正后新增代码的工作量,所述修正后的工作量包括所述修正后新增代码的工作量;其中,所述新增代码修正系数包括第一修正系数、第二修正系数、第三修正系数和第四修正系数中的至少一个;所述第一修正系数是根据所述新增代码的复杂度与所述第一修正系数之间的映射关系确定的;所述第二修正系数是根据新增重复代码的代码行数与所述新增代码的代码行数的比值,与所述第二修正系数之间的映射关系确定的;所述新增重复代码是指所述新增代码中与所述历史代码中的部分代码重复的代码;所述第四修正系数是根据所述新增代码对应的修改文件的数量与所述第四修正系数之间的映射关系确定的;
所述第三修正系数是根据下述任一方式确定:在所述新增代码的提交者与所述新增代码对应的部分所述历史代码的提交者相同时,所述第三修正系数为第一预设系数值;在所述新增代码的提交者与所述新增代码对应的部分所述历史代码的提交者不相同时,所述第三修正系数为第二预设系数值;所述第一预设系数值小于所述第二预设系数值;
根据所述差异代码的代码行数和所述修正后的工作量,确定所述目标代码的目标工作量。
2.根据权利要求1所述的方法,其特征在于,所述差异代码包括所述删除代码,所述对所述差异代码的代码行数进行修正,确定修正后的工作量,包括:
采用删除代码修正系数对所述删除代码的代码行数进行加权计算,得到修正后删除代码的工作量,所述修正后的工作量包括所述修正后删除代码的工作量;其中,所述删除代码修正系数包括第五修正系数和/或第六修正系数。
3.根据权利要求2所述的方法,其特征在于,所述第五修正系数是根据删除重复代码的代码行数与所述第五修正系数之间的映射关系确定的;所述删除重复代码是指所述删除代码中与所述历史代码中的代码重复的代码。
4.根据权利要求2所述的方法,其特征在于,所述第六修正系数是根据下述任一方式确定:
在不包括所述删除代码的所述目标代码的提交者与所述历史代码中原有的所述删除代码的提交者相同时,所述第六修正系数为第三预设系数值;
在不包括所述删除代码的所述目标代码的提交者与所述历史代码中原有的所述删除代码的提交者不相同时,所述第六修正系数为第四预设系数值;所述第三预设系数值小于所述第四预设系数值。
5.根据权利要求1所述的方法,其特征在于,所述差异代码包括所述修改代码,所述对所述差异代码的代码行数进行修正,确定修正后的工作量,包括:
采用第七修正系数对所述修改代码的代码行数进行加权计算,得到修正后修改代码的工作量,所述修正后的工作量包括所述修正后修改代码的工作量。
6.根据权利要求5所述的方法,其特征在于,所述第七修正系数是根据下述任一方式确定:
在所述修改代码的提交者与所述历史代码中对应于所述修改代码的原有的代码的提交者相同时,所述第七修正系数为第五预设系数值;
在所述修改代码的提交者与所述历史代码中对应于所述修改代码的原有的代码的提交者不相同时,所述第七修正系数为第六预设系数值;所述第五预设系数值小于所述第六预设系数值。
7.根据权利要求1-6中任一项所述的方法,其特征在于,所述根据所述差异代码的代码行数和所述修正后的工作量,确定所述目标代码的目标工作量之前,所述方法还包括:
根据所述新增代码的代码行数、所述删除代码的代码行数和所述修改代码的代码行数中的至少一种代码,确定所述差异代码的代码行数。
8.根据权利要求1-6中任一项所述的方法,其特征在于,所述根据所述差异代码的代码行数和所述修正后的工作量,确定所述目标代码的目标工作量之前,所述方法还包括:
获取修正后新增代码的工作量、修正后删除代码的工作量和修正后修改代码的工作量中的至少一项;
根据所述修正后新增代码的工作量、所述修正后删除代码的工作量和所述修正后修改代码的工作量中的至少一项,确定所述修正后的工作量。
9.一种服务器,其特征在于,包括:
一个或多个处理器;
存储器;
其中,所述存储器中存储有一个或多个计算机程序,所述一个或多个计算机程序包括指令,当所述指令被所述服务器执行时,使得所述服务器执行如权利要求1-8中任一项所述的软件开发工作量确定方法。
10.一种计算机可读存储介质,所述计算机可读存储介质中存储有指令,其特征在于,当所述指令在服务器上运行时,使得所述服务器执行如权利要求1-8中任一项所述的软件开发工作量确定方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310373220.8A CN116088934B (zh) | 2023-04-10 | 2023-04-10 | 一种软件开发工作量确定方法及服务器 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310373220.8A CN116088934B (zh) | 2023-04-10 | 2023-04-10 | 一种软件开发工作量确定方法及服务器 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN116088934A CN116088934A (zh) | 2023-05-09 |
CN116088934B true CN116088934B (zh) | 2023-08-29 |
Family
ID=86210579
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202310373220.8A Active CN116088934B (zh) | 2023-04-10 | 2023-04-10 | 一种软件开发工作量确定方法及服务器 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN116088934B (zh) |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101833501A (zh) * | 2010-04-02 | 2010-09-15 | 中国科学院软件研究所 | 一种基于新增需求的代码变更量量化评估方法及其系统 |
WO2018219884A1 (en) * | 2017-05-30 | 2018-12-06 | Dimitris Lyras | Microprocessor including a model of an enterprise |
CN110673836A (zh) * | 2019-08-22 | 2020-01-10 | 阿里巴巴集团控股有限公司 | 一种代码补全方法、装置、计算设备及存储介质 |
CN112181430A (zh) * | 2020-09-29 | 2021-01-05 | 北京云族佳科技有限公司 | 代码变更统计方法、装置、电子设备及存储介质 |
CN112799712A (zh) * | 2021-01-29 | 2021-05-14 | 中国工商银行股份有限公司 | 维护工作量的确定方法、装置、设备、介质和程序产品 |
CN115345531A (zh) * | 2022-10-19 | 2022-11-15 | 平安银行股份有限公司 | 工作量的确定方法、装置、计算机设备及可读存储介质 |
CN115543435A (zh) * | 2022-11-04 | 2022-12-30 | 创优数字科技(广东)有限公司 | 基于开发贡献值的软件开发质量衡量方法、装置及设备 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10365900B2 (en) * | 2011-12-23 | 2019-07-30 | Dataware Ventures, Llc | Broadening field specialization |
-
2023
- 2023-04-10 CN CN202310373220.8A patent/CN116088934B/zh active Active
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101833501A (zh) * | 2010-04-02 | 2010-09-15 | 中国科学院软件研究所 | 一种基于新增需求的代码变更量量化评估方法及其系统 |
WO2018219884A1 (en) * | 2017-05-30 | 2018-12-06 | Dimitris Lyras | Microprocessor including a model of an enterprise |
CN110673836A (zh) * | 2019-08-22 | 2020-01-10 | 阿里巴巴集团控股有限公司 | 一种代码补全方法、装置、计算设备及存储介质 |
CN112181430A (zh) * | 2020-09-29 | 2021-01-05 | 北京云族佳科技有限公司 | 代码变更统计方法、装置、电子设备及存储介质 |
CN112799712A (zh) * | 2021-01-29 | 2021-05-14 | 中国工商银行股份有限公司 | 维护工作量的确定方法、装置、设备、介质和程序产品 |
CN115345531A (zh) * | 2022-10-19 | 2022-11-15 | 平安银行股份有限公司 | 工作量的确定方法、装置、计算机设备及可读存储介质 |
CN115543435A (zh) * | 2022-11-04 | 2022-12-30 | 创优数字科技(广东)有限公司 | 基于开发贡献值的软件开发质量衡量方法、装置及设备 |
Non-Patent Citations (1)
Title |
---|
软件开发项目工作量估算技术的比较研究;王求真;《浙江大学学报(人文社会科学版)》;90-97 * |
Also Published As
Publication number | Publication date |
---|---|
CN116088934A (zh) | 2023-05-09 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US8997065B2 (en) | Automatic modularization of source code | |
US9430359B1 (en) | Identifying and resolving software issues | |
CN111104335B (zh) | 一种基于多层次分析的c语言缺陷检测方法及装置 | |
US20130030764A1 (en) | Application performance measurement and reporting | |
US20110145799A1 (en) | Path-sensitive dataflow analysis including path refinement | |
CN110741354A (zh) | 呈现代码实体调用之间的差异 | |
WO2021087648A1 (en) | Systems and methods for evaluating code contributions by software developers | |
US8078914B2 (en) | Open error-handling system | |
US20070226691A1 (en) | Associating attribute tags with test cases | |
US9274925B2 (en) | Programmable symbolic execution based dynamic checker | |
US8359291B2 (en) | Architecture-aware field affinity estimation | |
US9870314B1 (en) | Update testing by build introspection | |
CN109800152A (zh) | 一种自动化测试方法及终端设备 | |
CN115981980A (zh) | 系统性能测试方法、装置、设备、介质和程序产品 | |
CN116009852A (zh) | 代码构建方法、装置、计算机设备及存储介质 | |
Subotić et al. | Statically detecting data leakages in data science code | |
EP2913758A1 (en) | Loop abstraction for model checking | |
CN116088934B (zh) | 一种软件开发工作量确定方法及服务器 | |
CN109814924B (zh) | 一种软件复杂度计算方法 | |
US20160357655A1 (en) | Performance information generating method, information processing apparatus and computer-readable storage medium storing performance information generation program | |
CN115543435A (zh) | 基于开发贡献值的软件开发质量衡量方法、装置及设备 | |
CN111382052A (zh) | 代码质量评价方法、装置及电子设备 | |
Chiang et al. | Practical floating-point divergence detection | |
CN113010550B (zh) | 结构化数据的批处理对象生成、批处理方法和装置 | |
CN109710538B (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 |