用人月来衡量一项工作的规模是一个危险和带有欺骗性的神话,因为它暗示了人员数量和时间是可以相互替换的。(注:人月是用来衡量工作量的,规模是通过功能点或代码行等方式来衡量的,规模除以个体生产率后可以得到人月数据)。这里进一步来描述人月不能互换的原因,首先是任务能否拆解,及时能够分解任务间是否存在相互的依赖和约束,分解后是否增加会增加相应的沟通,以及由于分解任务而引入的分解和后期集成等额外的工作量。

假设人月可以互换,则为了缩减周期需要投入更多的人,为了让更多的人都有事可做就需要细分任务,细分任务自然增加了系统分解和后期集成的工作量,细分任务间无法避免的依赖和关联自然增加了沟通的成本和工作量。而且由于任务的细分需要引入文档等重量级的沟通工具,原始的需求信息在需求,设计,开发,测试等多个环节传递很难真正保证我们需要的概念完整性。

如果一个系统按功能点估算有200个功能点,按一个功能点200-300行代码计算,整个系统规模在5万行代码左右。这是一个中小型的项目或系统。如果按照总生产率80行/天计算,则总工作量在20人月左右。根据非线性关系我们可以估计理想情况或者说性价比最好的情况是投入5人4个月完成,当人数增加一倍时候进度只能压缩到3个月。当人数再增加到15个人的时候,进度压缩到2个月,这个时候增加再多的人就已经没有用了,对于这种规模的的系统,2个月可能就是进度极限了。

我们讲当规模增长的时候,工作量并不是非线性增长,周期也不是非线性缩短。其中工作量的增加前面已经讲了第一个重点增加在了系统分析设计,需要将复杂的系统进行分解;其二在后期集成和测试,需要将分解的各个功能模块集成和组装。对于产品规模增加的时候,对于详细设计和编码阶段工作量可以任务是一种线性的增加,非线性部分指数增加的工作量都体现到了前期的分析设计和后期的集成和测试上面。

当我们假设是线性的时候,我们主观的去缩减了这两头的工作量。如何缩减了系统分析和总体设计的工作量,则可能带来整个产品结构的不稳定,后果往往是整个产品推倒重来;如果缩减了后期集成和测试的工作量,则不可避免的是导致项目延期。乐观主义者喜欢假设我们开发的是零缺陷的系统,但对复杂的软件系统而言这仅仅是个神话。

用人月这一观念来衡量项目进度带有欺骗性。因为他使得项目看上去好像人力和时间是可交换的。如果时间不够,那么增加人手就可以加快进度。但是这个衡量方式忽略了新增加人手的培训时间、队员之间的沟通时间等等因素,结果就是,盲目的增加人手只会导致项目落后。所以问题是,如何使得项目进度不落后;要想使得项目进度不落后,就要制定出合理的项目进度。所以,问题是,如何制定出合理的项目进度。

posted on 2023-05-15 10:20  夜的第七章i  阅读(15)  评论(0编辑  收藏  举报