杨 帆,刘雅萱*,唐海涛,3
(1.中国电建集团华东勘测设计研究院有限公司,杭州 311122;2.浙江华东工程数字技术有限公司,杭州 311122;3.数字城市CIM技术浙江省工程研究中心,杭州 311122)
在项目管理领域,项目经理大多使用资源日历来协调人力资源、派发工作任务。项目资源日历展示了项目资源的可利用时间,本文的项目资源指人力资源。在项目管理过程中,如果项目经理对项目组内员工的工作任务、工作量和可利用时间不够了解,极易出现工作任务分配不均的情况,这就导致不同员工的工作量饱和程度有较大差别。所以资源日历的存在是极为必要的,它可以展示人力资源的工作任务、工作量和可利用时间,为管理者后续进行资源配置和任务分发提供了参考。它可以起到两个主要的作用,首先保证每个员工能够有适当的工作饱和度,其次是保证每个员工的工作都是有效率的。
近年来,项目管理领域的研究者探究了多种人力资源调度、配置的方法,如基于改进CNN 的人力资源配置方法[1]、针对多技能人员项目调度问题提出的改进布谷鸟搜索算法[2]、在紧急状态下协同配置护理人员的网格化管理方法[3],还讨论了资源受限情况下的多任务调度问题[4]。但是对资源日历看板的研究较少,目前项目的资源日历一般采用人工编辑的方式,这种方法存在如下不足:
(1)人工编辑资源日历的工作量较大,而且随着项目任务的变化,需要不断调整,资源日历无法自动更新。
(2)人工编辑资源日历只能确定短期内的资源投入,无法预测多个功能模块或者整个项目的资源投入。
(3)人工编辑资源日历时一般会对任务所需的工作量进行人工估算,而人工估算工作量一般不够精准,仍然会导致工作任务分配不均的情况。
(4)人工编辑的资源日历无法定量计算任务的完成进度。
基于以上不足,本文提出了一个基于功能点的自动生成项目资源日历的方法,适用于软件工程行业。该方法无需人工编辑资源日历,只需要拆分项目的功能,并且批量设置每个功能的投入人员,即可自动生成项目的资源日历。
1.1.1 识别范围和边界
根据招投标文件、用户需求说明书、需求规格说明书、原型图、详细设计说明书或数据库设计说明书等项目文档,识别所开发应用程序的范围,即包括在功能点统计范围内的功能需求/规格说明的集合。功能点是用来表示项目规模的计量单位。功能点计数可以对项目的规模进行测量,在确定项目的工作量投入和成本时,功能点数是一个必要的参数[5]。
一旦确定了范围就可以定义边界,边界是应用程序和其用户的概念接口。其中,用户包括操作当前应用程序的人和与当前应用程序有交互的其他软件或硬件。
1.1.2 识别功能
在需求范围内,识别应用程序的数据功能和事务功能,形成项目各功能模块的功能清单。数据功能是指从用户的视角看到的数据的一个逻辑分组,包括内部逻辑文件(internal logical file)和外部接口文件(external interface file)两类。事务功能是指被用户看作属于一个工作单元的一连串动作,包括外部输入(external input)、外部输出(external output)和外部查询(external inquery)三类[5]。
1.1.3 设置投入人员和开发状态
为功能清单中的每个功能设置投入人员,并选定开发状态,即开发完成或未开发完成。投入人员具有角色属性,角色包括需求分析、设计开发、系统测试和运维实施四类。设置功能清单中各功能的投入人员和开发状态不仅包括初始化设置,还包括随着项目进展更新各功能的投入人员和开发状态。
基于上述功能清单及投入人员等数据,统计出项目的人力资源列表。首先,筛选项目下所有的投入人员。然后根据不同的投入人员,筛选某投入人员在该项目下参与的所有功能模块。根据员工的角色属性和员工参与的功能模块,生成该员工负责的任务的名称。如员工A的角色属性是“设计开发”,他参与了“成本管理”和“计划管理”模块的工作,那么员工A有两个任务,分别是“设计开发-成本管理模块”和“设计开发-计划管理模块”。
计算生成资源日历所需的数据指标,包括每个员工的工作任务所需工作量、计划完成日期、计划开始日期和任务完成进度。
1.3.1 所需工作量
根据不同的功能模块,筛选某投入人员在功能模块下参与的功能清单,并计算完成各个功能模块所需的工作量。具体包括:
(1)根据不同的功能模块j,筛选某投入人员i在该功能模块参与的功能清单Listi。
(2)功能清单Listij中,检查每一个功能的功能类别(EI、EO、EQ、ILF、EIF),以及该功能下与该投入人员具有相同角色的投入人员数量N。
(3)根据该功能的功能类别,得到该功能的功能点数A。假设该功能的功能类别为内部逻辑文件,则该功能的功能点数A为7[5]。
(4)计算出该功能在该投入人员的角色职责下的平均功能点,例如该投入人员的角色为设计开发,该功能共投入了3个角色为设计开发的人员,则该投入人员在该功能所消耗的功能点为。
(5)计算得出该投入人员i在功能模块j下所有功能投入的功能点之和Uij。
(6)计算得出该投入人员i完成功能模块j所分配功能的工作量
其中,VAF和C分别为项目设置的规模调整因子和各个角色的生产率。
1.3.2 计划开始时间和计划完成时间
其中,任务的计划完成时间(PF)需要人工填写。计划开始时间(PS)可以人工填写,也可以根据填写的计划完成日期和求得的工作量得到计划开始日期。
1.3.3 任务完成进度
根据功能清单中各功能开发状态,计算实际完成进度(AC),包括单个任务j的完成进度ACij和员工的总体任务完成进度(ACi)。
首先,计算i员工功能清单Listij中的功能点总数FPij,
其次,计算i员工功能清单Listij中的已完成的功能点总数FPij_finished,
员工i的单个任务j完成进度ACij计算如下:
统计员工i任务进度为100%的任务数量Task_finished和任务总数Task,则员工i的总体任务完成进度ACi计算如下:
根据上述公式所得到的投入人员、功能模块、计划开始日期、计划结束日期、工作量信息、任务完成进度等信息生成该项目的资源日历。资源日历生成之后,用户可对自动生成的资源日历进行检查,根据实际需求重新调整计划开始日期和计划结束日期。
使用本文提出的项目资源日历计算方法在K项目中应用,现有5名人员共同完成一个软件项目,包括A、B、C、D、E 五个功能模块。表1截取了部分数据。
表1 示例数据
根据上述项目资源日历计算方法,得到该项目的资源日历,如图1所示。
图1 项目资源日历看板
本文重点介绍了一种软件项目的资源日历计算方法,包括数据准备、资源统计、指标计算、资源日历生成。该方法可以很好地支持项目管理者查看项目人力资源的可利用时间,帮助项目管理者更好地进行任务分配和人员调度。