软件开发计划_敏捷软件开发实践:估算与计划读书笔记103第 1 章 计划的目的...

《敏捷软件开发实践:估算与计划》第 1 章 计划的目的,重点和要点的思维导图及文字内容。

695b60e2bc2c70636b7c809567399dbf.png

第 1 章 计划的目的

1.0 前言

Planning is everything. Plans are nothings.

无论一个软件开发项目的规模与结果如何,估算(Estimating)和计划(Planning)对于项目的成功都是至关重要的。

计划可以指导我们的投资决策;计划可以帮助我们了解在项目特定的阶段需要哪些人参与其中;计划还可以帮助我们了解项目是否在正常进行,从而可以交付用户所需要和期望的功能。

没有计划的话,项目就可能面临无数问题。

计划又是困难的,而且做出的计划常常会出错。

这导致两个极端:要么根本不做任何计划;要么认为计划必须尽善尽美而在计划中投入大量的精力。

不确定性锥形(cone of uncertainty):在项目的可行性分析阶段,对进度估算的偏差往往可能达到 60%-160%。即一个预期需要 20  周的项目实际上花费的时间可能在 12 周 ~ 32 周之间。而在写下需求后,估算的偏差仍可能达到 +/- 15%。这时预期的 20 周意味着实际上会花 17 周 ~ 23 周。

项目管理协会(PMI)对估算的渐进准确性的看法:PMI 建议首先建立数量级估算(order of magnitude estimate),误差范围为 + 75%~ - 25%;然后建立概要估算(budgetary estimate),误差范围为 + 25% ~  - 10%;最后建立确定性估算(definitive estimate),误差范围为 + 10%~ - 5%。

1.1 为何要进行估算和计划 1.1.0 前言

计划——尤其是持续进行的迭代式的计划——是对价值的探求。

计划就是尝试给产品开发的总体问题:“我们要构建什么?”找到最佳答案。

好的计划过程通过5个活动来支持对价值的探求:

1. 减少风险

2. 降低不确定性

3. 提供更好的决策支持

4. 建立信任

5. 传递信息

1.1.1 减少风险

若项目的风险过高,我们可能会不启动该项目。

有时我们可以通过早期的预防措施来控制某些功能可能包含的风险。

项目团队可以选择马下采取措施消除风险,或者记下这个风险,通过增加工作量的估算值,或用一个范围来表示工作量,以描述更大的不确定性和风险。

1.1.2 降低不确定性

迭代式的计划过程能够帮助团队优化产品的愿景。

大多数项目所面临的最关键风险是开发出错误的产品,但在绝大多数项目中这一风险都被忽视了。

一个失败的项目的标准一定是:项目中没有人提出比最初的需求列表更好的想法。

我们希望鼓励项目团队定期对项目投资、进度表和功能决策进行重新评估。

1.1.3 提供更好的决策支持

估算和计划可以帮助我们进行决策。

估算既可以帮助我们决定是否启动某个项目,也可以帮助我们确保正在开发可能具有最高价值的项目。首先,公司需要对进度和花费进行估算来判定预期的项目是否值得推进。其次,公司还需要项目的估算和计划,来决定推进哪个项目。最终,他们可能会决定推出其中一个,两个都推进,或者由于项目的代价都太高而都中止。

有时候,项目成员的配备规格比项目的计划安排更为重要。

项目计划时所做出的许多决策都是折中后的决定。在每个项目中,我们都会在开发时间和费用之间进行折中 。

我们经常在功能特性与投入的精力、成本和时间之间进行类似的折中。

1.1.4 建立信任

频繁地、可靠地交付承诺的功能可以在产品的开发人员和客户之间建立信任。

可靠的估算使得可靠的交付成为可能。

客户需要估算来做出关键的优先级和折中决策,帮助决定功能特性开发到何种程度。只有开发人员的估算被证实可靠,客户才会愿意在项目开发的早期就做出这种折中。

可靠的估算允许开发人员以可持续的节奏进行工作而使他们受益:代码质量更高且缺陷更少。

1.1.5 传递信息

计划描述完成项目的可能路径之一,可以传递针对项目的期待。

计划可以展示和传递一组对于项目预期的基线,但并不能保证在特定日期和特定成本内完成一组精确的功能集合。

1.2 优秀的计划是什么

优秀的计划就是项目相关方认为足够可靠、可以作为决策基础的计划。

