
编辑推荐
本书重点讲解了软件测试的基本原理、基本方法、基本技术、基本标准和规范。
内容精炼,文字简介、结构合理、综合性强。
配套教材《软件测试习题解析与实验指导》特别适合作为高等院校软件测试教材或教学参考书,也可作为
全国计算机软件测试师考试和软件技术资格与水平考试的培训资料。
本书的配套教学课件及电子资源,可从清华大学出版社网站下载使用。
目录
第1章软件测试概论
1.1软件
1.1.1软件发展史
1.1.2软件项目
1.2软件过程
1.2.1RUP
1.2.2敏捷过程
1.3软件测试
1.3.1测试历程
1.3.2测试与开发的关系
1.4软件缺陷
1.4.1缺陷案例
1.4.2缺陷产生的原因
1.4.3缺陷内容
1.4.4跟踪流程
1.4.5缺陷预防
1.5软件测试行业
1.5.1行业现状
1.5.2软件测试职业
1.5.3测试思维方式
1.6测试认识的误区
第2章软件测试基本知识
2.1测试的几种观点
2.2软件测试的目的与原则
2.2.1软件测试的目的
2.2.2软件测试的原则
2.3软件测试分类
2.3.1按照测试阶段划分
2.3.2按照执行状态划分
2.3.3按照测试技术划分
2.3.4按照执行主体划分
2.4软件测试模型
2.4.1V模型
2.4.2W模型
2.4.3H模型
2.4.4X模型
2.4.5前置模型
2.5测试用例
2.5.1简介
2.5.2测试用例作用
2.5.3测试用例设计准则
2.5.4测试用例的设计步骤
2.5.5测试用例维护
2.5.6测试用例设计的误区
2.6测试停止标准
2.6.1软件测试停止总体标准
2.6.2软件测试各阶段停止标准
第3章黑盒测试
3.1概述
3.2等价类划分
3.2.1划分原则
3.2.2设计测试用例步骤
3.3边界值分析
3.3.1设计原则
3.3.2两类方法
3.3.3应用举例
3.3.4局限性
3.4决策表
3.4.1应用举例
3.4.2优点和缺点
3.5因果图
3.5.1基本术语
3.5.2应用举例
3.6场景法
3.6.1基本流和备选流
3.6.2应用举例
3.7错误推测法
3.7.1概念
3.7.2优缺点
3.8综合策略
第4章白盒测试
4.1白盒测试发展史
4.2静态测试
4.2.1代码检查
4.2.2静态结构分析
4.3代码质量度量
4.3.1代码覆盖率
4.3.2代码度量方法
4.4逻辑覆盖
4.4.1语句覆盖
4.4.2判定覆盖
4.4.3条件覆盖
4.4.4条件判定覆盖
4.4.5修正条件/判定覆盖
4.4.6条件组合覆盖
4.4.7路径覆盖
4.5路径分析
4.5.1简介
4.5.2控制流图
4.5.3应用举例
4.6控制结构测试
4.6.1条件测试
4.6.2循环测试
4.6.3Z路径覆盖
4.7数据流测试
4.7.1词(语)法分析
4.7.2变量定义/使用分析
4.7.3程序片
4.8程序插桩
4.8.1介绍
4.8.2作用
4.9测试方法综述
第5章软件测试流程
5.1测试流程概述
5.2测试需求
5.2.1检查需求文档
5.2.2测试用例编写
5.3测试计划
5.3.1测试计划要点
5.3.2测试计划步骤
5.4测试设计
5.4.1测试设计内容
5.4.2测试用例属性
5.5测试执行
5.5.1单元测试
5.5.2集成测试
5.5.3系统测试
5.5.4验收测试
5.6回归测试
5.6.1测试流程
5.6.2测试用例设计方法
5.7测试评估
5.7.1测试评估活动
5.7.2缺陷分析方法
第6章性能测试
6.1基本概念
6.2性能测试分类
6.2.1负载测试
6.2.2压力测试
6.2.3可靠性测试
6.2.4数据库测试
6.2.5安全性测试
6.2.6兼容性测试
6.2.7可用性测试
6.3性能测试步骤
6.4Web测试
6.4.1Web系统体系结构
6.4.2Web测试内容
……
第7章软件测试自动化
第8章软件测试管理
参考文献
序言
前言
本书第1版自2013年出版以来,深受广大读者的欢迎。经过近几年的教学实践,本书在继承原教材通俗易懂,易于学习的基础上,进行了如下修订。
(1) 软件测试是一门理论与实践紧密联系的课程,直接关系到学生的理论分析能力和综合动手能力的培养。本教材以软件测试技术为主要研究对象,介绍了软件测试的基本理论和基本软件测试工具。
(2) 本教材分为主、辅教材,《软件测试》为主教材,包括软件测试概论、软件测试基本知识、黑盒测试、白盒测试、软件测试流程、性能测试、软件测试自动化、软件测试管理。《软件测试习题解析与实验指导》为辅教材,给出了软件测试习题解析,并对软件测试实验进行了指导操作。
软件测试的先导课为计算机导论、程序设计语言、离散数学、软件工程等课程。软件测试理论较繁杂,让学生在实践中学习理论知识,并用理论知识指导实践,是这本书的写作目的。本书主要使学生掌握软件测试的基本原理、基本方法、基本技术、基本标准和规范,培养学生的合作意识和团队精神,提高学生软件测试的综合能力。
西安邮电大学计算机学院的王曙燕、邓万宇、孟伟君、舒新峰、张昕对本书的编写给予了大力支持,并提出了指导性意见,西北工业大学郑炜、南京大学陈振宇、上海睿亚训软件技术服务公司王磊、韩伟,以及清华大学出版社张玥编辑对本教材的写作大纲、写作风格等提出了很多宝贵的意见。本书在写作过程中参阅了大量中外文专著、教材、论文、报告及网上资料,由于篇幅所限,未能一一列出。在此,向各位作者表示敬意和衷心的感谢。
本书内容精练,文字简洁,结构合理,综合性强,主要面向软件行业初、中级读者,由“入门”起步,侧重“提高”。特别适合作为高等院校相关专业软件测试的教材或教学参考书,也可以供从事计算机应用开发的各类技术人员应用参考,或作为全国计算机软件测评师考试、软件技术资格与水平考试的培训资料。
由于作者水平有限,时间紧迫,本书难免有不足之处,诚恳期待读者的批评指正,以使本书日臻完善。我的电子邮箱是zhouyuanzhe@163.com。
编者2017年3月
文摘
5软件测试流程
本章详细介绍了软件测试的整个过程,包括测试计划、测试设计、测试执行、回归测试以及测试评估。测试执行分为单元测试、集成测试、系统测试和验收测试等。
5.1测试流程概述
软件测试流程与软件开发流程类似,也包括测试计划、测试设计、测试开发、测试执行和测试评估几个部分,如图5.1所示。
图5.1测试生命周期
软件测试生命周期如下所示。
1. 测试计划
根据用户需求报告中关于功能要求和性能指标的规格说明书,定义相应的测试需求报告,使得随后所有测试工作都围绕着测试需求来进行。同时适当选择测试内容,合理安排测试人员、测试时间及测试资源等。
2. 测试设计
测试设计是指将测试计划阶段制定的测试需求分解、细化为若干个可执行的测试过程,并为每个测试过程选择适当的测试用例,保证测试结果的有效性。3. 测试执行
执行测试开发阶段建立的自动测试过程,并对所发现的缺陷进行跟踪管理。测试执行一般由单元测试、集成测试、系统测试、验收测试以及回归测试等步骤组成。
4. 测试评估
根据缺陷跟踪报告,对软件的质量和开发团队的工作进度及效率进行评价。
5.2测 试 需 求
测试需求根据市场/产品需求定义、分析文档和相关技术文档,输出《可测试性需求说明书》和《测试规格》等报告。
5.2.1检查需求文档
需求文档检查步骤如图5.2所示,具有如下步骤。
图5.2需求文档的检查流程
步骤1: 获取最新版本的软件需求规格说明书,同时尽量取得用户原始需求文档。
步骤2: 阅读和尝试理解需求规格说明书中描述的所有需求项。
步骤3: 对照需求规格说明书检查列表进行检查并记录。
步骤4: 针对检查结果进行讨论,修订需求规格说明书,回到第一步,直到检查列表中的所有项通过。
需求文档的检查需要填写表5.1,用于检查结果的确认。从需求的完整性、明确性、必要性、可测性、一致性、可修改性和优先级出发,对表5.1中的每一个检查项解释如下。
第一项需要检查需求规格说明书是否满足了用户提出的每一项需求,实现需求的完整性。
第二项需要检查需求文档的用词、用语问题,实现需求的明确性。
第三项检查的是需求规格说明书对需求覆盖是否准确,实现需求的必要性。
第四项检查的是软件使用环境的描述是否清晰,实现需求的完整性。
第五项检查的是需求规格说明书中的需求编号是否正确,实现需求的可修改性。
第六项主要检查需求是否是自相矛盾的,实现需求的一致性。
第七项主要检查软件系统允许的输入与预期的输出,实现需求的可测性。
第八项检查的是软件系统的性能需求有没有得到清晰的描述,实现需求的完整性。
第九项检查的是需求的关注重点和实现的先后顺序是否清晰地被描述出来,实现需求的优先级。
第十项检查是对软件系统的约束条件是否完整进行描述,实现需求的可测性。表5.1测试需求检查项序号检查项检 查 结 果1是否覆盖了用户提出的所有需求项是[]否[]NA[]2用词是否清晰,语义是否存在有歧义的地方是[]否[]NA[]3是否清楚地描述了软件系统需要做什么及不做什么是[]否[]NA[]4是否描述了软件使用的目标环境,包括软硬件环境是[]否[]NA[]5是否对需求项进行了合理的编号是[]否[]NA[]6需求项是否前后一致、彼此不冲突是[]否[]NA[]7是否清楚系统的输入、输出格式,以及输入与输出之间的对应关系是[]否[]NA[]8是否清晰描述了软件系统的性能要求是[]否[]NA[]9需求的优先级是否合理分配是[]否[]NA[]10是否描述了各种约束条件是[]否[]NA[]5.2.2测试用例编写
测试用例编写的具体流程如下所示。
步骤1: 在分析清楚需求的前提下对测试活动进行计划和设计。
步骤2: 按既定的策划执行测试用例和记录用例。
步骤3: 对测试的结果进行检查分析,形成测试报告。
步骤4: 使用测试结果和分析报告又能指导下一步的测试设计。
步骤5: 形成了一个质量改进的闭环。
【例5.1】测试用例举例。
测试用例编号: input_001。
测试优先级: 中等。
估计执行时间: 2分钟。
测试目的: 验证业务单据数据的查询正确性。
标题: 业务单据查询。
步骤如下:
步骤1: 打开查询界面。
步骤2: 输入查询条件。
步骤3: 确定并提交查询。
步骤4: 查看并验证返回信息。
【分析】编写的测试用例回答如下问题。
(1) 可输入的查询条件包括哪些。
(2) 提交查询之前是否会验证输入数据的正确性。
(3) 输入数据的单位、范围有无限制。
(4) 所有条件都不输入是否意味着查询出所有业务单据。
5.3测 试 计 划
测试计划以测试需求为基础,分析产品的总体测试策略,输出《产品总体测试策略》等报告。
5.3.1测试计划要点
测试计划规定测试任务、安排人员、预见风险,指导测试,实现测试的目标,一般测试计划要点如下所示。
1. 测试范围
确定各阶段的测试范围、技术约束等,以及测试成功的标准和要达到的目标。
2. 测试策略
开发有效的测试模型,决定黑盒测试和白盒测试、人工测试和自动化测试的比重等。
3. 测试资源
确定测试所需要的时间和资源,对人员、硬件和软件等资源进行组织和分配。
4. 进度安排
分解项目工作结构,并采用时限图、甘特图等方法制定时间/资源表。
5. 风险及对策
测试可能存在的风险分析,对风险进行回避、监控、管理,采用变更管理和控制等。
5.3.2测试计划步骤
测试计划一般具有如下步骤。
步骤1: 明确测试对象。
首先要明确测试的对象,有些对象是不需要测试的。有时候,测试的范围是比较难判断的。例如,对于一些整合性系统,它把若干个已有的系统整合进来,形成一个新的系统,那么就需要考虑测试的范围是包括所有子系统,还是仅仅测试接口部分,需要结合整合的方式、系统之间通信的方式。
步骤2 : 制定测试策略。
测试的策略包括宏观的测试策略和微观的测试策略战术。其中,测试战略和测试技术的关系如图5.3所示。
图5.3需求文档的检查流程
为了设计出好的测试策略,需要了解软件的结构、功能分布、各模块对用户的重要程度等,从而决定测试的重点、优先次序、测试的覆盖方式等。设计测试用例时,应尽可能用最少的测试用例发现最多的缺陷,尽可能用精简的测试用例覆盖最广泛的状态空间,还要考虑哪些测试用例使用自动化的方式实现,哪些使用人工方式验证等。
步骤3: 决定测试战术。
根据软件采用的技术、架构、协议等,考虑采用的测试方法和手段,是否需要进行白盒测试或黑盒测试,采用什么测试工具进行自动化测试等。制定好测试策略后,需要安排测试资源,通过充分估计测试的难度、测试的时间、工作量等因素,决定测试资源的合理利用方式。
步骤4 : 安排测试进度。
测试的进度安排需要结合项目的开发计划、产品的整体计划进行考虑,还要考虑测试本身的各项活动进行安排。把测试用例的设计、测试环境的搭建、测试报告的编写等活动列入进度安排表,如图5.4所示。
图5.4需求文档的检查流程
步骤5: 估计计划风险。
一般可能碰到的风险是项目计划变更、测试资源不能及时到位等问题。制定测试计划时应根据项目的实际情况进行评估,并制定出合理、有效的应对策略。对于项目计划的变更,可以考虑建立更加流畅的沟通渠道,让测试人员能及时了解到变更的情况,以及变更的影响,从而可以作出相应的改变。
5.4测 试 设 计
测试设计建立在测试计划书的基础上,根据测试大纲、测试内容及测试的通过准则,将测试需求转换成测试用例的过程,用于描述测试环境、测试执行的范围、层次和用户的使用场景以及测试输入和预期的测试输出等信息,输出《产品或者版本总体测试方案》等报告。
基于需求的测试用例设计一般有如下方法。
方法一: 临时的同行评审。
同行评审尤其是临时的同行评审,应该演变成类似结对编程一样的方式,体现敏捷的“个体和交互比过程和工具更有价值”这一原则,强调测试用例设计者之间的交流,通过讨论、协作来完成测试用例的设计。
方法二: 用户参与评审。
用户参与评审体现了敏捷的“顾客的协作比合同谈判更有价值”这一原则,这里顾客的含义和如何定义测试有关。如果测试是对产品的批判,则顾客是指最终用户或顾客代表;如果测试是被定义为对开发提供帮助和支持,那么顾客显然就是程序员。
5.4.1测试设计内容
软件测试设计主要内容如下所示。
(1) 制定测试的技术方案,确认各个测试阶段采用的测试技术、测试环境和平台,以及选择什么样的测试工具。其中,系统测试中的安全性、可靠性、稳定性、有效性等是测试技术方案的内容重点。
(2) 设计测试用例,根据产品需求分析、系统设计等规格说明书,在测试技术方案的基础上设计具体的测试用例。
(3) 根据测试的目的和任务,以及测试用例的特性和属性(优先级、层次、模块等)设计测试用例,从而构成执行某个特定测试任务的测试用例集合(组),如基本测试用例组、专用测试用例组、性能测试用例组、其他测试用例组等。
(4) 根据所选择的测试工具,将自动化测试的测试用例转换为测试脚本。
(5) 根据所选择的测试平台以及测试用例所要求的特定环境,进行服务器、网络等测试环境的设计。
软件测试设计中,需要考虑如下要点。
(1) 所设计的测试技术方案是否可行、是否有效、是否能达到预期的测试目标。
(2) 所设计的测试用例是否完整、边界条件是否考虑、其覆盖率能达到的百分比。
(3) 所设计的测试环境是否和用户的实际使用环境比较接近。
5.4.2测试用例属性
设计测试用例主要根据测试用例的以下属性,并结合测试用例的编号、标题、描述(条件、步骤、期望结果)等进行测试用例管理。
……
2) 目标性
根据不同的目标设计测试用例。有的测试用例是为主要功能而设计,有的则为系统的负载而设计。
3) 所属范围
根据测试用例所属不同的组件或模块进行管理。
4) 关联性
测试用例一般和软件产品特性相联系,多数情况下验证某个产品的功能。
5) 阶段性
根据不同的测试阶段,如单元测试、集成测试、系统测试、验收测试等设计测试用例,便于得出该阶段的测试覆盖率。
6) 状态性
测试用例有不同的状态,只有被激活的测试用例才被运行。
7) 时效性
针对同样功能,可能所用的测试用例不同,是因为不同的产品版本在产品功能、特性等方面的要求不同。
8) 所有者
测试用例还包括由谁、在什么时间创建,又由谁、在什么时间修改等。
5.5测 试 执 行
当测试用例的设计和测试脚本的开发完成之后,就开始执行测试。测试执行是对每个测试阶段(单元测试、集成测试、系统测试和验收测试等)测试用例的编写和自动化脚本的编写,保证每个阶段的测试任务得到执行,输出《产品自动化测试用例》和《手工执行测试用例》等报告。
1) 单元测试
单元测试的目的在于发现各模块内部可能存在的各种差错,一般由程序员执行,但须提交单元测试用例和测试报告,由测试人员进行审查。
2) 集成测试
集成测试的主要目标是发现与接口有关的问题,对于关键模块应尽早测试,并将自顶向下、自底向上两种测试策略结合起来,严格执行各个模块。3) 系统测试
系统测试以用户环境模拟系统的运行,用于验证系统是否达到在概要设计中所定义的功能和性能。
4) 验收测试
验收测试是指当技术部门完成了所有测试工作后,由用户参与的软件测试,通常采用α测试和β测试,用于确保产品能真正符合用户需求。
5.5.1单元测试
单元测试是根据源程序、编程规范、产品规格设计说明书和详细的程序设计文档,以测试软件设计中的最小单位,例如,面向过程语言的函数或子过程。面向对象语言的类或成员函数用于发现语法、格式和逻辑等缺陷,从而判断特定条件或场景下函数的行为,输出缺陷跟踪报告。
单元测试一般有如下优点。
(1) 单元测试是验证行为。
程序中的每一项功能通过测试来验证其正确性,为其后代码的重构提供了保障。
(2) 单元测试是设计行为。
软件的设计考虑如何实现软件的某项功能、用户界面等,单元测试关注于软件的具体功能实现是否符合需求设计,而不仅仅定位于代码的实现运作机制上。
……
(4) 单元测试具有回归性。
自动化的单元测试避免了代码出现回归,编写完成之后,便于随时运行测试。
单元测试针对程序模块进行测试,主要有以下5个任务——模块接口、局部数据结构、边界条件、独立的路径和错误处理,如图5.5所示。
图5.5单元测试解决的任务
1) 模块接口测试
本书重点讲解了软件测试的基本原理、基本方法、基本技术、基本标准和规范。
内容精炼,文字简介、结构合理、综合性强。
配套教材《软件测试习题解析与实验指导》特别适合作为高等院校软件测试教材或教学参考书,也可作为
全国计算机软件测试师考试和软件技术资格与水平考试的培训资料。
本书的配套教学课件及电子资源,可从清华大学出版社网站下载使用。
目录
第1章软件测试概论
1.1软件
1.1.1软件发展史
1.1.2软件项目
1.2软件过程
1.2.1RUP
1.2.2敏捷过程
1.3软件测试
1.3.1测试历程
1.3.2测试与开发的关系
1.4软件缺陷
1.4.1缺陷案例
1.4.2缺陷产生的原因
1.4.3缺陷内容
1.4.4跟踪流程
1.4.5缺陷预防
1.5软件测试行业
1.5.1行业现状
1.5.2软件测试职业
1.5.3测试思维方式
1.6测试认识的误区
第2章软件测试基本知识
2.1测试的几种观点
2.2软件测试的目的与原则
2.2.1软件测试的目的
2.2.2软件测试的原则
2.3软件测试分类
2.3.1按照测试阶段划分
2.3.2按照执行状态划分
2.3.3按照测试技术划分
2.3.4按照执行主体划分
2.4软件测试模型
2.4.1V模型
2.4.2W模型
2.4.3H模型
2.4.4X模型
2.4.5前置模型
2.5测试用例
2.5.1简介
2.5.2测试用例作用
2.5.3测试用例设计准则
2.5.4测试用例的设计步骤
2.5.5测试用例维护
2.5.6测试用例设计的误区
2.6测试停止标准
2.6.1软件测试停止总体标准
2.6.2软件测试各阶段停止标准
第3章黑盒测试
3.1概述
3.2等价类划分
3.2.1划分原则
3.2.2设计测试用例步骤
3.3边界值分析
3.3.1设计原则
3.3.2两类方法
3.3.3应用举例
3.3.4局限性
3.4决策表
3.4.1应用举例
3.4.2优点和缺点
3.5因果图
3.5.1基本术语
3.5.2应用举例
3.6场景法
3.6.1基本流和备选流
3.6.2应用举例
3.7错误推测法
3.7.1概念
3.7.2优缺点
3.8综合策略
第4章白盒测试
4.1白盒测试发展史
4.2静态测试
4.2.1代码检查
4.2.2静态结构分析
4.3代码质量度量
4.3.1代码覆盖率
4.3.2代码度量方法
4.4逻辑覆盖
4.4.1语句覆盖
4.4.2判定覆盖
4.4.3条件覆盖
4.4.4条件判定覆盖
4.4.5修正条件/判定覆盖
4.4.6条件组合覆盖
4.4.7路径覆盖
4.5路径分析
4.5.1简介
4.5.2控制流图
4.5.3应用举例
4.6控制结构测试
4.6.1条件测试
4.6.2循环测试
4.6.3Z路径覆盖
4.7数据流测试
4.7.1词(语)法分析
4.7.2变量定义/使用分析
4.7.3程序片
4.8程序插桩
4.8.1介绍
4.8.2作用
4.9测试方法综述
第5章软件测试流程
5.1测试流程概述
5.2测试需求
5.2.1检查需求文档
5.2.2测试用例编写
5.3测试计划
5.3.1测试计划要点
5.3.2测试计划步骤
5.4测试设计
5.4.1测试设计内容
5.4.2测试用例属性
5.5测试执行
5.5.1单元测试
5.5.2集成测试
5.5.3系统测试
5.5.4验收测试
5.6回归测试
5.6.1测试流程
5.6.2测试用例设计方法
5.7测试评估
5.7.1测试评估活动
5.7.2缺陷分析方法
第6章性能测试
6.1基本概念
6.2性能测试分类
6.2.1负载测试
6.2.2压力测试
6.2.3可靠性测试
6.2.4数据库测试
6.2.5安全性测试
6.2.6兼容性测试
6.2.7可用性测试
6.3性能测试步骤
6.4Web测试
6.4.1Web系统体系结构
6.4.2Web测试内容
……
第7章软件测试自动化
第8章软件测试管理
参考文献
序言
前言
本书第1版自2013年出版以来,深受广大读者的欢迎。经过近几年的教学实践,本书在继承原教材通俗易懂,易于学习的基础上,进行了如下修订。
(1) 软件测试是一门理论与实践紧密联系的课程,直接关系到学生的理论分析能力和综合动手能力的培养。本教材以软件测试技术为主要研究对象,介绍了软件测试的基本理论和基本软件测试工具。
(2) 本教材分为主、辅教材,《软件测试》为主教材,包括软件测试概论、软件测试基本知识、黑盒测试、白盒测试、软件测试流程、性能测试、软件测试自动化、软件测试管理。《软件测试习题解析与实验指导》为辅教材,给出了软件测试习题解析,并对软件测试实验进行了指导操作。
软件测试的先导课为计算机导论、程序设计语言、离散数学、软件工程等课程。软件测试理论较繁杂,让学生在实践中学习理论知识,并用理论知识指导实践,是这本书的写作目的。本书主要使学生掌握软件测试的基本原理、基本方法、基本技术、基本标准和规范,培养学生的合作意识和团队精神,提高学生软件测试的综合能力。
西安邮电大学计算机学院的王曙燕、邓万宇、孟伟君、舒新峰、张昕对本书的编写给予了大力支持,并提出了指导性意见,西北工业大学郑炜、南京大学陈振宇、上海睿亚训软件技术服务公司王磊、韩伟,以及清华大学出版社张玥编辑对本教材的写作大纲、写作风格等提出了很多宝贵的意见。本书在写作过程中参阅了大量中外文专著、教材、论文、报告及网上资料,由于篇幅所限,未能一一列出。在此,向各位作者表示敬意和衷心的感谢。
本书内容精练,文字简洁,结构合理,综合性强,主要面向软件行业初、中级读者,由“入门”起步,侧重“提高”。特别适合作为高等院校相关专业软件测试的教材或教学参考书,也可以供从事计算机应用开发的各类技术人员应用参考,或作为全国计算机软件测评师考试、软件技术资格与水平考试的培训资料。
由于作者水平有限,时间紧迫,本书难免有不足之处,诚恳期待读者的批评指正,以使本书日臻完善。我的电子邮箱是zhouyuanzhe@163.com。
编者2017年3月
文摘
5软件测试流程
本章详细介绍了软件测试的整个过程,包括测试计划、测试设计、测试执行、回归测试以及测试评估。测试执行分为单元测试、集成测试、系统测试和验收测试等。
5.1测试流程概述
软件测试流程与软件开发流程类似,也包括测试计划、测试设计、测试开发、测试执行和测试评估几个部分,如图5.1所示。
图5.1测试生命周期
软件测试生命周期如下所示。
1. 测试计划
根据用户需求报告中关于功能要求和性能指标的规格说明书,定义相应的测试需求报告,使得随后所有测试工作都围绕着测试需求来进行。同时适当选择测试内容,合理安排测试人员、测试时间及测试资源等。
2. 测试设计
测试设计是指将测试计划阶段制定的测试需求分解、细化为若干个可执行的测试过程,并为每个测试过程选择适当的测试用例,保证测试结果的有效性。3. 测试执行
执行测试开发阶段建立的自动测试过程,并对所发现的缺陷进行跟踪管理。测试执行一般由单元测试、集成测试、系统测试、验收测试以及回归测试等步骤组成。
4. 测试评估
根据缺陷跟踪报告,对软件的质量和开发团队的工作进度及效率进行评价。
5.2测 试 需 求
测试需求根据市场/产品需求定义、分析文档和相关技术文档,输出《可测试性需求说明书》和《测试规格》等报告。
5.2.1检查需求文档
需求文档检查步骤如图5.2所示,具有如下步骤。
图5.2需求文档的检查流程
步骤1: 获取最新版本的软件需求规格说明书,同时尽量取得用户原始需求文档。
步骤2: 阅读和尝试理解需求规格说明书中描述的所有需求项。
步骤3: 对照需求规格说明书检查列表进行检查并记录。
步骤4: 针对检查结果进行讨论,修订需求规格说明书,回到第一步,直到检查列表中的所有项通过。
需求文档的检查需要填写表5.1,用于检查结果的确认。从需求的完整性、明确性、必要性、可测性、一致性、可修改性和优先级出发,对表5.1中的每一个检查项解释如下。
第一项需要检查需求规格说明书是否满足了用户提出的每一项需求,实现需求的完整性。
第二项需要检查需求文档的用词、用语问题,实现需求的明确性。
第三项检查的是需求规格说明书对需求覆盖是否准确,实现需求的必要性。
第四项检查的是软件使用环境的描述是否清晰,实现需求的完整性。
第五项检查的是需求规格说明书中的需求编号是否正确,实现需求的可修改性。
第六项主要检查需求是否是自相矛盾的,实现需求的一致性。
第七项主要检查软件系统允许的输入与预期的输出,实现需求的可测性。
第八项检查的是软件系统的性能需求有没有得到清晰的描述,实现需求的完整性。
第九项检查的是需求的关注重点和实现的先后顺序是否清晰地被描述出来,实现需求的优先级。
第十项检查是对软件系统的约束条件是否完整进行描述,实现需求的可测性。表5.1测试需求检查项序号检查项检 查 结 果1是否覆盖了用户提出的所有需求项是[]否[]NA[]2用词是否清晰,语义是否存在有歧义的地方是[]否[]NA[]3是否清楚地描述了软件系统需要做什么及不做什么是[]否[]NA[]4是否描述了软件使用的目标环境,包括软硬件环境是[]否[]NA[]5是否对需求项进行了合理的编号是[]否[]NA[]6需求项是否前后一致、彼此不冲突是[]否[]NA[]7是否清楚系统的输入、输出格式,以及输入与输出之间的对应关系是[]否[]NA[]8是否清晰描述了软件系统的性能要求是[]否[]NA[]9需求的优先级是否合理分配是[]否[]NA[]10是否描述了各种约束条件是[]否[]NA[]5.2.2测试用例编写
测试用例编写的具体流程如下所示。
步骤1: 在分析清楚需求的前提下对测试活动进行计划和设计。
步骤2: 按既定的策划执行测试用例和记录用例。
步骤3: 对测试的结果进行检查分析,形成测试报告。
步骤4: 使用测试结果和分析报告又能指导下一步的测试设计。
步骤5: 形成了一个质量改进的闭环。
【例5.1】测试用例举例。
测试用例编号: input_001。
测试优先级: 中等。
估计执行时间: 2分钟。
测试目的: 验证业务单据数据的查询正确性。
标题: 业务单据查询。
步骤如下:
步骤1: 打开查询界面。
步骤2: 输入查询条件。
步骤3: 确定并提交查询。
步骤4: 查看并验证返回信息。
【分析】编写的测试用例回答如下问题。
(1) 可输入的查询条件包括哪些。
(2) 提交查询之前是否会验证输入数据的正确性。
(3) 输入数据的单位、范围有无限制。
(4) 所有条件都不输入是否意味着查询出所有业务单据。
5.3测 试 计 划
测试计划以测试需求为基础,分析产品的总体测试策略,输出《产品总体测试策略》等报告。
5.3.1测试计划要点
测试计划规定测试任务、安排人员、预见风险,指导测试,实现测试的目标,一般测试计划要点如下所示。
1. 测试范围
确定各阶段的测试范围、技术约束等,以及测试成功的标准和要达到的目标。
2. 测试策略
开发有效的测试模型,决定黑盒测试和白盒测试、人工测试和自动化测试的比重等。
3. 测试资源
确定测试所需要的时间和资源,对人员、硬件和软件等资源进行组织和分配。
4. 进度安排
分解项目工作结构,并采用时限图、甘特图等方法制定时间/资源表。
5. 风险及对策
测试可能存在的风险分析,对风险进行回避、监控、管理,采用变更管理和控制等。
5.3.2测试计划步骤
测试计划一般具有如下步骤。
步骤1: 明确测试对象。
首先要明确测试的对象,有些对象是不需要测试的。有时候,测试的范围是比较难判断的。例如,对于一些整合性系统,它把若干个已有的系统整合进来,形成一个新的系统,那么就需要考虑测试的范围是包括所有子系统,还是仅仅测试接口部分,需要结合整合的方式、系统之间通信的方式。
步骤2 : 制定测试策略。
测试的策略包括宏观的测试策略和微观的测试策略战术。其中,测试战略和测试技术的关系如图5.3所示。
图5.3需求文档的检查流程
为了设计出好的测试策略,需要了解软件的结构、功能分布、各模块对用户的重要程度等,从而决定测试的重点、优先次序、测试的覆盖方式等。设计测试用例时,应尽可能用最少的测试用例发现最多的缺陷,尽可能用精简的测试用例覆盖最广泛的状态空间,还要考虑哪些测试用例使用自动化的方式实现,哪些使用人工方式验证等。
步骤3: 决定测试战术。
根据软件采用的技术、架构、协议等,考虑采用的测试方法和手段,是否需要进行白盒测试或黑盒测试,采用什么测试工具进行自动化测试等。制定好测试策略后,需要安排测试资源,通过充分估计测试的难度、测试的时间、工作量等因素,决定测试资源的合理利用方式。
步骤4 : 安排测试进度。
测试的进度安排需要结合项目的开发计划、产品的整体计划进行考虑,还要考虑测试本身的各项活动进行安排。把测试用例的设计、测试环境的搭建、测试报告的编写等活动列入进度安排表,如图5.4所示。
图5.4需求文档的检查流程
步骤5: 估计计划风险。
一般可能碰到的风险是项目计划变更、测试资源不能及时到位等问题。制定测试计划时应根据项目的实际情况进行评估,并制定出合理、有效的应对策略。对于项目计划的变更,可以考虑建立更加流畅的沟通渠道,让测试人员能及时了解到变更的情况,以及变更的影响,从而可以作出相应的改变。
5.4测 试 设 计
测试设计建立在测试计划书的基础上,根据测试大纲、测试内容及测试的通过准则,将测试需求转换成测试用例的过程,用于描述测试环境、测试执行的范围、层次和用户的使用场景以及测试输入和预期的测试输出等信息,输出《产品或者版本总体测试方案》等报告。
基于需求的测试用例设计一般有如下方法。
方法一: 临时的同行评审。
同行评审尤其是临时的同行评审,应该演变成类似结对编程一样的方式,体现敏捷的“个体和交互比过程和工具更有价值”这一原则,强调测试用例设计者之间的交流,通过讨论、协作来完成测试用例的设计。
方法二: 用户参与评审。
用户参与评审体现了敏捷的“顾客的协作比合同谈判更有价值”这一原则,这里顾客的含义和如何定义测试有关。如果测试是对产品的批判,则顾客是指最终用户或顾客代表;如果测试是被定义为对开发提供帮助和支持,那么顾客显然就是程序员。
5.4.1测试设计内容
软件测试设计主要内容如下所示。
(1) 制定测试的技术方案,确认各个测试阶段采用的测试技术、测试环境和平台,以及选择什么样的测试工具。其中,系统测试中的安全性、可靠性、稳定性、有效性等是测试技术方案的内容重点。
(2) 设计测试用例,根据产品需求分析、系统设计等规格说明书,在测试技术方案的基础上设计具体的测试用例。
(3) 根据测试的目的和任务,以及测试用例的特性和属性(优先级、层次、模块等)设计测试用例,从而构成执行某个特定测试任务的测试用例集合(组),如基本测试用例组、专用测试用例组、性能测试用例组、其他测试用例组等。
(4) 根据所选择的测试工具,将自动化测试的测试用例转换为测试脚本。
(5) 根据所选择的测试平台以及测试用例所要求的特定环境,进行服务器、网络等测试环境的设计。
软件测试设计中,需要考虑如下要点。
(1) 所设计的测试技术方案是否可行、是否有效、是否能达到预期的测试目标。
(2) 所设计的测试用例是否完整、边界条件是否考虑、其覆盖率能达到的百分比。
(3) 所设计的测试环境是否和用户的实际使用环境比较接近。
5.4.2测试用例属性
设计测试用例主要根据测试用例的以下属性,并结合测试用例的编号、标题、描述(条件、步骤、期望结果)等进行测试用例管理。
……
2) 目标性
根据不同的目标设计测试用例。有的测试用例是为主要功能而设计,有的则为系统的负载而设计。
3) 所属范围
根据测试用例所属不同的组件或模块进行管理。
4) 关联性
测试用例一般和软件产品特性相联系,多数情况下验证某个产品的功能。
5) 阶段性
根据不同的测试阶段,如单元测试、集成测试、系统测试、验收测试等设计测试用例,便于得出该阶段的测试覆盖率。
6) 状态性
测试用例有不同的状态,只有被激活的测试用例才被运行。
7) 时效性
针对同样功能,可能所用的测试用例不同,是因为不同的产品版本在产品功能、特性等方面的要求不同。
8) 所有者
测试用例还包括由谁、在什么时间创建,又由谁、在什么时间修改等。
5.5测 试 执 行
当测试用例的设计和测试脚本的开发完成之后,就开始执行测试。测试执行是对每个测试阶段(单元测试、集成测试、系统测试和验收测试等)测试用例的编写和自动化脚本的编写,保证每个阶段的测试任务得到执行,输出《产品自动化测试用例》和《手工执行测试用例》等报告。
1) 单元测试
单元测试的目的在于发现各模块内部可能存在的各种差错,一般由程序员执行,但须提交单元测试用例和测试报告,由测试人员进行审查。
2) 集成测试
集成测试的主要目标是发现与接口有关的问题,对于关键模块应尽早测试,并将自顶向下、自底向上两种测试策略结合起来,严格执行各个模块。3) 系统测试
系统测试以用户环境模拟系统的运行,用于验证系统是否达到在概要设计中所定义的功能和性能。
4) 验收测试
验收测试是指当技术部门完成了所有测试工作后,由用户参与的软件测试,通常采用α测试和β测试,用于确保产品能真正符合用户需求。
5.5.1单元测试
单元测试是根据源程序、编程规范、产品规格设计说明书和详细的程序设计文档,以测试软件设计中的最小单位,例如,面向过程语言的函数或子过程。面向对象语言的类或成员函数用于发现语法、格式和逻辑等缺陷,从而判断特定条件或场景下函数的行为,输出缺陷跟踪报告。
单元测试一般有如下优点。
(1) 单元测试是验证行为。
程序中的每一项功能通过测试来验证其正确性,为其后代码的重构提供了保障。
(2) 单元测试是设计行为。
软件的设计考虑如何实现软件的某项功能、用户界面等,单元测试关注于软件的具体功能实现是否符合需求设计,而不仅仅定位于代码的实现运作机制上。
……
(4) 单元测试具有回归性。
自动化的单元测试避免了代码出现回归,编写完成之后,便于随时运行测试。
单元测试针对程序模块进行测试,主要有以下5个任务——模块接口、局部数据结构、边界条件、独立的路径和错误处理,如图5.5所示。
图5.5单元测试解决的任务
1) 模块接口测试
ISBN | 9787302473299,7302473293 |
---|---|
出版社 | 清华大学出版社 |
作者 | 周元哲 |
尺寸 | 16 |