本章重点是介绍不同规模项目对构建的影响,同时还分享了面对不同规模的项目应如何应归处理的方法论。

术语阐明

构建活动表示开发中一系列活动,其中包括详细设计、编码、联调、单元测试。

27.1 交流和规模

随着项目成员数目的增加,交流路径的数目也随之增加,而且是乘性增加,交流路径的条数大致正比于人数的平方。如图27-1所示。image.png
交流的路径越多,需要花费在交流上的时间也会越多,因交流而出错的机会也越大。因此面对非常大的项目需要采取一些组织技术来改善交流效率,而最常用的方法就是采用正式的文档。

27.2 项目规模的范围

评估项目规模的方法之一是考虑项目团队的规模

27.3 项目规模对错误的影响

随着项目规模的变化,缺陷种类和缺陷数量也会随之变化,而且缺陷增加的数量倍数并不于项目规模增大倍数一致,表27-1显示的是不同规模项目中,缺陷密度的预期范围。因此对于大项目,需要花更多的精力,才能维持错误率。
image.png
微信图片_20210330104836.jpg

27.4 项目规模对生产率的影响

随着项目规模和团队规模的增大,组织方式对生产率的影响也将随之增大。生产率主要取决于使用的软件类型、人员素质、编程语言、产品复杂度等因素

那么项目多大时团队规模会开始影响生产率呢?团队各有多少人?
据报告说明:完成项目的小型团队的生产率要比大型团队高出39%。小项目2人,大项目3人。

表27-2就项目规模和生产率的一般关系做了近一步说明(包括非程序员的支持工作计入):
image.png

27.5 项目规模对开发活动的影响

活动比例和项目规模

项目越大,所需的交流就会越多,所需进行的各项活动种类也会有很大的变化
图27-3显示了不同规模项目中各种开发活动所占比例:
image.png
不同活动的比例发生变化,是因为它们对不同规模的项目中要性不一样。
随着项目规模的增加,下面这些活动的工作量增长超过线性:
image.png
不过不管项目规模如何,有些技术总是很有价值的:有训练的编码实践、code review、好的工具支持等。

程序、产品、系统和系统产品

代码行数和团队规模并不是影响项目大小的仅有因素,还有更敏感的影响因素是最终软件的质量和复杂度。

程序:最简单的一类软件。只有开发者使用或者其他少数人非正式地使用
产品:稍复杂的一类程序软件。提供给除了开发者以外的人使用。开发环境与使用环境不同,发布前需要充分地错误、还需要人维护。
系统:一组能够结合起来工作的程序。各个组成部分之间会通过接口之前集成起来。
系统产品:具有单一产品特征,又拥有一套系统所具备的成分。

如果没有认识到它们在精致度和复杂度上的区别,是导致估算出偏差的一个常见原因。
比如你依据自己写2000行代码的经验来估计开发一个2000行代码的程序需要要的时间,那你只是预估了开发过程中总耗时的 65%,因为你没有考虑把“非构建”(交流、接口设计、规格说明)活动的用时考虑进去。
所以,估算误差,其产生的原因在于不理解“项目规模对开发大型程序所造成的影响”。

方法论和规模

方法论无处不在,从我们早上从被窝里起床去上班到我们工作编程实现需求功能,无不用到方法论。面对越大越复杂的项目,就越要有意识地关注方法论。建造摩天大楼的方法和搭狗窝的方法是不一样的,不同规模的软件项目也是如此。因此,成功的项目计划人员会明确为大型项目选择合适的策略。

项目越大越正规,那么文件数量必然是会越多、越正规的,因为需要协调的人员会越多。我们可以在图27.1可知,交流路径随着项目成员增加是乘性的,交流路径的条数大致正比于人数的平方。
**
当然,方法论并不是越多越好,使用什么样的方法论,需要在实践中考虑你的项目实际规模和类型,然后找出“适量级”方法论。

要点

image.png