• 白盒测试方法


    白盒测试是一种测试手段,多用于单元测试阶段,测试对象是函数代码等。追求的目标叫做:逻辑覆盖率。共分为 语句覆盖,判定覆盖,条件覆盖,判定/条件覆盖 ,条件组合,路径覆盖 共六种测试方法。

    语句覆盖

    语句覆盖其就是让每句代码都至少执行一次的方法。

    比如下面这段代码:

    if a > 2:
        print ">"
    else:
        print "<"
    

    若是要保证每条语句都至少执行一次的话,你就需要俩条用例即可:a = 1 和 a = 3

    判定覆盖

    也叫分支覆盖,目的是让每个判定的 真假 都至少出现一次。

    比如下面这段代码:

    if a > 2 or b >3:
        print ">"
    else:
        print "<"
    

    若要保证每个判定真假都至少出现一次,则最少需要俩条用例:a = 3 和 a =1,b=1
    这样 就保证了 判定(a>2orb>3) 真假至少出现了一次。

    条件覆盖

    保证代码中每个条件的真假都至少出现一次,这个就比较难了。来看下面的代码:

    if a>1 or b>2:
        print '>'
    else:
        print '<'
    

    若要保证条件(a>1)和(b>2)和(else)都至少出现一次真假,那么用例如下:

    a = 0,b = 0 :此时条件(a>1)和(b>2)都出现了假

    a = 4, b=4 :此时条件(a>1)和(b>2)都出现了真

    判定条件覆盖

    这个方法就是要把判定和条件组合起来。用尽量少的用例同时满足俩种覆盖率的技术。

    比如这段代码:

    if a>1 and b>1:
        print '>'
    else:
        print '<'
    

    用例设计如下:

    a = 0,b=0 此时条件(a>1)为假,条件(b>1)为假,判定(a>1 and b>1) 也为假。

    a =2 ,b=2 此时条件(a>1)为真,条件(b>1)为真,判定(a>1 and b>1) 也为真。

    这样我们仅用了 两条用例就完美实现了 所有条件和所有判定的真假都至少出现了一次的情况,当然面对更为复杂的判断,这个则更难,比如:

    if a>1 and b>1 and c<1:
        print '>'
    else:
        print '<'
    

    用例如下 a =0,b=0,c=2 ,此时条件(a>1)(b>1)(c<1) 都为假,而判定(a>1 and b>1 and c<1) 也为假

    a = 5,b=5,c=0 ,此时条件(a>1)(b>1)(c<1) 都为真,而判定(a>1 and b>1 and c<1) 也为真

    条件组合覆盖

    注意这个方法是针对判定作为结果的,只是手段是条件而已。

    目的为:保证 判定的所有情况都至少出现一次 ,而不单单是真假。

    if a>1 or b>1:
        print '>'
    else:
        print '<'
    

    我们这里要保证判定(a>1 or b>1)的所有情况都出现一次,用例如下:

    a = 0,b=0 : 假假 = 假

    a = 5,b=5 : 真真 = 真

    a = 0,b=5 : 假真 = 真

    a = 5,b=0 : 真假 = 真

    结果就是至少4条用例才能判定的所有情况都至少出现一次,虽然三个都是真,但是原因是不同的。

    路径覆盖

    保证代码中每条路径都至少执行一次!注意,这里并非语句,而是路径。

    例子如下:

    if a>1:
        print '*'
    else:
        print '%'
    if b>1:
        print '&'
    else:
        print '#'
    

    这个例子中,如果我们是语句覆盖,那么俩条用例足以,保证每条语句都至少执行一次,最终的输出可以为:*& 和 %#

    但是路径覆盖则不这么简单,路径中,第一个判定的真假和第二个判定的真假各种组合 成为各种路径。

    所以要求输出至少为以下所有情况路径:*& 和 *# 和 %& 和 %# 排列组合共四种路径。

    所以至少需要如下四条用例:

    a = 5,b=5: *&

    a = 5,b=0: *#

    a = 0,b=5: %&

    a = 0,b=0: %#

    好了这就是路径覆盖,也是号称最强的覆盖法,在时间成本不够的情况下,优先选用路径覆盖是最全面的。

    最后还要给大家多介绍俩种白盒覆盖率方法,只是这俩种更加冷门,知道的人不多:

    ESTCA覆盖法

    也叫错误敏感测试用例分析规则。由Foster提出,属于根据程序中的谓词最容易出错的部分得出的规则,属于大数据的范畴。

    LCSAJ覆盖法

    也叫线性代码顺序和跳转覆盖法,是一个比较全面的测试方法。

    每个LCSAJ定义为一段代码:起始于程序入口或者一个跳转点,结束于程序出口或一个跳转点。

    整个方法的做法就是:分层测试

    第一层用语句覆盖,第二层是分支覆盖,第三层就是一段LCSAJ覆盖,第四层就是任意相连的俩段LCSAJ覆盖。第五层就是任意相连的三层LCSAJ覆盖,以此类推。看起来更像是 一种集成测试的方法。

    更多学习笔记移步 https://www.cnblogs.com/kknote
  • 相关阅读:
    20款时尚的 WordPress 博客主题【免费下载】
    垂涎欲滴!30个美味的食品类移动应用程序【上篇】
    Skippr – 轻量、快速的 jQuery 幻灯片插件
    Boba.js – 用于 Google 统计分析 JavaScript 库
    长期这么做的后果就是人民劳苦而得不到该有的回报,怎么能不垮
    左值与右值的根本区别在于能否获取内存地址,而能否赋值不是区分的依据
    百度后端C++电话一面
    Web 开发和数据科学家仍是 Python 开发的两大主力
    Consul架构
    去除两端逗号-JS
  • 原文地址:https://www.cnblogs.com/kknote/p/15304110.html
Copyright © 2020-2023  润新知