图书简介:
目 录
第1章 现代软件测试的工程理念 1
1.1 软件的可测试性 1
1.1.1 可测试性的定义 1
1.1.2 可测试性引发的问题 2
1.1.3 可测试性的三个核心观点 4
1.1.4 可测试性的四个维度 5
1.1.5 不同级别的可测试性与工程实践 8
1.2 测试左移和开发者自测 13
1.2.1 传统瀑布模型下软件测试面临的挑战 13
1.2.2 测试左移的早期实践 14
1.2.3 软件测试工程化面临的挑战与机遇 16
1.2.4 测试左移的进阶实践 19
1.2.5 测试左移的深度思考 21
1.3 测试右移的工程实践 21
1.3.1 生产环境冒烟测试 22
1.3.2 全链路压力测试 22
1.3.3 混沌工程 24
1.3.4 红蓝对抗 26
1.3.5 A/B测试 27
1.3.6 灰度发布 28
1.3.7 线上监控 30
1.3.8 用户体验分析 31
1.4 DevSecOps:从安全测试到安全工程 34
1.4.1 传统软件安全开发体系面临的挑战 34
1.4.2 新技术对软件安全开发提出的挑战 35
1.4.3 DevSecOps概念的诞生与内涵 36
1.4.4 DevSecOps工具 37
1.4.5 典型DevSecOps流程解读 39
1.5 DevPerfOps:从性能测试到性能工程 41
1.5.1 DevPerfOps的由来 41
1.5.2 全链路压测的局限性 41
1.5.3 DevPerfOps全流程解读 42
第2章 软件测试策略 46
2.1 什么是测试策略 46
2.1.1 测试策略不等于测试方针 47
2.1.2 测试策略不等于测试计划 48
2.1.3 测试策略不等于测试方案 48
2.1.4 测试策略本质上是一种选择 49
2.2 常用的测试策略 50
2.2.1 基于产品质量的测试策略 50
2.2.2 基于产品特性价值的测试策略 52
2.2.3 不同产品阶段下的测试策略 57
2.2.4 基于探索的测试策略——启发式测试策略 58
2.2.5 自动化持续测试策略 60
2.3 测试策略的制定方法 62
2.3.1 四步测试策略制定法 63
2.3.2 产品质量评估模型 65
2.3.3 组合缺陷分析技术 69
2.4 测试风险分析 81
2.4.1 测试风险识别 82
2.4.2 测试风险评估 85
2.4.3 测试风险应对 86
2.5 不同研发模式下的测试分层 88
2.5.1 瀑布模式下的测试分层 88
2.5.2 敏捷模式下的测试分层 89
第3章 测试分析和测试设计 93
3.1 测试分析和测试设计概述 93
3.1.1 好的测试设计的“味道” 93
3.1.2 当前测试设计的困顿 93
3.1.3 测试分析和测试设计是两个不同的活动 94
3.2 测试分析的方法 95
3.2.1 深入理解质量是做好测试分析的基础 95
3.2.2 软件产品质量模型 96
3.2.2 深入理解测试类型 103
3.2.3 通过质量属性来探索测试方法 104
3.2.4 通过质量属性确定测试的深度和广度 105
3.2.5 使用车轮图进行测试分析 105
3.3 测试设计的方法 107
3.3.1 基于路径分析的测试设计方法 107
3.3.2 基于输入-输出表的测试设计方法 118
3.3.3 基于等价类-边界值的测试设计方法 119
3.3.4 基于因子表的测试设计方法 123
3.3.5 几种测试设计方法的比较 127
第4章 软件测试与系统架构 129
4.1 典型应用系统架构与测试关键指标 129
4.1.1 典型应用系统架构 129
4.1.2 客户端请求的网络通信 131
4.1.3 与测试相关的系统架构关键指标 132
4.2 缓存架构及对缓存测试的影响 134
4.2.1 缓存架构 134
4.2.2 缓存对测试的影响 136
4.3 异步消息驱动架构及其对测试的影响 137
4.3.1 异步消息驱动架构 137
4.3.2 异步消息驱动架构对测试的影响 138
4.4 负载均衡架构及灰度发布对测试的影响 139
4.4.1 负载均衡架构 139
4.4.2 灰度发布及其对测试的影响 141
4.5 分布式数据库架构及高可用性测试 142
4.5.1 分布式数据库架构 142
4.5.2 分布式数据的高可用性测试 144
4.6 微服务架构及其对测试的影响 145
4.6.1 微服务架构 146
4.6.2 微服务架构对测试的影响 147
4.7 大数据架构及机器学习对测试的影响 148
4.7.1 大数据架构 148
4.7.2 机器学习对测试的影响 149
第5章 Web测试技术精要 151
5.1 Web测试技术概述 151
5.1.1 Web测试技术要点 151
5.1.2 Web自动化测试技术 155
5.2 基于编程语言的Web测试框架 157
5.2.1 Selenium 157
5.2.2 Airtest 164
5.2.3 Playwright 165
5.3 基于编程语言的测试代码的组织 169
5.3.1 未经组织的测试代码 171
5.3.2 组织后的测试代码 173
5.4 Web自动化测试的痛点 180
5.5 高效执行自动化测试 181
5.5.1 并行模式 181
5.5.2 无头模式 183
5.5.3 模拟登录 183
5.6 稳定的自动化测试 184
5.6.1 基于页面或元素状态的等待 184
5.6.2 重试机制 186
5.7 视觉验证测试 186
5.7.1 Appilitools Eyes 187
5.7.2 Recheck-Web 190
5.8 自我修复测试 193
5.8.1 Healenium 193
5.8.2 Recheck-Web 198
5.9 无代码/低代码自动化测试 201
第6章 移动端测试技术精要 204
6.1 移动端测试基础技能 204
6.1.1 通过HTTP Debug Proxy深入
了解移动端测试 204
6.1.2 设计测试用例 205
6.2 移动端测试进阶 208
6.2.1 UI自动化测试 208
6.2.2 稳定性测试 220
6.3 移动端测试的左移和右移 224
第7章 接口测试技术精要 226
7.1 接口测试概述 226
7.2 接口测试关键技术 227
7.2.1 模拟协议客户端 228
7.2.2 接口逻辑模拟 228
7.2.3 数据驱动 236
7.2.4 测试断言 239
7.2.5 解耦技术 239
7.2.6 关键字驱动 242
7.2.7 测试报告 242
7.3 自动化接口测试关键技术 243
7.4 接口测试的新技术 244
7.4.1 契约测试 244
7.4.2 流量录制 245
7.4.3 精准测试 246
7.5 接口测试平台化 246
7.6 测试右移下的接口测试 249
第8章 代码级测试技术精要 250
8.1 代码级测试技术概述 250
8.2 静态代码分析技术 251
8.2.1 静态代码分析概述 251
8.2.2 静态代码分析的优势 253
8.2.3 静态代码分析方法的类型 254
8.2.4 静态代码分析的原理 256
8.2.5 常见静态代码分析工具 258
8.2.6 静态代码分析工具面临的挑战 261
8.2.7 静态代码分析工具的选择 262
8.3 代码评审技术 263
8.3.1 代码评审概述 263
8.3.2 代码评审的价值 263
8.3.3 代码评审的类型 264
8.3.4 代码评审的内容 265
8.3.5 代码评审最佳实践 266
8.4 契约测试技术 274
8.4.1 契约测试概述 274
8.4.2 契约测试基本要素 277
8.4.3 继承与契约 280
8.4.4 一些说明 283
8.5 单元测试技术 286
8.5.1 单元测试概述 286
8.5.2 设计方法 291
8.5.3 测试先行 300
8.6 智能测试技术 301
8.6.1 智能测试技术概述 301
8.6.2 智能测试技术阶段划分 302
8.6.3 智能测试关键技术 304
第9章 性能测试技术精要 312
9.1 性能市场现状 312
9.2 RESAR性能工程概述 313
9.2.1 RESAR性能工程 313
9.2.2 性能容量规划 326
9.2.3 性能工具解析 328
9.3 性能测试阶段 329
9.3.1 需求阶段 329
9.3.2 准备阶段 333
9.3.3 执行阶段 334
9.3.4 报告阶段 336
9.3.5 环比阶段 337
9.4 性能监控分析逻辑 338
9.4.1 操作系统监控分析逻辑 338
9.4.2 开发语言监控分析逻辑 353
9.4.3 数据库监控分析逻辑 366
9.5 性能分析案例 391
9.5.1 场景运行数据 391
9.5.2 分析系统架构 391
9.5.3 拆分响应时间 392
第10章 可靠性测试技术精要 420
10.1 可靠性测试概述 420
10.1.1 可靠性测试目的 420
10.1.2 可靠性测试设计 420
10.1.3 可靠性测试环境 422
10.1.4 可靠性测试执行 422
10.1.5 可靠性测试工具 424
10.1.6 可靠性评估指标 424
10.1.7 可靠性测试报告 426
10.2 可靠性设计验证 426
10.2.1 可靠性故障管理验证 427
10.2.2 可靠性冗余设计验证 428
10.2.3 可靠性容灾设计验证 428
10.2.4 可靠性过载控制验证 430
10.3 可靠性负向验证 431
10.3.1 故障模式 431
10.3.2 故障预案 432
10.3.3 混沌工程 433
第11章 自动化测试框架设计和实现 435
11.1 自动化测试框架概述 435
11.1.1 自动化测试框架的定义 435
11.1.2 自动化测试框架的目标 435
11.1.3 自动化测试框架和测试库的区别 436
11.2 自动化测试框架类型 437
11.2.1 简单测试框架 437
11.2.2 x-Driven测试框架 439
11.2.3 混合型测试框架 442
11.2.4 不同类型测试框架对比 443
11.3 自动化测试框架的通用实现原理 444
11.3.1 分层架构模型 444
11.3.2 gTAA模型 446
11.3.3 通用型测试框架 447
11.4 自动化测试框架开发设计指南 448
11.4.1 测试框架必备特征 448
11.4.2 代码编写原则 449
11.4.3 设计模式的使用 455
第12章 测试基础设施能力建设 462
12.1 测试执行环境架构设计基础 462
12.1.1 测试执行环境概述 462
12.1.2 测试基础架构的设计 464
12.1.3 早期的测试基础架构 464
12.1.4 经典的测试基础架构 465
12.2 测试执行环境架构设计进阶 466
12.2.1 基于Docker实现的Selenium
Grid测试基础架构 466
12.2.2 引入统一测试执行平台的测试基础架构 467
12.2 .3 基于Jenkins集群的测试基础架构 469
12.2.4 测试负载自适应的测试基础架构 470
12.2.5 测试基础架构的选择 471
12.3 实战案例:大型全球化电商网站的测试基础架构设计 471
第13章 软件测试新实践和新方法 477
13.1 测试驱动开发 477
13.1.1 测试驱动开发的基本理念 477
13.1.2 UTDD、ATDD与BDD 479
13.1.3 测试驱动开发的误区 482
13.2 精准测试 483
13.2.1 精准测试的技术实现 484
13.2.2 精准测试的前沿探索 487
13.3 代码注入测试 489
13.3.1 灰盒测试面临的挑战 489
13.3.2 OOP的困境及AOP的解决思路 490
13.3.3 AOP基本概念及其启示 493
13.3.4 基于AOP的测试实战案例 498
13.3.5 AOP的局限性 512
13.4 混沌工程 512
13.4.1 混沌工程的起源 513
13.4.2 混沌工程的原则 513
13.4.3 攻防演练 515
13.4.4 混沌工程的相关工具 515
13.5 变异测试 518
13.5.1 变异测试的基本流程 519
13.5.2 变异测试的核心概念 520
13.5.3 变异测试的应用案例 522
13.5.4 变异测试的工程化实践 525
13.6 探索式测试 527
13.6.1 探索式测试的基本理念 527
13.6.2 探索式测试的思维模型 528
13.6.3 探索式测试的方法 529
13.6.4 探索式测试的开展 533
13.6.5 探索式测试的误区 534
13.7 微服务测试 535
13.7.1 云原生和微服务 535
13.7.2 微服务测试体系建设 541
第14章 智能化测试技术 557
14.1 从测试视角看AI 557
14.2 基于数据的智能化测试 561
14.3 基于目标的智能化测试 564
14.4 智能化测试的实践 570
第15章 AI产品测试技术 574
15.1 AI产品测试技术概述 574
15.1.1 AI相关概念 574
15.1.2 AI产品对测试提出的挑战 575
15.2 AI产品的功能测试 576
15.2.1 AI产品功能测试面临的困惑 577
15.2.2 蜕变测试 578
15.2.3 AI产品的测试评估 579
15.3 AI产品的非功能测试 583
15.3.1 模型相关的性能度量指标 583
15.3.2 AI产品相关的性能指标 586
15.3.3 伦理道德验证 587
第16章 大数据产品测试技术 591
16.1 大数据基础知识 591
16.1.1 初识大数据 591
16.1.2 什么是大数据 592
16.1.3 主流大数据架构和产品 593
16.2 大数据产品测试与传统软件测试 594
16.2.1 大数据产品测试与传统软件测试的联系 594
16.2.2 大数据产品测试面临的挑战 595
16.3 测试数据的准备 597
16.3.1 测试数据的重要性 597
16.3.2 数据准备方式 597
16.4 大数据产品的功能性测试 602
16.4.1 ETL测试 602
16.4.2 数据质量测试 607
16.5 大数据产品的非功能性测试 610
16.5.1 大数据产品非功能性测试面临的挑战 611
16.5.2 非功能性测试设计 612
第17章 区块链测试技术 618
17.1 区块链概述 618
17.1.1 区块链定义 618
17.1.2 区块链特征 618
17.1.3 区块链分类 619
17.1.4 区块链的应用场景 619
17.2 区块链测试技术总览 620
17.2.1 区块链通用架构体系 621
17.2.2 区块链“四横四纵”测试体系 625
17.3 DApp测试 626
17.3.1 DApp概述 626
17.3.2 专项测试 630
17.3.3 异常测试 640
17.3.4 安全测试 644
17.3.5 稳定性测试 648
17.4 分布式共识测试 651
17.4.1 常见共识算法 651
17.4.2 专项测试 654
17.4.3 异常测试 667
17.4.4 安全测试 676
17.4.5 稳定性测试 681
17.5 智能合约测试 685
17.5.1 智能合约 685
17.5.2 专项测试 696
17.5.3 异常测试 709
17.5.4 安全测试 715
17.5.5 稳定性测试 729
17.6 P2P网络测试 731
17.6.1 P2P 731
17.6.2 专项测试 738
17.6.3 异常测试 745
17.6.4 安全测试 752
17.6.5 稳定性测试 760
第18章 图形图像相关应用的测试技术实践 765
18.1 机器视觉产品的测试概述 765
18.1.1 机器视觉概述 765
18.1.2 测试机器视觉产品的挑战和策略 765
18.2 AI技术在画质增强方向的产品 767
18.2.1 画质客观测试 777
18.2.2 画质测试的效能提升实践 779
18.3 AI技术在人脸识别方向的产品 780
18.3.1 人脸解锁概述 780
18.3.2 AI技术在人群画像、人群追踪
客流技术方向综合应用的产品 787
第19章 大模型赋能下的测试智能化 790
19.1 大模型和大语言模型 790
19.1.1 大语言模型与代码生成 791
19.1.2 多模态大模型 794
19.2 大模型时代的智能化测试 795
19.2.1 软件测试本质探讨 796
19.2.2 更聪明的猴子 798
19.3 大模型智能化测试的探索实战 799
19.3.1 智能探索型测试 799
19.3.2 测试用例生成 803
19.3.3 测试结果分析和诊断建议 805
19.3.4 利用Hydra Lab搭建智能化测试平台 805
第20章 XRunner应用案例 809
20.1 信息系统领域性能保障痛点 809
20.1.1 业务挑战 809
20.1.2 技术挑战 810
20.1.3 工具挑战 810
20.2 解决思路 812
20.2.1 技术突破 812
20.2.2 业务突破 814
20.2.3 工具突破 815
20.3 案例 815
20.3.1 背景简介 815
20.3.2 压测需求 816
20.3.3 压测目标 816
20.3.4 压测方案 816
20.3.5 压测方法和范围 816
20.4 实践后的效果对比与总结 818
20.4.1 压测结果 818
20.4.2 总结报告 820
展开
前 言
站在2024年这一历史节点回顾软件测试领域的发展历程,我们不难发现,在过去的十几年中,从理论框架到实际应用,软件测试技术的演进突破了曾经的局限,发生了翻天覆地的变化。基于这样的背景,在QECon组委会的支持下,我们着手设计并牵头编写了本书,试图全方位、系统化介绍软件测试技术在各个领域的发展和应用。
本书从一开始便站在现代软件测试技术的视角进行深入探讨。这里所说的“现代”,不仅仅是指近年来涌现和快速发展的测试技术,还指那些在快速变化的技术环境中依然保持高度相关性和实践价值的方法论与技巧。本书所介绍的软件测试技术,不仅仅局限于自动化测试框架、测试平台或性能测试工具等具体的技术手段还包括测试策略的制定、测试设计的方法论等多个方面,这些都是软件测试过程中至关重要的工程实践。通过全面的讨论,本书旨在帮助读者更好地理解软件测试技术的核心概念和应用场景。
我们希望为读者呈现一个全面而深刻的视角。书中的内容不仅紧跟行业的最新发展动态,包括最前沿的技术实践和发展趋势,使读者能够时刻把握行业脉搏,跟上技术发展的步伐,还着力于介绍那些经过时间验证、依然具有重要价值的经典知识与技能。
本书是20多位软件测试专家的智慧结晶,他们在各自的技术领域和实践操作中都拥有丰富的经验和深厚的背景,都贡献了各自最擅长、最有价值的内容。本书的内容编写始终以实用性为导向,旨在为读者提供最直接、最有效的指导和建议。与其说本书是一本理论性著作,倒不如说它是一部高度浓缩的实践宝典。我们希望这是一本软件测试技术领域的“百科全书”,无论你是希望在专业领域不断精进的技术专家,还是希望打下扎实基础的入门读者,都能从本书中汲取宝贵的经验。
全书共有20章,包括90多节,主要涉及现代软件测试的工程理念,测试策略、分析和设计,测试与系统架构的关系,各项测试技术精要,自动化测试框架的设计与实现,AI产品、大数据产品、区块链、图形图像相关测试技术,以及大模型赋能下的测试智能化和XRunner应用案例等内容。
总而言之,希望本书能成为一本既紧跟时代发展,又具有深度与广度的专业指南书,希望每一位从事软件测试或对软件测试感兴趣的读者,都能从中获得丰富的收获与启发。书中难免有疏漏与不足之处,我们诚恳地期待你提出宝贵的意见与建议。
茹炳晟 陈磊
2024年11月
展开