第四讲 估算、计划和跟踪

Kaleido Lv4

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 概要设计

估算的第一步是做出一个概要设计:

  • 概要设计不是真实设计
  • 与已有产品/组件相关联
  • 定义能够产生期望功能的产品元素
  • 估算你计划构造之物的规模
  1. 对于大多数的项目,概要设计都应相对较快地完成:例如,1000LOC 以内程序,试着将概要设计时间限制在 10 到 20 分钟之内
  2. 为了做出概要设计,需要确定产品功能,以及产生这些功能所需的程序组件/模块:“如果我有以下这些部件,我可以构造这个产品”
  3. 然后,将这些程序组件/模块与你以前写的程序相比较,估算它们的规模
  4. 最后,将程序组件/模块估算综合给出总规模

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