评价一个软件项目(这里主要指合同项目)管理优劣的主要指标是质量、进度和成本,这已为业界所公认。软件项目的质量管理问题自有一套完整的体系,包括定义良好的过程、评价准则和控制方法。软件项目的计划进度反映了用户对项目在时间方面的要求,从我国的实际情况看,这种时间要求往往不是由项目的设计开发方根据对项目规模、性质以及资源等的估算提出来的,而往往是由用户根据其使用要求、市场需求,有的甚至是根据某种行政或政治上的需要提出来的。这两种要求有时有很大的差距,用户的要求往往偏紧。这是多数软件项目不能按时完成的重要原因。软件项目的成本主要是人力资源成本,而人力资源成本直接与投入项目的人力和项目的计划进度相关。大多数情况下,项目经理对人力资源的控制能力是很有限的(更多的权力在项目经理的上层),项目经理能够控制的就是进度。所以,从某种意义上说,控制好了进度,成本基本上也就控制了。项目经理想要在既定的项目工期内完成任务,那么控制项目的计划进度是非常关键的,是至关重要的。但是,在实践中,我们看到有很多项目没能按计划完成,项目经理在执行中往往不知道如何控制计划,发觉了计划已经偏离,但不知道偏离有多大,影响有多严重,如何采取有效的措施来纠正。
有一个不是笑话的例子:
老板对项目经理小张说:“这个项目对公司和客户都很重要,你们要好好干,在四个月内完成,要让客户满意。四个月后我来看你们的成果,为你们庆功。”
按规定每个周末小张都要向老板汇报项目进展情况,头三个月里,小张每次汇报都说,挺好,进展顺利。
四个月时,老板兴冲冲地问小张:“项目完成了吧,可以请客户验收了吧?”
小张却说:“还有一些小问题,再给我半个月时间,应该没问题。”
四个半月后,小张在汇报中说:“出了点小意外,我们正在解决,我们保证在一星期内解决。”
五个月后,小张说:“我们在测试时遇到了点小麻烦,还需半个月。”
六个月后,小张说:“我们正在修改一些重要功能,还需半个月。”
七个月时,小张说:“我们正在完善一些重要功能,还需半个月。”
八个月后,项目总算完成了,老板请客户来验收,客户碍于情面同时也觉得再也等不起了,就通过验收,投入试用。
过了试用期,客户却不按合同规定付款,他们说,试用中发现了好多问题,要到这些问题都解决了才能付款。
比起那些因为计划拖延得太多而放弃的项目来,小张他们还算不错。但公司可能赚不到钱了,客户的项目建设计划泡汤了,应用也受到严重影响,公司的客户满意度和在业界的声誉也受到了影响。
为什么小张他们一而再,再而三地突破计划呢?很大的可能是小张在每次周汇报时不能正确地判定当时的状态,发现问题后,又不能评估问题的严重程度,当然也不会提出切实的解决措施。
本文提出的积分法就是要让项目经理和项目成员能在检查点处定量地评估当时的进度状态,定量地分析问题的严重程度,预测后果和辅助项目经理和项目成员对进度问题作出正确的决策。
1、用积分法控制进度
积分法的基本思想是,为项目中每一项任务按项目计划给出一个绩效指标―计划积分,在项目执行过程中的每一个检查点(一般应在里程碑点,或按月/周定期)按执行计划的绩效得出实际积分,通过这两个积分值的比较,分析、评估项目的进度状态。
项目总的工作量 100
图1 项目EXP的计划图
让我们用一个例子来说明这种方法是如何控制进度的。一般在作项目计划时都应该绘制计划图(如GANTT图,可用MS PROJECT绘),图1是项目EXP(本文用的案例)的GANTT图。图中还包含了人力的安排,在表示每项任务工期的杠的两端标出了该项任务的开工和完工日期。绘制这种图的难度在于对整个项目工作量的估计和对各项任务工作量的分配,关于这方面的问题,在不少资料上有介绍,本文不予讨论。从图1可以看出,这是一个需要100人-周工作量,分成9项任务的项目。开发工期为9个半月。下面我们讨论积分法的工作步骤。
2、 积分和累计积分
1) 计算每个月(时间粒度可因项目而异)的计划积分
由计划图中各项任务的工作量及其工期和项目的总工作量可计算出每个月的计划
积分,计算公式如下:
某月的计划积分 = (该月计划的各项任务的工作量之和 / 项目的总工作量)* 100
例如本例,在5月份,有两项工作:部分的需求和部分的设计工作,所以
5月份的积分 = (用于做需求的工作 + 用于做设计的工作)/ 100 * 100
= (2 * 18 + 3 * 31)/ 7 = 18.4
工作量的单位是人-周,每周7天
2) 计算每个月的计划累计积分
某月的计划累计积分 = 该月上个月的计划累计积分 + 该月的计划积分
不言而喻,第一个月的计划累计积分等于它当月的计划积分。
例如本例,5月份的计划累计积分 = 4月份的计划累计积分 + 5月份的计划积分
= 14.6 + 18.4 = 33
在图2的下方列出了项目EXP各个月份的计划积分和计划累计积分。
3、 进度状态图
状态是特定时刻的状况,所以,计划进度状态图是项目在某个特定时间(即检查点,如
里程碑、月底、周末等)计划执行的状况图。图2是项目EXP在6月底的进度状态图。
1) 估算各项任务实际完成的工作量
估算各项任务到给定时刻实际已完成的工作量并在进度状态图中标示(在计划工期
杠的下面画杠。如果由于时间粒度原因在进度状态图上不能足够精确地标示出任务已完成的工作量,那么需要将任务做进一步的分解,这将在后面讨论)。在本例中,项目到6月底完成了规划任务,但需求、设计和实现任务都未完成计划,如图2所示。
2) 计算实际完成积分
计算在给定时间以前每个月的实际完成积分,方法与计算月的计划积分一样,即
当月完成积分 = (该月实际完成的各项任务的工作量之和 / 项目的总工作量)* 100
月 份
任务-人 3 4 5
6
7 8 9 10 11 12 工作量
(人-周)
规划-1 3.1 4.4 4
需求-2 3.28 5.18 15
设计-3 5.1 6.16 20
实现-3 6.5 7.21 20
测试-2 7.10 10.22 30
文档-2 10.15 10.26 3
培训-1 10.29 11.11 2
交付-2 11.15 12.2 5
总结 12.15 1
当月计划积分 5.6 9 18.4 18 15.2 8.8 8.8 10 4.6 1.6 100
计划累计积分 5.6 14.6 33 51 66.2 75 83.8 93.8 98.4 100
实际完成积分 5.6 9 16.4 10
累计完成积分 5.6 14.6 31 41
图2 六月底进度状态图
3) 计算实际完成累计积分
当月的累计完成积分 = 该月上个月的累计完成积分 + 该月的实际完成积分
项目EXP的这两项积分分别列出在图2的最后两行中。
4、 进度状态分析
1) 进度状态分析图
进度状态分析图是将项目在给定时间实际完成任务的状况和原来计划作比较,并用
图形表示之。进度状态分析图是以X轴作时间轴,Y轴作积分轴画出的计划积分和实际完成积分的两条折线。项目EXP在6月底的进度状态分析图如图3所示。
2) 进度状态分析
进度状态分析要回答如下的问题:
1/ 当前计划是拖延了还是超前了?拖延/超前了多少?
2/ 若继续按当前的工作效率工作,那么完成整个项目还需多长时间?
3/ 若要按原计划完成项目,需采取什么措施?
下面我们来逐个分析这三个问题。
A. 偏离分析
回答问题1/的分析称为偏离分析,偏离是指在给定时间的实际累计积分与计划累计积分之差,即
DPT = AAG ?C PAG
其中:DPT为偏离,AAG为实际累计积分,PAG为计划累计积分。
所以,若DPT > 0, 则表示计划超前了;反之,若DPT <0,则表示计划拖延了。
偏离量 DFR = (DPT / PAG)* 100%,若DFR <0,则DFR是计划拖延量;反之,若
DFR > 0,则DFR是计划超前量。例如,项目EXP在6月底时
DPT = 41-51 = -10
DER = -10/51*100% = -19.61%
说明计划是拖延了,拖延了19.61%。有时用工作量表示偏离量更直观,根据偏离、偏离量和积分的定义,显然有
DERw = DPT / 100 * WRKt (人-周)
式中:DERw为用工作量表示的偏离量
WRKt为项目的总工作量
同样,DERw <0, 表示拖延量;DERw > 0,表示超前量。用于本例的情况,
DERw = -10 / 100 * 100 = -10 (人-周),即计划拖延了10个人-周。
B. 影响分析
用于回答问题B的分析称为影响分析。若在检查点以后继续用当前的工作效率去
完成项目实际剩余的工作量还需要多长时间呢?如果用单位时间内完成的积分来表示工作效率的话,我们有
Tr = (100-AAG)/ EFC (月)
式中:Tr为用当前的工作效率完成剩余工作所需的时间
EFC为当前工作效率,其量纲是“积分/月”(时间粒度可因项目而异)
这里,对“当前工作效率”有多种不同的计算方法,下面是可能的三种:
1/ 用最靠近检查点的单位时间内的实际工作效率作为当前工作效率,我们用EFC1表示。以项目EXP为例,当前工作效率即为6月份的实际工作效率,从图2中的数据得到EFC1
= 10;
2/ 用从上一次的检查点到现在的检查点之间的平均实际工作效率作为当前工作效率,我们用EFC2表示;
3/ 用从项目开始时间到现在的检查点之间的平均实际工作效率作为当前工作效率,我们用EFC3表示。以项目EXP为例,当前工作效率即为3、4、5、6四个月的平均实际工作效率,从图2中的数据得到
EFC3 =(5.6 + 9 + 16.4 + 10)/ 4 = 10.25。
当然,也可用检查点以后的计划工作效率来计算EFC,选择计算EFC的方法的原则
应该是用最接近真实的工作效率。
现在可以来回答提出的问题了:
1/ Tr1 =(100 ?C AAG)/ EFC1 = (100 ?C 41)/ 10 = 5.9 (月)
这就是说,若用6月份的实际工作效率去完成剩余的工作,则还需要5.9个月的时间。
2/ Tr3 =(100 ?C AAG)/ EFC3 = (100 ?C 41)/ 10.25 = 5.76(月)
即若用以前的平均实际工作效率去完成剩余的工作,则还需要5.76个月的时间。 字串5
以上两种结果的差别不大,都要拖一点计划,但拖得都不多,因为原计划的工期是9个半月,现在已过了4个月,还剩下5.5个月。
但是,这样的分析可能存在一定的不合理性:在6月底检查时发现拖进度19.6%,未做任何改进,预测到完工时进度仅拖后2%(=(4+5.76-9.5)/9.5*100%)。为什么?问题出在我们计算工作效率的方法上,从上面对EFC的定义我们发现,这样定义的效率是相对于时间的(单位时间内完成的积分),而没有考虑人力资源的因素,即没有考虑是多少人在单位时间内完成的积分。我们从项目EXP的计划图可以看出,到项目后期,按这种意义的工作效率将下降,特别是11、12两个月。这显然是跟人力资源有关(比如,项目前期,安排的人都是全职的,而到后期,则有的人就兼职了)。所以,上面的估计是偏乐观的。如果我们用另一种方法来计算EFC,比如说,用从检查点起到项目终了之间的平均计划工作效率作为EFC,那么情况又会怎样呢?由图2中的数据我们可得到
EFC = (15.2 + 8.8 + 8.8 + 10 + 4.6 + 1.6)/ 5.5 = 8.91
Tr = (100 ?C AAG)/ EFC = 59 / 8.91 = 6.62 (月)
可以看出,如果不在原来计划的基础上提高工作效率的话,那么完成任务就要拖延计划一个多月。哪种情况更符合实际,让项目经理去决策吧。
C. 措施分析
回答问题3/的分析称为措施分析。这个问题的答案比较复杂,因为它涉及的因素比
较多,项目经理应该根据具体情况采取有效的措施。这里只回答一个问题:若要按原计划完成任务,应该有怎样的工作效率?这是影响分析的逆问题,即
EFC = (100 ?C AAG)/ (项目总工期 ?C 检查点以前的时间)
用到项目EXP上,EFC =(100 ?C 41) / (9.5 ?C 4)
= 10.73 (积分/月)
就是说还是需要再提高一点工作效率才能按时完成任务。
5、 任务分解
从上面的讨论我们可以看到,进度控制的关键是要做好WBS(工作分解结构)工作,一定要将项目分解到可控制的程度。第二是,一定要及时准确地记录计划进度的数据,画出计划图、进度状态图。我们在第3章估算任务实际完成积分时曾讲到,若任务比较复杂,在项目的进度状态图上不能足够精确地表示其计划进度,这时需要将任务再作进一步的分解。一般任务可以进一步分解为活动,与任务一样,画出活动的计划图、进度状态图。在活动计划
图和进度状态图上,时间粒度一般可用“天”,对大多数有一定规模的项目来说,应用WBS技术将任务分解到用“天”作时间单位来描述活动的工作内容,可以说做到“可控制”的程度了,如果还不能控制,则将活动再进行分解,直到可控制为止。我们将项目EXP中的设计任务分解成9项活动,同时,将它的计划图和6月底的进度状态图画在同一张图上,如图4所示。
从图4中的数据我们得知设计任务到6月底时才完成任务的85%,由此反映到图2中,我们可以比较精确地确定设计任务实际完成的积分值(约为17)。
要指出的是,若任务中各项活动的执行出现较多的并行情况,这与基本上是顺序执行的项目是不同的。所以,在分析任务的进度状态时不能简单地套用项目进度状态分析的方法。