第一篇 软件测试工程师知识筹备与成长发展 3
第1章 本书特色与使用方法 3
1.1 本书特色 3
1.2 本书第3版亮点 3
1.3 本书第1、2、3版之间的关系 4
1.4 本书面向的读者群体 5
1.5 本书四大篇章之间的关系 5
1.6 本书与市面上其他软件实践类书籍的主要区别 8
1.7 如何更好地使用本书 8
1.8 本书及其配套下载资源使用说明 9
1.9 读书笔记 10
第2章 软件测试核心理论知识串讲 11
2.1 软件测试 11
2.1.1 软件测试的定义 11
2.1.2 软件测试的原则 12
2.1.3 软件测试分类 13
2.1.4 软件测试策略 17
2.2 软件测试模型 18
2.2.1 V模型 18
2.2.2 W模型 19
2.2.3 X模型 20
2.2.4 H模型 21
2.2.5 前置模型 21
2.3 软件缺陷 24
2.3.1 软件缺陷的定义 24
2.3.2 软件缺陷的分类 24
2.4 测试用例 26
2.4.1 测试用例的定义 27
2.4.2 测试用例设计方法 27
2.5 软件测试的自动化 38
2.5.1 软件自动化测试 38
2.5.2 软件测试工具分类 39
2.6 软件测试管理 41
2.6.1 测试团队建设与管理 41
2.6.2 软件测试过程管理 42
2.6.3 缺陷管理 43
2.6.4 软件测试文档 45
2.7 读书笔记 46
第3章 软件测试工程师的成长与发展 47
3.1 软件测试工程师应具备的能力和素养 47
3.1.1 计算机专业技能 47
3.1.2 个人能力和素养 48
3.2 软件测试职业发展 48
3.3 软件测试工程师的成长历程 51
3.4 读书笔记 53
第二篇 基于Java EE产品线的项目实践 57
第4章 项目初期各阶段的主要工作 57
4.1 项目立项与拟定产品的发展方向阶段 57
4.1.1 产品需求文档的形成及其实例 57
4.1.2 产品需求形成阶段测试工程师的工作 59
4.2 产品规格说明书制定阶段 59
4.2.1 产品规格说明书的形成及其实例 59
4.2.2 产品规格说明书阶段测试工程师的工作 69
4.3 产品技术文档设计阶段 69
4.3.1 编写技术设计文档 69
4.3.2 技术设计文档阶段测试工程师的工作 77
4.4 读书笔记 77
第5章 软件测试计划的制定 78
5.1 为何要制定测试计划 78
5.2 怎样设计测试计划 78
5.2.1 产品基本情况调研 79
5.2.2 测试需求说明 79
5.2.3 计划表 79
5.2.4 测试资源配置 79
5.2.5 系统风险评估 80
5.2.6 测试的策略和记录 80
5.2.7 问题跟踪报告 80
5.2.8 测试计划的发布 80
5.3 测试计划设计实例 80
5.4 测试计划修改与维护 89
5.5 读书笔记 89
第6章 软件测试用例的编写 90
6.1 白盒测试用例设计方法与案例 90
6.1.1 逻辑覆盖法设计案例 90
6.1.2 基本路径测试法案例 97
6.2 黑盒测试用例设计案例 98
6.2.1 等价类划分法设计案例 98
6.2.2 边界值分析法设计案例 101
6.2.3 因果图法设计案例 103
6.2.4 错误推测法设计案例 105
6.2.5 功能图法设计案例 107
6.2.6 综合法设计案例 108
6.2.7 异常测试法设计案例 109
6.3 压力/性能测试设计案例 110
6.4 安全性测试 113
6.4.1 安全性测试的引入 114
6.4.2 常见的Web安全性测试 114
6.4.3 XSS测试技巧 120
6.5 跨浏览器/跨平台测试设计案例 121
6.5.1 跨浏览器测试设计案例 121
6.5.2 跨平台测试设计案例 123
6.6 本地化测试与国际化测试 127
6.6.1 国际化测试的实例 128
6.6.2 本地化测试的实例 131
6.7 Accessibility测试案例 132
6.8 如何组织和跟踪测试用例 135
6.8.1 组织测试用例 135
6.8.2 测试用例的跟踪 135
6.8.3 测试用例的维护 137
6.9 读书笔记 138
第7章 软件项目各部门相互协作 139
7.1 共同审阅文档 139
7.2 交流与沟通 141
7.2.1 沟通的意义及项目干系人分析 142
7.2.2 沟通与效率的关系 142
7.2.3 沟通的一些要素 143
7.2.4 项目中沟通运用的案例分析 143
7.2.5 结束语 145
7.3 读书笔记 145
第8章 执行测试案例并报告缺陷 146
8.1 项目过程中各阶段测试重点和策略 146
8.2 如何报告所发现的缺陷 151
8.3 如何尽早尽多地报告缺陷 153
8.4 发现缺陷的基本方法 153
8.4.1 通过逻辑覆盖法发现的缺陷 157
8.4.2 通过路径覆盖法发现的缺陷 157
8.4.3 通过等价类划分法发现的缺陷 158
8.4.4 通过边界值法发现的缺陷 159
8.4.5 通过因果图法发现的缺陷 160
8.4.6 通过错误推测法发现的缺陷 162
8.4.7 通过功能图法发现的缺陷 163
8.4.8 通过综合法发现的缺陷 163
8.4.9 通过异常法测试发现的缺陷 164
8.4.10 通过压力/性能测试发现的缺陷 165
8.4.11 通过安全性测试发现的缺陷 165
8.4.12 通过跨平台测试发现的缺陷 167
8.4.13 通过跨浏览器测试发现的缺陷 168
8.4.14 通过本地化与国际化测试发现的缺陷 169
8.4.15 通过Accessibility测试发现的缺陷 170
8.5 如何让别人接受你报的缺陷 172
8.5.1 缺陷为什么不被接受 172
8.5.2 不被接受的缺陷的状态 180
8.5.3 如何避免不被接受的缺陷 180
8.5.4 如何处理不被接受的缺陷 180
8.6 如何验证缺陷 182
8.6.1 哪些状态的缺陷可以验证 182
8.6.2 验证缺陷前需要做什么 183
8.6.3 缺陷被完全修改的标准 183
8.6.4 如何验证缺陷 183
8.6.5 验证缺陷后还需要做什么 185
8.7 如何分析缺陷 185
8.7.1 什么是缺陷分析 185
8.7.2 缺陷分析的重要性 185
8.7.3 收集缺陷分析的信息 186
8.7.4 如何进行缺陷分析 186
8.8 一个缺陷管理系统应用实例 190
8.8.1 BugFree的安装 191
8.8.2 缺陷管理 193
8.8.3 Test Case管理 197
8.8.4 统计报表 198
8.9 读书笔记 199
第9章 产品功能完善与修复缺陷阶段 200
9.1 模块功能完成并进行单元测试 200
9.2 系统功能集成并进行整体测试 201
9.3 产品代码冻结 202
9.4 产品发布前的最后检查 203
9.5 读书笔记 207
第10章 测试工程师在产品发布前后的工作 208
10.1 如何评估软件质量 208
10.2 如何发布质量分析报告 211
10.3 如何配合客户做验收测试 216
10.4 如何处理客户发现的问题 219
10.5 读书笔记 221
第三篇 软件测试领域9大专题技术分享 225
第11章 Web测试专题技术分享 225
11.1 Web测试的特点 225
11.2 Web测试基础 226
11.2.1 获取软件版本号 226
11.2.2 修改浏览器的代理设置 227
11.2.3 修改hosts文件 230
11.2.4 测试网上付费购物 231
11.2.5 截屏软件FSCapture的使用 231
11.2.6 截屏软件Jing的使用 233
11.3 界面测试 234
11.3.1 文字或图片重叠 234
11.3.2 文字或图片剪裁 235
11.3.3 文字或图片没对齐 236
11.3.4 重复菜单项或链接 236
11.3.5 提示信息错误 237
11.3.6 界面测试其他问题 237
11.4 功能测试 238
11.4.1 tooltip不显示 239
11.4.2 JS error问题 239
11.4.3 页面链接错误 241
11.4.4 页面访问资源不可用 242
11.4.5 出现404 Error 242
11.4.6 按钮不工作 243
11.4.7 功能未实现 244
11.4.8 错误信息提示不合理 245
11.4.9 数据库访问错误 245
11.4.1 0文档无法下载 246
11.5 表单测试 247
11.5.1 文本框测试常见验证点 248
11.5.2 特殊输入域常见验证点 249
11.5.3 单选按钮常见验证点 250
11.5.4 复选框常见验证点 250
11.5.5 大块文字区域常见验证点 251
11.5.6 下拉列表框常见验证点 251
11.5.7 排序常见验证点 251
11.5.8 分页测试常见验证点 251
11.5.9 搜索框填充域常见验证点 252
11.5.10 用户登录常见验证点 252
11.5.11 特殊字符处理常见验证点 253
11.5.12 转义字符处理常见验证点 254
11.5.13 多次快速提交问题 254
11.5.14 共用页面Session问题 254
11.5.15 页面刷新问题 255
11.5.16 浏览器“前进”/“后退”按钮问题 255
11.6 读书笔记 255
第12章 Client测试专题技术分享 256
12.1 Client测试的特点 256
12.2 如何进行Client测试 256
12.2.1 安装测试 257
12.2.2 卸载测试 259
12.2.3 UI测试 260
12.2.4 功能测试 261
12.2.5 字符输入测试 263
12.2.6 tooltip测试 264
12.2.7 链接测试 265
12.2.8 操作按钮测试 265
12.2.9 菜单测试 266
12.2.10 音频测试 266
12.2.11 视频测试 268
12.2.12 程序运行权限测试 268
12.3 如何获取测试需要的Trace 270
12.4 读书笔记 271
第13章 Mobile测试专题技术分享 272
13.1 Mobile的特点 272
13.2 Mobile测试基础 273
13.2.1 手机测试常见类型 273
13.2.2 手机测试与传统测试的区别 273
13.2.3 监控手机流量 274
13.2.4 获取手机的Root权限 275
13.3 手机与计算机的联系 276
13.3.1 豌豆荚的基本操作 276
13.3.2 360手机助手的基本操作 277
13.3.3 腾讯手机管家基本操作 277
13.3.4 iPhone/iPad/iPad Mini与计算机的联系 277
13.3.5 备份手机中的数据 278
13.3.6 截取手机屏幕内容 280
13.3.7 记录手机的Error Log 281
13.3.8 手机数据信息 281
13.4 手机设备自身测试 283
13.5 手机应用软件测试 285
13.6 手机Web应用测试 286
13.7 手机测试问题集锦 286
13.8 读书笔记 289
第14章 国际化本地化测试专题技术分享 290
14.1 软件国际化 290
14.1.1 国际化概述 290
14.1.2 软件国际化误区 291
14.2 软件本地化 293
14.2.1 软件本地化概述 293
14.2.2 软件本地化误区 294
14.3 国际化软件测试 294
14.3.1 在本地化机器上安装使用程序 295
14.3.2 正确的字符集编码 295
14.3.3 伪本地化测试发现文本扩展问题 297
14.3.4 测试区域文化和传统特征 299
14.3.5 保证文本与代码分离 299
14.4 软件本地化测试 300
14.4.1 翻译问题 301
14.4.2 数据格式问题 301
14.4.3 快捷键问题 303
14.4.4 本地化后的排序问题 304
14.4.5 常用本地化测试技巧 304
14.5 读书笔记 305
第15章 跨平台跨浏览器专题技术分享 306
15.1 跨平台测试的特点 306
15.2 软件平台的分类 306
15.2.1 Windows平台 307
15.2.2 Mac平台 307
15.2.3 Linux平台 308
15.2.4 Solaris平台 308
15.2.5 HP-UX平台 308
15.2.6 IBM-AIX平台 308
15.3 跨平台测试需具备的知识 309
15.3.1 Windows平台 309
15.3.2 Mac平台 312
15.3.3 UNIX平台 316
15.4 跨平台测试技术分享 320
15.4.1 应用程序安装 321
15.4.2 应用程序运行 323
15.4.3 程序运行界面测试 325
15.4.4 程序功能测试 325
15.5 浏览器的分类 327
15.5.1 IE 327
15.5.2 Firefox 328
15.5.3 Chrome 328
15.5.4 Safari 328
15.6 跨浏览器测试技术分享 329
15.7 读书笔记 331
第16章 Web安全测试技术专题分享 332
16.1 Web安全测试 332
16.1.1 Web前端工具Firebug的使用 332
16.1.2 Web前端工具Fiddler的使用 333
16.1.3 2010年Web应用十大安全攻击 335
16.1.4 2010年与2007年Web应用十大安全攻击对比 337
16.2 未验证的重定向和转发 337
16.2.1 攻击说明 337
16.2.2 攻击举例 337
16.2.3 开发人员防范方法 338
16.3 传输层保护不足 338
16.3.1 攻击说明 338
16.3.2 攻击举例 339
16.3.3 开发人员防范方法 339
16.4 URL访问控制不当 339
16.4.1 攻击说明 339
16.4.2 攻击举例 339
16.4.3 开发人员防范方法 340
16.5 存储不安全 340
16.5.1 攻击说明 340
16.5.2 攻击举例 340
16.5.3 开发人员防范方法 340
16.6 安全配置错误 340
16.6.1 攻击说明 340
16.6.2 攻击举例 341
16.6.3 开发人员防范方法 341
16.7 跨站请求伪造 341
16.7.1 攻击说明 341
16.7.2 攻击举例 341
16.7.3 开发人员防范方法 342
16.8 不安全的对象直接引用 342
16.8.1 攻击说明 342
16.8.2 攻击举例 343
16.8.3 开发人员防范方法 343
16.9 身份认证和会话管理不当 343
16.9.1 攻击说明 343
16.9.2 攻击举例 343
16.9.3 开发人员防范方法 343
16.10 跨站脚本 344
16.10.1 攻击说明 344
16.10.2 攻击举例 344
16.10.3 开发人员防范方法 345
16.11 注入SQL 346
16.11.1 攻击说明 346
16.11.2 攻击举例 346
16.11.3 开发人员防范方法 347
16.12 开放式Web应用程序安全项目OWASP 347
16.12.1 OWASP组织介绍 347
16.12.2 OWASP上最新Web安全攻击与防范技术 348
16.12.3 WiKi上最新Web安全攻击与防范技术 349
16.13 读书笔记 350
第17章 敏捷测试专题技术分享 351
17.1 敏捷软件开发简介 352
17.1.1 敏捷开发的流程 352
17.1.2 敏捷开发的质量管理 353
17.1.3 敏捷开发中的关键概念 353
17.2 敏捷测试的定义 355
17.3 敏捷测试的实质 356
17.4 敏捷测试与普通测试的区别 356
17.5 敏捷项目测试实例介绍 357
17.5.1 实例项目介绍 357
17.5.2 用户故事设计和发布计划阶段 359
17.5.3 迭代Sprint阶段 360
17.5.4 Sprint结束和下一个Sprint开始 363
17.6 读书笔记 365
第18章 软件自动化测试专题技术分享 366
18.1 引入自动化测试 366
18.2 什么是自动化测试 370
18.2.1 自动化测试是怎样工作的 370
18.2.2 自动化测试的类别 372
18.2.3 设计一个常见的自动化测试框架 373
18.3 持续集成自动化测试 374
18.4 自动化测试工具JMeter 375
18.4.1 JMeter是什么 375
18.4.2 JMeter的安装和运行 375
18.4.3 JMeter自动化脚本设计策略 378
18.4.4 抓取一个简单的请求 378
18.4.5 设置配置文件 379
18.5 设计一个简单的脚本 393
18.5.1 添加学生——HTTP request 393
18.5.2 查看运行结果——View Results Tree 397
18.5.3 访问数据库——JDBC Request 397
18.5.4 验证测试结果——Response Assertion 400
18.5.5 清理数据 403
18.6 读书笔记 405
第19章 压力与性能测试专题技术分享 406
19.1 什么是压力、性能测试 406
19.2 压力、性能测试用例设计 407
19.3 压力、性能测试——JMeter 409
19.3.1 单线程添加多个学生 410
19.3.2 多线程添加多个学生 417
19.4 生成和分析测试报告 421
19.4.1 生成测试报告 421
19.4.2 分析测试报告 421
19.5 读书笔记 426
第四篇 师生动手实践 429
第20章 自己动手完成软件测试实践 429
20.1 中心在线的网站测试实践 429
20.2 国内知名网站或应用测试实践 431
20.3 如何设计测试案例 431
20.3.1 看清项目测试范围 431
20.3.2 编写测试案例 433
20.4 准确汇报Bug的技巧 437
20.4.1 准确汇报Bug的几条基本准则 438
20.4.2 描述Bug中需要注意的事项 438
20.4.3 在汇报英文Bug时的专业英文描述 438
20.4.4 与外国人进行项目交流常见英文信件含义 439
20.5 寻找软件产品缺陷获奖作品欣赏 441
20.5.1 全国大学生寻找产品缺陷(Find Bug)技能大赛说明 441
20.5.2 汇报产品缺陷模板 442
20.5.3 参赛选手提交的作品内容 443
20.5.4 大赛组委会审阅评价 449
20.6 读书笔记 450
参考文献 451
附录A 大学学籍管理系统说明书 452
附录B 软件测试常见英文与中文对照描述 468
附录C 软件测试工程师经典面试题与参考回答 471
附录D 作者与贡献者简介 483