【testing_第六周】白盒测试

一.白盒测试vs黑盒测试

黑盒测试,又称功能测试,简单来说就是测试软件是否有效地完成所述功能。

白盒测试,又称结构测试,即对序内部逻辑结构、对所有逻辑路径进行测试。

从主观上,不是特别清楚两者功能区别的重要性上来说,会理解为一种能看得见代码,一种看不见代码。

我从网上看到过一种特别有意思的比喻,来跟大家分享一下。

如果把咱们要测试的程序就比作常年不用的饮水机来说,你很多年没用了,里面可能会有土啊,生锈啊什么的,这些其实就是程序中的bug

那么就有两种方法找出这些“土”、“锈”——“bug”。

第一,往里面灌水,如果从出水口出来的水是清澈的,那么意味着里面没有土拉。

第二,直接打开饮水机,清洗尘土,污渍。

第一种类似黑盒测试,只要水是清澈,我们就觉得可以饮用了,这个饮水机能完成我们喝水的需求拉,但是里面的锈渍可能特别顽固,不能被几次水冲所清理掉,机器内部的污渍还存在。

第二种类似白盒测试,直接打开看里面的结构,但是里面的结构可能比较复杂,你要走很多分支。

项目 黑盒测试 白盒测试
规划方面 功能的测试 结构的测试
优点 能确保从用户的角度出发进行测试 能对程序内部的特定部位进行覆盖测试
缺点

无法测试程序内部特定部位;

当规格说明有误不能发现问题

无法检查程序的外部特性;

无法对未实现规格说明的程序内部

欠缺部分进行测试

设计用例方法 边界分析法、等价类划分法、决策表测试

语句覆盖,判定覆盖

条件覆盖,判定/条件覆盖,、路径覆盖,循环覆盖,

模块接口测试

二、白盒测试

1.白盒的测试用例需要做到:

(1)保证一个模块中的所有独立路径至少被使用一次

(2)对所有逻辑值均需测试 true  false

(3)在上下边界及可操作范围内运行所有循环

(4)检查内部数据结构以确保其有效性

2.六种白盒测试设计用例方法:

1)所谓语句覆盖:就是设计若干个测试用例,运行被测程序,使得每一可执行语句至少执行一次。这里的“若干个”,意味着使用测试用例越少越好。语句覆盖率的公式可以表示如下:

语句覆盖率=被评价到的语句数量/可执行的语句总数 x 100%

2)判定覆盖:使设计的测试用例保证程序中每个判断的每个取值分支(t or f)至少经历一次

[优点]:判定覆盖具有比语句覆盖更强的测试能力,而且具有和语句覆盖一样的简单性,无需细分每个判定就可以得到测试用例。

[缺点]:往往大部分的判定语句是由多个逻辑条件组合而成(如,判定语句中包含ANDORCASE),若仅仅判断其整个最终结果,而忽略每个条件的取值情况,必然会遗漏部分测试路径。

  例如:

  int a,b;

  if(a || b)

  执行语句1

  else

  执行语句2

要达到这段程序的判断覆盖,我们采用测试用例:1)a = true , b = true ;2)a = flase, b = flase

3)条件覆盖:条件覆盖是指选择足够的测试用例,使得运行这些测试用例时,判定中每个条件的所有可能结果至少出现一次,但未必能覆盖全部分支

条件覆盖要检查每个符合谓词的子表达式值为真和假两种情况,要独立衡量每个子表达式的结果,以确保每个子表达式的值为真和假两种情况都被测试到。

4 判定条件覆盖:判定-条件覆盖就是设计足够的测试用例,使得判断中每个条件的所有可能取值至少执行一次,同时每个判断的所有可能判断结果至少执行,即要求各个判断的所有可能的条件取值组合至少执行一次。

5 条件组合覆盖:在白盒测试法中,选择足够的测试用例,使所有判定中各条件判断结果的所有组合至少出现一次,满足这种覆盖标准成为条件组合覆盖。

6)路径覆盖:是每条可能执行到的路径至少执行一次;

 

说明:其中语句覆盖是一种最弱的覆盖,判定覆盖和条件覆盖比语句覆盖强,满足判定/条件覆盖标准的测试用例一定也满足判定覆盖、条件覆盖和语句覆盖,条件组合覆盖是除路径覆盖外最强的,路径覆盖也是一种比较强的覆盖,但未必考虑判定条件结果的组合,并不能代替条件覆盖和条件组合覆盖。

举例:

if A and B then Action1

if C or D then Action2

1)语句覆盖最弱,只需要让程序中的语句都执行一遍即可 。上例中只需设计测试用例使得A=true B=true C=true 即可。

2)分支覆盖又称判定覆盖:使得程序中每个判断的取真分支和取假分支至少经历一次,即判断的真假均曾被满足。上例需要设计测试用例使其分别满足下列条件即可(1A=trueB=trueCtrueD=false2A=trueB=falseCfalseD=false

3)条件覆盖:要使得每个判断中的每个条件的可能取值至少满足一次。上例中第一个判断应考虑到A=trueA=falseB=trueB=false第二个判断应考虑到CtrueCfalseD=trueD=false,所以上例中可以设计测试用例满足下列条件(1A=trueB=trueCtrueD=true2A=falseB=falseCfalseD=false

 

4 路径覆盖:要求覆盖程序中所有可能的路径。所以可以设计测试用例满足下列条件(1A=trueB=trueCtrueD=true2A=falseB=falseCfalseD=false3A=trueB=trueCfalseD=false4A=falseB=falseCtrueD=true

原文地址:https://www.cnblogs.com/zhanghan2015/p/4438989.html