第2章基于需求的测试生成_第1页
第2章基于需求的测试生成_第2页
第2章基于需求的测试生成_第3页
第2章基于需求的测试生成_第4页
第2章基于需求的测试生成_第5页
已阅读5页,还剩35页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第2章基于需求的测试生成

讲解人:林青霞引言设计测试输入和相应的预期输出(即设计测试用例),是任何测试机构最基本的技术活动之一。常用的测试设计策略有:基于需求的测试生成,基于模型的测试生成和基于代码的测试生成等。软件需求是设计测试的基本出发点,需求规范可以是非正式的规范、严格的规范或形式化的规范,也可以是这三种规范的混合体。需求规范的形式化程度越高,则越有机会进行自动化测试。软件输入域是测试设计的依据,可从非正式的和严格的需求规范中提取出来。2.2测试用例选择问题关键:如何构造测试用例集合,使得该集合能够尽可能多地发现软件中存在的缺陷。软件输入域:指软件在执行过程中可能接收的全部合法输入的集合。穷举测试:指测试人员逐个地使用输入域中的所有元素对软件实施测试。例:1.y=x+3x∈Z,x∈[1,12]

2.y=x+3x∈[1,12]基于需求的测试用例选择方法等价类划分边界值分析类别划分法因果图分析基于谓词的测试生成2.3等价类划分对输入范围进行划分,把所有可能的输入数据,即程序输入域划分为若干个互不相交的子集,称为等价类,然后从每个等价类中选取少数具有代表性的数据作为测试用例。一个软件的全部输入的集合至少分成两个子集:一个包含所有正常和合法的输入(E);另一个包含所有异常和非法输入(U)。这两个集合可进一步划分为若干子集。概括:

(1)交集为空

(2)并集为全集

(3)分为有效等价类和无效等价类2.3.2关系与等价类的划分关系:一个n元组的集合。例:方法addList计算并返回一个整数列表之和,其对应的关系可定义为:addList:L—>Z其中,L是包含所有整数列表的集合,Z是整数集。在划分输入域时,常常采用下面的关系:R:I—>I,其中,I为输入域,R为I上的关系,R定义了一个等价类,该等价类是I的子集。例2.3方法gprice以食品名称作为输入,查询商品价格数据库并返回相应食品的单价(等价类pF);若无该食品,则返回错误信息(等价类pNF)。pF和pNF都是gprice输入域I的子集,同时,二者形成了对输入域I的一个划分,有pFUpNF=I和pF∩pNF=Ø。2.3.2关系与等价类的划分例2.3方法gprice以食品名称作为输入,查询商品价格数据库并返回相应食品的单价(等价类pF);若无该食品,则返回错误信息(等价类pNF)。pF和pNF都是gprice输入域I的子集,同时,二者形成了对输入域I的一个划分,有pFUpNF=I和pF∩pNF=Ø。商品单价milk2.99tomato0.99cola3.992.3.3变量的等价类类别等价类示例约束等价类代表取值范围(range)一个取值范围内的等价类;两个取值范围外的等价类speed∈[60,90])age:int;0≤age≤120{{50}↓,{75}↑,{100}↓}{{-10}↓,{75}↑,{130}↓}字符串(string)合法字符串的类和非法字符串的类fname:string;{{ε}↓,{Sue}↑,{Sue2}↓,{TooLonganame}↓}枚举(enumeration)每个取值对应一个等价类auto_color∈{red,blue,green}up:boolen{{red}↑,{blue}↑,{green}↑}{{true}↑,{false}↑}数组(array)合法数组等价类,空数组等价类和大于期望长度数组的等价类Javaarray:int[]aName=newint[3]{{[]}↓,{[-10,20]}↑,{[-9,0,12,15]}↓}复合数据类型(compounddatatype):包含两个或两个以上相互独立的属性的输入数据2.3.4一元划分和多元划分一元化分:每次只考虑一个输入变量,每个输入变量形成对输入域的一个划分。多元化分:将所有输入变量的笛卡尔积视为程序的输入域I,并定义I上的关系R。例假设某软件的输入为整型数据x和y,其取值范围为3≤x≤7和5≤y≤9。采用一元化分,可产生6个等价类:

E1:x<3E2:3≤x≤7E3:x>7

E4:y<5E5:5≤y≤9E6:y>9

若将x和y的笛卡尔积视为软件的输入域,可产生9个等价类:

E1:x<3,y<5E2:x<3,5≤y≤9E3:x<3,y>9

E4:3≤x≤7,y<5E5:3≤x≤7,5≤y≤9E6:3≤x≤7,y>9

