第三章 准确估算的价值

news/2025/3/16 9:22:24/文章来源:https://www.cnblogs.com/lhxBlogs/p/18774583

3.1 高估更好还是低估更好

3.1.1 反对高估的观点

管理人员和其他项目干系人有时会担心,如果项目被高估了,帕金森法则就会起作用——也就是所有可以用来完成工作的时间都会被浪费掉。因此,为了避免帕金森法则,某些管理人员会有意识地 "压缩" 这估算值。

另一个顾虑是 "学生综合征",这种综合症是指如果给开发人员过多的时间,他们就会一直拖延到项目快结束的时候才匆忙赶工,结果反而很可能无法按时完成项目。

与低估项目所需时间相关的一个动机是希望在开发团队中灌输紧迫感。

3.1.2 反对低估的观点

低估会造成很多问题。这些问题主要包括:

  • 降低项目计划的有效性:过低的估算会在特定活动的计划中引入不准确的假设,造成无法进行有效的计划。它们会导致对团队规模的计划出现误差,例如使计划组建的团队规模小于实际的需要。它们还会破坏小组之间进行协调的能力——如果小组在他们之前声明的应该完成任务的时候还没有完成,其他小组就无法将自己的工作和他们的工作进行集成。
  • 从统计角度降低了按时交付的可能性
  • 未做好前期基础工作导致项目实际结果比名义上可以取得的结果更差:低估会导致在开发中的上游(upstream)活动(如需求和设计)上花费的时间太少
  • 项目后期破坏性的变因导致项目实际结果比名义上可以取得的结果更差:一旦项目进入 "延误" 状态,项目团队就要进行大量额外的活动;而如果项目是 "按计划的时间" 进行,就不需要进行这些活动。下面是这类活动的一些例子:
    • 与高级管理层举行更多的状况会议来讨论如何让项目回到正轨
    • 在项目后期进行频繁的重估,仅仅只是为了确定何时可以完成项目
    • 由于错过交付日期而向重要客户道歉(包括会见这些客户)
    • 准备中期版本以支持客户演示、展览会等。如果软件按时完成,就可以使用软件本身而不再需要中期版本
    • 由于项目进行得太久,会更多地讨论哪些需求是一定要增加的(以便砍掉不必要的的需求来节省时间,译者注)
    • 修正以前为了缓解进度压力而采用的投机取巧方法所导致的问题。

所有这些活动都有一个重要的共同特点,就是如果项目可以按照计划达到目标,它们就根本不需要进行。这些额外的活动浪费了项目中本来可以用于生产性活动的时间,使得项目花费的时间要比在准确估算和计划的情况下更长。

3.1.3 权衡各种观点

学生综合症可能会影响到软件项目,但可以采用积极的任务跟踪和缓冲管理(也就是项目控制),而不是人为降低估算值

我相信帕金森法则确实适用于软件项目。可以用于完成工作的时间确实都会被浪费掉。但是由于帕金森法则而故意低估一个项目,只有在高估带来的损失比低估带来的损失更严重时才有意义。在软件开发中,高估带来的损失是线性增长的而且是有限的——工作会花掉所有可用的时间,但不会进一步占用更多的时间。但是低估带来的损失是非线性增长的而且是没有限制的——计划误差、上游活动中走过场和软件中出现更多缺陷都会导致产生的损害比高估时更严重,而且这些危害所能达到的程度基本上是无法提前预测的。

不要故意低估。低估带来的损失比高估带来的损失更严重。应通过计划和控制来解决对高估的顾虑,而不要故意降低估算值

3.2 软件行业估算情况的详细记录

image

3.2.1 项目会延误多少?

根据 The Standish Group 的首份调查报告,项目超期的平均幅度约为 120%,超预算的平均幅度约为 100%(Standish Group 1994)。但是估算值的误差可能比这些数字反映的情况更糟。

3.2.2 一个公司的经历

image

3.2.3 软件估算的系统性偏差

行业数据清晰地表明软件行业中存在系统性低估的问题。我们首先要让估算值变大,才能让估算结果更准确。对很多开发机构而言,这是一个严重的挑战。

3.3 准确估算带来的好处

  • 更准确地显示项目状态
  • 更高的质量
  • 更好地域软件以外的活动进行协调
  • 更好地编制预算
  • 提高开发团队的可信度
  • 更早获得风险信息

3.4 可预测性与项目其他属性的价值比较

软件开发机构和单个软件项目都试图在项目中达到许多目标,下面是其中的一部分:

  • 进度:以尽可能短的时间获得达到预期质量水平的预期的功能集
  • 成本:在预期时间内以最小成本交付预期的功能集
  • 功能:在现有的时间和资金范围内实现最丰富的特性

在不同项目中,这些一般目标和其他更特定的目标具有不同的优先级。例如,敏捷开发(Agile development)倾向于关注灵活性、可重复性、稳健性、可持续性和可见性等目标(Cockburn 2001; McConnell 2002)。SEI 的 CMM 倾向于强调效率、可改良性、可预测性、可重复性和可见性等目标。

在我和主管们的讨论中,经常会问他们:“了解需要或者不需要某些特性,与提前了解有关成本、进度和功能的信息,对你来说哪一种能力更重要?” 10 次有 8 次他们会回答:“提前了解有关成本、进度和功能的信息更重要。”——也就是说,可预测性更重要。

多年以来,软件行业一直强调投入市场的时间、成本和灵活性。所有这些目标都是大家期望达到的,但是高层主管最重视的通常是可预测性。业务人员需要向客户、投资者、供应商、市场和其他干系人做出承诺。这些承诺都需要可预测性的支持。

