本书基于软件测试过程模型,构建软件测试价值模型、能力模型及基于能力战略的软件测试策略框架,讨论软件测试终止、测试预言、测试生成问题。基于图结构、图元素及软件失效行为,介绍逻辑驱动、数据驱动、剖面驱动的基础理论、基础技术及实践者方法。基于技术创新及软件测试发展需求,构建面向服务、大数据及应用、软硬件一体化测试的技术框架,讨论基于服务模型的形式化描述及求解、服务实体及基于时间波动的服务实时性测试、大数据算法及应用性能测试、基于环境剖面及多域任务场景综合的一体化测试技术的最新研究成果及实践者方法。基于能力战略的软件测试策略,构建基于质量、效率驱动的软件测试框架,结合实际案例,讨论文档类、代码类、数据类、功能类、性能类、接口类和专项类软件测试的技术要求、测试策略、环境构建及实践者方法。 本书可供软件测试人员、软件质量管理人员、软件工程管理人员、软件开发人员及软件工程专业本科高年级学生、研究生使用和参考。
孙志安,中国船舶工业软件测试中心研究员,装备软件工程标准化技术委员会委员,主要从事软件测试、软件可靠性工程研究。李源,某项目管理中心信息系统室副主任,主要从事指挥信息系统、软件管理控制研究。韩启龙,哈尔滨工程大学教授,博士生导师,国家重点研发计划首席科学家,CCF杰出会员,主要从事大数据理论、智能软件工程、数字孪生、数据驱动的AI系统研究。豆康康,中国船舶工业软件测试中心专业技术专家,主要从事软件测试技术研究。费琪,中国船舶工业软件测试中心技术负责人,主要从事软件测试、软件可靠性研究。
第1章 软件测试进展 1
1.1 软件赋能、赋值与赋智 1
1.2 软件质量现状 2
1.3 软件测试发展历程 5
1.4 软件测试发展展望 7
1.4.1 软件测试面临的挑战 7
1.4.2 软件测试发展趋势 12
第2章 软件测试基础 18
2.1 软件质量 19
2.1.1 软件质量架构 19
2.1.2 软件质量模型 20
2.1.3 质量模型的GDQA应用框架 22
2.2 软件测试 23
2.2.1 测试的充分性 23
2.2.2 测试的追溯性 23
2.2.3 测试的时机 23
2.2.4 测试的针对性 24
2.2.5 测试与调试 24
2.3 软件可测试性 25
2.3.1 可测试性生命周期过程模型 25
2.3.2 可测试性特征 26
2.3.3 不同级别的可测试性问题 28
2.4 软件可靠性 30
2.5 软件错误、缺陷、故障及失效 31
2.5.1 软件错误、缺陷及故障 31
2.5.2 软件失效 38
2.6 时间问题 40
2.6.1 基于时间的可靠性度量 40
2.6.2 Musa执行时间 41
2.6.3 时间问题再思考 41
2.7 运行剖面 42
第3章 软件测试模型 43
3.1 软件测试过程模型 43
3.1.1 软件测试过程 43
3.1.2 软件测试过程活动 44
3.1.3 基于流程的测试过程模型 46
3.1.4 基于RUP的测试过程模型 47
3.2 软件测试成熟度模型 50
3.2.1 模型框架 50
3.2.2 能力成熟度等级 50
3.2.3 测试能力评价体系 52
3.2.4 评价模型 57
3.3 测试过程模型选择 58
第4章 软件测试策略 59
4.1 软件测试价值模型及测试体系 59
4.1.1 软件测试价值模型 59
4.1.2 软件测试目标体系 60
4.1.3 软件测试体系 61
4.2 基于风险、能力的测试策略 63
4.2.1 基于风险的测试策略 63
4.2.2 基于能力的测试策略 64
4.3 基于架构的测试策略 65
4.3.1 分层架构 65
4.3.2 事件驱动架构 67
4.3.3 微服务架构 67
4.3.4 云架构 69
4.4 基于对象及环境的测试策略 70
4.4.1 测试对象模型 70
4.4.2 测试环境分析 71
4.5 基于流程及组织的测试策略 72
4.5.1 测试策略螺旋结构模型 72
4.5.2 测试流程 73
4.5.3 测试组织 73
4.6 软件测试思维 74
4.6.1 系统思维 74
4.6.2 分析思维 76
4.6.3 结构化思维 77
4.7 不确定性及控制 78
4.8 测试策划的实践者方法 80
第5章 逻辑驱动测试 82
5.1 静态分析 82
5.1.1 静态分析技术架构 83
5.1.2 技术评审 83
5.1.3 代码走查 84
5.1.4 代码审查 85
5.1.5 动态测试 89
5.1.6 静态分析方法比较 90
5.2 逻辑覆盖 91
5.2.1 语句覆盖 91
5.2.2 判定覆盖 93
5.2.3 条件覆盖 93
5.2.4 判定?条件覆盖 93
5.2.5 条件组合覆盖 94
5.2.6 修正条件判定覆盖 94
5.3 路径覆盖 98
5.3.1 图结构 99
5.3.2 控制流 99
5.3.3 独立路径 100
5.3.4 图形矩阵 103
5.3.5 基本路径覆盖用例设计 104
5.4 循环结构覆盖 105
5.4.1 循环结构 105
5.4.2 循环结构测试 106
5.4.3 Z路径覆盖下的循环测试 108
5.4.4 最少测试用例数估算 108
5.5 符号执行 109
5.5.1 符号执行原理 110
5.5.2 符号执行技术 111
5.5.3 符号表达式简化 116
5.5.4 约束条件求解 117
5.6 流敏感指针分析 117
5.6.1 流敏感分析背景 118
5.6.2 静态单赋值问题 118
5.6.3 LLVM的内部表示 119
5.6.4 稀疏流敏感指针分析 119
5.6.5 访问等效性 120
5.6.6 算法 121
5.7 面向对象软件的逻辑驱动测试 122
5.7.1 类在UML中的描述 122
5.7.2 错误表征 123
5.7.3 类测试设计 123
5.7.4 类测试数据 125
5.7.5 类测试延伸 126
5.7.6 测试流程及方法 129
5.8 逻辑驱动测试的边界值 132
5.8.1 数据类型的边界值 132
5.8.2 数组的边界值 132
5.8.3 分支判断语句的边界值 133
5.9 同源检测 134
5.9.1 代码克隆类型 134
5.9.2 同源检测技术原理 135
5.9.3 代码克隆检测原理及流程 136
5.9.4 代码大数据库构建 137
5.9.5 分析元模型 139
5.9.6 基于代码大数据库的克隆检测 139
5.10 静态分析融合 142
5.10.1 静态分析融合框架 142
5.10.2 基于语义的跨语言文本聚类 144
5.10.3 基于语义的检测结果与规则集
聚类 146
第6章 数据驱动测试 149
6.1 软件可用性问题 149
6.2 等价类划分 150
6.2.1 测试输入问题 150
6.2.2 等价类划分规则 152
6.2.3 等价类划分流程 152
6.2.4 等价类划分方法 153
6.2.5 基于等价类划分的加法器测试 154
6.3 边界值分析 156
6.3.1 基于不同视角的边界 156
6.3.2 单缺陷假设及多缺陷假设 158
6.3.3 汽车转速控制边界值分析 160
6.4 决策表驱动 161
6.4.1 决策表表示 161
6.4.2 决策表结构 162
6.4.3 决策表建立步骤 162
6.4.4 基于决策表驱动的三角形类型
判断测试 163
6.5 因果图分析 164
6.5.1 因果图符号及关系 164
6.5.2 基于因果图分析的测试设计流程 165
6.5.3 基于因果图分析的自动售货软件
测试设计 165
6.6 功能图分析 167
6.6.1 功能图模型 167
6.6.2 基于功能图分析的测试设计流程 167
6.6.3 基于功能图分析的播放器测试设计 167
6.7 场景驱动 169
6.7.1 基于事件触发的场景 169
6.7.2 基于场景驱动的测试设计流程 169
6.7.3 基于场景驱动的在线购物系统
测试设计 170
6.8 正交试验设计 171
6.8.1 正交试验设计原理 171
6.8.2 正交试验设计流程 175
6.8.3 基于正交试验的某网络系统
登录测试 177
6.8.4 基于正交试验的某超短波跳频
分组无线网传输时延测试 179
6.9 均匀试验设计 180
6.9.1 均匀试验设计原理 180
6.9.2 均匀试验设计的特点 183
6.9.3 均匀试验设计与正交试验设计比较 184
6.9.4 基于UDE的信息录入与信息查询
测试 185
6.10 组合测试 187
6.10.1 输入及组合覆盖问题 187
6.10.2 组合测试分类及覆盖类型 190
6.10.3 成对组合覆盖 191
6.10.4 可变力度组合模型 204
6.10.5 成对组合测试方法比较 206
6.11 被动测试 208
6.11.1 有限状态机测试 209
6.11.2 EFSM测试 213
6.11.3 基于不变性的被动测试 219
第7章 面向服务软件测试 221
7.1 面向服务架构 221
7.1.1 架构 221
7.1.2 服务 223
7.1.3 环境 224
7.1.4 实现 225
7.2 面向服务测试的主要问题和框架 227
7.2.1 面向服务测试的主要问题 227
7.2.2 面向服务测试框架 228
7.2.3 面向服务测试对象 229
7.3 服务模型的形式化描述及求解 230
7.3.1 服务模型的形式化描述 230
7.3.2 形式化树模型 232
7.3.3 领域数据约束 234
7.3.4 领域数据语义描述 235
7.3.5 数据约束模型 236
7.4 服务实体测试 237
7.4.1 软件行为建模 237
7.4.2 测试框架 238
7.4.3 静态缺陷检测 238
7.4.4 测试设计模型 249
7.4.5 测试数据生成 251
7.4.6 单个操作基本测试用例生成 257
7.5 有状态服务实体测试 261
7.5.1 模型及定义 262
7.5.2 操作序列测试路径生成 269
7.5.3 服务操作序列测试 274
7.6 基于时间波动的服务实时性测试 278
7.6.1 基于时间波动的服务实时性
测试框架 278
7.6.2 基于并发机制的单个服务访问
频率预测 280
7.6.3 服务实体访问场景构建 282
7.6.4 服务响应时间波动分析 283
7.6.5 服务实时性测试 285
7.6.6 性能测试用例生成与执行 285
第8章 剖面驱动测试 289
8.1 软件可靠性测试的基本问题 290
8.1.1 基于运行周期的软件可靠性风险 290
8.1.2 与传统软件测试的差异 291
8.1.3 软件可靠性测试的必备条件 293
8.1.4 软件可靠性测试的空间覆盖 293
8.1.5 软件可靠性测试的不确定性 293
8.2 软件可靠性测试策略 295
8.2.1 基于风险的可靠性测试方案 295
8.2.2 一种理想化情况 295
8.2.3 完全随机的测试策略 296
8.2.4 混合测试策略 296
8.2.5 非均匀测试 297
8.2.6 最小测试集确定 297
8.3 软件可靠性建模 298
8.3.1 软件可靠性建模的基本问题 299
8.3.2 随机过程类模型 302
8.3.3 非随机过程类模型 310
8.3.4 基于构件的软件可靠性模型 317
8.3.5 模型评价、选择及合并 320
8.4 软件可靠性度量 323
8.4.1 度量模型视图 324
8.4.2 常用可靠性度量 325
8.4.3 复杂性度量 328
8.5 软件可靠性增长测试 334
8.5.1 软件可靠性增长预计 334
8.5.2 基于FTA的可靠性增长测试 335
8.5.3 充分性准则 337
8.6 软件可靠性验证测试 337
8.6.1 无失效执行时间验证测试 337
8.6.2 定时可靠性验证测试 338
8.6.3 序贯验证测试 339
8.6.4 验证测试方案 341
8.6.5 充分性准则 341
8.7 基于蒙特卡罗方法的软件可靠性测试 342
8.7.1 蒙特卡罗方法 342
8.7.2 测试过程模型 343
8.7.3 基于蒙特卡罗方法的测试应用 343
第9章 大数据及应用测试 348
9.1 大数据架构 348
9.1.1 大数据架构模型 349
9.1.2 大数据处理 350
9.2 大数据及应用测试体系 355
9.2.1 大数据质量 355
9.2.2 大数据及应用测试的基本问题 357
9.2.3 基于大数据应用架构的测试体系 358
9.3 大数据及算法测试 359
9.3.1 基准测试 359
9.3.2 聚类分析测试 360
9.3.3 分类算法测试 367
9.3.4 推荐算法测试 373
9.4 大数据应用性能测试 379
9.4.1 影响大数据应用性能的因素 380
9.4.2 大数据应用性能指标及监控 380
9.4.3 测试数据 381
9.4.4 负载模型及测试 383
9.5 大数据应用安全性测试 385
9.5.1 大数据应用安全要素 385
9.5.2 架构安全性测试 387
9.5.3 数据安全性测试 392
9.5.4 应用安全等级保护测试 398
第10章 软硬件一体化测试 402
10.1 一体化测试框架 402
10.1.1 基于MBSE的一体化测试 402
10.1.2 基于能力的一体化测试 403
10.1.3 多域任务场景下的一体化测试 405
10.2 一体化测试剖面构造 408
10.2.1 寿命剖面 408
10.2.2 任务剖面 408
10.2.3 环境剖面设计 409
10.2.4 面向任务的一体化测试剖面设计 410
10.2.5 一体化测试剖面设计 413
10.3 基于实测应力的综合环境应力剖面生成 414
10.3.1 应力测量 414
10.3.2 振动应力分析与归纳处理 415
10.3.3 温度应力分析与归纳处理 419
10.3.4 基于实测应力的综合环境剖面
生成 420
10.3.5 基于实测应力的显控设备综合
环境试验剖面生成 422
10.4 基于退化模型的一体化测试 424
10.4.1 在环系统失效机理 424
10.4.2 基于特征的功能性能退化模型 429
10.4.3 基于退化模型的系统可靠性评价 434
10.5 多域任务场景驱动的一体化测试 438
10.5.1 基于任务剖面的一体化测试用例
生成 438
10.5.2 测试用例加载 441
10.5.3 基于场景模式感知的测试用例
加载 445
10.5.4 测试用例执行 445
第11章 质量、效率驱动的测试实践 448
11.1 测试过程治理 448
11.1.1 测试过程模型 449
11.1.2 测试过程控制 451
11.1.3 基于系统特征状态的充分性度量 453
11.1.4 测试评价及改进 454
11.2 测试范围及测试类型 456
11.2.1 测试范围 456
11.2.2 测试类型 458
11.3 文档类测试 459
11.3.1 基于审查单的文档审查 460
11.3.2 基于问题驱动的文档审查 461
11.3.3 文档审查问题 461
11.3.4 性能指标描述审查 462
11.4 代码类测试 462
11.4.1 代码审查 462
11.4.2 代码走查 473
11.4.3 静态分析 474
11.4.4 逻辑测试 480
11.4.5 内存使用缺陷测试 485
11.4.6 软件成分分析 487
11.5 数据类测试 493
11.5.1 数据审查 493
11.5.2 数据处理测试 493
11.6 功能类测试 496
11.6.1 功能测试 497
11.6.2 边界测试 500
11.6.3 安装性测试 502
11.6.4 恢复性测试 503
11.7 性能类测试 505
11.7.1 性能测试 505
11.7.2 余量测试 510
11.7.3 容量测试 514
11.7.4 强度测试 517
11.8 接口类测试 520
11.8.1 接口测试 520
11.8.2 人机交互界面测试 526
11.9 专项类测试 531
11.9.1 安全性测试 531
11.9.2 互操作性测试 542
11.9.3 兼容性测试 544
参考文献 547