本书详尽地阐述了软件测试领域中的一些基本理论和实用技术。首先从学生需要理解并掌握的软件测试基本概念和基本知识入手,使学生弄清楚为什么要进行软件测试,什么是软件测试?如何运用数学工具进行测试的描述和分析;在此基础上,结合经典案例讨论如何进行黑盒和白盒测试;然后依托实际案例深入讨论如何进行单元测试、集成测试和系统测试,以及具体的测试实施过程。最后,讨论了如何选择和使用各种自动化测试工具提高测试效率,以及如何进行软件缺陷的管理。
本书作为软件测试的实际应用参考书,除了力求突出基本知识和基本概念的表述外,更注重软件测试技术的运用,在介绍诸多知识点的过程当中结合直观形象的图表或实际案例进行深入浅出的分析,从而使读者可以更好地理解掌握软件测试理论知识,并迅速地运用到实际测试工作中去。
本书适合作为各层次高等院校计算机及相关专业的教学用书,也可作为软件测试人员的参考书。
随着信息技术的普及,各种各样的软件已经应用到很多领域,设计的复杂程度逐渐增加,开发周期不断缩短。而用户对软件要求却越来越高,不再仅仅关注软件产品功能的先进性,并且十分重视对产品质量的稳定性和可靠性的考察,这使得软件开发人员和软件测试人员面临着前所未有的挑战。因此,如何保证软件质量将成为软件工程领域深入研究的课题。
毋庸置疑,优化软件开发过程和提高软件测试人员的技术水平,是保证软件质量的最佳途径,这种观念正在被更多的软件行业人士理解、接受和实施。但软件测试在国内仍处于起步阶段,各种软件测试的方法、技术和标准都还在探索阶段。可以认为,当今中国的软件测试行业处于“春秋战国”时期,百家争鸣。一方面,这给行业的创新和发展提供了营养丰富的土壤;另一方面在测试行业一派“欣欣向荣”的气象背后,也隐藏着深深的危机。软件质量和测试观点“良莠不齐”、 “泥石俱下”。
在这种情况下,很多高校为了培养更多软件行业急需的软件测试人才,都已开设了软件测试课程,为了适应当前教学的需要,编者在软件测试课程实践的基础上,结合教学和科研成果,以及当前软件测试技术的最新发展动态编写了本书。
本书作为软件测试的实际应用参考书,除了力求突出基本知识和基本概念的表述外,更加注重软件测试技术的运用,在介绍很多知识点的过程中都结合直观形象的图表或实际案例进行了深入浅出的分析,从而使读者可以更好地理解和掌握软件测试技术理论知识,并迅速地运用到实际测试工作中去。
本书参考教学时数为32~40学时。全书包括9章: 第1章讨论了软件测试的发展历史、软件测试的定义和基本原则;第2章介绍了软件测试过程中需要掌握的离散数学和图论基础知识;第3、4章结合经典案例讨论了白盒和黑盒测试技术,第5~7章讨论了单元测试、集成测试和系统测试相关的知识,并且以实际软件系统的测试为例讨论了具体的实施过程;第8章介绍了软件测试自动化,讨论了自动化测试的时机,自动化测试成本的衡量,自动化测试工具的选择和使用;第9章介绍了关于软件bug及其管理方面的知识,讨论了软件bug的分类、提交和管理。为了读者的方便,本书在出版社网站提供了测试案例使用的源代码、配置说明等相关资源。需要的读者可到清华大学出版社网站(www.tup.com.cn)下载。
本书在编写过程中,参阅了很多国内外同行的著作或文章,汲取了该领域最新的研究成果。在此,对这些成果的作者表示深深的感谢!
由于编者水平有限,书中难免存在一些错误和不妥之处,希望有关专家、同行和广大读者批评指正。
编著者2015年1月
第1章 概述
1.1 软件测试的发展历程及现状
1.1.1 软件测试的发展历程
1.1.2 我国软件测试的现状
1.2 什么是软件测试
1.2.1 软件测试的定义
1.2.2 软件测试生命周期
1.2.3 软件开发与测试模型
1.2.4 与软件测试相关的术语
1.3 软件测试技术分类
1.4 软件测试的目的
1.5 软件测试的原则
1.5.1 尽早地和不断地进行软件测试
1.5.2 不可能完全的测试
1.5.3 增量测试,由小到大
1.5.4 避免测试自己的程序
1.5.5 设计周密的测试用例
1.5.6 注意错误集中的现象
1.5.7 确认bug的有效性
1.5.8 合理安排测试计划
1.5.9 回归测试
1.5.10 测试结果的统计和分析
1.5.11 及时更新测试
1.6 软件测试工作流程
1.7 软件测试中的误区
1.8 一个贯穿全文的例子――在线测评平台
1.8.1 系统概述
1.8.2 系统需求
1.8.3 系统分析
1.8.4 系统设计
1.8.5 系统实施
1.8.6 系统运行环境及配置
1.8.7 系统使用说明
本章小结
习题
第2章 离散数学和图论基础
2.1 集合论
2.2 函数
2.3 关系
2.4 命题逻辑
2.5 概率论
2.6 用于测试的图
2.6.1 图
2.6.2 程序图
2.6.3 有限状态机
2.6.4 状态图
本章小结
习题
第3章 白盒测试
3.1 白盒测试概述
3.1.1 白盒测试与调试的异同
3.1.2 白盒测试的分类
3.2 白盒测试用例设计技术
3.2.1 逻辑覆盖测试
3.2.2 边界值分析
3.2.3 基本路径测试
3.2.4 循环语句测试
3.2.5 程序插装
3.2.6 其他白盒测试方法
本章小结
习题
第4章 黑盒测试
4.1 黑盒测试概述
4.1.1 黑盒测试和白盒测试的异同
4.1.2 黑盒测试的原则和策略
4.2 黑盒测试用例设计技术
4.2.1 等价类划分法
4.2.2 边界值分析法
4.2.3 因果图法
4.2.4 决策表法
4.2.5 错误推测法
本章小结
习题
第5章 单元测试
5.1 单元测试概述
5.1.1 单元测试误区
5.1.2 单元测试与集成测试区别
5.1.3 单元测试与系统测试区别
5.2 单元测试环境
5.3 单元测试策略
5.3.1 自顶向下的单元测试策略
5.3.2 自底向上的单元测试
5.3.3 孤立测试
5.4 单元测试主要任务
5.5 单元测试步骤
5.6 单元测试用例设计
5.7 单元测试案例
5.8 单元测试经验总结
本章小结
习题
第6章 集成测试
6.1 集成测试概述
6.1.1 集成测试与系统测试的区别
6.1.2 集成测试与开发的关系
6.1.3 集成测试的重点
6.1.4 集成测试的层次
6.2 如何进行集成测试
6.2.1 集成测试分析
6.2.2 集成测试策略
6.2.3 集成测试环境
6.2.4 集成测试用例设计
6.2.5 集成测试过程
6.2.6 集成测试举例
6.3 集成测试经验总结
本章小结
习题
第7章 系统测试
7.1 系统测试概述
7.1.1 什么是系统测试
7.1.2 系统测试的组织和分工
7.2 如何进行系统测试
7.2.1 系统测试分析
7.2.2 系统测试环境
7.2.3 系统测试类型
7.2.4 系统测试用例设计
7.2.5 系统测试执行
7.2.6 系统测试案例研究
7.3 系统测试经验总结
本章小结
习题
第8章 软件测试自动化
8.1 进行自动化测试的适当时机
8.1.1 概述
8.1.2 自动化测试的成本
8.1.3 自动化测试的生命周期
8.1.4 自动化测试的价值
8.1.5 例子
8.1.6 另外一些需要考虑的问题
8.2 自动化测试和手工测试
8.2.1 自动化测试与手工测试的比较
8.2.2 短测试周期中手工测试面临的挑战
8.2.3 手工测试的问题
8.2.4 自动化测试的问题
8.2.5 自动化测试的优点
8.2.6 自动化测试的缺点
8.3 自动化测试工具的选择和使用
8.3.1 应用自动化测试工具的目的
8.3.2 自动化测试工具的概要介绍
8.3.3 自动化测试工具的选择
8.3.4 自动化测试工具在测试过程中的应用
8.4 自动化测试工具
8.4.1
8.4.2 C+
8.4.3 Load
8.4.4 IBM Rational Functional
经验总结
本章小结
习题
第9章 软件bug和管理
9.1 软件bug概述
9.1.1 bug的影响
9.1.2 bug的产生
9.2 bug的种类
9.2.1 需求阶段的
9.2.2 分析设计阶段的
9.2.3 实现阶段的
9.2.4 配置阶段的
9.2.5 短视将来的
9.2.6 静态文档的
9.3 bug报告单的提交和管理
9.3.1 bug报告单的内容
9.3.2 bug报告的特点
9.3.3 重现bug的分析和方法
9.3.4 bug管理流程
本章小结
习题
附录A 软件测试常用术语表
附录B 软件常见错误
B1 用户界面错误
B1.1 功能性
B1.2 通信
B1.3 命令结构和录入
B1.4 遗漏的命令
B1.5 程序僵化
B1.6 性能
B1.7 输出
B2 错误处理
B3 边界相关错误
B4 计算错误
B5 初始状态和以后状态
B6 控制流错误
B6.1 程序失去控制
B6.2 程序停止
B6.3 循环
B6.4 IF、THEN、ELSE或者其他情况
B6.5 多种情况
B7 处理或解释数据的错误
B7.1 在例程之间传递数据时的问题
B7.2 数据边界
B7.3 超过消息缓冲区的极限读取数据
B7.4 消息问题
B7.5 数据存储损坏
B8 竞争条件
B9 负荷情况
B10 硬件
B11 来源、版本和ID控制
B12 测试错误
参考文献