1. 进度滞后的原因
- 不真实的假设—一切都将运作良好
- 假设人和月可以互换,将进度与工作量相互混淆
- 缺少耐心持续估算工作
- 缺少对进度的跟踪和监督
- 进度滞后,盲目增加人手
2. 乐观主义
- 系统编程的进度安排背后的第一个错误假设是:一切都将运作良好,每一项任务仅花费它所“应该”花费的事件
- 文中提到“对于创造者,只有在实现过程中,才能发现我们构思的不完整性和不一致性。”
可以引申理解为设计时的乐观主义,导致实现的进度估算错误。
- 我们的构思时有缺陷的,因此总会发现bug。
- 单个任务“不会延迟”具有限定概率,但包含大量任务的大型工程,其一切正常的概率十分小
3. 人月
- 暗示人员数量和时间可以相互替换的错误工作量单位:人月
- 用人月作为衡量一项工作的规模是一个危险和带有欺骗性的神话
- 任务分解的独立性(人员、功能、交流沟通、培训等多方面的依赖),影响到人月的互换性
- 对于复杂任务,一味添加更多人手,实际上是延长时间进度
4. 系统测试
-
系统测试进度的安排是编程中最不合理的部分。需要的时间依赖于错误、缺陷的数量及其发现错误、缺陷的时间成本。
-
经验法则:1/3计划;1/6编码;1/4 构建测试和早期系统测试;1/4 系统测试,所有的构建已完成。
对于测试驱动开发的系统,单元测试用例先于编码实现,是否可以综合减少测试成本??有待实践检验,个人认为可以。
-
测试不足造成的二次成本远高于其他开销
5. 空泛的估算
- 一个有趣的事实:某项任务的计划进度,可能受限于顾客要求的紧迫程度,但紧迫程度无法控制实际的完成情况。但无法在进度内完成时,顾客只能选择等待或者接受有缺陷的产品
- 解决方案:
- 开发推行生产率图表、缺陷率图表、估算规则等,最终使整个组织从过往数据中获益
书中到此处没有详述该方案实施的办法,有人能推荐相关资料吗?
- 坚持自己的对进度估算的经验和直觉,其强于从期望派生出的结果要强
“从期望派生出的结果”,怎么理解这句话???若有人能解释一下,劳烦评论,不胜感激。
6. 重复产生的进度灾难
- 向进度落后的项目中增加人手(备注:尤其是不熟悉当前工作的人手),只会使进度更加落后。
- 进度落后时,重新安排进度。
书中提及“在新的进度安排中分配充分的时间,以确保工作能仔细、彻底地完成,从而无需重新确定时间进度表”,其中“无需确定时间进度表”怎么得出的结论??明明已经重分配时间了,那还未开始的进度不就被压缩了,这不就增加了后续工作的滞后概率了吗???
- 削减任务。延期导致的二次成本非常高时的可行办法
书中没有提到加班,不知道是不是老外没这习惯。不过从个人经验看,加班的确是一种廉价的办法(当前国情下)。求勿喷。。。