人月神话笔记-焦油坑、人月神话
焦油坑
程序、编程系统、编程产品、编程系统产品
- 程序
- 本身是完整的
- 可以在指定的平台运行
- 作为单个程序员的生产率的评估标准
- 编程产品:
- 可以被任何人运行、测试、修复和扩展的程序
- 可以在多种操作平台上运行,供多套数据使用
- 要求
- 必须按照普遍认可的风格编写
- 有合理的基本算法
- 进行彻底的测试
- 完备的文档
- 成本至少是程序成本的3倍
- 编程系统
- 在功能上能相互协作
- 具有规范的格式
- 可以进行交互的程序
- 的集合
- 要求
- 按照一定的要求编制
- 语法和语义上于精确定义的接口一致
- 符合预先定义的资源限制–内存空间、输入输出设备、计算机时间
- 程序必须和其他单元一道,进行完备的组合测试
- 编程系统产品
- 成本至少是程序成本的9倍
- 大多数系统的开发目标
职业乐趣
- 创建事务的纯粹快乐(创造的快乐)
- 开发对他人有用的东西(对他人的帮助)
- 整个过程体现出的强大魅力(多铆蒸刚)
- 持续学习的快乐(非重复)
- 易于驾驭的介质上工作(权利?)
职业苦恼
- 追求完美
- 由他人设定目标,提供资源、信息(无法控制全部)
- 琐碎的bug等重复性工作
- 大量工作后的成功显得陈旧过时
人月神话
美食的烹调需要时间;片刻等待,更多美味,更多享受。
Good cooking takes time.If you are made to wait,it is to serve you better,and to please you.
进度安排不合理的原因:
- 对估算技术缺乏有效的研究。(不真实的假设:一切都将运作良好)
- 错误的将进度于工作量相互混淆(假设人和月可以互换)
- 对自己的估算缺乏信心
- 对进度缺少跟踪和监督
- 意识到进度偏移时,下意识的反应为加人
乐观主义
所有的编程人员都是乐观主义者。
进度安排背后的第一个错误:一切都将运作良好,每一项任务仅花费它所“应该”花费的时间。
人月
成本随着开发产品的人数和时间的不同,有着很大的变化。
进度却不同。
用人月作为衡量一项工作的规模是一个危险和带有欺骗性的神话。
人月暗示着人员数量和时间是可以交换的。
任何时间仅在以下情况可以交换:
某个任务可以分解给参与人员,并且他们之间不需要交流。
比如割小麦。
对于可以分解但是需要 沟通和交流的任务,必须在计划工作中考虑沟通和交流的工作量。
沟通的负担:
- 培训
- 培训不可分解,随着人员数量呈线性变化
- 交流
- 交流必须单独协作,工作量:n(n-1)/2
系统测试
系统测试进度的安排往往是最不合理的。
没有哪个单元比系统测试和调试更受顺序限制影响。
比较合理的安排:
1/3计划
1/6编码
1/4构件测试和早期系统测试
1/4系统测试、所有的构件已完成
空泛的估算
- 发行并推行生产率图表、缺陷率图表、估算规则等。
- 坚信自己的估算。
重复生产的进度灾难
向进度落后的项目中增加人手,只会使进度更加落后。