3.5 常见估算方法的问题

由于软件估算结果不准确的情形比比皆是,故“用来产生这些估算值的方法是无效的”这种说法就不足为奇了。实际上,应该仔细分析这些方法并抛弃那些没有用的方法!

最常见的估算方法是仅根据个人的记忆来把新项目和过去的类似项目进行比较。他们并未发现这种方法能够产生准确的估算值,而是发现常见的 "直觉" 和 "猜测" 方法往往导致成本超支及进度超期

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/899669.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Windows中conda的安装与使用

下载安装miniconda 说明: Miniconda是一款管理python环境的软件工具 第一步:下载miniconda 代码如下: win+r后,输入cmd指令按回车 在终端中输入: curl https://mirrors.tuna.tsinghua.edu.cn/anaconda/miniconda/Miniconda3-py39_4.12.0-Windows-x86_64.exe --output 按照…

CHT 另解

引入 CHT 又叫 凸包优化,是一种利用一次函数(斜率)来优化 Dp 的一种方法。 它的独特之处在于,传统斜率优化依靠的是一个一个的点,而凸包优化是利用一条条直线来优化,省去了一些码量。 我们用一道例题引入。 例1 HDU-3480 Dp 暴力 Link 题目是说,将 \(n\) 个数划分到 \(m…

PHP 发送电子邮件 功能 用法运用 详解

PHP发送电子邮件功能、用法及运用详解 一、PHP发送电子邮件的基本概述 PHP提供了多种方式来发送电子邮件,其中最常用的方法是使用内置的mail()函数或通过SMTP(Simple Mail Transfer Protocol)协议。随着技术的发展,许多开发者更倾向于使用第三方库(如PHPMailer)来增强邮件…

Linux 离线安装 zstd

前言:本文操作是在 CentOS-7 下执行的,不确定在其他 Linux 发布版是否能同样正常执行。1、检查前置依赖组件在安装 zstd 之前,需要确认已安装了相关依赖组件: gcc 。 rpm -qa | grep gcc前置依赖组件的具体离线安装方法请参考:CentOS-7离线安装gcc 2、下载zstd安装包 官方…

HarmonyOS Next开发教程之地图定位

今天分享一下在鸿蒙开发中的地图定位问题,也就是在地图中如何定位自己所在的位置。 关于如何加载显示地图在之前的文章已经详细介绍过,有问题的友友可以点击查看: HarmonyOS NEXT实战教程-实现Keep运动轨迹 将地图定位到自己所在的位置,有几种方法: 一种是在初始化地图前先…

HarmonyOS Next实战教程:实现中间凹陷的异形tabbar

今天要和大家分享的实战案例是实现中间凹陷的tabar前些天在做墨迹天气的时候看到了这种异形的tabbar,看起来比较有挑战性,因为鸿蒙版的墨迹天气app还没有这个东西,我决定尝试做一下。 系统的Tabs肯定是不行了,我们需要自定义。 难度直接拉满,直接做最难的部分,就是这个中…

HarmonyOS NEXT实战:高仿墨迹天气开发手记(附源码)

老余说3月份的神秘产品是为纯血鸿蒙而生的一款全新形态的手机,别人想象不到的手机产品,这次的保密工作真是非常到位,让人十分期待。 闲言少叙,今天为大家分享新年的第一个实战项目,高仿墨迹天气 这个项目中有一些复杂的动效和曲线,对于新手友友来说可能会有一点难,不过没…

VSCode + CMake + MinGW 在 Windows 下的简易调试指南

VSCode + CMake + MinGW 在 Windows 下的简易调试指南 目录VSCode + CMake + MinGW 在 Windows 下的简易调试指南准备工作下载VSCode下载CMake下载MinGW待编译源码VSCode调试task.json 配置launch.json 配置开始调试鉴于网络上关于VSCode的调试的教程不多,并且掺杂着大量的随机…

指令集并行与开发进阶算法

进阶算法 基础算法无法解决中断恢复的问题,即假如有两个写寄存器的操作,指令1,指令2,可能乱序执行时指令2的结果已经将写回了寄存器,但是指令1还未执行,此时发生中断后,从指令1重新开始执行,就会重新进行两次写入,将会发生错误。 只要保证后面指令修改机器状态时, 前面…

指令集并行与开发Tomasulo算法

指令集并行与开发Tomasulo算法 1. 概念 Tomasulo 方法是一种用于在超标量处理器中执行指令并处理数据相关(数据相关性)的方法。它主要通过对指令进行乱序执行和动态调度来提高指令级并行性。 可以通过寄存器重命名消除 WAR 和 WAW 相关(通过保留站号间接实现重命名) 也可以…

芯片存储器层次结构概述

存储器层次结构概述 1. Cache的作用 Cache结构与作用,如图2-5所示。图2-5 Cache结构与作用 介绍一下Cache具有特征。Cache没有程序上的意义,只是为了降低访存延迟;处理器访问Cache和访问存储器使用相同的地址。 Tag存储cache块在主存中的首地址(cache每个字节都给一个地址太…

推荐1《AI芯片开发核心技术详解》、2《智能汽车传感器:原理设计应用》、3《TVM编译器原理与实践》、4《LLVM编译器原理与实践》书,谢谢

4本书推荐《AI芯片开发核心技术详解》、《智能汽车传感器:原理设计应用》、《TVM编译器原理与实践》、《LLVM编译器原理与实践》由清华大学出版社资深编辑赵佳霓老师策划编辑的新书《AI芯片开发核心技术详解》已经出版,京东、淘宝天猫、当当等网上,相应陆陆续续可以购买。该…