描述
开 本: 16开纸 张: 胶版纸包 装: 平装-胶订是否套装: 否国际标准书号ISBN: 9787111616818
产品特色
内容简介
本书从开发者测试的角度,介绍了软件测试的产生与发展以及开发者与测试的关系;讲述了程序静态分析、逻辑覆盖测试、程序插桩与变异测试等开发者需要掌握的测试方法和技术;结合示例讲解了单元测试、集成测试中开发者应当要能发现和避免的各种问题;由浅入深,介绍了测试工具JUnit的使用;*后介绍了由慕测科技提供的开发者测试平台和全国大学生软件测试大赛。
目 录
前 言
第1章 开发者测试概述 1
1.1 开发者与软件测试 1
1.1.1 测试和调试 1
1.1.2 开发者测试 3
1.1.3 PIE模型 4
1.2 开发者测试方法与技术 6
1.2.1 静态测试与动态测试 6
1.2.2 黑盒测试与白盒测试 8
1.2.3 失效重现 9
1.3 开发者测试工具 9
1.3.1 静态测试扫描工具 9
1.3.2 测试覆盖分析工具 12
1.4 开发者测试趋势 14
1.4.1 软件开发和运营困境 14
1.4.2 DevOps介绍 16
1.4.3 DevOps中的开发者测试 17
1.5 慕测开发者测试 19
1.6 小结 27
习题1 28
第2章 程序静态分析 29
2.1 程序静态分析概述 29
2.1.1 代码评审 30
2.1.2 结构分析 31
2.2 程序流程分析 32
2.2.1 控制流分析 32
2.2.2 数据流分析 33
2.3 符号执行 35
2.3.1 静态符号执行 36
2.3.2 动态符号执行 38
2.4 编程规范和规则 39
2.5 程序静态分析工具 42
2.5.1 工具简介 42
2.5.2 工具安装与评估 42
2.6 小结 48
习题2 48
第3章 白盒测试 50
3.1 逻辑覆盖测试 50
3.1.1 语句覆盖 52
3.1.2 分支覆盖 54
3.1.3 条件覆盖 56
3.1.4 条件/判定覆盖 58
3.1.5 修正条件/判定覆盖 61
3.1.6 条件组合覆盖 63
3.2 路径覆盖测试 65
3.2.1 环复杂度 65
3.2.2 基本路径覆盖 66
3.2.3 主路径覆盖 69
3.2.4 循环结构测试 72
3.3 小结 74
习题3 74
第4章 程序插桩与变异测试 77
4.1 程序插桩 77
4.1.1 程序插桩概述 77
4.1.2 程序插桩示例 78
4.1.3 程序插桩工具JaCoCo 79
4.2 变异测试 84
4.2.1 变异测试概述 84
4.2.2 变异测试方法 85
4.2.3 变异测试工具PITest 89
4.3 小结 91
习题4 91
第5章 单元测试 94
5.1 单元测试概述 94
5.2 单元测试框架 95
5.3 单元测试内容 96
5.3.1 算法逻辑 96
5.3.2 模块接口 97
5.3.3 数据结构 97
5.3.4 边界条件 98
5.3.5 独立路径 98
5.3.6 错误处理 99
5.3.7 输入数据 99
5.3.8 表达式与SQL语句 100
5.4 慕测单元测试实例 100
5.5 小结 102
习题5 103
第6章 集成测试 105
6.1 集成测试概述 105
6.1.1 集成测试过程 106
6.1.2 集成测试缺陷类型 107
6.2 集成测试分析 110
6.3 集成测试策略 112
6.3.1 一次性集成与增量式集成 112
6.3.2 自顶向下与自底向上集成 114
6.3.3 基于调用图的集成 117
6.3.4 其他集成测试策略 118
6.4 小结 124
习题6 124
第7章 JUnit基础 127
7.1 一个JUnit实例 127
7.2 注解 132
7.3 测试类与测试方法 135
7.3.1 Assert 135
7.3.2 TestCase 139
7.3.3 TestResult 141
7.3.4 TestSuite 142
7.4 错误与异常处理 143
7.4.1 错误和异常 143
7.4.2 异常处理 144
7.5 批量测试 146
7.5.1 参数化测试 146
7.5.2 打包测试 149
7.6 小结 150
练习7 150
第8章 JUnit深入应用 152
8.1 匹配器 152
8.2 JUnit测试进阶 154
8.2.1 Controller测试 154
8.2.2 Stup测试 155
8.2.3 Mock测试 159
8.2.4 Private测试 162
8.3 JUnit集成 165
8.3.1 JUnit-Ant集成 165
8.3.2 JUnit-Maven集成 169
8.4 小结 171
练习8 171
附录 慕测科技—开发者测试平台 172
参考文献 192
第1章 开发者测试概述 1
1.1 开发者与软件测试 1
1.1.1 测试和调试 1
1.1.2 开发者测试 3
1.1.3 PIE模型 4
1.2 开发者测试方法与技术 6
1.2.1 静态测试与动态测试 6
1.2.2 黑盒测试与白盒测试 8
1.2.3 失效重现 9
1.3 开发者测试工具 9
1.3.1 静态测试扫描工具 9
1.3.2 测试覆盖分析工具 12
1.4 开发者测试趋势 14
1.4.1 软件开发和运营困境 14
1.4.2 DevOps介绍 16
1.4.3 DevOps中的开发者测试 17
1.5 慕测开发者测试 19
1.6 小结 27
习题1 28
第2章 程序静态分析 29
2.1 程序静态分析概述 29
2.1.1 代码评审 30
2.1.2 结构分析 31
2.2 程序流程分析 32
2.2.1 控制流分析 32
2.2.2 数据流分析 33
2.3 符号执行 35
2.3.1 静态符号执行 36
2.3.2 动态符号执行 38
2.4 编程规范和规则 39
2.5 程序静态分析工具 42
2.5.1 工具简介 42
2.5.2 工具安装与评估 42
2.6 小结 48
习题2 48
第3章 白盒测试 50
3.1 逻辑覆盖测试 50
3.1.1 语句覆盖 52
3.1.2 分支覆盖 54
3.1.3 条件覆盖 56
3.1.4 条件/判定覆盖 58
3.1.5 修正条件/判定覆盖 61
3.1.6 条件组合覆盖 63
3.2 路径覆盖测试 65
3.2.1 环复杂度 65
3.2.2 基本路径覆盖 66
3.2.3 主路径覆盖 69
3.2.4 循环结构测试 72
3.3 小结 74
习题3 74
第4章 程序插桩与变异测试 77
4.1 程序插桩 77
4.1.1 程序插桩概述 77
4.1.2 程序插桩示例 78
4.1.3 程序插桩工具JaCoCo 79
4.2 变异测试 84
4.2.1 变异测试概述 84
4.2.2 变异测试方法 85
4.2.3 变异测试工具PITest 89
4.3 小结 91
习题4 91
第5章 单元测试 94
5.1 单元测试概述 94
5.2 单元测试框架 95
5.3 单元测试内容 96
5.3.1 算法逻辑 96
5.3.2 模块接口 97
5.3.3 数据结构 97
5.3.4 边界条件 98
5.3.5 独立路径 98
5.3.6 错误处理 99
5.3.7 输入数据 99
5.3.8 表达式与SQL语句 100
5.4 慕测单元测试实例 100
5.5 小结 102
习题5 103
第6章 集成测试 105
6.1 集成测试概述 105
6.1.1 集成测试过程 106
6.1.2 集成测试缺陷类型 107
6.2 集成测试分析 110
6.3 集成测试策略 112
6.3.1 一次性集成与增量式集成 112
6.3.2 自顶向下与自底向上集成 114
6.3.3 基于调用图的集成 117
6.3.4 其他集成测试策略 118
6.4 小结 124
习题6 124
第7章 JUnit基础 127
7.1 一个JUnit实例 127
7.2 注解 132
7.3 测试类与测试方法 135
7.3.1 Assert 135
7.3.2 TestCase 139
7.3.3 TestResult 141
7.3.4 TestSuite 142
7.4 错误与异常处理 143
7.4.1 错误和异常 143
7.4.2 异常处理 144
7.5 批量测试 146
7.5.1 参数化测试 146
7.5.2 打包测试 149
7.6 小结 150
练习7 150
第8章 JUnit深入应用 152
8.1 匹配器 152
8.2 JUnit测试进阶 154
8.2.1 Controller测试 154
8.2.2 Stup测试 155
8.2.3 Mock测试 159
8.2.4 Private测试 162
8.3 JUnit集成 165
8.3.1 JUnit-Ant集成 165
8.3.2 JUnit-Maven集成 169
8.4 小结 171
练习8 171
附录 慕测科技—开发者测试平台 172
参考文献 192
前 言
当前,信息需求的持续增长和信息技术的快速发展加快了软件产品的研发速度,同时也大大增加了软件产品的测试压力。以互联网、移动应用等产品为例,众多软件公司普遍采用微小改进、快速迭代、反馈收集、及时响应等手段来提高软件的迭代速度,缩短软件产品的发布流程。显然,仅仅依赖测试人员已经难以满足市场和客户对产品质量的需求,这就要求开发人员也深入参与到软件测试过程中,与测试人员共同完成软件产品的质量保证工作。在本书中,我们定义由开发者承担的与代码相关的软件测试工作为开发者测试。
本书从开发者测试出现的背景与意义、开发者所应掌握的基本和高级程序分析方法以及软件测试技术、开发者所应掌握的软件测试分析辅助工具、用于开发者测试教学和竞赛的慕测平台等多个方面对开发者测试进行系统性介绍。相信通过本书的学习,读者可以对开发者参与测试的必要性、开发者测试所涵盖的内容有初步的认识和了解,同时能够结合本书的示例及平台锻炼自己的测试能力。
本书适用于两类不同的读者:1)在高等院校学习和工作的教师和学生,本书有助于他们理解和认识测试工作承担者的责任,并为他们学习和锻炼自身的测试能力提供方向和平台;2)软件产业的开发人员、测试人员和管理人员,本书有助于他们认识开发者在测试工作中的重要性和所应承担的工作内容,以及开发者所应具备的测试技能。
本书讲述的方法是通用的,可以用于测试任何类型的计算机软件。但是,为了使读者更好地理解和学习本书的开发者测试方法,本书提供了大量Java示例代码以及面向Java的程序分析、测试工具。这些示例和工具可以在任何支持Java的操作系统(如Windows、Linux、Mac)、开发环境(如Eclipse、IntelliJ、Sublime Text)中开发、测试和运行。
本书共包含8章及一个附录,除第7章与第8章外,其他章节的内容互不相关,因而读者可选择其中部分章节进行阅读。
第1章:开发者测试概述。本章在研究和分析开发者与软件测试关系的基础上,介绍了开发者测试的定义、背景与意义。同时,本章还从静态测试与动态测试、白盒测试与黑盒测试、不同测试工具间的对比中分析得到开发者测试所涉及的方法、技术与工具。此外,本章还讨论了开发者测试技术未来的趋势,并介绍了支持开发者测试教学与竞赛的慕测平台。
第2章:程序静态分析。本章对软件静态测试的基础—程序静态分析方法进行了介绍。通过代码评审、结构分析等方法可以有效地检测出程序中的逻辑错误,而程序流程分析(如控制流分析、数据流分析)则可以更细粒度地反映程序中语句间、变量间的关联。此外,本章还介绍了辅助程序正确性证明的静态/动态符号执行方法,便于读者了解更高级的程序分析方法。
第3章:白盒测试。白盒测试要求软件内部的逻辑结构透明可见,因此更适合由软件项目的开发者来承担。本章介绍了两类主要的白盒测试方法,包括以程序内部逻辑结构为基础的逻辑覆盖测试方法和以程序路径为基础的路径覆盖测试方法。与此同时,本章还比较了不同白盒测试方法的测试强度,并介绍了用于度量程序复杂度的环复杂度方法。
第4章:程序插桩与变异测试。本章介绍了用于获取程序运行时信息的程序插桩方法,以及用于度量测试用例集缺陷检测能力的变异测试方法。对于程序插桩方法,本章详细介绍了插桩位置、类型、数量的选择方法;对于变异测试方法,本章详细介绍了变异算子的设计与选择方法。同时,本章还介绍了工具JaCoCo和PITest,以便读者体验Java程序的运行时信息收集和变异测试过程。
第5章:单元测试。单元测试是对软件基本组成单元(如方法、函数、过程)的测试。在测试过程中要完成初始状态的创建、测试结果的验证、测试资源的释放等工作,这些工作适合开发者使用代码控制开展。本章在介绍单元测试框架的基础上,进一步阐述了单元测试的各项内容,使读者能针对不同的测试对象分析、建立相应的测试模型。
第6章:集成测试。通过单元测试的软件模块并不能保证在整合后依然运行正确,因此需要做集成测试以进一步验证。本章介绍了集成测试过程、集成测试所面向的缺陷类型以及分析方法,并详细介绍了多种集成测试策略。同时,本章还讨论了不同集成测试策略的优缺点,并对它们各自的适用场景进行了分析,测试人员可据此选择合适的集成测试策略。
第7章:JUnit基础。工欲善其事,必先利其器。JUnit是开发者开展单元测试的一把利器。本章对Java单元测试框架的基本功能(如注解、测试类与测试方法、错误与异常处理、批量测试)进行了详细的介绍,使读者对JUnit的功能和适用范围有了详细的了解。本章还穿插了数个JUnit示例程序,帮助读者更快、更方便地学习Java单元测试。
第8章:JUnit深入应用。在前一章介绍JUnit基本功能的基础上,本章对JUnit的高级功能进行了介绍,包括用于提高测试代码开发效率的匹配器功能,面向Controller和Private函数的测试功能、Stup测试功能和Mock测试功能。同时,本章还介绍了JUnit与常用Java开发框架(如Ant、Maven)的集成方法,读者可据此配置来构建更方便的Java单元测试环境。
附录:慕测科技—开发者测试平台。实践练习是提高开发者测试能
本书从开发者测试出现的背景与意义、开发者所应掌握的基本和高级程序分析方法以及软件测试技术、开发者所应掌握的软件测试分析辅助工具、用于开发者测试教学和竞赛的慕测平台等多个方面对开发者测试进行系统性介绍。相信通过本书的学习,读者可以对开发者参与测试的必要性、开发者测试所涵盖的内容有初步的认识和了解,同时能够结合本书的示例及平台锻炼自己的测试能力。
本书适用于两类不同的读者:1)在高等院校学习和工作的教师和学生,本书有助于他们理解和认识测试工作承担者的责任,并为他们学习和锻炼自身的测试能力提供方向和平台;2)软件产业的开发人员、测试人员和管理人员,本书有助于他们认识开发者在测试工作中的重要性和所应承担的工作内容,以及开发者所应具备的测试技能。
本书讲述的方法是通用的,可以用于测试任何类型的计算机软件。但是,为了使读者更好地理解和学习本书的开发者测试方法,本书提供了大量Java示例代码以及面向Java的程序分析、测试工具。这些示例和工具可以在任何支持Java的操作系统(如Windows、Linux、Mac)、开发环境(如Eclipse、IntelliJ、Sublime Text)中开发、测试和运行。
本书共包含8章及一个附录,除第7章与第8章外,其他章节的内容互不相关,因而读者可选择其中部分章节进行阅读。
第1章:开发者测试概述。本章在研究和分析开发者与软件测试关系的基础上,介绍了开发者测试的定义、背景与意义。同时,本章还从静态测试与动态测试、白盒测试与黑盒测试、不同测试工具间的对比中分析得到开发者测试所涉及的方法、技术与工具。此外,本章还讨论了开发者测试技术未来的趋势,并介绍了支持开发者测试教学与竞赛的慕测平台。
第2章:程序静态分析。本章对软件静态测试的基础—程序静态分析方法进行了介绍。通过代码评审、结构分析等方法可以有效地检测出程序中的逻辑错误,而程序流程分析(如控制流分析、数据流分析)则可以更细粒度地反映程序中语句间、变量间的关联。此外,本章还介绍了辅助程序正确性证明的静态/动态符号执行方法,便于读者了解更高级的程序分析方法。
第3章:白盒测试。白盒测试要求软件内部的逻辑结构透明可见,因此更适合由软件项目的开发者来承担。本章介绍了两类主要的白盒测试方法,包括以程序内部逻辑结构为基础的逻辑覆盖测试方法和以程序路径为基础的路径覆盖测试方法。与此同时,本章还比较了不同白盒测试方法的测试强度,并介绍了用于度量程序复杂度的环复杂度方法。
第4章:程序插桩与变异测试。本章介绍了用于获取程序运行时信息的程序插桩方法,以及用于度量测试用例集缺陷检测能力的变异测试方法。对于程序插桩方法,本章详细介绍了插桩位置、类型、数量的选择方法;对于变异测试方法,本章详细介绍了变异算子的设计与选择方法。同时,本章还介绍了工具JaCoCo和PITest,以便读者体验Java程序的运行时信息收集和变异测试过程。
第5章:单元测试。单元测试是对软件基本组成单元(如方法、函数、过程)的测试。在测试过程中要完成初始状态的创建、测试结果的验证、测试资源的释放等工作,这些工作适合开发者使用代码控制开展。本章在介绍单元测试框架的基础上,进一步阐述了单元测试的各项内容,使读者能针对不同的测试对象分析、建立相应的测试模型。
第6章:集成测试。通过单元测试的软件模块并不能保证在整合后依然运行正确,因此需要做集成测试以进一步验证。本章介绍了集成测试过程、集成测试所面向的缺陷类型以及分析方法,并详细介绍了多种集成测试策略。同时,本章还讨论了不同集成测试策略的优缺点,并对它们各自的适用场景进行了分析,测试人员可据此选择合适的集成测试策略。
第7章:JUnit基础。工欲善其事,必先利其器。JUnit是开发者开展单元测试的一把利器。本章对Java单元测试框架的基本功能(如注解、测试类与测试方法、错误与异常处理、批量测试)进行了详细的介绍,使读者对JUnit的功能和适用范围有了详细的了解。本章还穿插了数个JUnit示例程序,帮助读者更快、更方便地学习Java单元测试。
第8章:JUnit深入应用。在前一章介绍JUnit基本功能的基础上,本章对JUnit的高级功能进行了介绍,包括用于提高测试代码开发效率的匹配器功能,面向Controller和Private函数的测试功能、Stup测试功能和Mock测试功能。同时,本章还介绍了JUnit与常用Java开发框架(如Ant、Maven)的集成方法,读者可据此配置来构建更方便的Java单元测试环境。
附录:慕测科技—开发者测试平台。实践练习是提高开发者测试能
评论
还没有评论。