黑盒测试白盒测试

        黑盒测试,就是不考虑内部实现细节,知道它的功能,相应地测试它的功能,也叫功能测试。
        白盒测试,看得到内部实现细节,针对性地测试。

        单元测试、集成测试、系统测试、性能测试,这些是根据测试标准的来分的:

        以代码单元为测试标准的的是单元测试;

        以模块接口为测试标准的是集成测试;

        以整个系统为测试标准的的是系统测试;

        以系统性能为测试标准的是性能测试。

        单元测试应该黑盒白盒测试相结合,测试员必须了解程序设计功能:不了解被测程序的设计功能,纯粹根据代码来设计用例,这种测试几乎没有意义。  

     int func(int a, int b)
    {
        return a - b;
    }
    加法函数是返回两个数的和,但将“+”误写成了“-”,如果输入两个1,并判断输出是不是等于2,马上就会发现错误。如果测试员不了解代码功能,通过阅读代码来了解,以为这是一个减法函数,输入两个1,将输出设定0,这种用例再多也无济于事。

    如果文档比较模糊,通过阅读代码来确认设计功能,是可行的,但决不能完全依赖阅读代码来设计用例。单元测试要么由程序员进行,要么必须有代码文档,使测试员可以了解代码的设计功能,别无选择。

   语句覆盖、判断覆盖、条件覆盖、条件判定组合覆盖、多条件覆盖、修正条件覆盖

代码的逻辑单位主要有:语句,条件、判定、分支、路径。示例:
    int WhiteBox(int A, int B, int X)
    {
        /*判定1*/
        if( A>1/*条件1*/ && B==0/*条件2*/ )
        {
            /*分支1*/
            /*语句1*/
            X = X/A;
            /*语句2*/
            A+1;
        }
        /*分支2:省略的else分支,这是一个空分支*/

        return X; /*语句3*/
    }
int function(bool a,bool b,bool c){
   int x;
   x=0;
  if(a&&(b||c)){
     x=1;
     return x;  
    }
}

1、语句覆盖(SC)

选择足够多的测试数据,使得被测程序中的每条语句至少执行一次。

2、判断覆盖(DC)

设计足够的测试用例,使得程序中的每个判定至少都获得一次真值或假值。或者使得程序中的每一个取真分支和取假分支至少经历一次,因此判定覆盖又称为分支覆盖。

不足是:假如这一程序段中判定的逻辑运算有问题。判定的第一个运算符  &&  错写成运算符  || 。或者第二个运算符 ||  错写成运算符 &&,这时使用上面的测试用例可以达到100%的判定覆盖,仍然无法发现上述的逻辑问题。

3、条件覆盖(CC)

构造一组测试用例,使得每一判定语句中,每个逻辑条件的可能是至少满足一次。

用例一:

a=F,b=T,c=F

a=T,b=F,c=T

用例一在满足条件覆盖的同时,把判定的两个分支也覆盖了。但条件覆盖并没有实现判定覆盖。条件覆盖最后得出相同的判定结果。

用例二:

a=F,b=T,c=T

a=T,b=F,c=F

用例二覆盖了条件的测试用例并没有覆盖分支。

 4、条件判定组合覆盖(CDC)

也就是条件和判定组合形式的覆盖用例。

使得判定中的每个条件的所有可能真或假,至少出现一次;

并且每个判定本身的判定结果真或假也至少出现一次。

也就是既使得条件覆盖达到,同时也使得判定覆盖时,构造的测试用例。

如 a = T b = T c = T 和  a = F b = F c = F

5、多条件覆盖(MCC)

设计足够多的测试用例,使得每个判定中条件的各种可能组合都至少出现一次。显然,满足多条件覆盖的测试用例是一定满足,判定覆盖、条件覆盖、条件判定组合覆盖的。

但导致测试用例呈现指数级增加

6、修正条件覆盖(MCDC)

它要求满足两个条件,首先,每一个程序模块的入口和出口都要考虑至少要被调用一次,每个程序的判定到所有可能的结果值要至少转换一次;其次程序的判定被分解为通过逻辑操作符(and、or)连接的bool条件,每个条件对于判定的结果值是独立的。

满足MC/DC的用例数下界为条件数+1,上界为条件数的两倍,例如,判定中有三个条件,条件组合覆盖需要8个用例,而MC/DC需要的用例数为4至6个。如果判定中条件很多,用例数的差别将非常大,例如,判定中有10个条件,条件组合覆盖需要1024个用例,而MC/DC只需要11至20个用例。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本方法。编译原理不仅是计算机科学理论的重要组成部分,也是实现高效、可靠的计算机程序设计的关键。本文将对编译原理的基本概念、发展历程、主要内容和实际应用进行详细介绍编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本方法。编译原理不仅是计算机科学理论的重要组成部分,也是实现高效、可靠的计算机程序设计的关键。本文将对编译原理的基本概念、发展历程、主要内容和实际应用进行详细介绍编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本方法。编译原理不仅是计算机科学理论的重要组成部分,也是实现高效、可靠的计算机程序设计的关键。本文将对编译原理的基本概念、发展历程、主要内容和实际应用进行详细介绍编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本方法。编译原理不仅是计算机科学理论的重要组成部分,也是实现高效、可靠的计算机程序设计的关键。本文将对编译原理的基本概念、发展历程、主要内容和实际应用进行详细介绍编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值