这是阅读笔记第二篇,今天我阅读了人月神话中的未雨绸缪的部分,发现对于大多数项目来说,第一个开发的系统并不合用。它可能太慢、太大,而且难以使用,或者三者兼而有之。这是十分正常的现象,就拿我开发的时候的想法来说,总觉得能开发出来就行了,最才是基础,其他的一下细节方面的优化可以等以后再说。
系统的丢弃和重新设计可以一步完成,也可以一块块地实现。这是个必须完成的步骤,如果将开发的第一个系统丢弃原型发布给用户,可以获得时间,但是它的代价很高。对于用户,使用极度痛苦;对于重新开发的人员,分散了精力;对于产品,影响了声誉,即使最好的再设计也难以挽回名声。
用户的实际需要和用户感觉会随着程序的构建、测试和使用而变化软件产品易于掌握的特性和不可见性,导致了它的构建人员面临着永恒的需求变更。目标和开发策略上的一些正常变化无可避免,事先为它们做准备总比假设它们不会出现要好得多。对于一个广泛使用的程序,其维护总成本通常是开发成本的40%或更多。维护成本受用户数目的严重影响。用户越多,所发现的错误也越多。
Campbell指出了一个显示产品生命期中每月bug数的有趣曲线,它先是下降,然后攀升。缺陷修复总会以(20-50)%的机率引入新的bug。在每次修复之后,必须重新运行先前所有的测试用例,从而确保系统不会以更隐蔽的方式被破坏。同样,设计实现的人员越少、接口越少,产生的错误也就越少。所有修改都倾向于破坏系统的架构,增加了系统的混乱程度。即使是最熟练的软件维护工作,也只是放缓了系统退化到不可修复混乱的进程。