第一部分 估算的关键概念 3
第1章 “估算”的含义 3
1.1 估算、目标和承诺 3
1.2 估算和计划的关系 4
1.3 有关估算、目标和承诺的沟通 5
1.4 以概率的方式表示估算结果 6
1.5 对“良好”估算的常见定义 9
1.6 估算与项目控制 11
1.7 估算的真正目的 13
1.8 对“良好的估算”的初步定义 14
1.9 其他资源 14
第2章 你的估算水平如何 15
2.1 简单的估算测验 15
2.2 关于测验结果的讨论 16
2.2.1 “90%置信度”的置信度 16
2.2.2 估算的范围应该取多宽? 18
2.2.3 使用较窄范围的压力来自何方? 18
2.2.4 该测验对真实软件估算的代表性 19
第3章 准确估算的价值 21
3.1 高估更好还是低估更好 21
3.1.1 反对高估的观点 21
3.1.2 反对低估的观点 22
3.1.3 权衡各种观点 23
3.2 软件行业估算情况的详细记录 24
3.2.1 项目会延误多少? 26
3.2.2 一个公司的经历 26
3.2.3 软件估算的系统性偏差 27
3.3 准确估算带来的好处 27
3.4 可预测性与项目其他属性的价值比较 29
3.5 常见估算方法的问题 30
3.6 其他资源 31
第4章 估算误差的来源 33
4.1 估算不确定性的来源 34
4.2 不确定性锥 35
4.3 混乱的开发过程 41
4.2.1 是否可以突破不确定性锥的限制? 37
4.2.2 锥形不会自行缩小 38
4.2.3 在软件估算中考虑不确定性锥的影响 39
4.2.4 不确定性锥和承诺的关系 40
4.2.5 不确定性锥和迭代开发 40
4.4 不稳定的需求 42
对需求增长的估算 43
4.5 遗漏的活动 44
4.6 没有理由的乐观主义 46
4.7 主观性和偏差 47
4.8 即兴估算 49
4.9 无根据的精度 51
4.10 其他的误差来源 52
4.11 其他资源 53
第5章 影响估算的因素 55
5.1 项目规模 55
5.1.1 本书使用代码行表示规模的原因 56
5.1.2 规模不经济 56
5.1.3 何时可以安全地忽略规模不经济 60
5.1.4 软件估算中规模不经济的重要性 61
5.2 待开发软件的不同类型 61
5.3 人员因素 63
5.4 编程语言 64
5.5 影响项目的其他因素 65
5.6 再论规模不经济 70
5.7 其他资源 72
第二部分 基本估算方法 77
第6章 估算方法概述 77
6.1 选择估算方法时考虑的问题 77
6.1.1 待估算的内容 77
6.1.2 项目规模 78
6.1.3 软件开发方式 78
6.1.4 开发阶段 80
6.1.5 可能的准确度 80
6.2 估算方法适用性表 81
第7章 计数、计算和判断 83
7.1 首先计数 84
7.2 计数的对象 85
7.3 通过计算把计数值转换成估算值 86
7.4 只把判断作为最后的手段 88
7.5 其他资源 89
第8章 估算校准和历史数据 91
8.1 历史数据可以提高准确度并带来其他益处 91
8.1.1 考虑开发组织的影响 92
8.1.2 避免主观性和无根据的乐观 93
8.1.3 减少估算中政策的影响 93
8.2 要收集的数据 95
8.2.1 与规模度量有关的问题 95
8.2.2 与工作量度量有关的问题 96
8.2.3 与日历时间度量有关的问题 97
8.2.4 与缺陷度量有关的问题 97
8.2.5 其他的数据收集问题 98
8.3 如何校准 98
8.4 使用项目数据精化估算值 99
8.5 使用行业的平均数据进行校准 100
8.6 小结 102
8.7 其他资源 102
第9章 专家的个人判断 105
9.1 有组织的专家判断 106
9.1.1 由谁进行估算? 106
9.1.2 粒度 106
9.1.3 使用范围 107
9.1.4 公式 108
9.1.5 检查表 110
9.2 比较估算值和实际值 110
9.3 其他资源 112
第10章 分解和重组 113
10.1 计算准确的整体预期情况 113
10.1.1 大数法则 115
10.1.2 估算的小对象应小到什么程度? 116
10.2 通过基于活动的工作分解结构进行分解 117
10.3 累加最好情况和最差情况估算的危害 118
10.3.1 警告:接下来是数学问题! 119
10.3.2 问题的来源 119
10.4 建立有意义的总体最好情况和最差情况估算 120
10.4.1 对少量任务计算总体最好情况和最差情况(简单标准偏差公式) 121
10.4.2 对大量任务计算总体最好情况和最差情况(复杂标准偏差公式) 122
10.4.3 建立总体最好情况和最差情况估算值 124
10.4.4 有关百分比置信度估算的注意事项 126
10.5 其他资源 126
第11章 类比估算 127
11.1 类比估算的基本方法 127
11.1.1 步骤1:获取以前相似项目详细的规模、工作量和成本结果数据 128
11.1.2 步骤2:比较新项目和以前相似项目的规模 129
11.1.3 步骤3:根据新项目相对旧项目的比例估算其规模 130
11.1.4 步骤4:根据新项目规模相对旧项目规模的情况计算工作量估算值 131
11.1.5 步骤5:检查两个项目中的假设是否一致 131
11.2 有关Triad估算中的不确定性的说明 132
估算中的不确定性、计划和承诺 133
第12章 基于代理的估算 135
12.1 模糊逻辑 136
12.1.1 如何获得平均规模数值 136
12.1.2 如何对新功能进行分类 137
12.1.3 模糊逻辑不能解决的问题 137
12.1.4 对模糊逻辑的扩展 138
12.2 标准组件 138
12.2.1 按照百分点使用标准组件 140
12.2.2 标准组件的局限 141
12.3 故事点 142
有关尺度的警告 143
12.4 “T恤衫”式规模估算 145
12.5 基于代理的估算方法的其他用途 147
12.6 其他资源 147
第13章 专家小组判断法 149
13.1 小组评审 149
13.2 宽带Delphi法 150
13.2.1 宽带Delphi法的有效性 152
13.2.2 “原来如此” 154
13.2.3 何时采用宽带Delphi法 154
13.3 其他资源 155
第14章 软件估算工具 157
14.1 使用软件估算工具可以完成而手工无法完成的事 157
14.2 校准工具时所需的数据 162
14.3 即使采用工具也不应做的事 162
14.4 可用工具概述 163
14.5 其他资源 164
第15章 使用多种估算方法 165
其他资源 169
第16章 获得良好估算的软件项目中的估算流程 171
16.1 未获得良好估算的项目中的单个估算流程 171
16.2 获得良好估算的项目中的单个估算流程 172
16.3 按照时间顺序描述的项目估算流程 173
16.3.1 大型项目的估算流程 174
16.3.2 小型项目的估算流程 175
16.4 估算的精化 175
16.5 如何向项目的其他干系人提供重估结果 176
16.5.1 何时进行重估 177
16.5.2 管理层不允许重估怎么办? 178
16.6 一个获得良好估算的项目视图 179
第17章 标准化估算规程 181
17.1 标准化规程的常用要素 181
17.2 采用阶段—门槛过程进行估算 182
17.3 顺序式项目的标准化估算规程 185
17.4 迭代式项目的标准化估算规程 188
17.5 一个高级开发组织的标准化估算规程 190
17.6 改进标准化规程 192
17.7 其他资源 193
第三部分 特定的估算挑战 197
第18章 规模估算中的特殊问题 197
18.1 软件规模估算中的挑战 197
代码行在规模估算中的作用 198
18.2 功能点估算 200
把功能点转换成代码行 202
18.3 简化的功能点方法 203
18.3.1 Dutch方法 203
18.3.2 GUI元素 204
18.4 规模估算方法小结 205
18.5 其他资源 206
第19章 工作量估算中的特殊问题 207
19.1 影响工作量的因素 207
19.2 根据规模计算工作量 209
19.2.1 使用和历史项目的非正规比较来计算工作量估算值 209
19.2.2 估算值中包括哪类工作量? 210
19.3 使用估算学方法计算工作量估算值 210
19.4 行业平均工作量图 210
19.5 ISBSG方法 216
19.6 比较工作量估算值 218
19.7 其他资源 219
第20章 进度估算中的特殊问题 221
20.1 基本进度公式 221
20.2 使用与历史项目的非正式比较来计算进度 223
20.3 Jones的一阶估算实践 224
20.4 使用估算学方法计算进度估算值 225
20.5 进度压缩和最短的可能进度 226
20.6 进度和工作量之间的折衷 228
进度压缩和团队规模 229
20.7 进度估算和人员限制 230
20.8 比较不同方法的结果 231
20.9 其他资源 232
第21章 计划参数的估算 233
21.1 对分解的项目活动进行估算 233
21.1.1 估算分配给不同技术活动的工作量 233
21.1.2 估算需求的工作量 234
21.1.3 估算管理工作量 235
21.1.4 估算所有活动 235
21.1.5 根据项目类型进行调整 236
21.1.6 给活动分配工作量的例子 237
21.1.7 开发人员与测试人员的比例 237
21.2 估算不同活动的进度 238
21.3 把估算工作量(理想工作量)转换成计划工作量 239
21.4 成本估算 241
21.4.1 加班 241
21.4.2 项目成本是直接成本、全额负担成本还是其他形式的成本? 241
21.4.3 其他直接成本 241
21.5 对缺陷的产生和排除情况进行估算 241
21.5.1 估算缺陷排除情况 242
21.5.2 估算缺陷排除效率的例子 243
21.6 对风险和意外缓冲进行估算 245
21.7 其他经验规则 247
21.8 其他资源 247
第22章 估算结果的表达方式 249
22.1 就估算假设进行沟通 249
22.2 表达不确定性 251
22.2.1 正负修饰量 251
22.2.2 量化风险 251
22.2.3 置信度因子 252
22.2.4 基于场景的估算 254
22.2.5 约略的日期时段 255
22.3 使用(各种类型的)范围 256
22.3.1 以范围表示的估算结果的用途 256
22.3.2 范围和承诺 257
22.4 其他资源 257
第23章 政治、谈判和解决问题 259
23.1 主管们的特点 259
23.2 对估算有影响的政治因素 260
23.2.1 外部约束 260
23.2.2 预算和日期 261
22.2.3 对估算值还是对承诺进行谈判 261
23.2.4 如果估算值不被接受该怎么办? 262
23.2.5 技术人员要教育非技术干系人 262
23.3 解决问题和原则谈判法 263
23.3.1 近似谈判的问题解决法 264
23.3.2 把人和问题隔离开 264
23.3.3 关注利益而不是立场 265
23.3.4 创造可以共同获利的选项 266
23.3.5 坚持使用客观标准 268
23.4 其他资源 270
附录A 估算合理性检查 271
附录B 第2章“你的估算水平如何?”测验的答案 273
附录C 软件估算提示 275
参考文献 287
索引 295