1.4 以概率的方式表示估算结果
如果考虑到3/4的软件项目最终都会超出它们的估算结果,那么任何给定的软件项目按时完成且不超出预算的可能性都不是100%。在我们认识到项目按时完成的可能性不是100%后,就会想到一个明显的问题:“如果可能性不是100%,那会是多少?”这是软件估算的核心问题之一。
按照常规,对软件的估算结果是以单点数值(与数值范围或带有概率的数值相区别,译者注)表示的,例如“这个项目要花14周时间。”像这类过分简化的单点估算值是没有意义的,因为它们并没有指出与该单点数值相关联的概率。单点估算值所隐含的是如图1-1所示的概率——只可能取给出单点值所代表的结果。

图1-1 单点估算值假定实际结果等于计划结果的概率是100%。这是不切实际的
单点估算值通常是假装估算的目标。不过有时候,它代表的是经过深思熟虑的估算结果,只是该结果以某种方式剥离了有意义的概率信息。
提示#3 看到单点“估算结果”时,要问清楚该数字是一个估算值还是一个事实上的目标。
要进行准确的软件估算,就要认识到软件项目受到各种不确定性的影响。这些各种各样的不确定因素共同决定了项目的结果遵循概率分布——某些结果更有可能出现,而某些结果不太可能出现,而且在概率分布的中间位置的一簇结果是最有可能的。可以预期项目结果的分布看起来会像常见的钟型曲线,如图1-2所示。

图1-2 通常假设软件项目结果遵循钟形曲线。这一假设是不正确的,
因为项目团队完成任何给定工作量的效率不可能无限地提高
曲线上的每个点都表示项目刚好在那个日期完成(或成本刚好那么多)的可能性。曲线下的面积加在一起等于100%。这种概率分布意味着结果可能会出现在相当大的范围内。但是认为结果在均值(average value,mean value)两侧对称分布的假设是不成立的。项目进展的速度是有限的,这意味着概率分布在左侧的尾部会被截断,而不会像钟形曲线的左侧那样延伸那么远。虽然项目执行得有多好会受到限制,但它执行得有多差则是没有限制的,所以概率分布在右侧确实会有一条很长的尾部。
图1-3提供了对软件项目结果概率分布情况的准确表示。

图1-3 对软件项目可能结果的准确描述。项目执行得有多好会受
到限制,而项目中可能出现的问题数目则是没有限制的
纵向虚线表示的是“名义(nominal)”结果,也就是“50/50”结果——项目结果有50%可能比它好,也有50%可能比它差。在统计学中,该结果也称为“中值”(median value)结果。
图1-4展现了表达这种概率分布的另一种方式。图1-3展现的是在特定日期交付的概率,而在图1-4中展现的是在特定日期及其之前交付的概率。

图1-4 软件项目在特定日期或之前(或不高于特定成本或工作量)交付的概率
图1-5以另一种方式展现了项目的概率结果。你可以从图中看到,类似于“18周”的单点估算值省略了在18周以内交付的可能性只有10%这一重要信息。类似于“18~24周”的估算值能提供更多信息,可以传达出有关项目结果可能范围的有益信息。

图1-5 所有单点估算值都是和一个概率相关联的,这种关联可能是明确的,也可能是隐含的
提示#4 看到单点估算值的时候,应认识到该数值的概率并不是100%。要问清楚该数值的概率。
有多种方法可以表达与估算值相关联的概率。可以在单点数值上附加一个“置信度”:“我们认为24周完成的进度表有90%的置信度”。也可以同时使用最好情况和最差情况来说明估算值,从而隐含了概率:“我们估算最好情况下只需要18周,最差情况下则需要24周。”还可以直接用一个范围而不是单点数值来给出估算结果:“我们估算需要18~24周。”重点在于所有估算值中都包含着概率,无论这个概率是明确给出的还是隐含的。明确给出的概率是准确估算的标志之一。
可以对估算的最乐观情况或最悲观情况,或者是对由两者确定的范围内的任何一点做出承诺。重要的是要清楚做出的承诺处于估算范围的什么位置,以便你相应地制定计划。



