白盒与黑盒测试_第1页
白盒与黑盒测试_第2页
白盒与黑盒测试_第3页
白盒与黑盒测试_第4页
白盒与黑盒测试_第5页
已阅读5页,还剩67页未读 继续免费阅读

下载本文档

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

文档简介

1、软件工程学科研究生课程 软件测试技术软件测试基本概念软件测试方法的分类软件测试技术基础软件测试技术基础软件测试流程软件测试过程性能白盒测试/黑盒测试什么是白盒测试 已知产品的详细设计过程,可以通过测试证明每种内部操作是否符合设计规格要求,所有内部成分是否已经通过检查。又称Structure Based Testing或Structural Testing白盒测试的主要方法 静态方法: 代码审查 静态结构分析法 动态方法: 逻辑覆盖方法 基本路径覆盖 域测试 符号测试、Z路径覆盖 程序变异控制流测试(第4章)是通过对程序逻辑结构的遍历实现程序的覆盖从覆盖源代码的不同程度可以分为以下六个标准: 语

2、句覆盖 判定覆盖(又称为分支覆盖) 条件覆盖 判定-条件覆盖(又称为分支-条件覆盖) 条件组合覆盖 路径覆盖intlogicExample(intx,inty)intmagic=0;if(x0&y0)magic=x+y+10;/语句块1elsemagic=x+y-10;/语句块2if(magic0 & y0)中的“&”被程序员错误地写成了“|”,即if(x0| y0),使用上面设计出来的一组测试用例来进行测试,仍然可以达到100%的语句覆盖,所以语句覆盖无法发现上述的逻辑错误在六种逻辑覆盖标准中,语句覆盖标准是最弱的。判定覆盖也叫分支覆盖,即设计若干测试用例,使得程序中

3、的每个判定至少都获得一次“真”值和“假”值,也就是使程序中的每个取“真”分支和“假”分支至少均执行一次判定覆盖比语句覆盖要多几乎一倍的测试路径,当然也就具有比语句覆盖更强的测试能力同样判定覆盖也具有和语句覆盖一样的简单性,无须细分每个判定就可以得到测试用例一般做白盒测试不会直接根据源代码,而是根据流程图来设计测试用例和编写测试代码,在没有设计文档时,要根据源代码画出流程图: 数据P1P2路径x=3, y=3TFa-b-e-fx=-3, y=0FTa-c-d-f测试用例:两个判断的取真、假分支都已经被执行过,所以满足了判断覆盖的标准测试的充分性:假设第一个判断语句if(x0 & y0)中

4、的“&”被程序员错误地写成了“|”,即if(x0| y0),使用上面设计出来的一组测试用例来进行测试,仍然可以达到100%的语句覆盖,所以判断覆盖无法发现上述的逻辑错误跟语句覆盖相比:由于可执行语句要不就在判定的真分支,要不就在假分支上,所以,只要满足了判定覆盖标准就一定满足语句覆盖标准,反之则不然。因此,判定覆盖比语句覆盖更强条件覆盖是指设计足够多的测试用例,使得程序中每个判定中包含的每一个条件的可能取值(真/ /假)都至少被执行一次条件覆盖与判定覆盖相比较,增加了对符合判定情况的测试,增加了测试路径。要达到条件覆盖,需要足够多的测试用例,但条件覆盖并不能保证判定覆盖一般做白盒测试不

5、会直接根据源代码,而是根据流程图来设计测试用例和编写测试代码,在没有设计文档时,要根据源代码画出流程图: 测试用例:三个条件的各种可能取值都满足了一次,因此,达到了100%条件覆盖的标准。测试的充分性:上面的测试用例同时也到达了100%判定覆盖的标准,但并不能保证达到100%条件覆盖标准的测试用例(组)都能到达100%的判定覆盖标准,看下面的例子:既然条件覆盖标准不能100%达到判定覆盖的标准,也就不一定能够达到100%的语句覆盖标准数据C1C2C3P1P2路径x=3, y=3TTTTFa-b-e-fx=-3, y=0FFFFTa-c-d-f数据C1C2C3P1P2路径x=3, y=0TFTF