在项目后期,为了对决策支持依旧有效,这个计划需要变得更为精确。

这个计划是有用的,只要它能够预测项目中实际会发生的事情。

这个计划虽然不精确,但是在整个项目过程中可以对它定期进行修正。

1.3 敏捷计划是什么

本书是关于敏捷计划活动而不是敏捷计划文档的。

计划文档(Plans)是文档或者图表,它们只是我们对项目在不确定的将来会如何展开的理解的快照。

计划活动(Planning)是一项活动。敏捷计划将重点从作为结果的计划文档转向了计划活动的过程。

敏捷计划文档是一个我们不仅愿意、而且渴望修改的计划文档。

我们修改计划文档,并不仅仅是为了变更本身,而是因为我们学到一些新的东西或者避免了一个错误:可能是我们了解到用户更需要这个功能而不是那个功能,或者可用性比设想的更重要,或是用新语言开发需要的时间比预期的更长等。

敏捷计划需要易于修改的计划文档。

我们对计划文档的修改并不代表是对日期的改变,日期有可能改也有可能不改。修改计划文档但不改变日期的情况有:放弃某个功能;缩减某个功能解决的问题的范围;在项目中增加一些人员等。

我们应该承认不可能在一个项目开始时就对它进行完整的定义,所以不会在项目的开始时完成所有的计划活动。

敏捷计划是均衡分布在项目的整个过程之上的。发布计划活动设定了交付阶段,然后是一组迭代的计划活动。这整个过程会在项目中重复好几次。

定义敏捷计划时:更关注计划活动而不是计划文档。鼓励修改。产生易于修改的计划文档。延续到整个项目周期。

1.4 小结

估算和计划是关键的,但也是困难和容易出错的。项目早期给出的估算没有项目晚期给出的估算准确。不确定性锥形显示了这一逐渐细化的过程。

计划的目的在于找到一个最佳答案,用于回答“要构建什么”这一产品开发的总体问题。这一答案则综合了功能、资源和进程安排。一个可以减少风险、降低不确定性、为可靠的决策提供支持、建立信任和传递信息的计划流程为解答这个问题提供了支持。

优秀的计划应该足够可靠,可以作为对该产品和项目进行决策的基础。敏捷计划更关注计划的过程而不只是创建一个计划文档。它鼓励修改、产生易于修改的计划文档,并且延续到整个项目周期。


版权声明

