软件研发人员产出度量方法的研究
2023-08-22林子薇唐海涛
林子薇,唐海涛,2,3
(1.中国电建集团华东勘测设计研究院有限公司,浙江 杭州 311122;2.浙江华东工程数字技术有限公司;3.浙江省工程数字化技术研究中心)
0 引言
软件产品开发过程可分为需求分析、设计开发、测试及运维等若干个阶段,软件开发任务通常以团队工作的形式完成[1]。要想做好对软件研发人员的绩效管理工作,就必须充分了解软件研发工作的特性,然后根据这种特性选择最适合软件研发人员的绩效管理方式[2]。通常一个团队中包含产品人员、开发人员、测试人员、运维人员等,各个岗位的人员各司其职,完成自己的本职工作。但在有些企业中,项目团队人员较少,导致职责划分不清晰,团队中的软件研发人员除了完成设计开发工作外,还可能参与其他岗位的工作。
企业为了节约成本,没有针对软件研发人员工作性质建立起科学、客观的产出绩效考核指标[3]。虽然对于软件研发人员参与的设计开发类型的工作,可通过代码管理系统抽取软件研发人员提交代码的量化数据,通过量化数据对设计开发类型的工作进行产出量的评估[4],但对于需求分析、系统测试和运维实施这些类型的工作,目前还没有合理的产出评估方法,仅凭借管理人员的主观判断。只有将工作合理地量化、评估,客观公平的考核,才能保证考核的客观性[5]。企业常常针对不同角色的软件研发人员采用不同的产出评估方法,根据软件研发人员的不同岗位制定相应的指标,此种模式有较大的局限性[6]。此外,如果只从某一个角色的角度来评价身兼多职的软件研发人员的产出,就会存在误评、少评的情况。
为了解决软件研发人员绩效管理中存在的问题,本文以功能点为单位,通过提取软件研发人员在进行不同角色类型工作时所完成的功能点,并对其进行分析,从而综合评估软件研发人员的产出。
1 方法简介
在设计考核关键指标的过程中,工作量相关测量工作是最困难的,我们通过功能点的方法来解决这一问题。功能点分析是指站在客户的立场以软件功能为基础对软件规模进行测量的一种方式,其表示的是功能性的数量[7]。基于功能点,可以更客观、标准地评估软件规模及软件研发人员工作量。
本文提出一种基于功能点,更科学地评估软件研发人员在进行不同类型工作时的产出。其基本方法是:首先获取一定时间内的功能清单和软件研发人员的工作情况,对这些数据进行预处理,计算出代表软件研发人员产出的四个评价指标,分别是:需求分析功能点数、设计开发功能点数、系统测试功能点数和运维实施功能点数。将这四个评价指标给予不同权重即加权,最终得到各个软件研发人员的产出总量。具体如图1所示。
图1 方法简介
2 软件研发人员产出度量方法
2.1 数据采集与预处理
⑴产出数据采集
为方便通过功能点来统计软件研发人员的工作产出,首先需得到软件研发人员的已完成功能点的数据和系统的汇总功能清单数据。通过填写资料获得开发功能清单和登记工作表,其中所述的开发功能清单的内容主要包括开发功能的功能编码、功能名称、功能类型、投入人员信息,登记工作表的内容主要包括软件研发人员信息、角色职责、功能清单、登记时间。
⑵产出数据清洗
由于开发功能清单中的某个功能可能被删除,因此软件研发人员某条登记工作的记录可能存在功能清单缺失的情况。应删除功能清单为空的记录,以便提高数据的有效性,便于后续计算。
⑶产出数据合并
软件研发人员在同一角色职责下可能会有多条记录,即同一功能可能存在于多条登记工作的记录中。将软件研发人员在同一角色职责下的登记工作记录中的功能清单进行合并,做去重处理,删去具有相同编码和名称的功能。
2.2 指标计算
⑴遍历完成预处理的登记工作表格,标记各软件研发人员不同角色职责的功能清单中各个功能的功能类别。
所述功能类别包括内部逻辑文件(Internal logical file)、外部接口文件(External interface file)、外部输入(External input)、外部输出(External output)、外部查询(External query)[8]。
如某软件研发人员在设计开发功能清单中功能i的类别为内部逻辑文件(ILF),则该功能的类别标识数组ai如下:
同样,如果功能类别为外部接口文件(EIF),那么标识功能类型的数组为:
⑵计算各软件研发人员不同角色职责的功能清单中各功能的实际投入人员数量。
通过开发功能清单查询各功能的计划投入人员,在登记工作表中查询各计划投入人员是否在此角色职责下登记了该功能,如果已登记了,则计数+1,否则不计数。最终得到某软件研发人员的各个角色职责下的功能清单中各功能有几人登记,设功能i的实际投入人员数量为Ni。
⑶根据功能清单中各功能的类别和实际投入人员数量,计算该软件研发人员在该功能产出的功能点数。
所述功能点(Function Point)是用来表示软件规模的单位,功能点数用来表示一个软件的规模。估算功能点计数是用来确定项目规模的一种功能点计数方法。根据行业标准《SJT11619-2016 软件工程功能规模测量NESMA 方法》,在执行估算功能点计数时,内部逻辑文件、外部接口文件、外部输入、外部输出、外部查询类型功能的功能点数可被定义为7、5、4、5、4[8]。
所以,某软件研发人员在该功能产出的功能点数计算如下:
⑷将该软件研发人员某角色职责的功能清单中的产出功能点数累加,求得该软件研发人员在该角色职责下的产出总量,单位为功能点(Function point)。例如,某软件研发人员在设计开发下的产出总量计算如下:
同样的方法,求得各软件研发人员分别在四个角色职责下的产出总量,包括需求分析、设计开发、系统测试和运维实施。
2.3 产出评估
根据各角色职责的生产率,来评价不同角色职责产出能力的差异,以此来定义不同的权重指标。生产率是指软件研发人员单位时间内开发完成的功能点数量,单位为功能点/人日。如在相同时间内,需求分析和系统测试完成的功能点数往往比设计开发多,因此,完成同一个功能的产出在不同的角色职责下是有差异的。所以在对四个指标进行加权计算时,以设计开发的生产率为基准,设计开发的生产率除以各个角色职责的生产率作为各指标的权重。最后每个软件研发人员的总产出OP由四个指数加权得到,其定义如下:
3 方法应用
使用本文中所述的软件研发人员产出度量方法在R 公司的某团队中应用,现有四名人员共同完成一个系统的开发,包括A、B、C、D 四个功能,以软件研发人员1在A功能中投入的工作为例:
⑴A 功能的类型为内部逻辑文件,所以A 功能的功能点数为7;
⑵A功能由软件研发人员1、软件研发人员2和软件研发人员3共三个人共同完成,所以A功能的Ni为3;
⑶软件研发人员1 在A 功能中投入的工作包括需求分析、设计开发、系统测试和运维实施,软件研发人员2和3在A功能中投入的工作均为设计开发。
由此得到:
在功能A 中,软件研发人员1 在需求分析、系统测试、运维实施方面产出的功能点数为7,在设计开发方面产出的功能点数为
各角色的生产率参考了《中国软件行业基准数据》(CSBMK-202110),其中,需求分析、设计开发、系统测试、运维实施的生产率分别为10、2、10、15。
由此可得,软件研发人员1 在功能A 的工作工程中,总产出OP计算如下:
其他人员和其他功能中的数据可同理得到。
各人员在各功能点上的角色对应如表1所示。
表1 R公司功能任务表
可得到产出结果如表2:
表2 产出结果表
由产出结果得出,产出量:软件研发人员3>软件研发人员1>软件研发人员2>软件研发人员4,由此得到软件研发人员3绩效最好,软件研发人员4绩效最差。
4 结束语
本文通过提出一种从功能点维度评估软件研发人员产出的方法,使产出评估的颗粒度更细化;填补了需求分析、系统测试和运维实施三种角色职责产出评估的空白;考虑了同一软件研发人员有多种角色职责的情况,可使得对软件研发人员的产出评估更加全面;不同角色职责的软件研发人员可在同一标准下进行产出评估,便于在企业级对软件研发人员进行产出评价;引入计算机辅助计算,避免了主观判断,更加科学和公平。