第1章 绪论 1
1.1 软件测试 1
1.1.1 软件测试的目的与意义 1
1.1.2 软件测试分类 2
1.1.3 国内外软件测试现状 5
1.2 回归测试 6
1.2.1 回归测试概念 6
1.2.2 为什么要进行回归测试 6
1.2.3 回归测试与其他测试的区别 7
1.2.4 回归测试过程 7
1.3 面向对象的软件测试 10
1.3.1 面向对象的软件测试概念 10
1.3.2 面向对象的软件测试模型 11
1.4 路径覆盖测试 12
1.4.1 路径覆盖测试概念 12
1.4.2 为什么要进行路径覆盖测试 12
1.4.3 路径覆盖测试方法 12
1.5 基于函数调用关系的路径覆盖测试 14
1.5.1 基于函数调用关系的路径覆盖测试概念 14
1.5.2 为什么要进行基于函数调用关系的路径覆盖测试 16
1.5.3 基于函数调用关系的路径覆盖测试方法 17
1.6 本章小结 18
第2章 面向过程的函数静态调用路径生成 19
2.1 静态分析研究现状 19
2.1.1 代码解析 19
2.1.2 函数包含关系 21
2.1.3 函数路径测试原理 22
2.2 面向C语言的函数静态调用路径生成 23
2.2.1 相关概念 23
2.2.2 控制结构的转化 25
2.2.3 模型设计 26
2.2.4 静态分析算法 29
2.2.5 函数路径提取算法 30
2.2.6 C语言函数调用路径提取实例 37
2.3 面向嵌入式系统的函数静态调用路径生成 39
2.3.1 嵌入式系统测试现状 39
2.3.2 嵌入式软件测试技术 40
2.3.3 嵌入式函数调用路径提取 42
2.3.4 嵌入式函数调用路径提取实例 53
2.4 本章小结 56
第3章 面向对象的函数静态调用路径生成 57
3.1 面向对象的技术特点 57
3.1.1 封装 57
3.1.2 继承 58
3.1.3 多态 59
3.2 面向对象的软件测试研究现状 60
3.3 面向C++的函数静态调用路径生成 61
3.3.1 系统框架 61
3.3.2 代码精简模块 62
3.3.3 C++静态分析 63
3.3.4 重载唯一性确定 68
3.3.5 多态唯一性确定 73
3.3.6 模板唯一性确定 85
3.3.7 C++函数调用路径生成 87
3.3.8 C++函数静态调用路径实例 94
3.4 面向Java的函数静态调用路径生成 99
3.4.1 多态性 99
3.4.2 反射技术 101
3.4.3 线程池技术 102
3.4.4 Soot编译优化工具 105
3.4.5 多态唯一性确定 106
3.4.6 Java函数静态调用路径提取实例 112
3.5 本章小结 117
第4章 面向函数调用关系的覆盖分析 118
4.1 覆盖分析 118
4.1.1 覆盖分析概念 118
4.1.2 覆盖分析方法 119
4.1.3 基于覆盖分析的测试过程 119
4.2 覆盖分析技术现状 120
4.2.1 控制流覆盖 120
4.2.2 数据流覆盖 132
4.2.3 功能覆盖 136
4.3 函数动态调用路径生成 136
4.3.1 函数动态调用路径 136
4.3.2 插装预处理 137
4.3.3 函数动态调用路径生成 143
4.4 覆盖分析 149
4.4.1 函数动态调用路径匹配 149
4.4.2 覆盖率计算 151
4.5 本章小结 152
第5章 面向函数调用关系的测试用例优化 153
5.1 面向函数调用关系的测试用例集约简 153
5.1.1 测试用例集约简概念 153
5.1.2 为什么要测试用例集约简 154
5.1.3 测试用例集约简的技术现状 154
5.1.4 重复的动态路径 155
5.1.5 冗余的动态路径 156
5.1.6 必不可少的动态路径 156
5.1.7 代表集与最优代表集 156
5.1.8 测试用例约简算法 157
5.1.9 测试用例约简实例 158
5.2 面向函数调用关系的测试用例优先级排序 162
5.2.1 测试用例优先级排序概念 162
5.2.2 为什么要进行测试用例优先级排序 162
5.2.3 测试用例优先级排序的技术现状 163
5.2.4 相关概念 164
5.2.5 测试覆盖矩阵生成 164
5.2.6 测试用例优先级排序算法 167
5.2.7 测试用例优先级排序实例 168
5.3 本章小结 170
第6章 面向函数调用关系的测试用例自动生成 171
6.1 测试用例自动生成 171
6.1.1 测试用例自动生成概念 171
6.1.2 为什么要进行测试用例自动生成 171
6.1.3 测试用例生成的过程 173
6.2 测试用例自动生成技术现状 173
6.3 测试用例自动生成算法 176
6.3.1 函数调用关系树 176
6.3.2 带控制条件的函数调用路径生成 178
6.3.3 扩展信息流分析规则 180
6.3.4 控制流影响分析 181
6.3.5 测试用例自动生成 183
6.4 测试用例自动生成实例 186
6.4.1 测试用例覆盖率分析 188
6.4.2 测试用例生成效率分析 189
6.5 本章小结 190
第7章 面向函数调用关系的软件变更影响分析 191
7.1 软件变更影响分析 191
7.1.1 软件变更影响分析概念 191
7.1.2 为什么要进行软件变更影响分析 191
7.1.3 软件变更影响分析的过程 191
7.2 软件变更影响分析技术现状 192
7.3 软件变更函数路径分析 195
7.3.1 基本思想 195
7.3.2 最长公共序列算法 195
7.3.3 分治策略 200
7.3.4 改进的最长公共序列算法 201
7.3.5 无效变更分析 202
7.4 热点路径 203
7.4.1 热点路径的概念 204
7.4.2 C语言常见内存错误 204
7.4.3 热点路径的实现 207
7.5 软件变更函数路径分析实例 209
7.5.1 实验评测 209
7.5.2 效果展示 209
7.6 本章小结 214
第8章 Visual Studio依赖图生成工具介绍 215
8.1 工具简介 215
8.2 DGML的应用价值 215
8.2.1 可视化依赖关系 215
8.2.2 查找项目代码存在的问题 216
8.2.3 实例介绍 217
8.3 其他 221
8.3.1 Code Maps 221
8.3.2 DGQL 222
8.4 本章小结 223
第9章 Regression Test 2.0工具介绍 224
9.1 Regression Test for C/C++2.0简介 224
9.2 Regression Test for C/C++2.0的应用价值 224
9.3 工具介绍 225
9.3.1 系统架构 225
9.3.2 主界面介绍 225
9.3.3 其他界面展示 227
9.3.4 界面操作步骤 230
9.4 本章小结 230
第10章 DTS工具介绍 231
10.1 DTS工具简介 231
10.2 DTS的应用价值 233
10.3 工具介绍 234
10.3.1 系统概述 234
10.3.2 界面简介 234
10.3.3 使用流程 237
10.3.4 辅助工具 252
10.4 本章小结 257
附录A Windows API绘图程序 258
参考文献 263
后记 264