人月神话阅读笔记03
削足适履
这一章主要是要解决项目投资与磁盘空间和内存之间的矛盾,但是这个矛盾在电脑硬件发展到现在的层次已经可以忽略掉了。
提纲挈领
1. 软件项目的要求:目标、用户手册、内部文档、进度、预算、组织机构图和工作空间分配。
2. 即使是小型项目,项目经理也应该在项目早期规范化上述的一系列文档。 这一章强调文档重要性,但并没有将一些教条主义的道理让你相信文档的重要性,而是给项目经理给出了实实在在的操作步骤。
未雨绸缪
1. 对于大多数项目,第一个开发的系统并不合用。它可能太慢、太大,而且难以使用,或者三者兼而有之。系统的丢弃和重新设计可以一步完成,也可以一块块地实现。这是个必须完成的步骤,如果将开发的第一个系统丢弃原型发布给用户,可以获得时间,但是它的代价很高。对于用户,使用极度痛苦;对于重新开发的人员,分散了精力;对于产品,影响了声誉,即使最好的再设计也难以挽回名声。
2. 用户的实际需要和用户感觉会随着程序的构建、测试和使用而变化。
3. 软件产品易于掌握的特性和不可见性,导致了它的构建人员面临着永恒的需求变更。
4. 目标和开发策略上的一些正常变化无可避免,事先为它们做准备总比假设它们不会出现要好得多。
5. 对于一个广泛使用的程序,其维护总成本通常是开发成本的40%或更多。
6. 维护成本受用户数目的严重影响。用户越多,所发现的错误也越多。
7. Campbell指出了一个显示产品生命期中每月bug数的有趣曲线,它先是下降,然后攀升。
8. 缺陷修复总会以(20-50)%的机率引入新的bug。
9. 在每次修复之后,必须重新运行先前所有的测试用例,从而确保系统不会以更隐蔽的方式被破坏。
10. 同样,设计实现的人员越少、接口越少,产生的错误也就越少。
11. 所有修改都倾向于破坏系统的架构,增加了系统的混乱程度。即使是最熟练的软件维护工作,也只是放缓了系统退化到不可修复混乱的进程。
干将莫邪
项目经理应该制订一套策略,以及为通用工具的开发分配资源,与此同时,他还必须意识到专业工具的需求。
祸起萧墙
1. 一天一天的进度落后比起重大灾难,更难以识别,更不容易防范和更加难以弥补。
2. 根据一个严格的进度表来控制项目的第一个步骤是制订进度表,进度表由里程碑和日期组成。
3. 里程碑必须是具体的、特定的、可度量的事件,能进行清晰能定义。
4. 如果里程碑定义得非常明确,以致于无法自欺欺人时,程序员很少会就里程碑的进展弄虚作假。
另外一面
1. 对于软件编程产品来说,程序向用户所呈现的面貌与提供给机器识别的内容同样重要。
2. 即使对于完全开发给自己使用的程序,描述性文字也是必须的,因为它们会被用户和作者所遗忘。
3. 文档能在整个软件开发的生命周期对程序员克服懒惰和进度的压力起促进激励作用,但向编程人员成功地灌输对待文档的积极态度是一件困难的事情。
4. 为了使文档易于维护,将它们合并至源程序是至关重要的,而不是作为独立文档进行保存。
没有银弹
人狼的传说可能有人听过也可能没听过,人狼是一种具有人和狼两种特征的恐怖生物,而银弹是消灭它的一种最有效的子弹,如果看过《吸血鬼传说》也许就能和容易的理解这一点。作者将软件开发比作人狼,而将提高软件开发效率的方法比作银弹。作者预言未来十年,想要试图通过寻找一种有效地银弹将软件开发效率提高一个甚至几个数量级,这种银弹不可能出现。
没有银弹这篇文章里作者列举出了当时一些非常先进的技术或思想理念,例如Ada和其他高级编程语言、面向对象编程、人工智能、专家系统、“自动”编程、图形化编程、程序验证、环境和工具、工作站等。虽然这些先进技术在一定程度上提高了软件开发的效率,但是始终没有达到银弹的效果。距离作者的预言已经过去有20多年了,纵观现在的软件开发领域,虽然新技术层出不穷,但是还是没有一种银弹能够让软件开发产生一次革命。
焦油坑依然存在
个人觉得:软件工程的焦油坑在将来很长一段时间内会继续困扰着人们。由于软件系统多变性和错综复杂性,这个行业只能是一步一个台阶的往上爬,而出现银弹的希望在我们可以想象的时间范围内是非常渺茫的。我们将长期与焦油作斗争。
这本书为什么会成为经典,与作者不可磨灭的思想分不开关系。