zoukankan      html  css  js  c++  java
  • 【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

  • 相关阅读:
    6)从左到右依次递增,从上到下依次递减的数组
    2)PHP代码运行过程
    1)session总结
    3)ARP到底属于网络层还是链路层
    (2)链表中的一级指针和二级指针的问题
    javascript 封装ajax(多版本)
    javaScript中的两个叹号(!!)
    css获取背景中指定的位置
    解析this.initialize.apply(this, arguments);
    ul中嵌套div导致布局混乱
  • 原文地址:https://www.cnblogs.com/zhanghan2015/p/4438989.html
Copyright © 2011-2022 走看看