E7:x>7,y<5E8:x>7,5≤y≤9E9:x>7,y>9采用多元化分方法得到的测试用例,往往比采用一元化分方法得到的测试用例更能充分地测试被测软件,但其等价类数量会随输入变量个数的增加而成指数增长。2.3.5等价类划分的完整过程步骤1确定输入域认真分析需求并确定所有输入、输出变量,以及变量类型和变量使用条件。步骤2等价类划分将每个变量的取值集合划分为互不相交的子集,则每个子集对应一个等价类,所有等价类构成了对输入域的一个划分。步骤3组合等价类可采用多元化分方法,将等价类组合起来。(也可忽略该步骤:直接根据那些为单个变量定义的等价类选择测试用例,但可能无法获得高效的测试用例。)步骤4确定不可测的等价类有些输入数据组合在实际测试过程中是无法生成的,包含这种数据的等价类就是不可测等价类。2.3.6等价类划分实例例NextDate(Y,M,D),Y[1900,2100]M[1,12]D[1,31](1)d++(2)m++,d=1(3)y++,m=1,d=1有效等价类y:{平年},{闰年}m:{2},{12},{1,3,5,7,8,10},{4,6,9,11}d:{1,2,……,27},{28},{29},{30},{31}无效等价类y:{y<1900},{y>2100},{小数}m:{m<1},{m>12},{小数}d:{d<1},{d>31},{小数}弱一般等价类测试强一般等价类测试弱健壮等价类测试强健壮等价类测试2.3.7GUI设计与等价类GUI(GraphicalUserInterface,图形用户接口)是指采用图形方式显示的计算机操作用户界面。与早期计算机使用的命令行界面相比,图形界面对于用户来说在视觉上更易于接受,操作更加简便。精心的GUI设计能实现对输入域的限制,通常存在两种GUI:一种能够阻止所有的变量接受非法输入;另一种允许部分变量接受非法输入。设计测试用例时必须考虑GUI的具体实现,合理的GUI设计可以大大降低测试用例的数量。2.4边界值分析

边界值分析是一种有效的测试用例选择方法,可以发现位于等价类边界处的软件缺陷。通常在设计测试用例时,同时采用边界值分析和等价类划分两种方法。其生成测试用例的主要步骤如下:步骤1使用一元划分方法划分输入域。步骤2为每种划分确定边界,也可利用输入变量之间的特定关系确定边界。步骤3设计测试用例,确保每个边界值至少出现在一个测试输入数据中。注意:确定边界时需要仔细考虑个输入变量之间的关系,进而找出不明显的边界;使用单个变量等价类的笛卡尔积所构成的输入域划分,将获得更多的测试用例。(min-,min,min+,nom,max-,max,max+)2.5类别划分法类别划分法是一种从软件需求生成测试用例的系统化方法,包含手工和自动完成的步骤。其步骤如下:步骤1分析功能规范确定所有能够独立测试的功能模块,对于大的软件系统而言,功能模块可能对应于可独立测试的各个子系统,而子系统又可以进一步分为可独立测试的子模块。步骤2确定类别对各被测模块的功能规范进行分析,确定相应的输入、环境中的对象以及各个参数和环境对象的特征。2.5类别划分法步骤3类别划分根据每个类别中各不同情况,对功能模块进行测试。步骤4确定约束条件对某功能模块的测试,包括对该模块各参数、环境对象所有选项的组合的测试。由于输入参数间必须满足某些约束条件,因此有一部分的选项组合是无法实现的。步骤5编(重)写测试规范采用具有严格语法的测试规范语言编写测试规范。步骤6处理测试规范对测试生成的若干个测试框架进行分析,找出框架中以相同方式测试被测软件的冗余内容。2.5类别划分法步骤7评价生成器的输出检查步骤6所生成的各测试框架中是否包含冗余用例以及是否缺少某些用例,进而转入步骤5。步骤8生成测试脚本从测试框架产生的测试用例要被组合成测试脚本(即一组测试用例),通常将环境设置相同的测试用例编为一组,这样可以提高测试驱动器执行测试用例的效率。2.6因果图分析

等价类划分法和边界值分析方法都是着重考虑输入条件,如果程序输入之间没有什么联系,采用等价类划分和边界值分析是一种比较有效的方法。但如果输入之间有关系,例如,约束关系、组合关系,这种关系用等价类划分和边界值分析是很难描述的,测试效果难以保障。因此必须考虑使用一种适合于描述对于多种条件的组合,产生多个相应动作的测试方法,因果图正是在此背景下提出的。2.6因果图分析

因果图也称作依赖关系模型,主要用于描述软件输入条件(即“原因”)与软件输出条件(即“结果”)之间的依赖关系。“原因”是指软件需求中能影响软件输出的任意输入条件;“结果”是指软件对某些输入条件的组合所做出的响应。

