11软件测试Word格式.docx
- 文档编号:20589860
- 上传时间:2023-01-24
- 格式:DOCX
- 页数:42
- 大小:377.03KB
11软件测试Word格式.docx
《11软件测试Word格式.docx》由会员分享,可在线阅读,更多相关《11软件测试Word格式.docx(42页珍藏版)》请在冰豆网上搜索。
4.测试应从“小规模”开始,逐步转向“大规模”:
先测试单个模块,再测试集成的模块簇,最后测试整个系统。
5.穷举测试是不可能的:
例如,测试一个包含5个分支的循环程序,其循环次数为20,那么,该程序就有520条不同的执行路径,要穷举测试所有的路径是不可能的。
6.为了达到最有效的测试,应由独立的第三方来承担测试:
“最有效”是指发现错误的可能性最高的测试。
由于开发软件是一个创建软件的过程,开发者有成就感,而测试软件是一个发现软件错误的过程,测试者要千方百计从软件中找出错误,即证明软件中有错误,因此,由开发者或开发方组织来测试自己的软件,往往在心理上存在障碍,从而使测试不是最有效的。
还有一些其他的测试原则:
1.在设计测试用例时,应包括合理的输入条件和不合理的输入条件。
大量的实践表明,用户在使用软件时,常常因为不熟练或不小心,而输入一些非法的或不合理的数据。
因此应测试非法的或不合理的数据是否会导致软件的失效。
2.严格执行测试计划,排除测试的随意性。
不按测试计划进行的测试,常常不能保证测试的充分性。
3.应当对每一个测试结果做全面检查。
不严格检查测试结果,会遗漏经测试发现的错误,从而白白浪费测试所付出的代价。
4.妥善保存测试计划、测试用例、出错统计和最终分析报告,为维护提供方便。
因为在改正错误后或维护后要进行回归测试(regressiontesting),即全部或部分地重复使用已做过的测试用例,以确保该修改未影响软件的其他功能。
5.检查程序是否做了应做的事仅是成功的一半,另一半是检查程序是否做了不该做的事。
6.在规划测试时不要设想程序中不会查出错误。
如果在测试前就认为程序中没有错误,测试时就不会全力以赴地找错误,从而使测试不充分。
11.1.3白盒测试和黑盒测试
测试用例的设计是软件测试的关键所在,我们必须设计出最有可能发现软件错误的测试用例,同时尽量避免测试用例的冗余,也就是说,希望避免使用发现错误效果相同的测试用例,设计尽可能少的测试用例来发现尽可能多的错误。
测试用例的设计方法大体可分为两类:
白盒测试和黑盒测试,也称白箱测试和黑箱测试。
白盒测试又称结构测试,这种方法把测试对象看作一个透明的盒子,测试人员根据程序内部的逻辑结构及有关信息设计测试用例,检查程序中所有逻辑路径是否都按预定的要求正确地工作。
白盒测试主要用于对模块的测试,包括:
1.程序模块中的所有独立路径至少执行一次;
2.对所有逻辑判定的取值(“真”与“假”)都至少测试一次;
3.在上下边界及可操作范围内运行所有循环;
4.测试内部数据结构的有效性等。
黑盒测试又称行为测试,这种方法把测试对象看做一个黑盒子,测试人员完全不考虑程序内部的逻辑结构和内部特性,只依据程序的需求规格说明书,检查程序的功能是否符合它的功能需求。
黑盒测试可用于各种测试,它试图发现以下类型的错误:
1.不正确或遗漏的功能;
2.接口错误,如输入/输出参数的个数、类型等;
3.数据结构错误或外部信息(如外部数据库)访问错误;
4.性能错误;
5.初始化和终止错误。
11.2白盒测试
常用的白盒测试方法主要有:
逻辑覆盖测试,基本路径测试,数据流测试,循环测试。
11.2.1逻辑覆盖测试
逻辑覆盖测试是一种基本的白盒测试方法,它主要考察使用测试数据运行被测程序时对程序逻辑的覆盖程度。
通常我们希望选择最少的测试用例来满足所需的覆盖标准。
主要的覆盖标准有:
语句覆盖,判定覆盖,条件覆盖,判定/条件覆盖,条件组合覆盖,路径覆盖。
例11.1对下列子程序进行测试。
procedureexample(y,z:
real;
varx:
real);
begin
if(y>
1)and(z=0)thenx:
=x/y;
if(y=2)or(x>
1)thenx:
=x+1;
end;
该子程序接受x、y、z的值,并将计算结果x的值返回给调用程序。
与该子程序对应的流程图如图11.1所示:
该子程序有两个判定:
a:
(y>
1)and(z=0)和c;
(y=2)or(x>
1)。
判定a中有两个判定条件:
y>
1和z=0,判定c中有两个判定条件:
y=2和“x>
1”。
根据程序的执行流程不同,判定c中的“x>
1”的含义也不同:
当判定a为“真”时,“x>
1”实际是“x/y>
1”,即“x>
y”;
当判定a为“假”时,“x>
1”仍是“x>
该子程序有四条可执行路径:
1.路径sabcde:
执行该路径的条件是a为“t”且c为“t”,记为L1。
L1={(y>
1)and(z=0)}and{(y=2)or(x/y>
1)}
=(y>
1)and(z=0)and(y=2)or(y>
1)and(z=0)and(x>
y)
=(y=2)and(z=0)or(y>
2.路径sace:
执行该路径的条件是a为“f”且c为“f”时,记为L2。
L2=not{(y>
1)and(z=0)}andnot{(y=2)or(x>
={not(y>
1)ornot(z=0)}and{not(y=2)andnot(x>
1)}
=not(y>
1)andnot(y=2)andnot(x>
1)
ornot(z=0)andnot(y=2)andnot(x>
1)
=(y1)and(y2)and(x1)or(z0)and(y2)and(x1)
=(y1)and(x1)or(z0)and(y2)and(x1)
3.路径sacde:
执行该路径的条件是a为“f”且c为“t”,记为L3。
L3=not{(y>
1)and(z=0)}and{(y=2)or(x>
1)ornot(z=0)}and{(y=2)or(x>
1)and(y=2)ornot(y>
1)and(x>
ornot(z=0)and(y=2)ornot(z=0)and(x>
=(y1)and(y=2)or(y1)and(x>
or(z0)and(y=2)or(z0)and(x>
=(y1)and(x>
1)or(z0)and(y=2)or(z0)and(x>
4.路径sabce:
执行该路径的条件是a为“t”且c为“f”,记为L4。
L4={(y>
1)and(z=0)}andnot{(y=2)or(x/y>
1)and(z=0)andnot(y=2)andnot(x>
1)and(z=0)and(y2)and(xy)
下面我们分别用语句覆盖,判定覆盖,条件覆盖,判定-条件覆盖,条件组合覆盖,路径覆盖等覆盖标准,介绍满足相应覆盖标准的测试用例设计。
1.语句覆盖
语句覆盖是指选择足够的测试用例,使得运行这些测试用例时,被测程序的每个可执行语句都至少执行一次。
欲使每个语句都执行一次,只需执行路径sabcde即可。
根据路径执行条件L1可知,当测试输入数据满足条件(y=2)and(z=0)或(y>
y)时,程序就会按路径sabcde执行。
在条件(y=2)and(z=0)中未包含x,这意味着x可取任意值。
满足语句覆盖标准的测试用例如表11.1所示。
表11.1满足语句覆盖标准的测试用例
测试数据
预期结果
x=4,y=2,z=0
x=3
2.判定覆盖
判定覆盖(也称分支覆盖)是指选择足够的测试用例,使得运行这些测试用例时,被测程序的每个判定的所有可能结果都至少出现一次(即判定的每个分支至少经过一次)。
本例中,欲使每个分支都执行一次,只需执行路径sacde(执行该路径的条件是L3,即a为“f”且c为“t”)和sabce(执行该路径的条件是L4,即a为“t”且c为“f”),或者执行路径sabcde(执行该路径的条件是L1,即a为“t”且c为“t”)和sace(执行该路径的条件是L2,即a为“f”且c为“f”)即可。
这里我们选择路径sacde和sabce进行测试。
根据路径执行条件L3和L4,很容易设计满足判定覆盖标准的测试用例,如表11.2所示。
表11.2满足判定覆盖标准的测试用例
执行路径
判定a
判定c
x=1,y=2,z=1
x=2
sacde
f
t
x=3,y=3,z=0
x=1
sabce
由于一个判定至少有“真”和“假”两个结果,所以满足判定覆盖标准的测试用例至少有两个。
由于判定覆盖要求对每个判定的每个分支都至少执行一次,所以,程序中的所有语句也必定都至少执行一次。
因此,满足判定覆盖标准的测试用例也一定满足语句覆盖标准。
3.条件覆盖
条件覆盖是指选择足够的测试用例,使得运行这些测试用例时,被测程序的每个判定中的每个条件的所有可能结果都至少出现一次。
本例中,判定a中各种条件的所有可能结果是:
1,y1,z=0,z0。
判定c中各种条件的所有可能结果是:
y=2,y2,x>
1(或x>
y,当判定a为真时),x1(或xy,当判定a为真时)。
选择适当的测试用例,不难满足上述这些条件的所有可能结果。
满足条件覆盖标准的测试用例如表11.3所示。
表11.3满足条件覆盖标准的测试用例
覆盖的条件
x=1,y=2,z=0
x=1.5
sabcde
1,z=0,y=2,xy
x=2,y=1,z=1
y1,z0,y2,x>
1
由于一个条件至少有“真”和“假”两个结果,所以满足条件覆盖标准的测试用例也至少有两个。
条件覆盖通常比判定覆盖强,但有时虽然每个条件的所有可能结果都出现过,但判定表达式的某些可能结果并未出现。
如上面的二个测试用例满足了条件覆盖标准,但判定c为“假”的结果并未出现。
4.判定/条件覆盖
判定/条件覆盖是指选择足够的测试用例,使得运行这些测试用例时,被测程序的每个判定的所有可能结果都至少执行一次,并且,每个判定中的每个条件的所有可能结果都至少出现一次。
显然,满足判定/条件覆盖标准的测试用例一定也满足判定覆盖、条件覆盖、语句覆盖标准。
所以很容易认为只须将满足判定覆盖标准和条件覆盖标准的测试用例合在一起(去除重复的测试用例)即可。
然而这样得到的测试用例常常不是最少的(有冗余)。
前面介绍判定覆盖时,选择了路径sacde(满足路径执行条件L3)和sabce(满足路径执行条件L4)进行测试。
其中L4=(y>
1)and(z=0)and(y2)and(xy)中包含了条件y>
1、z=0、y2和xy(即x1),在剩下的四个条件(y1,z0,y=2,x>
1)中,由于条件y1和y=2不能同时成立,所以至少还要设计二个测试用例来覆盖剩下的四个条件。
然而,如果我们选择路径sabcde(满足路径执行条件L1)和sace(满足路径执行条件L2)进行判定覆盖测试,在设计测试用例时,同时考虑条件覆盖,这时就可能得到满足判定/条件覆盖标准的最少的测试用例。
满足判定/条件覆盖标准的测试用例如表11.4所示。
表11.4满足判定/条件覆盖标准的测试用例
x=4,y=2,z=0
1,z=0
y=2,x>
y
x=1,y=1,z=1
sace
y1,z0
y2,x1
在本例中,满足判定覆盖、条件覆盖和判定-条件覆盖标准的测试用例的个数是相同的。
值得注意的是,并非所有程序的测试都是如此。
但满足判定-条件覆盖标准的测试用例个数总是大于等于满足判定覆盖标准和条件覆盖标准的测试用例个数中的最大数。
5.条件组合覆盖
条件组合覆盖是指选择足够的测试用例,使得运行这些测试用例时,被测程序的每个判定中的条件结果的所有可能组合都至少出现一次。
必须注意的是,这里的条件组合是指每个判定中的条件结果的所有可能组合,而不是整个程序的所有条件结果的所有可能组合。
判定a中条件结果的所有可能组合有如下四种情况:
1y>
1,z=0;
②y>
1,z0;
③y1,z=0;
④y1,z0。
2
判定c中条件结果的所有可能组合有如下四种情况:
⑤y=2,x>
y);
⑥y=2,x1(或xy);
⑦y2,x>
⑧y2,x1(或xy)。
满足条件组合覆盖标准的测试用例如表11.5所示。
表11.5满足条件组合覆盖标准的测试用例
①y>
⑤y=2,x>
x=1,y=2,z=1
②y>
1,z0
⑥y=2,x1
x=2,y=1,z=0
③y1,z=0⑦y2,x>
④y1,z0
⑧y2,x1
条件组合覆盖是上述五种覆盖标准中最强的一种,满足条件组合覆盖标准的测试用例一定也满足判定覆盖、条件覆盖、判定/条件覆盖、语句覆盖标准。
然而,条件组合覆盖仍不能保证程序中所有可能的路径都被覆盖。
本例中,满足条件组合覆盖标准的测试用例就没有经过sabce路径。
6.路径覆盖
路径覆盖是指选择足够的测试用例,使得运行这些测试用例时,被测程序的每条可能执行到的路径都至少经过一次(如果程序中包含环路,则要求每条环路至少经过一次)。
本例中所有可能执行的路径有:
sabcde(a为“t”且c为“t”),sace(a为“f”且c为“f”),sacde(a为“f”且c为“t”),sabce(a为“t”且c为“f”)。
满足路径覆盖标准的测试用例如表11.6所示。
表11.6满足路径覆盖标准的测试用例
x=3,y=3,z=0
路径覆盖实际上考虑了程序中各种判定结果的所有可能组合,但它未必能覆盖判定中条件结果的各种可能情况。
因此,它是一种比较强的覆盖标准,但不能替代条件覆盖、判定/条件覆盖和条件组合覆盖标准。
在逻辑覆盖测试时,我们强调“运行这些测试用例时”覆盖了被测程序的哪些判定、条件或路径。
这表明在使用这些测试用例运行被测程序时,能执行到相应的判定、条件或路径。
例11.2测试图11.2所示的流程图。
当运行测试数据y=12时,其执行路径是sacf,覆盖了判定a为真的情况(即覆盖了条件y>
10)。
但由于其执行路径未经过判定b,所以这个测试数据并不覆盖判定b为真的情况(即不覆盖条件y>
5)。
而运行测试数据y=8时,其执行路径是sabdf,所以该测试数据覆盖了判定a为假的情况(即覆盖了条件y10)和判定b为真的情况(即覆盖了条件y>
11.2.2逻辑表达式错误敏感的测试
逻辑覆盖测试依赖于程序中的逻辑条件,这些逻辑条件由逻辑表达式组成。
逻辑表达式由逻辑变量、关系表达式(由算术表达式和关系运算符组成)、逻辑运算符和括号组成。
对于一个含有n个逻辑变量,或n个关系表达式的逻辑表达式,通常需要2n个测试用例来覆盖其所有可能的条件组合。
因此,11.2.1节中的条件组合覆盖适用于n较小的场合。
当n较大时,我们可以选择对发现逻辑表达式错误比较敏感的组合条件进行测试,以较少的测试用例来发现逻辑表达式中的绝大多数错误。
Tai提出的分支与关系运算符(branchandrelationaloperator,BRO)测试技术能用较少的测试用例发现条件中分支与关系运算符的大多数错误。
采用BRO方法的前提条件是:
条件中的每个布尔变量和关系运算符至多出现一次,并且无公共变量。
BRO方法引入条件约束的概念,含有n个简单条件Ci的复合条件C的约束D表示为(D1,D2,Dn),Di(0in)刻画了简单条件Ci的输出(outcome)约束,它一般是某种符号。
对关系表达式,其约束为、、=;
对逻辑表达式,其约束为t(真)或f(假)。
符合条件C的一次执行覆盖条件约束D是指,C中出现的每个简单条件Ci在这次执行中都满足D中对应的约束Di。
下面分各种情况进行讨论:
1.若逻辑表达式C为:
B1andB2
其中B1、B2为逻辑变量,即C1、C2分别为B1、B2,C的约束具有形式(D1,D2),D1和D2为t或f。
例如,覆盖条件约束(f,t)表示运行测试用例时使B1为假B2为真。
BRO测试策略要求逻辑表达式B1andB2的约束集合为{(t,t),(f,t),(t,f)},也是说在对逻辑表达式B1andB2测试时,不必覆盖约束条件(f,f)。
这是由于测试覆盖约束(f,t),(t,f)时,已检查了B1为假或B2为假(即C为假)的情况,而约束(f,f)(它也使C为假)对该逻辑表达式是不敏感的。
推而广之,若逻辑表达式由and连接的n个逻辑变量组成,则其敏感的约束有n+1个,其中一个约束是所有变量全为真,另n个约束是某一个变量为假,其余n-1个变量为真。
而其他2n-(n+1)个约束都是不敏感的。
2.若逻辑表达式C为:
B1orB2
其中B1、B2为逻辑变量。
同样道理,该逻辑表达式的约束集合为{(f,t),(t,f),(f,f)}。
而约束(t,t)对该逻辑表达式是不敏感的。
推而广之,若逻辑表达式由or连接的n个逻辑变量组成,则其敏感的约束有n+1个,其中一个约束是所有变量全为假,另n个约束是某一个变量为真,其余n-1个变量为假。
3.若逻辑表达式C为:
B1and(E3=E4)
B1为布尔表达式,E3和E4为算术表达式。
C的约束具有形式(D1,D2),D1为t或f;
当E3=E4时D2为=;
当E3E4时D2为或。
根据上述原理,使得B1为假且E3=E4为假的约束(f,)和(f,)对此表达式的测试是不敏感的,所以该逻辑表达式的约束集合为{(t,=),(f,=),(t,),(t,)}。
4.若逻辑表达式C为:
(E1E2)a
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 11 软件 测试