




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
XXXXXX大学软件工程SOFTWARE
ENGINEERING教师:XXXXX2024教学目标:(1)掌握软件测试的基本概念和测试原则;(2)掌握等价类划分法,熟悉黑盒测试的其他方法;(3)掌握逻辑覆盖法,熟悉白盒测试的其他方法;(4)掌握软件测试的一般步骤,以及每个阶段性测试的目的;(5)能够为小型软件项目设计测试用例。第9章软件测试9.1软件测试概述1.软件测试概念软件测试具有广义和狭义的理解形式。广义的软件测试是指在软件生命周期内,所有的检查、评审、验证和确认活动,如需求评审、功能验证等;狭义的软件测试则是指对软件的检查和评价,检查软件的功能、性能是否符合需求,评价软件的可靠性和安全性。2.软件测试中的术语(1)错误。开发人员在软件开发的过程中,通常将某些信息以不正确的形式表示出来或误解用户需求,这些称为错误。例如,需求分析人员对一个软件功能需求的理解错误。(2)缺陷。缺陷可以导致软件不能正常运行。当开发人员在开发过程中出现错误以后,就会在软件中引入一个或多个缺陷。例如,合法用户登录后不能跳转到主页面。(3)故障。故障是指软件没有按照需求规格说明运行,从而引起软件行为与用户需求不一致的现象。故障可能发生在测试阶段,也可能发生在软件交付之后的运行阶段。(4)测试用例。测试用例是在软件测试的过程中,为了检查程序功能和性能是否符合设计要求,由测试人员设计的一组测试序列和数据的集合。测试用例通常包括测试的操作序列、输入数据和预期输出三个部分。3.软件测试对象软件测试并不等于程序测试,软件测试应贯穿于软件定义与开发的整个期间。因此,需求分析、设计、实现等各阶段所得到的文档都应成为软件测试的对象。4.软件测试原则软件测试的主要任务是根据软件开发各阶段的文档资料和程序的内部结构,设计测试用例,以发现软件系统中不同类型的错误。在进行软件测试的过程中,需要掌握以下5个方面的原则。(1)完全测试是不可能的。基于时间、人员、资金等方面的限制,不可能对软件产品进行完全的测试,即不可能考虑或测试到软件产品的所有执行情况或路径。(2)软件产品中所存在的缺陷与已发现的缺陷数成正比。软件测试所发现的缺陷越多,说明软件产品中存在的缺陷越多。一般情况下,潜在的缺陷数与发现的缺陷数存在着正比关系。(3)80/20原则。在软件测试工作中,存在着二八定律,即80%的缺陷会集中存在于20%的代码中。为了提高测试的工作效率,应该将测试的重点放在缺陷聚集出现的软件模块中。(4)测试工作应该尽早开始,并且贯穿于整个开发过程中。测试工作开始的越早,在软件开发过程中出现的软件缺陷就能被及早发现和纠正。一般来说,越到软件开发的后期,纠正同一软件缺陷所付出的代价就会越大。(5)长期保留测试用例。测试不是一次完成的,在测试出缺陷并修复后,需要继续测试。同时,在以后的维护阶段仍然需要测试,因此,测试用例文档必须长期保存。9.2软件测试方法9.2.1静态(1)审查审查是指通过阅读并讨论各种设计文档以及程序代码,检查其是否有错。审查的工作可以独自进行,也可以通过会议的形式将相关的人员召集起来共同发现并纠正错误。(2)走查走查的对象只是代码,不包括设计文档。代码走查以小组会议的形式进行,相关测试人员提供所需的测试用例,参会人员查看程序的执行过程,对其逻辑和功能提出各种疑问,并通过讨论发现问题。测试
9.2.2动态测试
1.黑盒测试黑盒测试也称为功能测试,它是在已知产品所具有的功能的前提下,通过测试来检测每个功能是否能正常使用。在测试时,把测试对象看作一个不能打开的黑盒子,在完全不考虑程序内部结构和内部特性的情况下,测试者在程序接口进行测试,只检查程序功能是否能够按照规格说明书的规定正常使用,程序是否能够适当地接收输入数据而产生正确的输出信息,并且保持外部信息的完整性。2.白盒测试白盒测试也称为结构测试,它是在知道产品内部工作过程的前提下,通过测试来检测产品内部动作是否按照规格说明书的规定正常进行。在测试时,把测试对象看作一个打开的盒子,测试人员依据程序内部逻辑结构的相关信息,设计测试用例,对程序所有逻辑路径进行测试,通过在不同点检查程序的状态,来确定实际的状态是否与预期的状态一致。9.3黑盒测试技术9.3.1等价类划分法1.划分等价类(1)有效等价类有效等价类是指对于程序的规格说明来说是合理的,有意义的输入数据构成的集合。利用有效等价类可以检验程序是否实现了规格说明中所预先规定的功能和性能。对于具体的总是,有效等价类可以是一个,也可以是多个。(2)无效等价类无效等价类是指不符合程序规格说明、不合理或无意义的输入数据所构成的集合。利用无效等价类可以检查软件功能和性能的实现是否有不符合规格说明要求的地方。对于具体的问题,无效等价类至少应有一个,也可能有多个。2.等价类划分原则如何确定等价类,是使用等价类划分法的一个重要问题。下面给出划分等价类的常用原则。(1)在输入条件规定了取值范围或值的个数的情况下,则可以确立一个有效等价类和两个无效等价类。(2)在输入条件规定了输入值的集合或者规定了“必须如何”的条件的情况下,可确立一个有效等价类和一个无效等价类。(3)在输入条件是一个布尔表达式的情况下,可确定一个有效等价类和一个无效等价类。(4)在规定了输入数据的一组值,假定n个,并且程序要对每一个输入值分别处理的情况下,可确定n个有效等价类和一个无效等价类。(5)在规定了输入数据必须遵守的规则的情况下,可确立一个符合规则的有效等价类和从不同角度违反规则的若干个无效等价类。(6)在确知已划分的等价类中各元素在程序处理中的方式不同的情况下,则应再将该等价类进一步划分为更小的等价类。3.测试用例设计在设计测试用例时,应该同时考虑有效等价类和无效等价类测试用例的设计。根据如表9-2所示的等价类表设计测试用例,具体步骤如下。(1)为每一个等价类规定一个唯一的编号。(2)设计一个新的测试用例,使其尽可能多地覆盖尚未被覆盖的有效等价类,重复这一步骤,直到所有的有效等价类都被覆盖为止。(3)设计一个新的测试用例,使其仅覆盖一个尚未被覆盖的无效等价类,重复这一步骤,直到所有的无效等价类都被覆盖为止。【例9-1】某程序中城市电话号码由三部分组成,这三部分的名称和内容规定为地区码空白或3位数字,前缀为非‘0’或‘1’开头的3位数字,后缀为4位数字。假设被测程序能接受一切符合上述规定的电话号码,拒绝所有不符合规定的电话号码,试用等价类划分法设计它的测试用例。
第1步:确定等价类,建立等价类表,如表9-3所示。第2步:设计测试用例,覆盖所有的有效等价类,如表9-4所示。第3步:设计测试用例,覆盖所有的无效等价类,
9.3.2边界值分析法(1)如果输入条件规定了取值范围,则可以选取正好等于该范围边界的值以及刚刚超过该范围边界的值作为测试用例。例如:某程序对重量在5公斤至50公斤范围内的邮件,计算其邮费。则可取4.9、5、5.1、49.9、50、50.1作为测试用例。(2)如果输入条件规定了输入值的个数,则用最大个数、最小个数、比最小个数少1,比最大个数多1的数据作为测试用例。例如,某程序对一个输入文件进行处理操作,要求输入的文件应包括1~55个记录。则可选取包含1个记录、包含55个记录、包含0个记录、包含56个记录的输入文件分别作为测试用例。9.3.3因果图法(1)恒等:若C1是1,则E1也是1,否则E1为0。(2)非:若C1是1,则E1是0,否则E1为1。(3)或:若C1或C2是1,则E1为1,否则E1为0。(4)与:若C1和C2都是1,则E1也是1,否则E1为0。2.利用因果图生成测试用例的基本步骤(1)分析因果。从规格说明中找出哪些是原因,哪些是结果。原因一般是输入条件,结果一般是输出条件或系统的变换。并为每个原因、结果赋予一个标识。(2)画出因果图。分析规格说明语义、内容,找出原因与结果之间,原因与原因之间的对应关系,画出因果图,并加上必要的限制。(3)转换为判断表。将因果图转换为有限项判断表。(4)设计测试用例。将判断表的每一列,转换为一个测试用例。
【例9-2】某程序功能为根据输入的文件名修改相应的文件。文件名第一个字符必须是字母A或B,第二个字符必须是数字。若输入的文件名满足条件,则执行文件修改操作;若输入的文件名第一个字符不正确,则给出提示信息N;若输入的文件名第二个字符不正确,则给出提示信息M。使用因果图法设计测试用例。第1步:分析程序的规格说明,找出所有输入条件(“原因”节点)和所有输出结果(“结果”节点),得出对应的因果关系表如表9-7所示。第2步:使用恒等、与、或、非4种对应关系,画出因果图。因果关系图,如图9-3所示。其中节点H是为了导出最终结果而引入的一个中间节点,它的含义表示第一个字符是否满足条件。“E约束”表示C1与C2之间是互斥关系,即C1与C2不能同时为1。第3步:将因果图转换成判定表,如表9-8所示。第4步:按照条件的各种组合情况产生对应的动作。原因1和原因2不能同时成立,故可排除这两种情况。根据判定表中第3~8列,每一列设计一个测试用例,如表9-9所示。9.4白盒测试技术9.4.1逻辑覆盖法逻辑覆盖法是最常用的一类白盒测试方法,以程序内部逻辑结构为基础,通过对程序逻辑结构遍历实现程序测试的覆盖。逻辑覆盖法是一系列测试过程的总称,这组测试过程对程序逐渐进行越来越完整的通路测试。从覆盖源程序语句的详尽程度,逻辑覆盖法可以分为语句覆盖、判定覆盖、条件覆盖、判定条件覆盖、条件组合覆盖和路径覆盖。(1)路径ab:执行该路径的条件是a为假且b为假时,记为R1。(2)路径acb:执行该路径的条件是a为真且b为假时,记为R2。(3)路径abd:执行该路径的条件是a为假且b为真时,记为R3。(4)路径acbd:执行该路径的条件是a为真且b为真时,记为R4。1.语句覆盖语句覆盖是指程序中每个可执行语句至少执行一次。为使例9-3中每条语句都执行一次,执行路径R4即可。根据路径R4的执行条件可知,当测试数据满足条件“A=2并且B=0”或“A>1并且B=0并且X>A”时,程序就会按路径R4执行。满足语句覆盖标准的测试用例如表9-10所示。2.判定覆盖判定覆盖也被称为分支覆盖,是指程序中每个判定的取真分支和取假分支至少执行一次。在例9-3中,使每个分支都执行一次,只须执行路径R2和R3,或者执行路径R1和R4。这里选择路径R2和R3进行测试,根据这两条路径的执行条件,设计满足判定覆盖标准的测试用例如表9-11所示。3.条件覆盖条件覆盖是指程序中每个判定包含的每个条件的可能取值(真/假)都至少满足一次。例9-3中,判定a中包含的各种条件的所有可能包括A>1,A≤1,B=0,B≠0。判定b中各种条件的所有可能包括A=2,A≠2,X>1(或当判定a为真时X>A),X≤1(或当判定a为真时X≤A)。选择适当的测试用例,可以覆盖上述条件的所有可能结果。满足条件覆盖标准的测试用例如表9-12所示。4.判定条件覆盖在例9-3中满足判定条件覆盖标准的测试用例如表9-13所示。选择R1和R4两条路径进行测试,包含了4个内部判定条件。测试用例1满足条件包括A>1,B=0,A=2,X>1或当判定a为真时X>A,即4个内部判定条件均为“真”。测试用例2满足条件包括A≤1,B≠0,A≠2,X≤1,即4个内部判定条件均为“假”。此时,用最少的测试用例满足了判定条件覆盖标准。5.条件组合覆盖
例9-3判定a中的内部判定条件的所有可能组合有4种情况。(a1)A>1,B=0(a2)A>1,B≠0(a3)A≤1,B=0(a4)A≤1,B≠0判定b中的内部判定条件的所有可能组合有4种情况。(b1)A=2,X>1(或当判定a为真时,X>A)(b2)A=2,X≤1(或当判定a为真时,X≤A)(b3)A≠2,X>1(或当判定a为真时,X>A)(b4)A≠2,X≤1(或当判定a为真时,X≤A)6.路径覆盖路径覆盖也是白盒测试最为典型的问题。路径覆盖是指能够覆盖程序中所有的可能路径。例9-3中所有可能执行的路径包括R1、R2、R3和R4。满足路径覆盖标准的测试用例如表9-15所示。9.4.2基本路径法设计基本路径测试的步骤如下。(1)以详细设计或源程序为基础,导出程序流程图的拓扑结构——程序图。程序图是简化了的流程图,它是反映程序流程的有向图,其中小圆圈称为节点,代表了流程图中每个处理符号(矩形框、菱形框),用箭头的连线表示控制流向,称为程序图中的边或路径。流程图和程序图,如图9-5所示,图9-5(a)是一个流程图,可以将它转换成图9-5(b)所示的程序图。(2)计算程序图G的环路复杂性V(G),具体方法以有下三种。①程序图中区域的数量对应于环路和的复杂度。区域个数为边和节点圈定的封闭区域数加上图形外的区域数1。例如,图9-5(b)的V(G)=4。②V(G)=E-N+2,其中E是程序图中边的数量,N是程序图中节点的数量。例如,图9-5(b)的V(G)=11-9+2=4。③V(G)=P+1,其中P是程序图中判定节点的数量。例如,图9-5(b)的V(G)=3+1=4。(3)确定只包含独立路径的基本路径集。环路复杂性可导出程序基本路径集合中的独立路径条数,这是确保程序中每个执行语句至少执行一次所必需的测试用例数目的上界。独立路径是指包括一组以前没有处理的语句或条件的一条路径。从程序图来看,一条独立路径至少包含一条在其他路径中未有过的边的路径,例如,在如图9-5(b)所示的程序图中,一组独立的路径如下。路径1:1-11;路径2:1-2-3-4-5-10-1-11;路径3:1-2-3-6-8-9-10-1-11;路径4:1-2-3-6-7-9-10-1-11。(4)设计测试用例,确保基本路径集合中每条路径的执行。9.5软件测试过程9.5.1单元测试1.测试内容单元测试主要针对模块的5个基本特征进行测试。(1)模块接口。模块接口测试主要是测试数据能否正确地通过单元。检查的主要内容是实参和形参的参数个数、数据类型及对应关系是否一致。当模块是对数据库表进行输入和输出时,要检查表结构是否正确。(2)局部数据结构。局部数据结构主要检查以下几方面的错误:初始化或缺省值错误;不正确的变量名字;数据类型不一致等。(3)重要的执行路径。重要模块要进行基本路径测试,仔细地选择测试路径是单元测试的一项基本任务。(4)错误处理。错误处理主要测试程序处理错误的能力,检查是否存在以下问题:不能正确处理外部输入错误或内部处理引起的错误;对发生的错误不能正确描述或描述内容难以理解;所显示的错误与真正的错误不一致。(5)边界条件。程序最容易在边界上出错,如输入/输出数据的等价类边界、选择条件和循环条件的边界等都应进行测试。2.测试方法单元测试环境。由于被测试的模块处于整个软件结构的某一层位置上,一般是被其他模块调用或调用其他模块,其本身不能进行单独运行,因此在单元测试时,需要为被测试模块设计驱动模块和桩模块。9.5.2集成测试1.一次性集成一次性集成是所有单个模块的单元测试完成后,把所有模块一次性全部集成在一起,作为一个整体来进行测试。一次性集成方式看似简单,但对于大规模的软件项目测试不合适。首先,要对所有单独的模块进行测试,需要编写大量的驱动模块和桩模块,编写工作量较大;其次,所有模块集成在一起后,如果发现问题,很难判断问题是因为哪个模块的缺陷而引起的,对缺陷很难定位。小型软件项目可以使用一次性集成测试,而大型软件项目一般采用渐增式集成测试。2.渐增式集成渐增式集成是以软件结构图为依据,按照一定顺序将某个模块
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 单价度合同范本
- 发电项目合同范本
- 出租房屋补充合同范例
- 酒店地点租赁合同范本
- 双方分成协议合同范本
- 2025年铀及其转化物项目合作计划书
- 2025年工业清洗清理设备:工业吸尘设备合作协议书
- 合同范本类别广告合同
- 企业制度合同范本
- 借调劳动合同范本
- 初中美术备课组工作计划
- 湖北省武汉市江岸区2024年七年级下学期期末数学试题附答案
- 办公区域主要风险辨识与分级管控清单
- 2024-2034年中国藏香猪养殖行业市场深度分析及发展潜力预测报告
- 小学科学湘科版六年级下册全册同步练习含答案
- 人教版小学五年级英语上册作文专项练习题
- (2024年)传染病培训课件
- 乘务大队客舱服务质量
- 海智工作站申报计划书
- 托管岗前培训教学课件
- 机房运维管理制度
评论
0/150
提交评论