利用因果图方法生成测试用例的一般过程为:1)仔细研读软件需求规范,确定原因和结果,并赋予唯一的标识。2)用因果图描述原因与结果之间的依赖关系。3)将因果图转换为一个有限入口的判定表。4)根据判定表生成测试用例。2.6.1因果图中的基本符号因果关系(实线原因在左,结果在右)c1e1恒等c1e1非~c1e1或c2c3∨c1e1与c2∧2.6.1因果图中的基本符号原因之间的约束关系(虚线)ab互斥Eab包含Icab唯一ORab要求Mab屏蔽2.6.2创建因果图创建因果图的两个步骤:1.确定哪些是原因,哪些是结果,明确因果关系和约束关系。2.构造因果图,表达提取到的依赖关系。例:某个软件的规格说明中包含这样的要求:“第一列字符必须是A或B,第二列字符必须是一个数字,在此情况下进行文件的修改。但如果第一列字符不正确,则给出信息L;如果第二列字符不是数字,则给出信息M。2.6.2因果图实例例:某个软件的规格说明中包含这样的要求:“第一列字符必须是A或B,第二列字符必须是一个数字,在此情况下进行文件的修改。但如果第一列字符不正确,则给出信息L;如果第二列字符不是数字,则给出信息M。原因:

1--第一列字符是A;2--第一列字符是B;3--第二列字符是数字。结果:

21--修改文件;22--给出信息L;23--给出信息M。

1

2

11

3

23

21

22∨~∧~E2.6.3从因果图生成判定表在所有的黑盒测试方法中,基于判定表的测试是最严格,最具有逻辑性的测试方法。判定表是把作为条件的所有输入的各种组合值以及对应输出值都罗列出来而形成的表格。它能够将复杂的问题按照各种可能的情况全部列举出来,简明并避免遗漏。因此,利用判定表能够设计出完整的测试用例集合。2.6.3从因果图生成判定表实例例:某个软件的规格说明中包含这样的要求:“第一列字符必须是A或B,第二列字符必须是一个数字,在此情况下进行文件的修改。但如果第一列字符不正确,则给出信息L;如果第二列字符不是数字,则给出信息M。桩123456781TTTTFFFF2TTFFTTFF3TFTFTFTF21--x

x

22--

xx23--

x

x

x2.6.3.1判定表组成判定表通常由4个部分组成:条件桩:列出了问题的所有条件。通常认为列出的条件的次序无关紧要。动作桩:列出了问题规定可能采取的操作。这些操作的排列顺序,没有约束。条件项:列出针对它左列条件的取值,在所有可能情况下的真假值。动作项:列出在条件项的各种取值情况下应该采取的动作。规则:任何一个条件组合的特定取值及相应要执行的操作。在判定表中贯穿条件项和动作项的一列就是一条规则。2.6.3.2判定表的生成步骤(1)确定规则的个数。有n个条件的决策表有2n个规则(每个条件取真、假值)。(2)列出所有的条件桩和动作桩。(3)填入条件项。(4)填入动作项,得到初始判定表。(5)简化判定表,合并相似规则。若表中有两条以上规则具有相同的动作,并且在条件项之间存在极为相似的关系,便可以合并。合并后的条件项用符号“-”表示,说明执行的动作与该条件的取值无关,称为无关条件。桩123456781TTTTFFFF2TTFFTTFF3TFTFTFTF21--x

x

22--

xx23--

x

x

x桩12345671TTTFFFF2TFFTTFF3-TFTFTF21-x

x

22-

xx23-

x

x

x2.7基于谓词的测试生成

规则可以形式化地表示为谓词。例如,考虑软件需求“若打印机处于ON状态且具备打印纸,则发送要打印的文件”。这句话包含一个条件和一个动作。下面的谓词,记为pr,表示这句话的条件部分:谓词pr包含两个由布尔运算符“∧”连接的关系表达式。两个关系表达式都使用了等于符号(=)。编程人员可能正确地为pr编码,也可能没有正确编码,导致程序中存在缺陷。我们的目标是,根据谓词产生测试用例,从而可以确保在测试中发现某种类型的所有缺陷。这种用于验证谓词实现是否正确的测试称之为谓词测试。2.7.1谓词与布尔表达式设relop表示集合{<,>,≤,≥,=,≠}中的一个关系运算符。设bop表示集合{∧,∨,∨—,﹁}中的一个布尔运算符,其中∧,∨,∨—是二元布尔运算符,﹁是一元布尔运算符。布尔变量的取值集合为{true,false},对于给定的布尔变量a,﹁a和a都表示a的补。关系表达式是指形如e1relope2的表达式,其中e1和e2取值为有限或无限集合S。可将S中的元素进行排序,从而可以使用任意关系运算符对e2和e1进行比较。