6、Fa-c-e-fx=-3, y=5FTFFFa-c-e-f设计足够多的测试用例,使得被测试程序中的每个判断本身的判定结果(真假)至少满足一次,同时,每个逻辑条件的可能值也至少被满足一次。即同时满足100%判定覆盖和100%条件覆盖的标准一般做白盒测试不会直接根据源代码,而是根据流程图来设计测试用例和编写测试代码,在没有设计文档时,要根据源代码画出流程图: 测试用例:所有条件的可能取值都满足了一次,而且所有的判断本身的判定结果也都满足了一次。测试的充分性:达到100%判定-条件覆盖标准一定能够达到100%条件覆盖、100%判定覆盖和100%语句覆盖。数据C1C2C3P1P2路径x=3, y=3T

7、TTTFa-b-e-fx=-3, y=0 FFFFTa-c-d-f设计足够多的测试用例,使得被测试程序中的每个判断的所有可能条件取值的组合至少被满足一次注意:a、条件组合只针对同一个判断语句内存在多个条件的情况,让这些条件的取值进行笛卡尔乘积组合。b、不同的判断语句内的条件取值之间无需组合。c、对于单条件的判断语句,只需要满足自己的所有取值即可。一般做白盒测试不会直接根据源代码,而是根据流程图来设计测试用例和编写测试代码,在没有设计文档时,要根据源代码画出流程图: 测试用例:C1和C2处于同一判断语句中,它们的所有取值的组合都被满足了一次测试的充分性: 100%满足条件组合标准一定满足100%

8、条件覆盖标准和100%判定覆盖标准。 但上面的例子中,只走了两条路径a-c-e-f和a-b-d-f,而本例的程序存在三条路径(a-b-d-f/a-c-d-f/a-c-e-f),还有一条路径是a-b-e-f,是不可能覆盖的路径数据C1C2C3P1P2路径x=-3, y=0FFFFFa-c-e-fx=-3, y=2FTFFFa-c-e-fx=-3, y=0TFFFFa-c-e-fx=3, y=3TTTTTa-b-d-f设计足够多的测试用例,使得被测试程序中的每条路径至少被覆盖一次一般做白盒测试不会直接根据源代码,而是根据流程图来设计测试用例和编写测试代码,在没有设计文档时,要根据源代码画出流程图:

9、 测试用例: 所有可能的路径都被满足了一次测试的充分性: 由上表可见,100%满足路径覆盖,但并不一定能100%满足条件覆盖(C2只取到了真),但一定能100%满足判定覆盖标准(因为路径就是从判断的某条分支走的)数据C1C2C3P1P2路径x=3, y=5TTTTTa-b-d-fx=0, y=2FTTFTa-c-d-f这条路径不可能a-b-e-fx=-8, y=3FTFFFa-c-e-f普遍认为这六种逻辑覆盖从弱到强的排列顺序是:语句覆盖-判定覆盖-条件覆盖-判定-条件覆盖-条件组合覆盖-路径覆盖但经过上面的分析,它们之间的关系实际上可以用下图表示:(路径覆盖很难在下图表示出来)使用控制流图的

10、圈复杂度导出的独立路径数作为程序的逻辑复杂度的度量并使用该度量作为指南来定义执行路径的基本集,从该基本集导出的测试用例保证对程序中的每一条执行语句至少执行一次void Sort(int iRecordNum,int iType)0 1 int x=0;2 int y=0;3 while (iRecordNum-)4 5 if(0= =iType)6 x=y+2;7 else8 if(1= =iType)9 x=y+10;10 else11 x=y+20;12 13 注意:如果在程序中遇到复合条件,例如条件语句中的多个布尔运算符(逻辑OR、AND)时,为每一个条件创建一个独立的节点,包含条件的节

