人月神话读书笔记(11)----未雨绸缪

来源:互联网 发布:ai软件视频教程 编辑:程序博客网 时间:2024/05/17 23:18

未雨绸缪


图为纽约湾的Tacoma桥由于空气动力学上的错误设计而坍塌的新闻照片。1940年11月7日中午时分,建成仅仅数月的Tacoma桥坍塌,这是桥梁工程史上著名的悲剧。在做项目设计和规划时,一定要考虑到各种不确定的变化因素,灵活适应多变的环境,否则很可能酿成悲剧后果。

不变只是愿望,变化才是永恒。

试验性工厂和增大规模

  1. 对于大多数项目,第一个开发的系统并不合用。它可能太慢、太大,而且难以使用,或者三者兼而有之;
  2. 系统的丢弃和重新设计可以一步完成,也可以一块块地实现。所有大型系统的经验都显示,这是必须完成的步骤;
  3. 为舍弃而计划,无论如何,你一定要这样做;

唯一不变的就是变化本身

  1. 变化是与生俱来的,不是不合时宜和令人生厌的异常情况;
  2. 开发人员交付的是用户满意程度,而不仅仅是有形的产品;
  3. 用户的实际需要和用户感觉会随着程序的构建、测试和使用而变化
  4. 软件产品易于掌握的特性和不可见性,导致它的构建人员面临永恒的需求变更
  5. 目标上的一些变化无可避免,事先为它们做准备总比假设它们不会出现要好得多;

为变更设计系统

  1. 最重要的措施是使用高级语言和自文档技术,以减少变更引起的错误;
  2. 变更的阶段化是一种必要的技术。每个产品应该有数字版本号,每个版本都应该有自己的日程表和冻结日期,在此之后的变更属于下一个版本的范畴;

为变更计划组织架构

  1. 现在软件编程小组失败的主要原因是管理控制的太少,而不是太多
  2. 不愿意为设计书写文档的原因,不仅仅是由于惰性或时间压力。相反,设计人员通常不愿意提交尝试性的设计决策,再为它们进行辩解
  3. 为变更组建团队比为变更进行设计更加困难;
  4. 只要管理人员和技术人才的天赋允许,老板必须对他们的能力培养给予极大的关注,使管理人员和技术人才具有互换性
  5. 项目目标、进展和管理问题必须在高级人员整体中得到共享

前进两步,后退一步

  1. 在程序发布给顾客使用之后,并不会停止变化。发布后的变更被称为“程序维护”;
  2. 软件维护主要包含对设计缺陷的修复,通常包含了更多的新增功能,它通常是用户能察觉的;
  3. 对于一个广泛使用的程序,其维护总成本通常是开发成本的40%或更多
  4. 缺陷修复总会以固定(20%—50%)的几率引入新的BUG。所以,整个过程是前进两步,后退一步;
  5. 每次修复之后,必须重新运行先前所有的测试用例;
  6. 使用能消除或至少能指明副作用的程序设计方法,会在维护成本上有很大的回报;
  7. 设计实现的人员越少、接口越少,产生的错误也就越少

前进一步,后退一步

  1. 模块总数量随版本号的增加呈线性增长,但是受到影响的模块数量随版本号的增加呈指数增长;
  2. 系统软件开发是减少混乱度的过程,所以它本身是处于亚稳态的。软件维护是提高混乱度的过程;
0 0