一个条件可以表示成简单谓词或复合谓词。简单谓词就是一个布尔变量或关系表达式,其中变量可以取非。复合谓词可以是一简单谓词,或是由若干简单谓词或其补通过二元布尔运算符连接起来的一个表达式。谓词当中的圆括号表示布尔变量、关系表达式组合。2.7.1谓词与布尔表达式2.7.1谓词与布尔表达式布尔表达式可以表示为抽象语法树,如图2-17所示。将谓词pr的抽象语法树记为AST(pr)。AST(pr)的每个叶结点代表一个布尔变量或一个关系表达式;AST(pr)的内部结点是布尔运算符,比如∧、∨、∨—、﹁,分别被称作AND结点、OR结点、XOR结点、NOT结点。2.7.2谓词测试中的故障模型本章论述的谓词测试,重点关注三类故障:布尔运算符故障、关系运算符故障、算术表达式故障。引起布尔运算符故障的原因在于:1)使用了错误的布尔运算符;2)漏用或误用非运算符;3)圆括号使用错误;4)布尔变量使用错误。当错误地使用关系运算符时将导致关系运算符故障。当算术表达式的结果值产生数量为ε的偏差时(off-by-ε)就会出现算术表达式故障。

给定谓词pr和测试用例t,用缩写p(t)表示谓词pr针对t所取的真值。例如,若pr为a<b∧r>s且t为〈a=1,b=2,r=0,s=4〉,则p(t)=false。下面举例说明上述的各种故障。2.7.2谓词测试中的故障模型布尔运算符故障设软件需求规范要求当(a<b)∨(c>d)∧e为真时软件执行某动作。其中,a、b、c、d为整型变量,e为布尔变量。下面列出4个错误编码,分别包含不同的布尔运算符故障:(a<b)∧(c>d)∧e布尔运算符错误(a<b)∨﹁(c>d)∧e非运算符错误(a<b)∧(c>d)∨e布尔运算符错误(a<b)∨(c>d)∧f布尔变量错误(使用了f,而不是e)关系运算符故障关系运算符故障示例如下:(a=b)∨(c>d)∧e关系运算符错误(使用了=,而不是<)(a=b)∨(c≤d)∧e关系运算符错误(同时包含两个故障)(a=b)∨(c>d)∨e关系运算符错误与布尔运算符错误2.7.2谓词测试中的故障模型算术表达式故障考虑三种算术表达式的off-by-ε故障,分别为:off-by-ε、off-by-ε*、off-by-ε+。考虑正确关系表达式Ec,其形式为e1

relop1

e2;考虑错误的关系表达式Ei,其形式e3relop2

e4;假设算术表达式e1、e2、e3、e4包含相同的变量集合。三种off-by-ε故障定义类型如下:Ei包含off-by-ε故障,如果对于任何测试用例e1=e2,有|e3-e4|=

ε。Ei包含off-by-ε*故障,如果对于任何测试用例e1=e2,有|e3-e4|≥

ε。Ei包含off-by-ε+故障,如果对于任何测试用例e1=e2,有|e3-e4|>ε。2.7.2谓词测试中的故障模型算术表达式故障考虑三种算术表达式的off-by-ε故障,分别为:off-by-ε、off-by-ε*、off-by-ε+。例:假设正确的谓词Ec为a<b+c,其中a、b为整型变量。设ε=1,则Ei的三种错误故障分别如下:a<b假设c=1,Ei包含off-by-1故障,因为对于任何测试用例a=b+c,有|a-b|=1。a<b+1假设c≥2,Ei包含off-by-1*故障,因为对于任何测试用例a=b+c,有|a-(b+1)|≥1。a<b-1假设c>0,Ei包含off-by-1+故障,因为对于任何测试用例a=b+c,有|a-(b+1)|>1。还存在另外两类故障:缺失/冗余布尔变量故障2.7.3谓词约束用BR表示符号集合{t,f,<,=,>,+ε,-ε}。“BR”是布尔和关系(BooleanandRelational)的缩写。集合BR中的元素称为BR符号。一个BR符号定义了针对某个布尔变量或关系表达式的约束。例如,用符号“+ε”约束表达式E′:e1<e2时,要满足该约束就要求E′的某个测试用例确保0<e1-e2≤ε。同样,符号“-ε”是对E′的另一个约束,要满足该约束就要求E′的某个测试用例确保-ε≤e1-e2<0。对于pr中的变量,如果不存在满足约束C的输入取值,则称约束C对谓词pr是无效的(infeasible)。例如,对谓词a>b∧b>d的约束(>,>),要求简单谓词a>b和b>d都为真。但是,如果d>a为真的话,则该约束无效。谓词pr上的约束C可有效指导测试集的设计,为pr变量取值的选取提供清晰的线索。2.7.4谓词测试准则我们最关心的是如何从给定的谓词pr生成测试集T,使其满足:(a)T是最小集合;(b)T保证能

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论