第1章 质量 1
1.1 质量 1
1.1.1 与质量相关的概念 2
1.1.2 什么是质量 3
1.1.3 质量属性 5
1.2 客户 6
1.2.1 内部客户和外部客户 6
1.2.2 客户的确定 8
1.2.3 客户与质量的关系 11
1.3 不同的质量观点 11
1.4 质量概念的发展 13
1.5 质量形成过程 15
1.6 质量管理的发展历程 17
1.7 质量管理大师 19
1.7.1 现代质量改进之父——戴明 19
1.7.2 朱兰的质量三部曲 20
1.7.3 统计质量控制(SQC)之父——休哈特 21
1.7.4 田口的质量哲学 21
1.7.5 QCC之父——石川馨 22
1.7.6 全面质量控制之父——费根堡姆 23
1.7.7 零缺陷管理之父——菲利浦·克劳士比 23
小结 24
思考题 25
第2章 软件质量 26
2.1 软件特点 26
2.2.1 软件开发的基本过程 27
2.2 软件过程 27
2.2.2 软件开发过程模型 29
2.2.3 V模型的完整诠释 29
2.2.4 敏捷方法的极限编程 31
2.2.5 阶段性开发模型 34
2.3 软件缺陷 36
2.3.1 什么是软件缺陷 36
2.3.2 软件缺陷的产生 37
2.3.3 软件缺陷的分类 39
2.4 软件质量 40
2.4.1 软件质量需求的背景 40
2.4.2 软件质量需求的内容 42
2.4.3 软件质量的定义 43
2.4.4 软件质量的特性分析 44
2.5 软件质量的内容 46
2.5.1 软件产品质量 46
2.5.2 软件过程质量 47
2.5.3 软件商业环境质量 48
小结 49
思考题 49
第3章 软件质量工程体系 50
3.1 概述 50
3.1.1 系统工程学的思想 51
3.1.2 软件质量工程体系的建立 52
3.1.3 软件质量工程体系的构成 54
3.1.4 软件质量工程体系和管理体系的关系 55
3.2.1 软件质量的指标 56
3.2 软件质量指标和因素 56
3.2.2 软件产品的质量因素 59
3.2.3 软件过程的质量因素 61
3.3 软件质量模型分析 63
3.3.1 软件质量模型 63
3.3.2 模型评价和分析 65
3.4 软件质量工作层次 66
3.4.1 软件质量方针 67
3.4.2 软件质量控制 67
3.4.3 软件质量保证 68
3.4.4 软件质量改进 69
3.5.1 质量成本的概念 70
3.5 软件质量成本 70
3.5.2 引入质量成本的意义 71
3.5.3 劣质成本PONC和COPQ 72
3.5.4 软件劣质成本的组成 73
3.6 软件质量标准和度量 75
3.6.1 软件质量标准体系介绍 75
3.6.2 软件质量度量的地位 76
小结 78
思考题 78
第4章 软件质量控制与保证 79
4.1 软件质量控制的基本方法 79
4.1.1 目标问题度量法 80
4.1.2 风险管理法 80
4.2 软件质量控制模型和技术 83
4.2.1 软件质量控制模型 84
4.2.2 软件质量控制模型要素分析 85
4.2.3 软件质量控制特征和技术 86
4.2.4 软件质量控制实施和跟踪 88
4.3 软件质量控制工具 90
4.3.1 检查表 90
4.3.2 Pareto图 91
4.3.3 直方图 92
4.3.4 运行图 92
4.3.5 散布图 93
4.3.6 控制图 93
4.3.7 因果图 94
4.4 软件质量保证体系 94
4.5.1 信息收集和分析 96
4.5 改正性和预防性措施 96
4.5.2 解决方案及其执行 97
4.6 支持性质量保证手段 98
4.6.1 模板 98
4.6.2 文档的建立、应用和更新 99
小结 100
思考题 100
第5章 软件配置管理 101
5.1 概述 101
5.1.1 软件配置管理的概念 101
5.1.2 实施配置管理的目的与益处 102
5.2 配置项 103
5.2.1 配置项(Software Configuration Item,SCI)的定义 103
5.2.2 软件配置控制 104
5.2.3 配置项标识 105
5.3 基线 106
5.4 版本控制 109
5.4.1 版本的访问与同步控制 109
5.4.2 版本分支和合并 110
5.4.3 版本的历史记录 111
5.5 变更控制 111
5.5.1 变更类型 112
5.5.2 变更请求管理 112
5.5.3 变更管理的实施步骤 113
5.6 软件配置管理系统 116
5.6.1 软件配置标准 116
5.6.2 并发版本系统 117
5.6.3 IBM-Rational的ClearCase 121
5.6.4 基于构件复用的配置管理系统JBCM 123
小结 126
思考题 127
第6章 软件质量度量 128
6.1 测量基础 128
6.1.1 测量原理 129
6.1.2 测量标准 132
6.1.3 度量过程和原则 133
6.2 软件度量 135
6.2.1 软件开发生命周期的度量活动 135
6.2.2 软件的项目度量 137
6.2.3 软件产品的规模度量 138
6.2.4 代码行度量方法 139
6.2.5 功能点分析法 140
6.2.6 面向对象软件的对象点方法 142
6.3 软件质量度量方法 146
6.3.1 软件质量度量的分类 146
6.3.2 软件质量度量模型 148
6.3.3 基于时间的缺陷到达模式 149
6.3.4 PTR累积模型 151
6.3.5 Rayleigh模型 152
6.4 软件产品的质量度量 153
6.4.1 软件复杂性的度量 153
6.4.2 软件缺陷度量 155
6.4.3 顾客满意度度量 158
6.5 软件过程质量度量 161
6.5.1 软件需求过程的质量度量 162
6.5.2 软件过程生产率的度量 163
6.5.3 测试阶段的过程质量度量 164
6.5.4 维护阶段的过程质量度量 166
6.6 软件质量度量的执行 167
6.6.1 度量专家的思想和指导 167
6.6.2 软件度量的应用 170
6.6.3 选择和确定质量因素 171
6.6.4 质量度量中的数据采集 172
6.6.5 质量度量的统计分析 173
小结 175
思考题 175
第7章 软件可靠性度量和测试 176
7.1 软件可靠性 176
7.1.1 软件失效的过程与类别 177
7.2 可靠性模型及其评价标准 178
7.1.2 可靠性定义 178
7.2.1 可靠性模型 179
7.2.2 可靠性模型评价标准 181
7.2.3 可靠性增长模型和指数模型 181
7.3 软件可靠性测试和评估 182
7.3.1 影响软件可靠性的因素 183
7.3.2 系统的运行剖面与可靠性的关系 184
7.3.3 可靠性测试 185
7.3.4 可靠性测试结果分析和评估 186
小结 189
思考题 189
8.1.1 标准的层次 190
第8章 软件质量标准 190
8.1 软件质量标准概述 190
8.1.2 软件质量标准的沿革 191
8.2 ISO 9001和9000-3在软件中的应用简介 193
8.3 能力成熟度模型——CMM CMMI 194
8.3.1 CMM质量思想 194
8.3.2 CMM 关键过程域 195
8.3.3 PSP和TSP 199
8.3.4 CMMI 200
8.4 CMM中的质量框架 201
8.4.1 SQA活动通用框架 202
8.4.2 CMM流程改进 203
8.4.3 量化管理 205
8.5 IEEE软件工程标准 206
8.5.1 IEEE 730:2001 结构与内容 207
8.5.2 IEEE/EIA Std 12207——软件生命周期过程 208
8.5.3 IEEE Std 1012——验证与确认 208
8.5.4 IEEE Std1028——评审 210
8.6 其他质量标准 211
8.6.1 SPICE项目与ISO/IEC15504软件过程评估标准 211
8.6.2 Tick IT 212
小结 213
思考题 213
第9章 软件评审 214
9.1 为什么需要评审 214
9.2 软件评审的角色和职能 215
9.3.1 管理评审 216
9.3 评审的内容 216
9.3.2 技术评审 218
9.3.3 文档评审 219
9.3.4 过程评审 220
9.4 评审的方法和技术 221
9.4.1 评审的方法 222
9.4.2 评审的技术 223
9.5 准备评审会议 224
9.6 召开评审会议 226
9.7 跟踪和分析评审结果 228
9.8 如何实施成功的评审 230
小结 231
思考题 232
10.1.1 全面质量管理 233
第10章 软件全面质量管理 233
10.1 概述 233
10.1.2 零缺陷管理 235
10.1.3 六西格玛质量管理 236
10.1.4 六西格玛质量管理和TQM比较 237
10.2 质量管理战略和文化 239
10.2.1 领导变革和管理承诺 240
10.2.2 品牌战略和市场竞争 241
10.2.3 降低质量成本 242
10.3 软件质量管理模式 244
10.3.1 目标导向模式 244
10.3.2 顾客导向模式 246
10.3.3 价值驱动模式 247
10.3.4 其他管理模式 249
10.4 零缺陷作业法与评估 251
10.4.1 零缺陷管理思想体系和原理 251
10.4.2 零缺陷作业法 253
10.4.3 零缺陷管理的评估 254
10.5 六西格玛的技术和工具 255
10.5.1 标准方差和泊松分布 256
10.5.2 六西格玛的基本工具 257
10.5.3 六西格玛的高级技术 260
10.6 五阶段方法DMAIC和DFSS 261
10.6.1 DMAIC 262
10.6.2 DFSS 263
10.6.3 IDDOV和PIDOV 264
10.7.1 TQM的实施步骤 265
10.7 全面质量管理在软件开发中实施 265
10.7.2 零缺陷软件的实践 267
10.7.3 六西格玛软件项目的实施 268
10.7.4 华为公司的TQM关键品质 269
10.8 世界质量组织和管理奖 270
10.8.1 我国质量管理奖 270
10.8.2 日本科学技术联盟和戴明质量奖 271
10.8.3 美国质量学会和鲍德里奇国家质量奖 272
10.8.4 欧洲质量组织和质量奖 274
小结 275
思考题 275
11.1 软件质量管理的组织介绍 276
11.1.1 基本的软件质量组织 276
第11章 SQA的组织活动 276
11.1.2 其他的软件质量组织 277
11.2 SQA组织结构和角色 278
11.2.1 SQA组织的建立 278
11.2.2 常用的组织结构模型 279
11.2.3 角色的分类和职能 281
11.2.4 各角色之间的关系 282
11.3 SQA组织的目标和责任 283
11.3.1 SQA计划 283
11.3.2 评审和审核 285
11.3.3 SQA报告 286
11.3.4 SQA度量 287
11.3.5 SQA评估任务 288
11.4.1 SQA人员的要求 289
11.4 SQA人员的要求和培养 289
11.4.2 SQA人员的培养和发展 290
11.5 员工的培训与认证 291
11.5.1 培训目标和过程 291
11.5.2 认证 292
11.5.3 六西格玛角色和职责 294
11.5.4 六西格玛培训 295
小结 297
思考题 297
第12章 软件质量计划 298
12.1 朱兰三部曲与质量策划 298
12.2.1 质量计划的目标和要素 300
12.2 软件质量计划 300
12.2.2 软件质量计划内容 301
12.2.3 软件质量计划的制订原则 303
12.2.4 制定质量计划的方法和规程 304
12.3 质量计划实例 305
12.3.1 小项目与内部项目的质量计划 305
12.3.2 大型项目的质量计划 306
12.4 质量计划实施体系 309
12.4.1 基础设施防护和组织关系 309
12.4.2 项目生命周期的质量活动 310
12.4.3 标准化、认证与SQA系统评估 311
小结 311
思考题 312
13.1 需求分析的概念 313
第13章 高质量的软件需求分析 313
13.1.1 软件系统的构建层次 314
13.1.2 软件需求工程过程 315
13.2 需求的获取与分析 316
13.2.1 需求获取 316
13.2.2 需求分析 319
13.2.3 需求的传递 322
13.3 需求分析建模 323
13.3.1 结构化分析建模 323
13.3.2 面向对象的分析建模 327
13.3.3 敏捷建模(agile modeling) 329
13.4 系统需求的质量保证 329
13.4.1 严格的需求评审 330
13.4.2 可控的需求变更——需求管理 332
小结 333
思考题 334
第14章 提高软件设计质量 335
14.1 软件设计 335
14.1.1 软件设计的目标 335
14.1.2 软件设计评价标准 336
14.1.3 软件设计原则 339
14.2 软件体系结构 341
14.2.1 体系结构的模型和视图 342
14.2.2 体系结构的分类 343
14.2.3 体系结构的设计 345
14.2.4 异步体系结构的选择 346
14.3.1 设计模式的分类 347
14.3 软件设计模式 347
14.3.2 MVC模式 350
14.3.3 设计模式的作用 352
14.3.4 通过UML改善功能设计 353
14.4 软件设计优化 354
14.4.1 模块设计和接口设计的要求 354
14.4.2 详细设计的要求 355
14.4.3 界面设计的要求 356
14.5 一些典型的系统设计 357
14.5.1 J2EE系统的设计 357
14.5.2 .Net系统的设计 359
14.6.1 数据层的需求和构建 361
14.6 数据库设计质量 361
14.6.2 数据字典 362
14.6.3 数据流设计 363
小结 363
思考题 364
第15章 高质量编程 365
15.1 代码风格 365
15.1.1 为什么要谈代码风格 365
15.1.2 Windows程序命名规则 366
15.1.3 GNU风格习惯 368
15.1.4 函数处理 369
15.2 编程规则 371
15.2.1 函数重载 371
15.2.2 代码重构 372
15.2.3 Java编程规则 373
15.2.4 C++编程规则 374
15.3 提高程序质量的技术 376
15.3.1 内存分配和管理 376
15.3.2 智能指针 379
15.3.3 提高程序性能的方法 382
15.4 代码审查 384
15.4.1 静态分析和代码审查的目的 384
15.4.2 代码走查 385
15.4.3 代码审查 385
15.5 单元测试 388
15.5.1 单元测试的重要性 388
15.5.2 单元测试方法 389
15.5.3 单元测试工具简介 390
小结 392
思考题 392
第16章 软件测试的质量 393
16.1 软件测试 393
16.1.1 软件测试和质量保证的关系 394
16.1.2 测试在软件开发各个阶段的任务 394
16.1.3 软件测试目标 395
16.2 测试的现实和原则 396
16.2.1 测试的现实 396
16.2.2 测试的原则 397
16.3 测试的方法应用之道 398
16.3.1 测试的三维构成 398
16.3.2 测试方法的辩证统一 400
16.3.3 验证和确认——缺一不可 403
16.3.4 测试用例设计方法的综合运用 404
16.3.5 测试工具的有效使用 407
16.3.6 开发高质量的测试脚本 409
16.4 测试目标实现的完整性和有效性 410
16.4.1 集成测试 410
16.4.2 功能测试和适用性测试 411
16.4.3 性能测试和容量测试 412
16.4.4 容错性测试和安全性测试 414
16.4.5 回归测试 415
16.4.6 安装测试 415
16.5 测试的过程评审和质量保证 416
16.5.1 测试计划的有效性和全面性 416
16.5.3 严格执行测试 418
16.5.2 测试用例的复审 418
16.5.4 准确报告软件缺陷 419
16.5.5 提高测试覆盖度 420
16.5.6 测试结果分析和质量报告 421
16.6 软件测试组织和管理 422
16.6.1 测试项目的管理原则 422
16.6.2 测试资源的合理分配 422
16.6.3 测试进度的控制 423
16.6.4 测试风险的管理 424
小结 425
思考题 426
17.1 软件发布程序管理 427
17.1.1 软件产品发布程序 427
第17章 软件发布和维护的质量管理 427
17.1.2 软件服务模式的产品发布程序 429
17.1.3 软件产品发布类型和版本 430
17.1.4 程序经理 432
17.2 软件部署 433
17.2.1 软件系统运行的基础架构平台 434
17.2.2 软件运行的服务质量 435
17.2.3 软件部署规划 438
17.2.4 软件部署的逻辑设计 441
17.2.5 软件部署的物理设计 445
17.2.6 软件部署的可用性和可伸缩性策略 447
17.2.7 软件部署的安全性设计和验证 452
17.2.8 软件部署验证和实施 453
17.3.1 软件维护的作用和分类 454
17.3 软件维护 454
17.3.2 软件维护的框架和计划 456
17.3.3 软件产品的维护质量 457
17.3.4 软件部署的维护质量 459
17.3.5 软件技术支持 459
17.3.6 软件维护的管理性控制 461
小结 462
思考题 462
附录A 软件质量术语中英文对照 463
附录B 计算机软件质量相关的国家和国际标准 470
附录C 全面质量管理纲要 472
附录D 计算机软件质量保证计划规范 477
附录E 评审检查表 482
参考文献 484