11、点称为判定节点,从每一个判定节点发出两条或多条边。1.圈复杂度是一种为程序逻辑复杂性提供定量测度的软件度量,将该度量用于计算程序的基本的独立路径数目,为确保所有语句至少执行一次的测试数量的下界2.有以下三种方法计算圈复杂度: 流图中区域的数量对应于环型的复杂性; 给定流图 G 的圈复杂度V(G),定义为V(G)=E-N+2,E 是流图中边的数量,N 是流图中节点的数量; 给定流图 G 的圈复杂度V(G),定义为(G)=P+1,P 是流图G 中判定节点的数量。对应 代码的圈复杂度,计算如下: 流图中有4个区域; V(G)=10条边-8 节点+2=4 V(G)=3 个判定节点+1=41234根据上

12、面的计算方法,可得出四个独立的路径: 路径 1:3-13 路径 2:3-5-6-12-3-13 路径 3:3-5-7-9-12-3-13 路径 4:3-5-7-10-12-3-13根据上面的独立路径,去设计输入数据,使程序分别执行到上面四条路径什么是黑盒测试 把程序看作是一个不能打开的黑盒子,在不考虑程序内部结构和特性的情况下,在程序接口进行测试,它只检查程序功能是否按照需求规格说明书的规定正常使用,程序是否能适当地接收输入数据而产生正确的输出信息。 已知产品的用户需求规格,可以通过测试证明整个软件系统是否符合用户的最终需求。 又称功能测试或数据驱动测试、或基于规格说明的测试(Specific

13、ation Based Testing)优势 以用户(调用者)的立场进行的测试 不受开发团队思维定势影响 对测试人员的开发碎片要求相对较低 相对于白盒测试,结果直观,便于衡量 方便将测试外包给第三方,而不必将源代码也共享给对方劣势 测试用例可能是无穷多的(理论上虽不是,但数量过大,无法在合理时间内执行所有测试用例) 复现缺陷、查找原因难 成本、代价高1、三角形问题 输入三个整数a、b、c,分别作为三角形的三条边,现通过程序判断由三条边构成的三角形的类型为等边三角形、等腰三角形、一般三角形(特殊的还有直角三角形),以及构不成三角形。 现在要求输入三个整数a、b、c,必须满足以下条件: 条件1 1

14、a100 条件4 ab+ c 条件2 1b100 条件5 ba+ c 条件3 1c100 条件6 ca+ b 如果输入值a、b、c不满足条件1、条件2和条件3 ,程序给出“边的取值超出允许范围”的信息。如果输入值a、b、c 满足条件1、条件2和条件3,则输出下列四种情况之一:(1)如果不满足条件4、条件5和条件6中的一个,则程序输出为“非三角形”。(2)如果三条边相等,则程序输出为“等边三角形”。(3)如果恰好有两条边相等,则程序输出为“等腰三角形”。(4)如果三条边都不相等,则程序输出为“一般三角形”。结论结论:三角形问题的复杂之处在于输入与输出之间的关系比较复杂。2、NextDate函数

15、NextDate函数说明另一种复杂的关系,即输入变量之间逻辑关系的复杂性。 NextDate函数包含三个变量month、day和year,函数的输出为输入日期后一天的日期。 要求输入变量month、day和year均为整数值,并且满足下列条件: 条件1 1 month 12 条件2 1 day 31 条件3 1912 year 2050结论:结论:在NextDate函数中有两种复杂性的输入来源,一是输入域的复杂性,二是确定闰年的规则并要增加“额外天”。黑盒测试方法 等价类划分 边界值分析 错误推测 因果图 基于模型的测试等价类划分法:把所有可能的输入数据,即程序的输入域划分为若干部分(子集),

