第一部分 软件质量透视第1章 质量保证框架 2
1.1 什么是质量 2
1.2 预防与检测 2
1.3 验证与确认 3
1.4 软件质量保证 4
1.5 质量保证的组成 5
1.6 软件测试 5
1.7 质量控制 5
1.8 软件配置管理 6
1.9 软件配置管理的要素 6
1.10 组件确定 7
1.11 版本控制 7
1.12 配置构建 8
1.13 变更控制 8
1.14 软件质量保证计划 8
1.15 开发和实施软件质量保证计划的步骤 9
1.15.1 步骤1:编写计划 9
1.15.2 步骤2:获得管理层认可 10
1.15.3 步骤3:获得开发人员认可 10
1.15.4 步骤4:准备编写SQA计划 10
1.15.5 步骤5:执行SQA计划 10
1.16 质量标准 10
1.16.1 ISO9000 11
1.16.2 能力成熟度模型 11
1.16.3 PCMM 13
1.16.4 CMMI 14
1.16.5 美国波多里奇国家质量奖 14
第2章 测试技术概述 16
2.1 黑盒测试(功能测试) 16
2.2 白盒测试(结构测试) 16
2.3 灰盒测试(功能与结构测试) 17
2.3.1 手工测试与自动测试 17
2.3.2 静态测试与动态测试 17
2.4 软件测试技术的分类 18
第3章 质量的持续改进过程 22
3.1 Edward Deming的贡献 22
3.2 统计方法的角色 22
3.2.1 因果图 22
3.2.2 流程图 23
3.2.3 帕累托图 23
3.2.4 运行图 23
3.2.5 直方图 23
3.2.6 散布图 23
3.2.7 控制图 23
3.3 Deming的14条质量原则 23
3.3.1 第1条:树立始终如一的目标 23
3.3.2 第2条:采用新的质量观念 24
3.3.3 第3条:停止对大量检查的依赖 24
3.3.4 第4条:结束仅靠价签来激励企业的实践活动 24
3.3.5 第5条:坚持不懈地、永久地改进生产和服务系统 24
3.3.6 第6条:组织培训及再培训 25
3.3.7 第7条:确立领导职责 25
3.3.8 第8条:驱除恐惧 25
3.3.9 第9条:打破员工区域之间的栅栏 25
3.3.10 第10条:为员工解除口号、训词及目标 26
3.3.11 第11条:去除数字化目标 26
3.3.12 第12条:消除员工自豪感的障碍 26
3.3.13 第13条:组织有关教育和再培训方面的强有力的课程 26
3.3.14 第14条:采取行动完成转变 26
3.4 通过“计划、执行、检查、改进”实现持续改进 27
3.5 遵循PDCA循环 27
第二部分 生命周期测试概述第4章 概述 30
4.1 瀑布式开发方法 30
4.2 “阶段化”持续改进方法 31
4.3 生命周期测试的心理学 31
4.4 将软件测试作为持续改进过程 31
4.5 测试的圣经:软件测试计划 33
4.6 制定测试计划的主要步骤 34
4.6.1 步骤1:定义测试目标 35
4.6.2 步骤2:确定测试方法 35
4.6.3 步骤3:定义测试环境 35
4.6.4 步骤4:制定测试规约 35
4.6.5 确定测试日程表 35
4.6.6 评审及批准测试计划 35
4.7 测试计划的组成 35
4.8 将技术评审作为持续改进过程 37
4.9 技术评审的动机 38
4.10 评审的类型 38
4.11 结构化走查 38
4.12 审查 38
4.13 参与者角色 40
4.14 有效评审的步骤 40
4.14.1 步骤1:规划评审过程 40
4.14.2 步骤2:安排评审进度 41
4.14.3 步骤3:制定评审议程 41
4.14.4 步骤4:创建评审报告 41
第5章 验证需求阶段 42
5.1 通过技术评审测试需求 43
5.2 审查和走查 43
5.3 检查表 43
5.4 方法检查表 43
5.5 需求可追溯性矩阵 44
5.6 制定系统/验收测试计划 44
第6章 验证逻辑设计阶段 46
6.1 数据模型、过程模型及其联系 46
6.2 通过技术评审测试逻辑设计 47
6.3 细化系统/验收测试计划 48
第7章 验证物理设计阶段 49
7.1 通过技术评审测试物理设计 49
7.2 创建集成测试用例 50
7.3 集成测试方法 50
7.3.1 步骤1:标识出单元接口 50
7.3.2 步骤2:全面协调接口 50
7.3.3 步骤3:创建集成测试条件 51
7.3.4 步骤4:评估集成测试条件的完整性 51
第8章 验证程序单元设计阶段 52
8.1 通过技术评审测试程序单元设计 52
8.2 顺序结构 52
8.3 选择结构 52
8.4 循环结构 52
8.5 编写单元测试用例 53
第9章 代码编写阶段的检验 54
9.1 用技术评审对代码编写进行测试 54
9.2 执行测试计划 55
9.3 单元测试 55
9.4 集成测试 55
9.5 系统测试 56
9.6 验收测试 56
9.7 缺陷记录 56
第三部分 软件测试方法第10章 开发方法概述 60
10.1 生命周期开发的局限性 60
10.2 客户端/服务器架构的挑战 60
10.3 客户端/服务器架构中螺旋测试的心理学 61
10.3.1 新思想 61
10.3.2 对测试人员/开发人员的理解 62
10.3.3 项目的目标:把质量保证和开发结合起来 62
10.3.4 迭代/螺旋式开发方法 63
10.4 JAD的角色 64
10.5 原型的角色 65
10.6 开发原型的方法 66
10.6.1 开发原型 66
10.6.2 向管理层演示原型 67
10.6.3 向用户演示原型 67
10.6.4 修订并定稿规约 67
10.6.5 开发产品系统 68
10.7 持续改进螺旋测试方法 68
第11章 信息收集(计划) 71
11.1 步骤1:准备访谈 72
11.1.1 任务1:确定参加访谈的人 72
11.1.2 任务2:确定议程 72
11.2 步骤2:执行访谈 73
11.2.1 任务1:理解项目 73
11.2.2 任务2:理解项目的目标 73
11.2.3 任务3:理解项目的状态 74
11.2.4 任务4:理解项目的计划 75
11.2.5 任务5:理解项目的开发方法 75
11.2.6 任务6:确定高级业务需求 75
11.2.7 任务7:进行风险分析 76
11.3 步骤3:总结访谈成果 77
11.3.1 任务1:总结访谈 77
11.3.2 任务2:确认访谈成果 78
第12章 测试计划(计划) 79
12.1 步骤1:建立测试计划 80
12.1.1 任务1:准备引言部分 80
12.1.2 任务2:定义总体的功能需求 81
12.1.3 任务3:确定手动/自动测试的种类 82
12.1.4 任务4:确定测试结束标准 82
12.1.5 任务5:制定回归测试策略 83
12.1.6 任务6:定义测试交付物 84
12.1.7 任务7:组建测试团队 85
12.1.8 任务8:建立测试环境 86
12.1.9 任务9:定义依赖关系 86
12.1.10 任务10:创建测试进度表 87
12.1.11 任务11:选择测试工具 89
12.1.12 任务12:建立缺陷报告/跟踪规程 89
12.1.13 任务13:建立变更请求规程 90
12.1.14 任务14:建立版本控制规程 91
12.1.15 任务15:定义配置构建规程 91
12.1.16 任务16:定义项目问题解决规程 91
12.1.17 任务17:建立报告规程 92
12.1.18 任务18:定义批准规程 92
12.2 步骤2:定义度量目标 92
12.2.1 任务1:定义度量标准 93
12.2.2 任务2:定义度量要点 93
12.3 步骤3:评审与批准测试计划 95
12.3.1 任务1:评审的日程安排/执行 95
12.3.2 任务2:获得批准 96
第13章 测试用例设计(执行) 97
13.1 步骤1:设计功能测试 97
13.1.1 任务1:完善功能测试需求 97
13.1.2 任务2:建立功能/测试矩阵 102
13.2 步骤2:设计图形用户界面测试 103
13.2.1 任务1:确定应用程序图形用户界面组件 103
13.2.2 任务2:定义图形用户界面测试 104
13.3 步骤3:定义系统/验收测试 105
13.3.1 任务1:确定可能的系统测试 105
13.3.2 任务2:设计阶段性系统测试 105
13.3.3 任务3:确定潜在的验收测试 107
13.4 步骤4:测试设计的评审和批准 107
13.4.1 任务1:评审的日程安排/准备 107
13.4.2 任务2:获得批准 107
第14章 测试开发(执行) 108
14.1 步骤1:开发测试脚本 108
14.1.1 任务1:开发自动/手动图形用户界面测试和功能测试脚本 108
14.1.2 任务2:开发自动/手动的阶段性系统测试的脚本 109
14.2 步骤2:测试开发的评审和批准 109
14.2.1 任务1:评审的日程安排/准备 109
14.2.2 任务2:获得批准 109
第15章 通过可追溯性实现测试覆盖 111
15.1 用例和可追溯性 112
15.2 小结 113
第16章 测试执行/评价(执行/检查) 114
16.1 步骤1:组织测试内容并进行测试 114
16.1.1 任务1:回归测试上次螺旋过程中的缺陷 114
16.1.2 任务2:执行新螺旋测试中的手动/自动测试 115
16.1.3 任务3:记录螺旋测试中发现的缺陷 115
16.2 步骤2:测试评价 115
16.3 步骤3:发布中期报告 116
16.3.1 任务1:重新安排测试进度表 116
16.3.2 任务2:确定需求变更 116
第17章 准备下次螺旋测试(改进) 118
17.1 步骤1:更新测试内容 119
17.1.1 任务1:更新功能/图形用户界面测试内容 119
17.1.2 任务2:更新阶段性系统测试内容 119
17.1.3 任务3:更新验收测试内容 119
17.2 步骤2:重新评价测试队伍、规程、环境 119
17.2.1 任务1:评价测试队伍 119
17.2.2 任务2:评审测试控制规程 120
17.2.3 任务3:更新测试环境 120
17.3 步骤3:发布中期测试报告 121
第18章 进行系统测试 123
18.1 步骤1:完成系统测试计划 123
18.1.1 任务1:确定系统测试的类型 123
18.1.2 任务2:确定系统测试的日程安排 124
18.1.3 任务3:组建系统测试团队 126
18.1.4 任务4:建立系统测试环境 126
18.1.5 任务5:安装系统测试工具 127
18.2 步骤2:完成系统测试用例 127
18.2.1 任务1:设计/脚本化性能测试 127
18.2.2 任务2:设计/脚本化安全性测试 129
18.2.3 任务3:设计/脚本化容量测试 130
18.2.4 任务4:设计/脚本化压力测试 130
18.2.5 任务5:设计/脚本化兼容性测试 131
18.2.6 任务6:设计/脚本化转换测试 131
18.2.7 任务7:设计/脚本化易用性测试 131
18.2.8 任务8:设计/脚本化文档测试 132
18.2.9 任务9:设计/脚本化备份测试 133
18.2.10 任务10:设计/脚本化恢复性测试 133
18.2.11 任务11:设计/脚本化安装测试 133
18.2.12 任务12:设计/脚本化其他类型的系统测试 134
18.3 步骤3:系统测试的评审和批准 135
18.3.1 任务1:评审的日程安排/执行 135
18.3.2 任务2:获得批准 135
18.4 步骤4:执行系统测试 135
18.4.1 任务1:对系统测试中的修正进行回归测试 135
18.4.2 任务2:执行新的系统测试 135
18.4.3 任务3:记录系统测试中发现的缺陷 136
第19章 进行验收测试 137
19.1 步骤1:完成验收测试计划 138
19.1.1 任务1:确定验收测试的类型 138
19.1.2 任务2:确定验收测试的日程安排 138
19.1.3 任务3:组建验收测试团队 138
19.1.4 任务4:建立验收测试环境 139
19.1.5 任务5:安装验收测试工具 139
19.2 步骤2:完成验收测试用例 139
19.2.1 任务1:系统级别测试用例的子集 139
19.2.2 任务2:设计/脚本化附加的验收测试 140
19.3 步骤3:验收测试计划的评审和批准 140
19.3.1 任务1:评审的日程安排/执行 140
19.3.2 任务2:获得批准 140
19.4 步骤4:执行验收测试 140
19.4.1 任务1:对验收测试中的修正进行回归测试 140
19.4.2 任务2:执行新的验收测试 141
19.4.3 任务3:记录验收测试中发现的缺陷 141
第20章 总结/报告螺旋测试结果 142
20.1 步骤1:执行数据精简 142
20.1.1 任务1:确保所有的测试均已执行/解决 142
20.1.2 任务2:通过测试编号整理测试缺陷 143
20.1.3 任务3:将剩余的缺陷写入一个矩阵 143
20.2 步骤2:准备最终的测试报告 143
20.2.1 任务1:准备项目概述 143
20.2.2 任务2:总结测试活动 143
20.2.3 任务3:分析/创建度量图 144
20.2.4 任务4:总结测试成果/建议 148
20.3 步骤3:最终测试报告的评审和批准 149
20.3.1 任务1:评审的日程安排/执行 149
20.3.2 任务2:获得批准 150
20.3.3 任务3:发布最终的测试报告 150
第四部分 测试项目管理第21章 项目管理概述 152
21.1 定义目标 152
21.2 定义项目范围 152
21.3 识别关键活动 153
21.4 正确地估算 153
21.5 设计 153
21.6 人员管理 153
21.6.1 领导力 153
21.6.2 沟通 154
21.6.3 解决问题 154
21.6.4 持续监控 154
21.6.5 变更管理 155
第22章 测试项目管理 156
22.1 理解需求 156
22.2 测试规划 157
22.3 测试执行 157
22.4 识别及改进过程 157
22.5 测试项目经理的基本特质 158
22.5.1 需求分析 158
22.5.2 差距分析 158
22.5.3 开发测试用例时要进行横向思考 158
22.5.4 避免重复 158
22.5.5 测试数据生成 158
22.5.6 确认测试环境 159
22.5.7 带着破坏目的去测试 159
22.5.8 分析测试结果 159
22.5.9 毫不犹豫地接受别人的帮助 159
22.5.10 出现问题时将它们转移 159
22.5.11 增强沟通 159
22.5.12 不断更新自身的业务知识 159
22.5.13 学习新的测试技术和工具 160
22.5.14 提交质量 160
22.5.15 过程改进 160
22.5.16 创建知识库 160
22.5.17 重获成功 160
第23章 测试评估 161
23.1 测试评估中的关键活动 163
23.1.1 测试范围文档 163
23.1.2 测试策略 163
23.1.3 测试条件 163
23.1.4 测试用例 164
23.1.5 测试脚本 164
23.1.6 执行/运行计划 164
23.2 影响测试评估的因素 164
23.3 测试计划评估 164
23.4 测试执行与控制工作量 165
23.5 测试结果分析 165
23.6 工作量估算——项目模型 166
第24章 缺陷监控及管理过程 169
24.1 缺陷报告 170
24.2 缺陷会议 170
24.3 缺陷分类 170
24.4 缺陷的优先级 171
24.5 缺陷的种类 171
第25章 测试与开发方法的整合 173
25.1 步骤1:组建测试团队 173
25.2 步骤2:确定将要整合的测试步骤及任务 174
25.3 步骤3:自定义测试步骤及任务 174
25.4 步骤4:选择整合要点 174
25.5 步骤5:修改开发方法 174
25.6 步骤6:合并缺陷记录 174
25.7 步骤7:对测试方法的使用进行培训 175
第26章 本土/离岸模型 176
26.1 步骤1:分析 176
26.2 步骤2:确定经济上的得失 176
26.3 步骤3:确定选择标准 177
26.4 项目管理和监控 177
26.5 外包方法 177
26.5.1 本土活动 178
26.5.2 离岸活动 178
26.6 实现本土/离岸模型 179
26.6.1 知识转移 179
26.6.2 详细设计 179
26.6.3 基于里程碑的转移过程 179
26.6.4 稳定状态 179
26.6.5 应用管理 179
26.6.6 关系模型 180
26.7 本土/离岸方法的收益 181
26.8 本土/离岸模型的未来 183
第五部分 现代软件测试工具第27章 软件测试简史 186
27.1 自动测试工具的发展 188
27.1.1 静态录制/回放工具(不附带脚本语言) 189
27.1.2 静态录制/回放工具(具有脚本语言) 189
27.1.3 可变的录制/回放工具 189
27.2 软件测试和开发的历史比较 191
第28章 软件测试趋势 193
28.1 自动录制/回放测试工具 193
28.2 测试用例建立工具 193
28.3 领先的自动测试工具 194
28.4 领先的测试用例生成工具 195
28.5 必要条件和充分条件 195
28.6 测试数据/测试用例的生成 195
28.6.1 生产数据抽样 196
28.6.2 从零开始 196
28.6.3 数据播种 196
28.6.4 根据数据库生成数据 197
28.6.5 根据需求生成测试数据/测试用例 197
第29章 测试工具的分类 199
29.1 测试工具选择检查表 199
29.2 厂商工具描述 199
29.3 需要使用测试自动化的情况 205
29.4 不需要使用测试自动化的情况 205
第30章 自动测试工具的评价方法 207
30.1 步骤1:定义你的测试需求 207
30.2 步骤2:设定工具的目标 207
30.3 步骤3a:非正式采购模式下的选择活动 207
30.3.1 任务1:制定采购计划 207
30.3.2 任务2:定义选择标准 208
30.3.3 任务3:确定候选工具 208
30.3.4 任务4:进行候选工具评审 208
30.3.5 任务5:为候选工具打分 208
30.3.6 任务6:选择工具 208
30.4 步骤3b:正式采购模式下的选择活动 209
30.4.1 任务1:制定采购计划 209
30.4.2 任务2:创建技术需求文档 209
30.4.3 任务3:评审需求 209
30.4.4 任务4:生成请求建议 209
30.4.5 任务5:简化建议 209
30.4.6 任务6:进行技术评估 209
30.4.7 任务7:选择工具源 209
30.5 步骤4:采购测试工具 210
30.6 步骤5:制定评价计划 210
30.7 步骤6:制定工具经理计划 210
30.8 步骤7:创建培训计划 210
30.9 步骤8:接收工具 210
30.10 步骤9:执行验收测试 211
30.11 步骤10:召开推介会议 211
30.12 步骤11:实施修改 211
30.13 步骤12:培训工具的用户 211
30.14 步骤13:在操作环境中使用工具 211
30.15 步骤14:撰写评价报告 212
30.16 步骤15:确定目标是否实现 212
附录A 螺旋测试法 213
附录B 软件质量保证计划 221
附录C 需求规约 222
附录D 变更请求表 224
附录E 测试模板 225
附录F 检查表 251
附录G 软件测试技术 281
参考文献 325
术语表 331
索引 334