本人所读图书的版权属于原著者和译者。这里仅为个人学习使用。但由本人学习整理所形成的音频、图片、文字和视频等的版权为本公众号拥有,任何人不得未经授权转载。 如果你觉得本文有用,欢迎分享给其他人。谢谢。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
第一部分 敏捷开发 第1 敏捷联盟 1.1 敏捷联盟 1.2 原则 1.3 结论 参考文献 第2 极限编程概述 2.1 极限编程实践 2.2 结论 参考文献 第3 计划 3.1 初始探索 3.2 发布计划 3.3 迭代计划 3.4 任务计划 3.5 迭代 3.6 结论 参考文献 . 第4 测试 4.1 测试驱动的开发方法 4.2 验收测试 4.3 结论 参考文献 第5 重构 5.1 素数产生程序:一个简单的重构示例 5.2 结论 参考文献 第6 一次编程实践 6.1 保龄球比赛 6.2 结论 第II部分 敏捷设计 第7 什么是敏捷设计 7.1 软件出了什么错 7.2 设计的臭味——腐化软件的气味 7.3 “Copy”程序 7.4 保持尽可能好的设计 7.5 结论 参考文献 第8 单一职责原则(SRP) 8.1 单一职责原则(OCP) 8.2 结论 参考文献 第9 开放—封闭原则(OCP) 9.1 开发—封闭原则(OCP) 9.2 描述 9.3 关键是抽象 9.4 结论 参考文献 第10 Liskov替换原则(LSP) 10.1 Liskov替换原则(LSP) 10.2 一个违反LSP的简单例子 10.3 正方形和矩形,更微妙的违规 10.4 一个实际的例子 10.5 用提取公共部分的方法代替继承 10.6 启发式规则和习惯用法 10.7 结论 参考文献 第11 依赖倒置原则(DIP) 11.1 依赖倒置原则(DIP) 11.2 层次化 11.3 一个简单的例子 11.4 熔炉示例 11.5 结论 参考文献 第12 接口隔离原则(ISP) 12.1 接口污染 12.2 分离客户就是分离接口 12.3 接口隔离原则(ISP) 12.4 类接口与对象接口 12.5 ATM用户界面的例子 12.6 结论 参考文献 第III部分 薪水支付案例研究 第13 COMMAND模式和ACTIVE OBJECT模式 13.1 简单的COMMAND 13.2 事务操作 13.3 UNDO 13.4 ACTIVE OBJECT模式 13.5 结论 参考文献 第14 TEMPLATE METHOD模式和STRATEGY模式:继承与委托 14.1 TEMPLATE METHOD模式 14.2 STRATEGY模式 14.3 结论 参考文献 第15 FACADE模式和MEDIATOR模式 15.1 FACADE模式 15.2 MEDIATOR模式 15.3 结论 参考文献 第16 SINGLETON模式和MONOSTATE模式 16.1 SINGLETON模式 16.2 MONOSTATE模式 16.3 结论 参考文献 第17 NULL OBJECT模式 17.1 结论 参考文献 第18 薪水支付案例研究:第一次迭代开始 18.1 介绍 18.2 基于用例分析 18.3 反思:我们学到了什么 18.4 找出潜在的抽象 18.5 结论 参考文献 第19 薪水支付案例研究:实现 19.1 增加雇员 19.2 删除雇员 19.3 时间卡、销售凭条以及服务费用 19.4 更改雇员属性 19.5 支付雇员薪水 19.6 主程序 19.7 数据库 19.8 薪水支付系统设计总结 第IV部分 打包薪水支付系统 第20 包的设计原则 20.1 如何进行包的设计 20.2 粒度:包的内聚性原则 20.3 稳定性:包的耦合性原则 20.4 自顶向下设计 20.5 稳定依赖原则 20.6 稳定抽象原则 20.7 结论 第21 FACTORY模式 21.1 依赖关系环 21.2 可替换的工厂 21.3 对测试支架使用对象工厂 21.4 使用对象工厂有多么重要 21.5 结论 参考文献 第22 薪水支付案例研究(第2部分) 22.1 包结构和表示法 22.2 应用公共封闭原则(CCP) 22.3 应用重用发布等价原则(REP) 22.4 耦合和封装 22.5 度量 22.6 度量薪水支付应用程序 22.7 对象工厂 22.8 最终的包结构 22.9 结论 参考文献 第V部分 气象站案例研究 第23 COMPOSITE模式 23.1 示例:组合命令 23.2 多重性带是非多重性 第24 OBSERVER模式—回归为模式 24.1 数字时钟 24.2 结论 24.3 OBSERVER模式 参考文献 第25 ABSTRACT SERVER模式、ADAPTER模式和BRIDGE模式 25.1 ABSTRACT SERVER模式 25.2 ADAPTER模式 25.3 BRIDGE模式 25.4 结论 参考文献 第26 PROXY模式和STAIRWAY TO HEAVEN模式:管理第三方API 26.1 PROXY模式 26.2 STAIRWAY TO HEAVEN模式 26.3 可以用于数据库的其他模式 26.4 结论 参考文献 第27 案例研究:气象站 27.1 Cloud公司 27.2 Nimbus-LC软件设计 27.3 结论 参考文献 27.4 Nimbus-LC需求概述 27.5 Nimbus-LC用例 27.6 Nimbus-LC发布计划 第VI部分 ETS案例研究 第28 VISITOR模式 28.1 VISITOR设计模式系列 28.2 VISITOR模式 28.3 ACYCLIC VISITOR模式 28.4 DECORATOR模式 28.5 EXTENSION OBJECT模式 28.6 结论 参考文献 第29 STATE模式 29.1 有限状态自动机概述 29.2 实现技术 29.3 STATE模式 29.4 应该在哪些地方使用状态机 29.5 作为GUI中的高层应用策略 29.6 结论 29.7 程序 参考文献 第30 ETS框架 30.1 介绍 30.2 框架 30.3 框架设计 30.4 TEMPLATE METHOD模式的一个例子 30.5 TASKMASTER构架 30.6 结论 参考文献 附录 附录A UML表示法I:CGI示例 A.1 课程登记系统:问题描述 A.2 小结 参考文献 附录B UML表示法II:统计多路复用器 B.1 统计多路复用器的定义 B.2 结论 参考文献 附录C 两上公司的讽刺小品 附录D 源代码就是设计 索引
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值