16、然后从每一个子集中选取少数具有代表性的数据作为测试用例。所谓等价类是指某个输入域的子集合。所谓等价类是指某个输入域的子集合。在该子集合中,各个输入数据对于揭露程序中的错误都是等效的,它们具有等价特性,即每一类的代表性数据在测试中的作用都等价于这一类中的其它数据。这样,对于表征该类的数据输入将能代表整个子集合的输入。因此,可以合理的假定: 测试某等价类的代表值就是等价于对于这一类其它值的测试。有效等价类 对产品规格说明而言,是有意义的、合理的输入数据所组成的集合 利用有效等价类,能够检验程序是否实现了规格说明中预先规定的功能和性能无效等价类 对产品规格说明而言,是无意义的、不合理的输入数据所构成

17、的集合 利用无效等价类,可以鉴别程序异常处理的情况,检查被测对象的功能和性能的实现是否有不符合规格说明要求的地方 根据规格说明的定义,对输入和输出条件进行分析,划分等价类根据计算机基础知识,对输入和输出条件进行分析,划分等价类对每个等价类都要进行编号按照区间划分:在输入条件规定了取值范围或值的个数的情况下,可以确定一个有效等价类和两个无效等价类按照数值划分 :在规定了一组输入数据(假设包括n个输入值),并且程序要对每一个输入值分别进行处理的情况下,可确定n个有效等价类(每个值确定一个有效等价类)和一个无效等价类按照数值集合划分 :在输入条件规定了输入值的集合或规定了“必须如何”的条件下,可以确

18、定一个有效等价类和一个无效等价类(该集合有效值之外)按照限制条件或规则划分 :在规定了输入数据必须遵守的规则或限制条件的情况下,可确定一个有效等价类(符合规则)和若干个无效等价类(从不同角度违反规则)细分等价类:在确知已划分的等价类中各元素在程序中的处理方式不同的情况下,则应再将该等价类进一步划分为更小的等价类,并建立等价类表讨论:针对Windows自带的计算器的加法功能进行测试,仅限两个数相加 请特别注意按输出域划分等价类针对输入的2个数: 有效等价类:正数,负数,0 无效等价类:字符(常用和特殊),超出计算器能接收的输入范围的数针对输出: 有效等价类:正数,负数,0 无效等价类:数字溢出完

19、备测试、避免冗余划分等价类重要的是:集合的划分,划分为互不相交的一组子集,而子集的并是整个集合并是整个集合:完备性子集互不相交:保证一种形式的无冗余性同一类中标识(选择)一个测试用例,同一等价类中,往往处理相同,相同处理映射到相同的执行路径三角形问题 输入三个整数a、b、c,分别作为三角形的三条边,现通过程序判断由三条边构成的三角形的类型为等边三角形、等腰三角形、一般三角形(特殊的还有直角三角形),以及构不成三角形。 分析题目中给出和隐含的对输入条件的要求: (1)整数 (2)三个数 (3)非零数 (4)正数 (5)两边之和大于第三边 (6)等腰 (7)等边 如果 a 、 b 、 c 满足条件

20、( 1 ) ( 4 ),则输出下列四种情况之一: 1)如果不满足条件(5),则程序输出为 非三角形 。 2)如果三条边相等即满足条件(7),则程序输出为 等边三角形 。 3)如果只有两条边相等、即满足条件(6),则程序输出为 等腰三角形 。 4)如果三条边都不相等,则程序输出为 一般三角形 。保险公司计算保费费率的程序保险公司计算保费费率的程序 某保险公司的人寿保险的保费计算方式为: 投保额保险费率 其中,保险费率依点数不同而有别,10点及10点以上保险费率为0.6%,10点以下保险费率为0.1%;而点数又是由 投保人的年龄、性别、婚姻状况和抚养人数来决定,具体规则如下:年龄 性别婚姻抚养人数

