第四讲 估算、计划和跟踪
1 估算
1.1 关于估算
- 估算目的是给各类计划提供决策依据
- 估算对象(规模【1w行代码】、时间和日程)
- 估算的常见困惑:
- 项目交付日期、团队组成等都确定了,估算的意义在哪里?
- 哪种估算方法好?
- 哪个估算结果更好(靠谱)?
- 究竟该如何做好估算?
1.1.1 估算练习1
- 计算一组实数的均值和标准差,用 JAVA 程序读取文本文件中的一组实数,然后计算其均值和标准差。
- 尝试估算代码行和所需开发过程(分钟):
- 代码行?30 行
- 开发实践?20 分钟
1.1.2 关于估算的一些事实
- 估算是一种主观猜测
- 没有任何人知道准确的数字究竟是什么
- 估算能力很难提升
- 多项实证研究表明,是否使用估算模型(例如COCOMO)并没有显著差异【为什么?从某种角度猜测,人是具有主观能动性的】
1.2 部分相关知识点回顾
- 软件开发是知识工作——可重复性不高
- 软件工程师是知识工作者,需要被激励
- 激励理论的两大因素:
- V(价值):完成项目所能获得的收益
- E(期望/把握):内心对完成项目的把握
- 激励程度:$M = V * E$
1.3 PROBE估算方法
1.3.1 PROBE原理示例
估算一栋房屋的建造成本,大部分人没有概念。然而,在早期规划中,会有如下认识/需求:
| 序号 | 用途 | 相对大小及数量 |
|---|---|---|
| 1 | 厨房 | 1 个中等大小 |
| 2 | 卧室 | 1 个大卧室;2 个小卧室 |
| 3 | 卫生间 | 1 个中等大小;1 个小型 |
| 4 | 书房 | 1 个中等大小 |
| 5 | 客厅 | 1 个大客厅 |
1.3.1.1 相对大小矩阵
1.3.2 PROBE估算流程
1.4 概要设计
估算的第一步是做出一个概要设计:
- 概要设计不是真实设计
- 与已有产品/组件相关联
- 定义能够产生期望功能的产品元素
- 估算你计划构造之物的规模
- 对于大多数的项目,概要设计都应相对较快地完成:例如,1000LOC 以内程序,试着将概要设计时间限制在 10 到 20 分钟之内
- 为了做出概要设计,需要确定产品功能,以及产生这些功能所需的程序组件/模块:“如果我有以下这些部件,我可以构造这个产品”
- 然后,将这些程序组件/模块与你以前写的程序相比较,估算它们的规模
- 最后,将程序组件/模块估算综合给出总规模
1.4.1 估算练习2
- 计算一组实数的均值和标准差,用 JAVA 程序读取文本文件中的一组实数,然后计算其均值和标准差。
- 试完成概要设计之后,尝试估算代码行和所需开发过程(分钟):
- 代码行?
- 开发实践?
- 在两次估算练习中,我们普遍倾向于信任练习2中的结果,即提升了激励理论中的E值(期望/把握)
- 我们追求的往往不是准确的结果,而是值得信任的结果
1.5 整合多个估算结果
整合一个开发人员做的多个估算:
- 累积各个部分的估算
- 进行一次线性回归计算
- 计算一个预测区间
多个开发人员可以整合独立进行的估算,通过以下方式:
- 进行单独的线性回归预测
- 将计划的规模或者时间相加
- 将个人范围的平方相加,再对其计算平方根获得预测区间
1.5.1 整合多个估算结果之后的估算误差:示例
- 对于一项估算精度为 ±50% 的 1000 小时的工作,估算范围就是从 500 到 1500 小时
- 如果估算被分成独立的 25 个部件,每个存在 50% 的误差,那么
- 总时间会和前面一样是 1000 小时
- 估算范围会是从 900 到 1100 小时
- 当估算多个部件时,总的误差会比各个部件误差的总和要小
- 误差趋于抵消了
- 假设没有共同的偏差
估算要点之一:尽可能划分详细一些
- Title: 第四讲 估算、计划和跟踪
- Author: Kaleido
- Created at : 2024-04-16 14:14:45
- Updated at : 2024-04-16 15:50:41
- Link: https://redefine.ohevan.com/2024/04/16/2024-spring-软件质量与管理-04/
- License: This work is licensed under CC BY-NC-SA 4.0.
Comments