风险管理中有个很重要的就是对风险的定量分析,而常用的方法就是蒙特卡洛模拟的方法进行。为了加深这种方法的印象,特假设一个案例进行模拟。
假设一个新项目开始,估算的功能点数为1000个功能点,假设人均的功能点生产率为20个功能点/天。建设进度和工作量完全成正比,考虑到进度计划中的关键资源和关键路径相关约束。工作量余量取10%,这样我们大概可以计算从:
总工作量 = 1000/20 = 50×1.1 = 56 人天的工作量。
假设项目一共有3个项目成员来完成,大概工期为 20 天即,一个月。
现在项目有两个风险,根据以往项目或历史类似项目的收集经验数据,在整个项目的进行过程总,需求的规模经常发生变化,但一般变化范围都在20%以内,具体的分布图如下:(如图表示在100个样本中需求规模为原规模1.1倍的有25个样本)
另外一个风险是项目中有一个编码成员是新手,前面已经经过一段时间学习,现在你无法确定该成员到了第三周编码阶段后该成员生产效率是否达到要求,根据历史经验数据和对比项目样本,得到如下数据(如图表示在100个样本中能够达到正常效率0.7倍的有40个样本)
由于现在规模和工作量都存在着风险和不确定性,要在一个月完成项目基本是不可能的任务。现在你想达到有8成把握能够完成任务,那究竟工期应该多长,或向老板多要多少时间呢?
在这个时候就需要对规模和生产率两个数据同时进行模拟,以模拟出相关的工作量数据,这里我们就需要分别对规模和生产率生产相关的随机数,而这两个指标的随机数的生成应该基于历史的经验数据和样本,而不能用标准连续的随机数来生成。
这里在Excel和SPSS中都可以生产相关的随机数,如在SPSS中生成相关的数据脚本为:
input program.
loop #I=1 to 100.
compute x=uniform(1).
end case.
End loop.
End file.
End input program.
execute.
rank variables=x(a)/rank/print=yes/ties=mean.
recode rx(98thru 100=1.25) into group.
recode rx(91thru 97=1.2) into group.
recode rx(81thru 90=1.15) into group.
recode rx(61thru 80=1.1) into group.
recode rx(36thru 60=1.05) into group.
recode rx(1thru 35=1) into group.
execute. 在生成了相关的随机数后就可以计算出工作量的最后值(部分数据):
得到相关的曲线拟合图为:
得出的初步结论为工作量<80占的概率为59%,工作量<85的概率为73%,工作量<90的概率为82%.
预计工期 = 90*1.1/3 = 33 人天。
所以要达到8成把握能够完成任务,项目工期至少应该为1个半月以上。
注:以上是基于很大假设,要进行定量分析前期必须收集足够多的经验数据,这样才有模拟的基础,才能够保障模拟的有效性。 |