21、 2039 4059 其它 M F 已婚 未婚 1人扣0.5点 最多扣3点(四舍五入取整) 6点 4点 2点 5点 3点 3点 5点(1)分析程序规格说明中给出和隐含的对输入条件的要求,列出等价类表(包括有效等价类和无效等价类)。年龄:一位或两位非零整数,值的有效范围为199性别:一位英文字符,只能取值M或F婚姻:字符,只能取值已婚或未婚抚养人数:空白或一位非零整数(19)点数 :一位或两位非零整数,值的范围为199(2)根据(1)中的等价类表,设计能覆盖所有等价类的 测试用例。输入条件输入条件有效等价类有效等价类编号编号无效等价类无效等价类编号编号年龄年龄2039岁岁14059岁岁2119岁

22、岁6099岁岁3小于小于112大于大于9913性别性别单个英文字符单个英文字符4非英文字符非英文字符14非单个英文字符非单个英文字符15M5除除M和和F之外的之外的其它单个字符其它单个字符16F6婚姻婚姻已婚已婚7除除已婚已婚和和未婚未婚之外的其它字符之外的其它字符17未婚未婚8抚养人数抚养人数空白空白9除空白和数字之外除空白和数字之外的其它字符的其它字符1816人人10小于小于11969人人11大于大于920对输入或输出的边界值进行测试的一种黑盒测试方法对等价类之间的边界值及其附近的值进行的测试方法是对等价类划分法的补充无数的测试实践表明,大量的故障往往发生在输入定义域或输出值域的边界上,而

23、不是在其内部。因此,针对各种边界情况设计测试用例,通常会取得很好的测试效果。简单的边界分析产生6n+1测试用例XYminminmaxmaxn=2对16-bit 的整数而言 32767 和 -32768 是边界屏幕上光标在最左上、最右下位置报表的第一行和最后一行数组元素的第一个和最后一个循环的第 0 次、第 1 次和倒数第 2 次、最后一次项边界值测试用例的设计思路字符起始-1个字符/结束+1个字符假设一个文本输入区域允许输入1个到255个 字符,输入1个和255个字符作为有效等价类;输入0个和256个字符作为无效等价类,这几个数值都属于边界条件值。数值最小值-1/最大值+1假设某软件的数据输入

24、域要求输入5位的数据值,可以使用10000作为最小值、99999作为最大值;然后使用刚好小于5位和大于5位的 数值来作为边界条件。空间小于空余空间一点/大于满空间一点例如在用U盘存储数据时,使用比剩余磁盘空间大一点(几KB)的文件作为边界条件。边界值分析使用与等价类划分法相同的划分,只是边界值分析假定错误更多地存在于划分的边界上,因此在等价类的边界上以及两侧的情况设计测试用例。例例:测试计算平方根的函数 输入:实数 输出:实数 规格说明:当输入一个0或比0大的数的时候,返回其正平方根;当输入一个小于0的数时,显示错误信息“平方根非法-输入值小于0”并返回0;库函数Print-Line可以用来输

25、出错误信息。等价类划分: 可以考虑作出如下划分: 输入 (i)=0 输出 (a)=0 和 (b) Error 测试用例有两个: 输入4,输出2。对应于 (ii) 和 (a) 。 输入-10,输出0和错误提示。对应于 (i) 和 (b) 。边界值分析: 划分(ii)的边界为0和最大正实数;划分(i)的边界为最小负实数和0。由此得到以下测试用例: 输入 最小负实数 输入 绝对值很小的负数 输入 0 输入 绝对值很小的正数 输入 最大正实数三角形问题的边界值分析测试用例三角形问题的边界值分析测试用例 在三角形问题描述中,除了要求边长是整数外,没有给出其它的限制条件。在此,我们将三角形每边边长的取范围

26、值设值为1, 100 。 说明:如果程序规格说明中没有显式地给出边界值,则可以在设计测试用例前先设定取值的下限值和上限值。测试用例测试用例abc预期输出预期输出Test 1Test2Test3Test4Test560606050506060605050126099100等腰三角形等腰三角形等腰三角形等腰三角形等边三角形等边三角形等腰三角形等腰三角形非三角形非三角形Test6Test7Test8Test960605050129910060605050等腰三角形等腰三角形等腰三角形等腰三角形等腰三角形等腰三角形非三角形非三角形Test10Test11Test12Test13129910060605

