1.1 原有系统 2
1.2 编程解决方案:自顶向下逐步求精 2
目录 2
译者序 2
前言 2
第一部分 动机与背景 2
第1章 案例研究1:Scientific American预订处理系统 2
1.3 编程方案:结果 3
1.4 经济学编程方法 4
1.5 经济学编程方法的结果 5
1.7 问题 6
1.6 综合讨论 6
2.4 得到的教训 7
2.3 人际关系方面 7
第2章 案例研究2:市内校区考勤系统 7
2.1 编程方面 7
2.2 经济学方面 7
2.6 问题 8
2.5 综合讨论 8
3.1.2 本章内容 10
3.1.1 分而治之 10
第3章 软件工程目标 10
3.1 引言 10
3.2 软件工程:定义 11
3.3 软件趋势:成本 12
3.4 软件趋势:社会影响 13
3.6 例子:WEINBERG的实验 14
3.5 目标的复杂性 14
3.7 软件工程方法的复杂性 15
3.8 软件工程目标结构 17
3.9 软件工程的GOALS方法 18
3.10 问题 19
4.2 瀑布模型 25
4.1 引言 25
第二部分 软件生命周期:定量模型 25
第4章 软件生命周期:阶段与活动 25
4.3.1 前提A:所有过程子目标都是必要的 27
4.3 瀑布模型的经济学基本原理 27
4.3.2 前提B:顺序地处理子目标 28
4.4.1 增量开发 29
4.4 瀑布模型的精化 29
4.3.3 背离顺序方法:原型折中方法 29
4.4.2 先遣人员 30
4.4.3 软件经济学意义 32
4.5 详细的生命周期阶段定义 33
4.6 详细的阶段/活动定义 35
4.7 软件工作分解结构(WBS) 36
4.9 问题 40
4.8 软件维护 40
5.1.2 COCOMO模型的版本 43
5.1.1 一些估算公式和问题 43
第5章 基本COCOMO模型 43
5.1 引言 43
5.2 定义与假设 44
5.3.1 基本COCOMO模型的工作量和进度公式:组织型模式 46
5.3 开发的工作量和进度 46
5.4 阶段分布 48
5.3.2 项目轮廓 48
5.5 正常项目轮廓 49
5.6 雷利(Rayleigh)分布 51
5.7 插值法 52
5.9 问题 54
5.8 基本软件维护量估算 54
6.2 基本工作量和进度公式 57
6.1 引言 57
第6章 基本COCOMO模型:开发模式 57
6.3.2 半独立型模式 60
6.3.1 组织型模式 60
6.3 软件开发的三种COCOMO模式 60
6.3.4 总结 61
6.3.3 嵌入型模式 61
6.4.1 COCOMO数据库 63
6.4 对基本COCOMO工作量和进度公式的讨论 63
6.4.2 工作量公式:估算与实际 64
6.4.3 工作量公式:模式间的比较 65
6.4.4 工作量公式:与其他模型的比较 66
6.4.5 进度公式:估算与实际 67
6.5.1 百分比分布 68
6.5 工作量与进度的阶段分布 68
6.4.6 进度公式:与其他模型进行比较 68
6.5.3 基本项目轮廓 70
6.5.2 表的使用 70
6.5.4 劳动力分布曲线与雷利分布 71
6.6 问题 73
6.5.5 最后的观点 73
7.2 按阶段的活动分布 75
7.1 引言 75
第7章 基本COCOMO模型:活动分布 75
7.3 基本COCOMO案例研究:Hunt国家银行EFT系统 78
7.4.2 组织系统图裁剪指南 80
7.4.1 通用的软件项目组织系统图 80
7.4 绘制基本的项目组织系统图 80
7.4.4 其他阶段的组织系统图和决策 81
7.4.3 示例:Hunt国家银行EFT项目 81
7.5.1 雷利曲线比较 83
7.5 基本COCOMO阶段与活动分布的讨论 83
7.7 问题 84
7.6 基本COCOMO的局限 84
7.5.2 阶段/活动分布 84
8.1.1 中等COCOMO成本驱动因子属性 86
8.1 引言 86
第8章 中等COCOMO模型:产品级估算 86
8.1.2 本章预览 87
8.2.1 标称工作量换算公式 88
8.2 中等COCOMO模型:软件开发工作量估算 88
8.2.2 软件开发工作量乘数 89
8.2.3 工作量和进度的阶段与活动分布 93
8.3 定价示例:微处理器通信软件 94
8.4.1 问题 95
8.4 管理示例:降低完成成本 95
8.4.4 其他的候选项 96
8.4.3 其他可能的解决方案 96
8.4.2 解决方案1:降低项目规模 96
8.5.2 修正过的工作量乘数:可靠性要求 97
8.5.1 不能用于维护阶段的成本驱动因子:SCED 97
8.4.5 解决方案的选择 97
8.5 年维护工作量的调整估算 97
8.6 示例:微处理器通信软件的维护 98
8.5.3 修正过的工作量乘数:现代编程规范 98
8.7 内插值和外插值 99
8.8.2 COCOMO改编估算公式 100
8.8.1 改编需考虑的因素 100
8.8 估算改编现有软件的影响 100
8.9 对中等COCOMO工作量公式的讨论 103
8.8.4 改编估算:注意事项 103
8.8.3 COCOMO改编估算公式的基本原理 103
8.9.2 中等COCOMO标称工作量估算公式与实际的比较 104
8.9.1 中等COCOMO估算与实际的对比 104
8.9.3 加权的交付源指令度量标准 105
8.10 问题 106
9.2 组件级估算表(CLEF) 109
9.1 引言 109
第9章 中等COCOMO:组件级估算 109
9.3 对改编的软件采用CLEF 113
9.4.2 前端处理器(FEP)软件子系统 115
9.4.1 TPS描述 115
9.4 事务处理系统(TPS)示例:基本开发估算 115
9.4.4 TPS操作系统软件的开发估算 116
9.4.3 事务处理器(TP)软件子系统 116
9.5 TPS组件级维护估算与阶段分布 118
9.6 问题 121
10.1.1 示例 130
10.1 性能模型 130
第三部分 软件工程经济学基础 130
第三部分A 成本效益分析 130
第10章 性能模型与成本效益模型 130
10.2.1 示例 132
10.2 最佳性能 132
10.1.2 综合讨论 132
10.2.2 综合讨论 133
10.3.1 示例 134
10.3 敏感性分析 134
10.3.2 综合讨论 135
10.4.1 示例 136
10.4 成本效益模型 136
10.4.2 综合讨论 137
10.5 问题 138
11.1 示例 143
第11章 生产函数:规模经济 143
11.4 软件开发的基本生产函数 144
11.3 离散的生产函数 144
11.2 综合讨论:定义 144
11.6 大型软件项目的规模不经济 145
11.5 规模经济与规模不经济 145
11.7 应对规模不经济的最好方法 146
11.8 问题 148
12.1 示例:最大化可用预算 151
第12章 可选方案的选择:决策标准 151
12.4 最大化效益-成本差额 152
12.3 最大化效益/成本比 152
12.2 最小化性能需求 152
12.5 复合选项 153
12.7 问题 154
12.6 综合讨论 154
13.2 综合讨论:边际分析 158
13.1 示例 158
第三部分B 多目标决策分析 158
第13章 净值与边际分析 158
13.3 举例说明 160
13.4 在处理净值与利润时的一些注意事项 161
13.6 问题 162
13.5 信息处理产品的价值 162
14.2 利息计算 164
14.1 示例:过分简单的成本分析 164
第14章 现在与未来的支出与收入 164
14.4 一系列现金流的现值 165
14.3 现值计算 165
14.6 综合讨论:现值概念与公式的总结 166
14.5 租借与购买分析的总结 166
14.8 对利率或贴现率的敏感性 167
14.7 现值特征 167
14.10 问题 168
14.9 现值分析应用于软件工程 168
15.2 净值分析 170
15.1 示例:软件包选择 170
第15章 品质因素 170
15.3 品质因素分析 171
15.4 综合讨论:软硬件选择的加权和分析-案例研究 172
15.5 案例研究:活动描述 173
15.6 案例研究:评价函数的问题 177
15.7 案例研究:权重与级别的问题 178
15.9 已交付系统能力(DSC)品质因素 179
15.8 案例研究:总结 179
15.11 重新考虑TPS示例 180
15.10 DSC品质因素的轮廓 180
15.12 加权和与DSC品质因素的比较 181
15.13 问题 182
16.3 品质因素评价 184
16.2 系统可靠性与可用性 184
第16章 目标作为约束条件 184
16.1 示例:TPS选项A的失效模式 184
16.5 目标作为约束条件:可行集和成本价值等值线 186
16.4 把目标表述成约束条件 186
16.6 综合讨论:有约束条件的决策问题 188
16.8 数学优化技术 189
16.7 软件工程应用 189
16.9 数学优化技术的能力与局限性 193
16.10 问题 194
17.1 示例 196
第17章 系统分析与约束优化 196
17.2 综合讨论 198
17.3 问题 200
18.2 内部开发与供应商开发相比较时要考虑的事项 201
18.1 示例:TPS选项B:开发专用操作系统 201
第18章 处理不可协调与不能量化的目标 201
18.3 描述方法 202
18.4 综合讨论:不可量化标准 204
18.5 不可量化标准的描述方法 205
18.6 混合量化标准与不可量化标准的描述方法 207
18.7 在描述与解释多变量数据时的一些注意事项 209
18.8 问题 210
19.2 完全不确定性的决策规则 214
19.1 示例:操作系统开发选项 214
第三部分C 处理不确定性、风险与信息的价值 214
第19章 处理不确定性:风险分析 214
19.3 主观概率 216
19.6 主观概率的应用 217
19.5 信息的价值 217
19.4 总的讨论:完全不确定性情况下的决策规则 217
19.7 效用函数 218
19.9 问题 219
19.8 软件工程的含义 219
20.2 完全信息的期望价值 222
20.1 示例:原型方法 222
第20章 统计学决策理论:信息的价值 222
20.5 贝叶斯公式 223
20.4 示例 223
20.3 应对不完全信息 223
20.6 最大化原型的净期望价值 224
20.7 总的讨论:完全信息的期望价值 225
20.8 不完全信息的期望价值 226
20.9 信息的价值过程 227
20.11 信息的价值决策指南 228
20.10 在软件工程中应用信息的价值过程 228
20.13 信息的价值:最后的简要总结 229
20.12 通过信息的价值方法避免缺陷 229
20.14 问题 230
21.1.1 目标与阶段,或理解级别 236
21.1 步骤1:建立目标 236
第四部分 软件成本估算技术 236
第四部分A 软件成本估算方法与过程 236
第21章 软件成本估算中的七个基本步骤 236
21.1.4 慷慨的与保守的估算 238
21.1.3 相对与绝对估算 238
21.1.2 估算的含义 238
21.2 步骤2:计划所需的数据与资源 239
21.1.5 总的方针 239
21.3 步骤3:准确说明软件需求 240
21.4 步骤4:尽可能详细地做出估算 241
21.4.1 有关软件规模估算 242
21.4.2 PERT计算规模 243
21.4.3 为什么人们会过低估算软件规模? 244
21.5 步骤5:采用多种独立的方法和资源 246
21.6.3 一些有用的评价问题 247
21.6.2 顶梁柱现象 247
21.6 步骤6:比较与迭代估算 247
21.6.1 乐观/悲观现象 247
21.7 步骤7:跟进 248
21.8 问题 250
22.1 算法模型 251
第22章 可选择的软件成本估算方法 251
22.1.3 分析模型 252
22.1.2 乘法模型 252
22.1.1 线性模型 252
22.2 专家判断 253
22.1.6 算法模型总的优缺点 253
22.1.4 表格模型 253
22.1.5 复合模型 253
22.2.2 一个Delphi/小组会议软件成本估算实验 254
22.2.1 小组一致方法:Delphi 254
22.2.3 宽带Delphi方法 255
22.4 帕金森估算 256
22.5 价格策略估算 256
22.3 通过推理来进行估算 256
22.7 自底向上估算 257
22.6 自顶向下估算 257
22.8 各种方法的总结比较 260
22.9 问题 261
23.1.3 详细COCOMO过程 265
23.1.2 阶段敏感的工作量乘法 265
第四部分B 详细COCOMO模型 265
第23章 详细COCOMO:概述与运用描述 265
23.1 引言 265
23.1.1 模块-子系统-系统层次 265
23.2 软件分层估算表 266
23.3 软件分层估算表过程 270
23.4.2 估算步骤 273
23.4.1 项目概述 273
23.4 详细COCOMO示例:学生工作信息系统 273
23.5 进度调整计算 275
23.5.2 示例 276
23.5.1 进度调整过程 276
23.6.2 阶段分布:一个极端的例子 277
23.6.1 工作量的阶段分布 277
23.6 讨论 277
23.6.4 COCOMO模型体系的概述 281
23.6.3 详细COCOMO的其他组成部分 281
23.7 问题 282
24.1 RELY:要求的软件可靠性 286
第24章 详细COCOMO成本驱动因子:产品属性 286
24.1.2 与RELY级别相对应的项目活动的差异 288
24.1.1 级别与工作量乘数 288
24.1.3 与项目结果相比较 290
24.1.4 讨论 292
24.1.5 软件可靠性生产函数 294
24.2 DATA:数据库规模 298
24.2.1 级别与工作量乘数 299
24.2.2 与项目结果的比较 300
24.2.3 讨论 301
24.3.1 级别与工作量乘数 302
24.3 CPLX:软件产品复杂性 302
24.3.2 与项目结果相比较 303
24.3.3 讨论 304
24.4 问题 306
24.5 进一步研究的主题 307
25.1.1 级别与工作量乘数 310
25.1 TIME:执行时间约束 310
第25章 详细COCOMO模型成本驱动因子:计算机属性 310
25.1.2 与项目结果进行比较 311
25.1.3 讨论 312
25.1.4 IBM-FSD数据库中的生产率变动范围 315
25.2.1 级别与工作量乘数 317
25.2 STOR:主存储器约束 317
25.2.2 与项目结果相比较 318
25.3.1 级别与工作量乘数 320
25.3 VIRT:虚拟机的易变性 320
25.2.3 相关数据与研究的讨论 320
25.3.2 与项目结果相比较 321
25.3.3 讨论 322
25.4.1 级别与工作量乘数 323
25.4 TURN:计算机周转时间 323
25.4.2 与项目结果的比较 324
25.4.3 讨论 325
25.5 问题 326
25.6 进一步研究的主题 328
26.1.2 示例 331
26.1.1 级别与工作量乘数 331
第26章 详细COCOMO成本驱动因子:人员属性 331
26.1 ACAP:分析员能力 331
26.1.4 讨论 333
26.1.3 与项目结果的比较 333
26.2.1 级别与工作量乘数 335
26.2 AEXP:应用经验 335
26.2.2 与项目结果相比较 336
26.2.3 讨论 337
26.3.1 级别与工作量乘数 338
26.3 PCAP:程序员能力 338
26.3.2 与项目结果的比较 339
26.3.3 讨论 340
26.4.1 级别与工作量乘数 341
26.4 VEXP:虚拟机经验 341
26.5.1 级别与工作量乘数 342
26.5 LEXP:编程语言经验 342
26.4.2 与项目结果相比较 342
26.4.3 讨论 342
26.5.2 与项目结果相比较 344
26.5.3 讨论 345
26.6.2 属性级别:人员经验 346
26.6.1 属性等级:人员能力 346
26.6 人员属性的总的讨论 346
26.6.3 对软件人员属性的相关研究 347
26.7 问题 348
26.6.4 数据收集与分析要考虑的因素 348
26.8 进一步研究的主题 349
27.1.1 级别与工作量乘数 351
27.1 MODP:现代编程规范的应用 351
第27章 详细COCOMO成本驱动因子:项目属性 351
27.1.2 与项目结果相比较 353
27.1.3 讨论 354
27.1.4 MPP使用的GUIDE调查 355
27.2.1 级别与工作量乘数 357
27.2 TOOL:软件工具的使用 357
27.1.5 MPP与软件工作程序化 357
27.2.3 讨论 360
27.2.2 与项目结果的比较 360
27.2.5 未来的软件工具类别 362
27.2.4 软件工具生产函数 362
27.3.1 级别与工作量乘数 364
27.3 SCED:开发进度约束 364
27.3.3 讨论 366
27.3.2 与项目结果的比较 366
27.3.4 相关的数据和研究 367
27.4 问题 369
27.5 进一步研究的主题 370
第28章 COCOMO模型中没有包含的因素 372
28.2 语言级别 373
28.1 应用类型 373
28.3.1 复杂性度量 376
28.3 其他规模度量:复杂性、实体和说明 376
28.3.4 用源指令计算规模:RADC数据库 377
28.3.3 说明书元素的数量 377
28.3.2 程序实体的数量:例行程序、报表、输入、输出、文件 377
28.4 需求的易变性 379
28.5 人员连续性 380
28.6 管理质量 381
28.8 文档的数量 382
28.7 用户接口质量 382
28.9 硬件配置 383
28.11 进一步研究的主题 384
28.10 安全性和保密性约束 384
29.1.2 统计分析 386
29.1.1 COCOMO模型校准/评价过程 386
第29章 COCOMO模型评价 386
29.1 引言 386
29.2 COCOMO模型项目数据库 387
29.1.3 本章预览 387
29.3 COCOMO模型估算与实际:开发工作量 391
29.4 COCOMO模型估算与实际相比较:开发进度 394
29.5 COCOMO模型估算与实际相比较:阶段分布 396
29.6 COCOMO模型估算与实际相比较:活动分布 398
29.7 其他软件成本估算模型 400
29.7.2 TRW Wolverton模型[Wolverton,1974] 402
29.7.1 1965 SDC模型[Nelson,1966] 402
29.7.3 Putnam SLIM模型[Putnam,1978;Putnam-Fitzsimmons,1979] 403
29.7.5 RCA PRICE S模型[Freiman-Park,1979] 404
29.7.4 Doty模型[Herd and others,1977] 404
29.7.7 1977 Boeing模型[Black and others,1977] 406
29.7.6 IBM-FSD模型[Walston-Felix,1977] 406
29.7.9 Bailey-Basili Meta模型[Bailey-Basili,1981] 407
29.7.8 1979 GRC模型[Carriere-Thibodeau,1979] 407
29.8 按模型标准对COCOMO模型的评价 408
29.9.2 校准常量 411
29.9.1 校准COCOMO模型的标称工作量等式 411
29.9 根据特定配置环境裁剪COCOMO模型 411
29.9.3 校准软件开发模式 413
29.9.4 重新校准软件开发模式时的注意事项 414
29.9.5 合并、排除或增加成本驱动因子属性 415
29.10 进一步研究的主题 416
30.1 引言 418
第30章 软件维护成本估算 418
第四部分C 软件成本估算与生命周期维护 418
30.2.1 定义 419
30.2 COCOMO软件维护模型 419
30.2.2 软件维护工作量估算 420
30.3 与项目结果相比较 422
30.2.3 修改过的工作量乘数 422
30.4 其他软件维护成本估算模型 423
30.4.2 人均维护卡片比率 424
30.4.1 维护/开发成本比率 424
30.4.3 维护生产率比率 425
30.4.4 与COCOMO数据相比较 426
30.5.1 软件维护生产函数 427
30.5 软件维护现象学(Phenomenology) 427
30.5.2 软件维护动力学 428
30.5.3 软件维护工作量按活动的分布 430
30.7 问题 432
30.6 软件维护项目数据 432
30.8 进一步研究的主题 435
31.2.1 定义 437
31.2 软件移植成本估算关系 437
第31章 软件生命周期成本估算 437
31.1 引言 437
31.2.2 移植成本估算关系 438
31.3 软件移植估算与实际 439
31.4.1 定义 443
31.4 软件安装与培训成本估算 443
31.4.2 安装与培训成本数据与模型 444
31.5.1 现有数据与估算关系 445
31.5 软件开发的计算机成本估算 445
31.4.3 推荐的估算过程 445
31.5.2 在COCOMO数据库中的计算机时间数据 446
31.5.3 推荐的估算过程 447
31.6.1 文档等级 448
31.6 软件文档数量 448
31.5.4 计算机时间分布 448
31.6.2 文档工作量 450
31.7 其他软件相关生命周期成本 452
31.8 软件生命周期成本效益分析的一个示例 453
31.8.3 取代现有系统:可行性研究 454
31.8.2 现有软件系统的问题 454
31.8.1 PPI公司,设备管理系统 454
31.8.4 建议的中央设备管理与存货控制系统(CEMICS) 455
31.8.5 CEMICS生命周期成本分析 457
31.8.6 CEMICS生命周期成本效益分析 459
31.8.8 CEMICS无形收益 461
31.8.7 CEMICS有形收益 461
31.8.9 CEMICS成本收益比较与风险分析 462
31.9 进一步研究的主题 463
32.1.1 软件成本估算作为自我实现的预言 465
32.1 引言 465
第32章 软件项目计划与控制 465
32.1.2 软件成本估算与软件项目管理之间的优势互补 466
32.2 软件项目计划与控制框架结构 467
32.1.3 本章预览 467
32.3.2 构造PERT图 470
32.3.1 PERT图 470
32.3 项目进度安排技术 470
32.3.4 确定关键路径 472
32.3.3 关键路径分析 472
32.3.5 确定延迟开始与闲散时间 473
32.3.6 涉及计划与控制的问题 474
32.3.7 PERT图:变化与扩展 475
32.3.8 甘特图 476
32.4.1 90%综合症 477
32.4 详细的软件计划与控制:单元开发文件夹 477
32.3.9 甘特图与PERT图的比较 477
32.4.2 单元开发文件夹(UDF) 478
32.4.3 UDF封面 480
32.5.1 在整体项目状态监督与控制中的问题 481
32.5 监控项目花费与进展:挣值系统 481
32.5.2 挣值概念与汇总任务计划表 482
32.5.3 挣值汇总报告 484
32.6 软件项目计划与控制示例 486
32.5.4 讨论 486
32.7 构造软件成本数据库 502
32.9 问题 503
32.8 软件计划与控制总结性的讨论 503
33.1.1 提高软件生产率的重要性 506
33.1 引言 506
第33章 提高软件生产率 506
33.1.2 与软件成本估算的关系 508
33.1.5 软件生产率中的主要可控因素 509
33.1.4 软件生产率与人类经济学 509
33.1.3 开发生产率与生命周期生产率的关系 509
33.2.1 软件包特征 510
33.2 非编程选项:软件包 510
33.2.3 软件包的优点 511
33.2.2 软件包成本收益考虑 511
33.2.4 商业软件包的特点 513
33.2.5 软件包:做购买还是开发的决策时,需要考虑的特殊事项 514
33.2.6 关于软件包的信息资源 515
33.2.7 现有内部软件的改编 515
33.3 非编程选项:程序生成器 515
33.3.1 程序生成器的生产率优势 516
33.3.2 快速原型与改良设计 516
33.3.3 RP/ED方法的优点 517
33.3.4 RP/ED方法的不足 517
33.3.5 作为生产率度量的DSI/MM的应用 518
33.4 软件生产率可控性:产品属性 518
33.4.1 要求的可靠性 518
33.4.4 编程语言 519
33.4.2 数据库规模 519
33.4.3 软件产品复杂性 519
33.4.5 产品规模 520
33.5 软件生产率可控性:计算机属性 521
33.5.1 执行时间与主存储约束 521
33.5.2 示例:一个过程控制系统 522
33.5.3 资源控制 522
33.5.4 放宽的性能要求 523
33.5.5 虚拟机的易变性 523
33.5.6 计算机周转时间 524
33.6 软件生产率可控性:人员属性 524
33.6.1 人员安置 525
33.6.2 安置原则 525
33.6.3 激励 528
33.6.4 激励因素:一般原则 529
33.6.5 激励因素:软件人员 529
33.6.7 软件人员与生产率:总结 531
33.7 软件生产率可控性:项目属性 531
33.6.6 管理 531
33.7.1 现代编程规范(MPP) 532
33.7.2 MPP实现指南 532
33.7.3 软件工具的使用 533
33.7.4 期限约束 534
33.7.5 需求易变性 535
33.7.6 工作环境 535
33.8 建立起软件生产率提高过程 536
33.9 结论 540
第五部分 附录 544
附录A 软件成本数据收集表格与步骤 544
附录B 软件工作目标结构 567
附录C 缩写词表 576
参考书目 581
作者索引 597
主题词索引 600