本书从过程管理角度,分析了影响软件质量的相关因素,分享了可行易操作的实施与管理方法。本书涉及软件缺陷分类、预防、发现、清除和管理方面内容,结合多个耐人寻味的小故事,浅显易懂地揭示了开发中面临的各种影响软件质量的问题。同时,结合软件开发以及管理实践,给出了简单、实用的模板和例子,有助于提高软件开发、项目管理和测试水平,从而达到提高开发产品质量的目的。.\r\n
本书系统性、实用性和可读性较强,文中编制、搜集、列举的模板及数据对软件公司日常开发、过程改进、CMM/CMMI评估等有很强的指导意义和实用价值。..\r\n
这是一本与软件开发质量相关的指导书,也是一本多年来在软件开发管理实践中总结出来的一套系统经验的书。本书适合于开发管理人员、项目管理人员、开发人员及测试人员等任何对过程管理、软件开发和缺陷预防、清除、管理等各种实践感兴趣的人员阅读,也适合希望通过CMMI评估提高整体开发能力的公司和个人作为参考。同时,还可以作为高等院校计算机软件工程课程的参考教材使用。...
第1章 缺陷综述. 1
本章概括地介绍了缺陷的定义、分类、产生原因、预防以及发现手段。大量实践证明,软件产品具有不可见性、灵活性和复杂性的特征。因此,软件产品比传统产品更容易出现缺陷,提高软件产品质量的途径在于加强预防,及时发现与清除软件缺陷。
1.1 软件缺陷定义 2
1.2 软件缺陷生命周期 6
1.3 缺陷信息 8
1.4 软件缺陷分类 9
1.4.1 缺陷类型 9
1.4.2 缺陷严重程度 10
1.4.3 缺陷优先级 11
1.4.4 缺陷状态 12
1.5 缺陷产生的原因 12
1.5.1 缺陷是谁“生产”的 13
1.5.2 缺陷来源 14
1.5.3 缺陷根源 15
1.6 缺陷预防 16
1.6.1 缺陷预防的目的 17
1.6.2 缺陷预防的目标 18
1.6.3 缺陷预防的策略 18
1.6.4 缺陷预防的活动 19
1.6.5 缺陷预防的验证 21
1.6.6 软件质量特性的提高 23
1.7 缺陷发现手段 24
1.7.1 同行评审 25
1.7.2 测试 26
1.7.3 管理评审 27
1.7.4 QA发现 27
1.7.5 项目组内部发现 28
1.7.6 客户反馈 28
1.8 缺陷修复和沟通策略 29
1.9 人员培训 32
1.10 小结 32
第2章 需求开发与管理 34
需求开发过程包括从情况收集、分析和评价到编写文档等一系列产生需求的复杂活动,主要有用户需求获取、需求分析、编写需求规格说明书等过程,这些活动经常是相互穿插和反复交互的。同时,该过程还与需求管理、需求验证及测试等过程密切相关。需求管理过程控制和维持了需求的约定,管理着产品和产品构件的需求,识别需求与项目计划及工作产品的不一致,从而保证了项目开发过程的一致性,这个过程使用户能够得到所需的产品。该过程从需求获取开始贯穿于整个项目生命周期,一般包括需求变更控制、需求配置管理、需求跟踪、需求状态跟踪等工作。实践中,最有效的需求管理方法是使用需求追踪矩阵(RTM)。
2.1 需求的概念和层次 38
2.2 需求开发 40
2.2.1 需求获取 40
2.2.2 需求分析 44
2.2.3 编制软件需求文档 46
2.3 需求管理 47
2.3.1 需求管理方法 47
2.3.2 需求追踪矩阵 48
2.3.3 需求变更 61
2.4 需求验证 65
2.4.1 评审需求 65
2.4.2 测试需求 69
2.4.3 需求评价标准 69
2.5 小结 70
第3章 配置与变更管理 72
软件极容易发生变更,现代软件开发过程中一个巨大的挑战就是在复杂的协作环境下,通过配置管理和变更控制,保持各部分工作产品的完整性和正确性。从这点上看,缺陷的预防不再仅仅是一个配置管理的内容,更发展为高度灵活和可扩展的缺陷及变更管理系统。配置管理和变更控制的有效实践可以作为评估组织软件管理能力的标尺之一,也可以是实施软件配置管理活动的指南。通过这些有效实践,可以在很大程度上避免、预防软件缺陷的发生。
3.1 相关概念 75
3.1.1 配置项 78
3.1.2 版本 80
3.1.3 基线 81
3.1.4 配置库 83
3.2 配置管理活动 83
3.2.1 制定配置管理计划 84
3.2.2 建立三库 84
3.2.3 确定配置标识规则 87
3.2.4 版本控制 89
3.2.5 构建和发行管理 89
3.2.6 变更控制 90
3.2.7 配置审计 92
3.2.8 配置管理报告 96
3.3 变更管理活动 100
3.3.1 变更申请 101
3.3.2 变更评审 104
3.3.3 变更执行 105
3.3.4 变更验证 105
3.3.5 入库及发布 105
3.4 配置与变更管理相关问题 106
3.4.1 有关的角色和对应职责 106
3.4.2 有效实践 107
3.4.3 日构建与冒烟测试 112
3.4.4 工作环境标准 116
3.4.5 配置管理常见误区 117
3.5 小结 119
第4章 同行评审 121
同行评审是由软件工作产品生产者的同行遵循已定义的规程对产品进行的技术评审。通过同行评审,开发人员能够及时得到专家的帮助和指导,加深对软件产品的理解,有利于及早和高效地从软件工作产品中识别并消除缺陷,让软件变得更易维护,同时减少最终遗漏到产品发布时的缺陷。其主要工作第一是发现工作产品中的具体错误,第二是通过对这些错误的分类和统计,发现共同的缺陷类型和修改这类缺陷的方法,避免今后类似的缺陷发生。
4.1 同行评审与测试的关系 123
4.2 同行评审的种类和对象 124
4.2.1 同行评审的种类 125
4.2.2 同行评审的对象 125
4.3 同行评审过程 126
4.3.1 正式评审流程 127
4.3.2 技术审查流程 128
4.3.3 走查流程 129
4.4 同行评审方式的选择 129
4.4.1 三种同行评审方式的比较 130
4.4.2 同行评审的结果 130
4.4.3 正式评审的特征 131
4.4.4 工作产品的同行评审方式 132
4.5 迭代生命周期的审查 133
4.6 同行评审的注意事项 134
4.6.1 同行评审遵循的原则 135
4.6.2 同行评审关注的问题 136
4.6.3 同行评审通过的准则 137
4.6.4 同行评审的经验共享 138
4.6.5 文档审查重点 139
4.7 同行评审的度量 140
4.7.1 常用度量元 140
4.7.2 同行评审的质量准则 141
4.7.3 建议的同行评审效率 142
4.7.4 同行评审覆盖率 143
4.8 评审常见问题 143
4.8.1 文化问题 144
4.8.2 准备问题 145
4.8.3 焦点问题 147
4.8.4 人员问题 148
4.8.5 效率问题 149
4.8.6 效果问题 150
4.9 小结 150
第5章 软件测试 152
软件测试就是为了发现缺陷而运行程序的过程。广义的软件测试包含验证和确认,验证就是要用数据证明是否在正确地制造产品,强调的是过程的正确性;确认就是要用数据证明是否制造了正确的产品,强调结果的正确性。所以广义的软件测试指软件生命周期内所有的检查、评审和确认活动。狭义的软件测试指检查代码和文档的质量问题,努力发现问题,进行客观质量评价,测试的对象包括源程序/目标代码、各开发阶段的文档。一个好的测试用例在于能发现至今未发现的缺陷;一个成功的测试是发现了至今未发现的缺陷的测试。
5.1 软件测试的基本问题 154
5.1.1 软件测试概念 155
5.1.2 软件测试对象 155
5.1.3 软件测试目的 155
5.1.4 软件测试原则 156
5.1.5 测试过程的两个重要里程碑 156
5.1.6 测试可以发现的缺陷 157
5.1.7 软件测试的基本方法 158
5.1.8 测试工程师的技能 158
5.2 软件测试过程 159
5.2.1 单元测试 160
5.2.2 集成测试 164
5.2.3 验收测试 173
5.3 软件测试方法 173
5.3.1 功能测试 175
5.3.2 回归测试 176
5.3.3 性能评测 179
5.3.4 用户界面测试 180
5.3.5 安全性测试 180
5.3.6 安装性测试 181
5.4 测试技术专题 182
5.4.1 测试策略 182
5.4.2 手工/自动测试时机 183
5.4.3 通过二八定理寻找薄弱环节 184
5.4.4 测试用例复审 185
5.4.5 何时终止测试 186
5.4.6 Web性能测试 188
5.4.7 内存泄漏测试 195
5.4.8 测试风险的管理 198
5.4.9 代码移交过程测试 200
5.4.10 处理不可重复出现的Bug 202
5.5 测试的度量 204
5.6 小结 206
第6章 QA发现的不符合问题的处理 208
QA是指PPQA(前置的产品和过程质量保证,侧重于事前教育,从过程上进行缺陷预防工作),与传统意义上的QC(后置的质量控制,侧重于检查和事后发现)有着很大的不同。QA的内容主要包括过程评价、产品和服务评价、过程指导工作。QA工作有效性的衡量一般通过“投入的工作量占项目总体工作量的比例”、“发现的不符合问题数量”、“提供经验数量”、“对公司的有关过程和标准提出改进建议数量”等指标进行度量。
6.1 QA流程概述 209
6.2 QA的工作内容 211
6.2.1 QA的角色 211
6.2.2 QA工作详述 212
6.2.3 对QA职责的要求 216
6.3 QA发现的问题 216
6.4 QA工作机制 219
6.4.1 不符合项处理机制 219
6.4.2 QA工作报告机制 220
6.4.3 问题跟踪和验证 223
6.4.4 QA应遵循的原则 224
6.5 QA的组织形式 225
6.6 对QA的误解 226
6.7 QA工作的度量.. 228
6.8 小结 229
第7章 软件度量 231
软件度量是针对软件开发项目、过程及产品进行数据定义、收集以及分析的持续性定量化的过程。有效度量的作用在于能够帮助软件组织认清自身的能力,理解、评价、控制、预测和改进软件工作产品或软件过程。根据对度量数据结果的分析,进一步为它们的生产和服务制订出可行的计划;及时找到变化趋势,预测问题,发现或者采取有效手段预防缺陷;不断改进软件开发过程。软件度量活动一般从项目级开始,逐步向上扩展为过程度量和产品度量,向下扩展为个体行为度量。软件度量中关键的内容是度量模型的建立和资源模型曲线的绘制及应用。
7.1 软件度量及其方针 233
7.2 度量活动 235
7.2.1 度量目标 236
7.2.2 度量元 238
7.2.3 度量模型 240
7.2.4 基本过程 251
7.2.5 度量方法与采集 252
7.3 资源模型 257
7.3.1 资源模型的定义 258
7.3.2 项目级资源模型 260
7.3.3 组织级资源模型 262
7.3.4 软件质量度量 263
7.4 数据质量 265
7.4.1 数据的真实性 265
7.4.2 数据的同步性 266
7.4.3 数据的有效性 266
7.4.4 数据的一致性 266
7.5 软件度量相关问题 267
7.5.1 增加度量正确性的措施 268
7.5.2 软件过程性能 268
7.5.3 度量过程的常见问题 271
7.6 缺陷度量 272
7.6.1 什么是缺陷度量 272
7.6.2 缺陷度量元 273
7.6.3 缺陷密度的定义 274
7.6.4 缺陷密度的用途 275
7.6.5 缺陷管理库 277
7.7 缺陷分析 278
7.7.1 缺陷种类分析 279
7.7.2 缺陷根源分析 281
7.7.3 缺陷注入-发现矩阵 281
7.7.4 收敛趋势分析 283
7.7.5 回归分析 286
7.7.6 缺陷排除分析 288
7.7.7 ODC缺陷分析 291
7.8 小结 292
第8章 缺陷管理 294
缺陷管理指对软件开发过程中缺陷发现、确认、定位、修改、评审、关闭等行为进行跟踪管理的过程。也就是在软件生命周期中获取、管理、沟通全部变更请求的过程(从变更的建议到变更的解决)。缺陷管理的目标是力争让软件开发的每件事情都能保证质量并按时完成。广义的缺陷管理理念就是要通过提高软件开发管理水平,来提高软件质量,创造效益,使用户满意。具体化就是保证进度的理念、保证质量的理念、坚持流程的理念、坚持分析的理念和使用工具的理念。通过将已有的缺陷汇总、分类,可以进行有效地分析。
8.1 缺陷管理的目标和理念 296
8.1.1 保证进度的理念 297
8.1.2 保证质量的理念 297
8.1.3 坚持流程的理念 297
8.1.4 坚持分析的理念 298
8.1.5 使用工具的理念 298
8.1.6 缺陷管理范例 298
8.2 缺陷管理的等级 299
8.2.1 个体级缺陷管理 300
8.2.2 项目级缺陷管理 300
8.2.3 组织级缺陷管理 301
8.2.4 缺陷度量 301
8.2.5 缺陷预防 302
8.3 质量控制工具 303
8.3.1 新旧七种工具 304
8.3.2 控制图的数学基础 313
8.3.3 控制图的种类和作用 314
8.3.4 典型失控状态 317
8.4 统计技术应用 318
8.4.1 利用控制图的策略 318
8.4.2 X图和R图应用案例 319
8.4.3 XmR图应用案例 324
8.5 小结 326
第9章 经验教训库 327
建立一个有效的经验教训库,存放以往开发的项目过程中总结的经验,可以提高开发效率和产品质量。经验库中包含了同行评审检查表(CheckList)、工作产品审阅表、测试用例(安装测试用例、功能测试用例、界面测试用例、性能测试用例、配置测试用例、安全和访问控制测试用例、故障转移和恢复测试用例、代码检查测试用例库、文档测试用例等)、常用测试检查表(包括代码检查表、安装检查表、菜单检查表、页面元素检查表、查询及报表检查表、通用功能检查表)以及常见缺陷总结。
9.1 同行评审经验库 327
9.1.1 需求规格说明书评审检查表 328
9.1.2 项目计划检查表 329
9.1.3 概要设计说明书检查表 331
9.1.4 设计说明书检查表 332
9.1.5 编码检查表 333
9.1.6 测试用例检查表 336
9.1.7 产品验收和发布检查表 337
9.1.8 工作产品审阅情况记录表 338
9.2 测试经验库 338
9.2.1 测试用例库 339
9.2.2 常用测试检查表 354
9.3 开发经验库 365
9.3.1 需求经验库 365
9.3.2 设计经验库 365
9.3.3 实现经验库 366
9.3.4 界面设计 367
9.4 常见缺陷库 374
9.4.1 开发规范问题 375
9.4.2 普通编程缺陷 376
9.4.3 Java特有编程缺陷 377
9.4.4 字符串导致的性能问题 378
9.4.5 多线程并发引起资源冲突 378
9.4.6 资源合理使用 382
9.4.7 形成程序日志 383
9.4.8 其他程序优化问题 383
9.5 小结 384
第10章 思考 385
软件产品的质量应贯穿软件研发的整个过程,从签订软件开发合同到最后的维护。无缺陷软件并不是精通各种开发语言和开发工具就可以实现的,而必须掌握开发无缺陷代码的思想、理论、技术和方法。
10.1 质量因素 386
10.2 生命周期 390
10.3 合理的计划 391
10.3.1 规模估计 394
10.3.2 工作量估计 395
10.3.3 进度估计 397
10.3.4 估计修正 398
10.4 项目监控 398
10.5 项目收尾工作 399
10.6 风险管理 400
10.7 无缺陷软件 401
10.8 TQM 402
10.9 成熟度模型 404
10.10 小结 408
附录A 技术评审和管理评审 410
附录B 国内外常用软件质量网站 414
附录C 常见缺陷管理工具 417
附录D 各种公理的说明 421
附录E 软件测试经典著作推荐 423
附录F 涉及到的名词解释 424
附录G X图和R图的计算控制限常量 428
参考文献... 429
于波;姜艳
无封面