27、05060605050等腰三角形等腰三角形等腰三角形等腰三角形等腰三角形等腰三角形非三角形非三角形有效等价类:NextDate函数的边界值分析测试用例函数的边界值分析测试用例 在NextDate函数中,隐含规定了变量month和变量day的取值范围为1mouth12和1day31,并设定变量year的取值范围为1912year2050 。测试用例测试用例mouth dayyear预期输出预期输出Test 1Test2Test3Test4Test5Test6Test766666661515151515151519111912191319752049205020511911.6.161912.6.

28、161913.6.161975.6.162049.6.162050.6.162051.6.16Test8Test9Test10Test11Test12Test13666666-112303132200120012001200120012001day超出超出1312001.6.22001.6.32001.7.1输入日期超界输入日期超界day超出超出131Test14Test15Test16Test17Test18Test19-112111213151515151515200120012001200120012001Month超出超出1122001.1.162001.2.162001.11.162

29、001.12.16Month超出超出112定义:基于经验和直觉推测程序中所有可能存在的各种错误, 从而有针对性的设计测试用例的方法基本思想:列举出程序中所有可能有的错误和容易发生错误的特殊情况,根据他们选择测试用例: 例如, 输入数据和输出数据为0的情况;输入表格为空格或输入表格只有一行 测试一个对线性表(比如数组)进行排序的程序,可推测列出以下几项需要特别测试的情况: 输入的线性表为空表; 表中只含有一个元素; 输入表中所有元素已排好序; 输入表已按逆序排好; 输入表中部分或全部元素相同定义:是一种形式化语言,是一种组合逻辑网络图。它是把输入条件视为“因”,把输出或程序状态的改变视为“果”,

30、将黑盒看成是从因到果的网络图,采用逻辑图的形式来表达功能说明书中输入条件的各种组合与输出的关系。因果图法的基本原理是通过因果图,把用自然语言描述的功能说明转换为判定表,然后为判定表的每一列设计一个测试用例。等价类划分法和边界值分析方法都是着重考虑输入条件,但没有考虑输入条件的各种组合、输入条件之间的相互制约关系。这样虽然各种输入条件可能出错的情况已经测试到了,但多个输入条件组合起来可能出错的情况却被忽视了如果在测试时必须考虑输入条件的各种组合,则可能的组合数目将是天文数字,因此必须考虑采用一种适合于描述多种条件的组合、相应产生多个动作的形式来进行测试用例的设计,这就需要利用因果图(逻辑模型)1

31、)4种符号分别表示了规格说明中4种因果关系:a)恒等:若ci是1,则ei也是1;否则ei为0。b)非:若ci是1,则ei是0;否则ei是1。c)或():若c1或c2或c3是1,则ei是1;否则ei为0。“或”可有任意个输入。d)与():若c1和c2都是1,则ei为1;否则ei为0。“与”也可有任意个输入。2)因果图中使用了简单的逻辑符号,以直线联接左右结点。左结点表示输入状态(或称原因),右结点表示输出状态(或称结果)。3)Ci表示原因,通常置于图的左部;ei表示结果,通常在图的右部。Ci和ei均可取值0或1,0表示某状态不出现,1表示某状态出现。 4)约束:是指输入状态相互之间还可能存在某些依赖关系。例如, 某些输入条件本身不可能同时出现。输出状态之间也往往存在约束。在因果图中,用特定的符号标明这些约束。A.输入条件的约束有以下4类: E约束(异):a和b中至多有一个可能为 1,即a和b不能同时为1。 I约束(或):a、b和c中至少有一个必须是1,即 a、b 和c不能同时为0。 O约束(唯一);a和b必须有一个,且仅有1个为1。R约束(要求):a是1时,b必须是1,即不可能a是1时b是0。B . 输出条件约束类型: 只有M 约束( 强制):

温馨提示

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

评论

0/150

提交评论