《软件测试教程(第2版)》主要介绍软件测试理论知识和测试技术,并从工程角度展开和贯彻软件测试的技术及其应用的策略方法。全书共分9章:软件测试概述,软件测试策略与过程,黑盒测试与白盒测试的测试用例设计,软件特定环境及应用系统的测试,软件自动化测试基础,软件项目的单元测试、功能测试及性能测试,软件测试管理,基本涵盖了软件测试的全貌。
《软件测试教程(第2版)》突出软件测试基本知识的阐述和技术理论的解析,内容全面,层次清晰,论述简明,反映软件测试的发展脉络及最新成果和工程运用,把握软件测试学科基础与技术运用的深度和广度,注意将软件测试理论知识、技术与工程实践密切结合,使《软件测试教程(第2版)》使用者能较快学习到软件测试最新知识,并掌握实际的软件测试技术工程方法。
《软件测试教程(第2版)》适用于高等院校、高职高专院校、示范性软件学院的软件技术、软件测试专业及计算机相关专业使用,可作为软件测试课程的教材,也适合从事软件开发和软件测试的专业技术及管理人员参阅,并作为学习软件测试入门和提高的培训教材。《软件测试教程(第2版)》也适用于准备参加国际软件测试工程师认证(ISTQB)考试人员参考。
本书是《软件测试教程》的修订版本。本书第1版发行4年多来,获得了高等院校师生和软件业界工程技术人员读者的广泛欢迎,取得了较好的社会效益。同时,作者也不断收到教材使用者和读者的积极反馈和良好建议,以促成修订。
软件测试对于软件质量保障的作用已被软件业界广泛接受和重视,软件测试在软件产品开发和工程中举足轻重,软件测试的地位和人才的高价值已得到共识。随着软件测试专业及软件测试技术课程的开设,教学和技术培训已在高校和社会软件技术培训机构中广泛开展,使软件测试课程的教学和专业人才的培养有了长足的进步。由此,对软件测试课程教材的需求也与日俱增,特别是理论阐述和工程实践结合紧密的优质教材。
本书第2版,以第1版架构为基础,在体系结构上做了较大调整,进一步突出了作为高等工程教育课程教材的特点,为满足培养软件测试工程师专业规格和职业技能要求,适应“知识、能力、素质、创新”的教学思想与教学方法,增加了基于测试工程的过程、规范、标准、管理和技术的运用;在内容上吸收了国内外近年来软件测试科学研究和技术工程实践运用的丰富成果,并结合了软件测试课程理论教学和实践教学的经验总结,修订而成。
本书共分为软件测试概述、软件测试策略与过程、黑盒测试与白盒测试的测试用例设计方法、软件特定环境及应用系统的测试、软件自动化测试基础、软件项目的工程测试(单元测试、功能测试和性能测试),以及软件测试管理9个章节,比较全面而系统地阐述了软件测试所涉及的基本理论、基本方法、基本技术、基本过程和工程运用,并引入对软件测试技术研究与应用的进一步方向指引,以利于读者学习软件测试知识和掌握测试技能奠定基础和进一步的发展。
本书第2版继续保持了第1版的特色,内容全面更新和充实,深度、广度兼顾并适度,注意了技术理论基础和技术实践基础两方面的融合,并注重理论知识体系的建立和基本技能的培养,使学习达到“举一反三”的效果。
本书基本涵盖于ISTQB(国际软件测试认证委员会)软件测试初级认证大纲(2007中文版)规定的内容,因此可作为需要参加此认考试的参改资料。
因作者水平所限,书中错误和不妥之处难免,恳请读者批评指正,并提出意见和建议。
第1章 软件测试概述
1.1 软件测试的产生
1.1.1 软件可靠性问题
1.1.2 软件缺陷与故障
1.1.3 软件测试的发展
1.2 软件测试基础理论
1.2.1 软件测试定义与基本问题
1.2.2 软件测试的基本理论
1.2.3 软件测试和缺陷修复的代价
1.2.4 软件测试策略与技术概要
1.3 软件开发过程
1.3.1 软件产品的组成
1.3.2 软件开发项目组
1.3.3 软件开发模式
1.4 软件开发与软件测试的联系
1.4.1 软件开发与软件测试各阶段的联系
1.4.2 测试与开发的并行特征
1.4.3 软件测试模型
1.5 软件测试过程
1.5.1 制定测试计划
1.5.2 测试执行过程
1.6 软件质量保证
1.6.1 软件质量管理
1.6.2 软件能力成熟度模型
1.6.3 软件测试成熟度模型
1.7 软件测试的职业
1.7.1 软件测试职业和职位
1.7.2 软件测试职业素质
习题与思考
第2章 软件测试策略与过程
2.1 软件测试的复杂性分析
2.1.1 无法对软件程序进行完全测试
2.1.2 测试无法显示潜在的软件缺陷和故障
2.1.3 存在的故障现象与发现的故障数量成正比
2.1.4 不能修复所有软件故障
2.1.5 软件测试的代价
2.2 软件测试策略与方法
2.2.1 静态测试与动态测试
2.2.2 黑盒测试与白盒测试
2.2.3 手工测试和自动化测试
2.2.4 探索性测试
2.2.5 软件测试的流程
2.3 单元测试
2.3.1 单元测试的主要任务
2.3.2 单元测试的执行过程
2.3.3 测试与调试
2.4 集成测试
2.4.1 非增量式测试
2.4.2 增量式测试
2.4.3 不同集成测试方法的比较
2.4.4 回归测试
2.5 确认测试
2.5.1 确认测试的准则
2.5.2 配置审查的内容
2.6 系统性测试
2.6.1 功能测试
2.6.2 性能测试
2.6.3 安全测试
2.6.4 恢复性测试
2.6.5 兼容性测试
2.7 验收测试
2.7.1 验收测试的内容
2.7.2 软件配置和文档资料测试
2.8 软件测试不同分类之间的关系
2.8.1 广义的软件组成
2.8.2 软件测试的分类及其相互关系
习题与思考
第3章 黑盒测试及用例的设计
3.1 黑盒测试法的概念
3.1.1 黑盒测试的端口测试模型
3.1.2 黑盒测试的对象测试模型
3.1.3 黑盒测试的分层设计模型
3.1.4 黑盒测试的测试用例设计方法
3.2 三角形问题与Next Date函数
3.2.1 三角形问题
3.2.2 Next Date函数
3.3 等价类划分方法
3.3.1 等价类的划分原则
3.3.2 等价类划分法的测试用例设计
3.3.3 常见等价类划分测试形式
3.4 边界值分析法
3.4.1 边界值分析概要
3.4.2 边界值分析法测试用例
3.4.3 边界值分析法测试举例
3.5 因果图方法
3.5.1 因果图法的思想
3.5.2 因果图法
3.5.3 因果图法举例
3.6 决策表测试法
3.6.1 决策表
3.6.2 决策表应用
3.7 正交试验设计法
3.7.1 正交试验设计法的原理
3.7.2 正交试验设计法的黑盒测试应用
3.7.3 正交试验设计法的其他相关知识
3.8 测试方法的选择
3.9 黑盒测试案例运用
3.9.1 用等价类划分法测试保险公司保费费率计算程序
3.9.2 决策表测试应用案例
习题与思考
第4章 白盒测试及其用例的设计
4.1 白盒测试方法
4.2 白盒测试的几个基本概念
4.2.1 程序控制流图
4.2.2 环形复杂度
4.2.3 矩阵图
4.3 覆盖的测试
4.3.1 语句覆盖和判定覆盖
4.3.2 函数覆盖
4.3.3 判定路径覆盖
4.3.4 更改条件判定覆盖
4.3.5 分支条件组合覆盖
4.3.6 Z路径覆盖
4.3.7 ESTCA覆盖
4.3.8 层次LCSAJ覆盖
4.3.9 继承上下文覆盖
4.3.10 基于状态的上下文覆盖
4.3.11 覆盖率测试设计
4.4 路径测试
4.4.1 路径表达式
4.4.2 基本路径测试方法
4.4.3 循环测试方法
4.4.4 产生测试用例
4.5 白盒测试案例运用
习题与思考
第5章 软件特定环境及应用系统的测试
5.1 客户/服务器体系结构测试
5.1.1 客户/服务器体系结构的测试的主要内容
5.1.2 Web应用系统的架构和开发技术
5.1.3 Web应用系统的测试
5.2 图形用户界面测试
5.2.1 页面元素测试
5.2.2 对窗体操作的测试
5.2.3 下拉式菜单和鼠标操作的测试
5.2.4 数据项操作的测试
5.3 实时系统测试
5.3.1 实时系统
5.3.2 实时系统测试
5.4 面向对象的软件测试
5.4.1 面向对象的特点
5.4.2 面向对象软件测试模型
5.4.3 面向对象软件测试类别
5.4.4 类的功能性测试和结构性测试
5.4.5 状态转移图方法的面向对象软件测试
5.5 嵌入式系统的软件测试
5.5.1 嵌入式系统概要
5.5.2 嵌入式系统软件测试概要
5.5.3 嵌入式系统软件测试的几项经验策略
5.6 特定环境及应用系统的测试运用
5.6.1 对Web应用系统进行压力测试
5.6.2 类的数据流测试
习题与思考
第6章 软件自动化测试基础
6.1 软件自动化测试概念与基础知识
6.1.1 自动化测试的产生
6.1.2 软件自动化测试的引入
……
第7章 软件项目的单元测试
第8章 软件项目的功能测试与性能测试
第9章 软件测试管理
参考文献
1.1.2 软件缺陷与故障
1.软件缺陷和故障案例
当今人类的生存和发展已经离不开各种各样的信息服务,为了获取这些信息,需要计算机网络或通信网络的支撑,这里不仅包含计算机硬件设备,还包括各种功能和用途的计算机软件,软件无处不在。然而,软件是由人编写开发的,是一种逻辑思维的产品,尽管现在软件开发当中采取了一系列的有效措施,能不断地提高软件产品的质量,但仍然无法完全避免软件会存在各种各样的缺陷。
软件故障或缺陷,依据其可能造成的危害程度不同,分为轻、重等不同级别。通过下面几例软件缺陷和故障的案例分析,足以说明软件缺陷和故障问题造成的严重损失和灾难。
【案例1】美国迪斯尼公司生产的狮子王游戏软件bug事件,这是一项典型的软件兼容性缺陷问题。1994年,该公司发布面向青少年的游戏软件“狮子王动画故事书”,销售异常火爆,使该游戏软件几乎成为当年秋季全美青少年必买的游戏软件产品。但产品售后不久,客户支持部投诉电话就一直不断,愤怒的儿童家长和玩不成游戏的孩子们大量投诉该游戏软件的缺陷,一时间报纸和电视媒体大量报道了这一游戏软件的各种问题,使该公司的声誉大损,并为改正软件缺陷和故障付出了沉重的代价。后经调查证实,造成这一严重问题的原因是迪斯尼公司没有对该游戏软件在已投入市场上使用的各种PC机型上进行完整的测试,游戏软件对硬件环境的兼容性没有得到保障,虽然该游戏软件在软件工程师们的机器硬件系统上工作正常,但在大众群体使用的系统中却存在不兼容的问题。
【案例2】美国航天局火星极地飞船着陆事故。1999年12月3日,美国航天局的火星极地着陆飞船在试图登陆火星表面时突然失踪。负责这一太空发展项目的错误修正委员会的专家们观测到这一幕并分析了事故,确定出现该事故的原因可能是由于某一数据位被意外地更改,造成灾难性后果,并得出造成事故的问题应在内部测试时就予以解决的结论。简要地说,火星极地飞船着陆过程是这样的:当飞船快要降落火星表面时,它将打开着陆降落伞以减缓飞船下落速度,在飞船距离火星1800m时,飞船将丢弃降落伞,同时点燃着陆推进器(反向推力),控制和稳定飞船的下降速度,同时飞船的三条支撑脚将迅速打开,使其在剩余的高度里缓慢降落到火星表面,在预定地点着陆。然而为节省研制经费,简化了确定何时关闭着陆推进器的自动装置,由通常太空船使用的昂贵着陆雷达系统改为在飞船的支撑脚上安装简易触发开关,并在着陆程序中设置一个数据位来控制关闭着陆推进器燃料开关。显然,飞船支撑腿在没有着地之前,推进器引擎将一直处于着火工作状态,支撑脚着地瞬间,触发开关,程序控制关闭燃料,平稳安全着陆。但遗憾的是,事后分析测试中发现,当飞船的支撑脚打开准备着陆时,机械的震动却很容易触发着地触电开关,导致程序设置了错误的数据位,关闭了着陆推进器燃料,也就是说,使得着陆推进器提前停止工作,使着陆飞船加速下坠1800m之后直接冲向了火星表面,飞船撞成碎片。这一事故后果非常严重,损失巨大,然而起因却如此简单,属于软件设计中的缺陷。事实是飞行发射之前,飞船各部位工作过程经过多个小组的测试,其中一个小组测试飞船的支撑脚落地的打开过程,另一个小组测试此后的着陆过程。前一小组没有注意到着地数据位是否已置位,因为这不属于他们负责的范围,而后一小组总是在开始测试之前重置计算机,进行数据的初始化,清除数据位。