项目估算不仅对大多数软件企业是一项挑战,而且对他们的客户也是一件非常头疼的事情,因为客户需要承受项目严重超支、进度延迟、软件功能没有达到预期以及质量问题等多方面风险。
目前的软件估算水平是否比 40 年前有提高呢?目前的估算模型是否更好用呢?在这段时间里,软件估算方面一成不变的是什么?
● 全世界的项目经理(以及他们的组员)都被寄予厚望,期望能满足基于模糊的需求而设定的预算目标和项目完工时间。
● 研究人员继续开发越来越复杂的估算模型和方法,以达到“准确”估算的目的。
● 尽管我们可以通过软件估算工具供应商获得商业工具,或在网络中获得免费的估算工具,但是几乎没有文档化的证据说明这些工具在已完工项目中的使用效果。40 年来,关于软件估算的书籍和工具层出不穷,提出了很多解决方案(估算工具、模型、技术)以应对软件估算带来的挑战。
● 但是这些解决方案的有效性到底如何呢?
● 有哪些可用的知识能评价这些估算工具的有效性呢?
项目经理对他们的估算过程的质量、市场上的估算工具的性能了解多少呢?通常并不多!然而,管理层还是会根据这些估算工具提供的结果进行很多决策活动。在估算中,软件估算人员和管理者分别扮演着不同的角色。
● 软件估算人员的角色不是承诺发生奇迹,而是要提供优质的、合理的技术信息,上下文环境以及对结果的解读,即估算人员需要向管理者提交信息以支持决策的制定。
● 而管理者需要根据这些信息,选择和分配项目预算,并且管理相关的风险:管理者的角色是在项目进行过程中承担风险并管理风险。
当一个组织已经收集了自己的数据并且有能力来分析数据、记录估算模型质量时,该组织便具备了以下两个优势:
面向市场时的关键竞争力优势;
在非竞争环境下的可信度优势。
当一个组织没有度量其历史项目的生产率时,它在以下很多方面都是未知的。
组织的绩效如何?
某个经理的绩效与其他人的差别有多大?
某个经理在估算时所做的假设与其他人的差别有多大?很多软件组织都处于这样的一个局面,即使用的估算模型来源于生产率不同的环境,无法提供真正的价值。当人们对以下两种情况了解甚少时,更是如此。
● 外部数据库的数据质量。
● 在建立估算模型环境中的模型质量。这些模型具有花哨的功能和成本因子,而那些对这些模型感觉良好的人,却在这些“黑盒”数据上自欺欺人。
软件项目估算
《软件项目估算》将教授开发估算信息(估算数据+估算环境)的方法。该估算信息可以帮助管理者在不确定的环境下制定项目预算决策。
《软件项目估算》不包含以下内容:
- 声称可以一次性处理所有成本因子的黑盒估算;
- 估算秘诀;
- 估算模型、技术、成本因子的摘要;
- 对项目每个阶段进行详细策划的要点。
- 本书将介绍软件项目估算中的工程实践,具体内容如下:
- 度量软件项目生产率的正确概念,即功能规模度量;
- 如何使用生产率数据建立估算模型;
- 如何验证一个估算过程中每个构件的质量;
- 如何为软件项目管理(预算与控制)中的决策制定提供有价值(如正确的信息)的信息。
- 如果没有牢固的统计学基础,就不会有工程化方法,也无法进行软件估算!
目标读者
本书不适合那些寻找快速的、一次性解决方案的读者。本书面向的读者是那些希望通过学习工程实践来获得软件估算方面长久且持续竞争优势的读者,并且他们也乐于学习具
体实现的方法(包括在探索更复杂的统计方法之前,例如机器学习技术或模糊逻辑,使用简单且完备的统计学方法进行数据收集和数据分析的必要工作)。
概述
本书主要分享了作者在设计可靠的软件估算流程方面多年的丰富经验。这些估算流程可以作为管理者的决策支持工具。
本书还介绍了一些基本的统计学和经济学概念。这些概念是理解如何设计、评价和改进软件估算模型的基础。
因为量化数据和量化模型是工程、科学和管理领域的基础,所以对于各种规模的软件组织而言,本书将非常有帮助。同时管理者将会在本书中找到在软件项目估算中进行量化改善相关的有效策略。书中还提供了大量的实例,供读者参考与学习。
本书适合软件经理、软件项目估算的审计人员和其他 IT 行业从业者,以及学习“软件
项目管理”相关课程的学生阅读。
本书结构与内容
第一部分:“理解估算过程”(第 1~3 章)介绍在设计和使用软件估算模型进行决策时,估算人员和项目经理都需要知晓的软件估算的多个视图。该部分解释了估算过程的结构,包括嵌入在估算过程内的生产率模型,并澄清了估算人员和项目经理在角色和职责上的区别。最后,介绍估算中必须予以考虑的大量经济学概念,比如规模经济/非规模经济、固定成本/变动成本。
第 1 章介绍了估算过程及其各个阶段,以及软件估算人员和管理者的不同角色和职责。
第 2 章介绍了一些重要的经济学概念,这些概念有助于理解并建立基于生产率模型的开发过程性能模型,特别是解释了产品模型中的规模经济/非规模经济和固定成本/变动成本的概念。本章同时展示了软件工程的一些典型和非典型数据集合的特征,并解释了生产率模型中的显式变量和隐式变量。
第 3 章讨论了从估算结果的区间范围中挑选一个单点值作为预算可能造成的影响,包括各种场景及其对应发生概率的识别,以及在项目投资组合层级进行应急措施的识别和管理。
第二部分:“估算过程:必须验证什么”(第 4~7 章)介绍一些必要的概念和技术,以理解估算结果的质量取决于其输入的质量和其所使用的生产率模型的质量,并介绍了根据估算目的增加的调整因子的局限性。
第 4 章介绍了当建立和使用生产率模型时,如何识别出在估算流程中必须理解和验证的多个成分。我们是从工程化角度,而非从“手工艺”角度来看待模型的。
第 5 章介绍分析数学模型的直接输入值的质量所需的准则,即在估算中用于预测因变量的自变量。
第 6 章介绍了分析数学模型质量所需的准则,以及模型的输出结果,并通过图解展示了如何使用这些质量准则来评价业内推荐的模型和工具的性能。
第 7 章介绍在度量活动和多因子之间的关系模型中,不确定性和误差是固有的。本章还介绍了不确定性和误差的一些来源,并阐述了当在估算过程中引入其他因子时,这些不确定性和误差是如何累加的。
第三部分:“建立估算模型:数据收集和分析”(第 8~13 章)介绍建立估算模型过程中的问题,包括数据收集和国际标准的使用,以便在项目间、组织内、国家间横向对比;如何使用质量数据作为输入并基于一系列经济学概念来建立具有多个自变量的模型。
第 8 章介绍在估算流程中应用业界模型,应基于已完整定义并规范化的参数定义。本章介绍了国际软件基准标准组(International Software Benchmarking Standards Group,ISBSG)定义的一些软件项目数据收集标准。显然,规范化的定义对于内部基准、外部基准以及建立生产率和估算模型都是至关重要的。
第 9 章演示了如何建立只有一个自变量的模型,需要首先识别最重要的变量,即待交付的软件规模;介绍如何使用 ISBSG 数据库中的项目数据进行建模,包括数据准备和对描述性变量的相应取值的识别,例如开发环境。
第 10 章展示了一个案例研究。该案例是关于如何应用行业数据建立以项目规模为主要因子并包含少量其他类别变量的项目模型,以及如何分析和理解该类模型的质量。
第 11 章介绍了如何识别出项目最好和最坏情况的生产率,以及如何从性能分析中吸取经验教训并用于估算。
第 12 章通过探讨规模经济和非规模经济、过程性能能力和对生产率制约条件的影响等概念,分析如何从同一数据集中识别出多个模型。
第 13 章介绍在一个软件项目生命周期中,有很多影响生产率的因素,比如功能的增加或修改、风险实质化等。因此,项目经常需要在生命周期的各个阶段重新进行估算。本章介绍建立重估算模型的方法。
表 1 为软件经理阅读的指导方案。
表 1 软件经理阅读指导方案
推荐阅读方式 | 推荐理由 | 可实现的目标 |
---|---|---|
第 1 章(完整阅读) | 估算过程包括多个阶段,估算人员和管理者的职责不同,且互相补充 | 验证你的估算过程是否包含本章中描述的所有阶段,并且相关职责 |
第 2 章(完整阅读) | 经济学概念对于估算目的非常有帮助:它们可以解释软件成本结构中的基础性问题,比如固定成本/变动成本、规模经济/非规模经济 | 询问一下你的软件工程师:①在软件项目中的固定成本/变动成本是什么?②在我们的软件开发过程中是否存在规模经济或非规模经济 |
第3 章(完整阅读) | 估算人员应该提供场景和可能的估算范围。管理层可以在项目集管理的层面上,根据这些信息分配项目预算以及应急资金 | 管理者需要从一个估算范围中选择一个值作为项目预算,并且分配应急资金以管理固有的估算风险 |
第 4~7 章(快速阅读) | 估算模型应该给出“值得信赖的数字”:必须验证并记录估算模型的质量,如若不然,估算将沦为“垃圾进,垃圾出” | 要求估算人员录估算过程中的质量控制,并且要对估算过程进行审计 |
第 8~13 章(快速阅读) | 通过标准化定义收集的数据可以在组织内及行业内进行性能比较。在进行数据分析和建立估算模型时需要使用工程化技术。当项目预算出现偏差时,一般的估算模型将不再适用;需要使用重估算模型 | 验证组织在进行数据收集时,使用的是最佳行业标准。估算人员根据这几章推荐的最佳实践来实施估算,要求估算人员建立重估算模型 |