精华内容
下载资源
问答
  • '''int function(bool a,bool b,bool c){int x;x=0;if(a&...测试用例:a=T,b=T,c=T2、判断覆盖(DC)设计足够的测试用例,使得程序中的每个判定至少都获得一次真值或假值。或者使得程序中的每...

    '''

    int function(bool  a,bool  b,bool   c){

    int x;

    x=0;

    if(a&&(b||c)){

    x=1;

    return x;

    }

    }

    '''

    8ba35a6b6f0e

    1、语句覆盖(SC)

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

    测试用例:a=T,b=T,c=T

    2、判断覆盖(DC)

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

    8ba35a6b6f0e

    上述两组测试用例不仅满足了判定覆盖,而且满足了语句覆盖,从这一点看,判定覆盖要比语句覆盖更强一些,但是同样的,假如这一程序段中判定的逻辑运算有问题。判定的第一个运算符  &&  错写成运算符  || 。或者第二个运算符 ||  错写成运算符 &&,这时使用上面的测试用例可以达到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)

    设计足够的测试用例,使得判定中的每个条件的所有可能真或假,至少出现一次,并且每个判定本身的判定结果真或假也至少出现一次。

    8ba35a6b6f0e

    5、多条件覆盖(MCC)

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

    测试用例指数级增加(2**conditions)

    8ba35a6b6f0e

    6、修正条件覆盖(MCDC)

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

    8ba35a6b6f0e

    从表中我们可以看出,布尔变量a可以通过用例1和5达到MCDC的要求(用例2和6或者用例3和7也可以满足相应要求)。变量b也可以通过用例2和4 达到MCDC的要求。变量c可以通过用例3和4达到MCDC的要求。因此用例集{1,2,3,4,5}即可满足MCDC的要求。显而易见,这不是唯一的用力结合。

    a  1,5 (TF)        2,6(TF)       3,7(TF)       4,8(FF)  ---->符合条件:1,5 (TF)        2,6(TF)       3,7(TF)

    b   1,3 (TT)       2,4(TF)       5,7(FF)       6,8(FF)  ---->符合条件:  2,4(TF)

    c   1,2(TT)        3,4(TF)       5,6(FF)       7,8(FF)  ---->符合条件:  3,4(TF)

    用例集:{1,2,3,4,5}

    {2,3,4,6}

    {2,3,4,7}

    展开全文
  • 1 简介文章的目的在于通过比较发现条件判定覆盖(即Condition/Decision Coverage C/DC)和修正条件判定覆盖(Modified Condition/Decision Coverage即MC/DC)的差异.软件测试是一项大型的软件工程中必不可少且非常重要...

    1 简介

    文章的目的在于通过比较发现条件判定覆盖(即Condition/Decision Coverage C/DC)和修正条件判定覆盖(Modified Condition/Decision Coverage即MC/DC)的差异.软件测试是一项大型的软件工程中必不可少且非常重要的一部分,软件测试使用两种测试方法:静态测试和动态测试.静态测试是指不用执行程序的测试,它主要采取方案——代码走查、技术评审、代码审查的方法对软件产品进行测试;而动态测试是指实际运行程序,并通过观察程序运行的实际结果来发现错误的软件测试技术,它分为黑盒测试和白盒测试.黑盒测试是在不知道程序内部结构,只知道程序规格的情况下采用的测试技术或策略;而白盒测试是一种在知道程序内部结构的情况下采用的测试技术或策略,就是要选取足够的测试用例,对源代码实现比较充分的覆盖,以便尽可能多地发现程序中的错误.它包括逻辑覆盖法和路径测试法的两种技术.C/DC和MC/DC就是白盒测试方法中的逻辑覆盖方法中的两个成员.目前这两种方法在软件测试中被广泛应用,尤其是MC/DC更是被很多大型软件测试(如飞行控制软件的测试)所应用

    2 对C/DC和MC/DC的描述

    2.1 C/DC的定义

    C/DC是Condition/Decision Coverage的缩写,含义是条件判定覆盖.对它的定义为:

    Condition/Decision Coverage——it combines the requirements for decision coverage with those for condition coverage.That is,there must be suficient test cases to toggle the decision outcome between true and false and to toggle each condition value between true and false.

    例如:if A and (B or C) then⋯ else⋯ 测试这条语句使用C/DC方法可以从表l(具有3个条件的真值表)中选择它的测试集为{ TTF,FFT},分析如下:当 ,B和C的值依次分别取T,T,F时判定A and (B or C)的值为T;当将A,B和C的值依次分别取F,F,T时,判定A and (B or C)的值为F;在测试中,3个条件A,B,C的所有可能取值T、F,都被测试,而判定 A and (B or C)的所有可能取值T和F也都被执行了一次,由此说明此测试集满足C/DC方法的要求,是C/DC方法的其中一个测试集合.

    2.2 MC/DC的定义

    MC/DC是Modified Condition/Decision Coverage(MC/DC)的缩写,含义是修正条件判定覆盖.对它的定义为:

    Condition —— a Boolean expression containing no Boolean operators:

    Decision —— a Boolean expression composed of conditions and zero or more Boolean operators:

    Modified Condition/Decision Coverage —— every point of entry and exit in the program has been invoked at least once,every condition in the program has taken all possible outcomes at least once,and each condition in a decision has been shown to independently affect a decision S outcome by varying just that condition while holding fixed all other possible conditions.

    由上可知:在MC/DC这种测试方法中,条件表示不含有布尔操作符号的布尔表达式;判定表示由条件和零或者很多布尔操作符号所组成的一个布尔表达式;而修正条件判定覆盖方法要求在一个程序中每一种输入输出至少得出现一次,在程序中的每一个条件必须产生所有可能的输出结果至少一次,并且每一个判定中的每一个条件必须能够独立影响一个判定的输出,即在其他条件不变的前提下仅改变这个条件的值,而使判定结果改变.

    与上文同样的例子:if and (B or C) then⋯ else⋯ 这条语句,A and (B or C)是一个判定,A,B,C均为条件,使用MC/DC方法找出分别对应此3个条件的测试集中有4组元素为:{TTF, F,TFT,FFT}.方法如下:测试元素均从表1中选取,保持A和B的值不变测试元素TFF和TFT可以改变C条件的值和整个表达式的结果(F变成了T);而保持A和C的值不变测试元素TTF和TFT可以改变B条件的值和整个表达式的执行结果(T变成了F);而当保持B和C的值不变测试元素TFT和FFT可以改变A条件的值和整个表达式的执行结果(T变成了F).这个测试集完全满足MC/DC的要求即当锁定其它的条件保持不变,而改变判定中一项条件的值,必然引起整个表达式执行的变化.

    7c68b7199686ec80afa57de0db683138.png

    3 C/DC和MC/DC之间的差异

    3.1选取两种方法的条件不同

    当以下的需求在程序测试中遇到时,需要考虑用MC/DC方法:每一个程序模块的输入和输出点都要考虑至少出现1次,每个程序的判定到所有可能的结果值要至少实现1次;程序的判定被分解为通过逻辑操作符(AND,OR,etc.)连接为BOOL条件,每一个条件对于判定的结果值是独立的,或者说单个条件的变化将导致判定的最后变化.

    而对于C/DC方法而言,在程序需要测试时,由于它只要求“判定中每个条件的所有可能取值至少执行一次,同时每个判定的所有可能判定结果至少执行一次”,要求比较简单,所以它可以与其他覆盖方法一样适合于使用在绝大多数的程序的测试中.

    3.2 两者的测试集不同

    The MC/DC criterion enhances the condition/decision coverage criterion by requiring that each condition be shown to independently affect the outcome of the decision.MC/DC方法虽是在C/DC方法上的改进,但是两者在寻找测试集时是不同的,原因在于MC/DC方法要求对于判定中的所有条件当固定其他条件的值时每一个已选定的条件必须能够独立地影响一个判定的输出.

    在以上的举例中:if A and (B or C) then⋯else⋯ 这条语句上文已找出用C/DC方法其一个测试集合为{TTF,FFT},同时如果采用MC/DC方法其测试集合可为{TTF,TFF,TFT,FFT}.对比两个测试集可发现测试集中的元素是不同的,而且元素组数也是不同(C/DC方法有2组,MC/DC方法有4组).原因是:对于C/DC方法来说,不管条件个数有多少,一个测试集中的元素组数最少可以为2个.推导如下:各个条件的取值只有两种T,F,从每个条件的取值中取出一个将它们组合起来形成一组元素,并使得这组元素分别一一对应相应条件而代人整个判定得出的最后结果值为T;然后从剩下的各个条件的取值中组合形成另一组元素并使得元素中的各个值分别对应相应条件代人整个判定后能使表达式的结果值为F(这两种情况是一定可以从真值表中找到的),这样就达到了C/DC取测试集的要求,即各个条件的可能取值T和F都必须取到,且判定结果的可能取值T,F也必须实现.而另外对于MC/DC方法来说如果在一个表达式中N个条件只出现一次,那么一个测试集中的元素组数为N+1个.这句话说明测试集中的元素组数与表达式中的条件个数有关.

    3.3两者在测试中的覆盖面不同

    对于MC/DC方法,它的覆盖面是要大于C/DC方法的,也就是指在测试一个程序或一个软件时,MC/DC能比C/DC找到更多的错误之处,原因就在于MC/DC的测试集检测出错误发生的概率比较高.再举一个很简单的例子:对于这条If A or B then⋯ else⋯语句,由文章的前部可知使用C/DC方法它的测试集可为{TT,FF};可是如果在这条语句中的操作符号是笔误(由and一时大意写成了or ),那么即使采用了{TT,FF}来测试仍然检测不到错误(因为T and T = T or T,且F and F = F or F,即无论将测试集中的哪组元素代人到两个判定中⋯ V ⋯ ,⋯ ^ ⋯ ,两者所得到的判定结果相同),由此可说明虽然使用了判定条件覆盖(C/DC)准则来测试语句,逻辑表达式中的有些错误仍然不能检测出来;可是如果大家用MC/DC方法,由它的规则可得测试集合为{FF,TF,FT },只需使用其中的一组数据TF,就可知道其中发生了错误.原因是:T or F值为T,而 T and F值为F,T and F语句的判定结果本来应该得到F却得到了T,由此可说明中间的操作符号发生了错误,这样就检测到了错误.所以这个例子说明MC/DC的测试集合的覆盖面要大于C/DC方法,若用户对于测试程序的质量要求较高,而不考虑其他因素,那么可以使用MC/DC的方法来测试自己的大型软件或单个程序.

    3.4两者的用途不同

    由于MC/DC在寻找测试集时的要求比C/DC要严格,所以相比较下在测试时为了寻找出测试集合所花费的时间多,由此而引起的人力、物力、财力三重开销也会直接攀升,但是MC/DC测试错误的准确率却是特别地高,因此MC/DC适合那些大型的并且要求测试非常精确的软件测试所用.为达到用户的目的和一个较高的信价比,近年来MC/DC方法主要应用于大型的航空航天软件程序的测试上.

    对比而言C/DC方法要求较低,开销少,而覆盖率也低,所以比较适合对于例如C++,JAVA等小型的程序的}贝4试当中使用,这正是因为小型程序所拥有的项目经费较少、语句代码少则导致相应地寻找错误也比较容易.此时使用C/DC方法足以测试软件.

    4总结

    本文介绍了条件判定覆盖和修正条件判定覆盖两个测试方法的定义和使用,并且通过比较分析出两者之间所存在的差异.目前,在市场上,C/DC和MC/DC两种测试方法被社会广泛应用,但是由于两者的各个不同点,用户必须根据软件自身测试时能给出的条件及软件测试所需要达到的程度选择使用适当的测试方法.

    展开全文
  • java测验的类型?黑盒测验?白盒测验?灰盒测验?白盒测验(White-box Testing,又称逻辑驱动测验,结构测验)是把测验目标看作一个翻开的盒子。...其间逻辑掩盖包括句子掩盖、断定掩盖、条件掩盖、断定/条件掩...

    java测验的类型?

    黑盒测验?白盒测验?灰盒测验?

    白盒测验(White-box Testing,又称逻辑驱动测验,结构测验)是把测验目标看作一个翻开的盒子。运用白盒测验法进行动态测验时,需求测验软件产品的内部结构和处理进程,不需测验软件产品的功用。白盒测验又称为结构测验和逻辑驱动测验。

    白盒测验法的掩盖规范有逻辑掩盖、循环掩盖和根本途径测验。其间逻辑掩盖包括句子掩盖、断定掩盖、条件掩盖、断定/条件掩盖、条件组合掩盖和途径掩盖。

    六种掩盖规范:句子掩盖、断定掩盖、条件掩盖、断定/条件掩盖、条件组合掩盖和途径掩盖发现过错的才能呈由弱至强的改变。句子掩盖每条句子至少履行一次。断定掩盖每个断定的每个分支至少履行一次。条件掩盖每个断定的每个条件应取到各种可能的值。断定/条件掩盖一起满意断定掩盖条件掩盖。条件组合掩盖每个断定中各条件的每一种组合至少呈现一次。途径掩盖使程序中每一条可能的途径至少履行一次。

    白盒测验也称结构测验或逻辑驱动测验,它是知道产品内部作业进程,可经过测验来检测产品内部动作是否依照规范说明书的规则正常进行,依照程序内部的结构测验程序,查验程序中的每条通路是否都有能按预定要求正确作业,而不管它的功用,白盒测验的首要办法有逻辑驱动、基路测验等,首要用于软件验证。

    "白盒"法全面了解程序内部逻辑结构、对一切逻辑途径进行测验。"白盒"法是穷举途径测验。在运用这一计划时,测验者有必要检查程序的内部结构,从检查程序的逻辑着手,得出测验数据。贯穿程序的独立途径数是天文数字。但即便每条途径都测验了依然可能有过错。榜首,穷举途径测验决不能查出程序违反了规划规范,即程序自身是个过错的程序。第二,穷举途径测验不可能查出程序中因遗失途径而犯错。第三,穷举途径测验可能发现不了一些与数据相关的过错。

    白盒测验现在首要用在具有高可靠性要求的软件范畴,例如:军工软件、航天航空软件、工业操控软件等等。白盒测验东西在选购时应当首要是对开发言语的支撑、代码掩盖的深度、嵌入式软件的测验、测验的可视化等。

    对开发言语的支撑:白盒测验东西是对源代码进行的测验,测验的首要内容包括词法剖析与语法剖析、静态过错剖析、动态检测等。可是关于不同的开发言语,测验东西完成的方式和内容差别是较大的。现在测验东西首要支撑的开发言语包括:规范C、C++、Visual C++、Java、Visual J+ 等。

    代码的掩盖深度:从掩盖源程序句子的翔实程度剖析,逻辑掩盖规范包括以下不同的掩盖规范:句子掩盖、断定掩盖、条件掩盖、条件断定组合掩盖、多条件掩盖和批改断定条件掩盖。

    ·句子掩盖 为了露出程序中的过错,程序中的每条句子至少应该履行一次。因而句子掩盖(STatement Coverage)的意义是:挑选满意多的测验数据,使被测程序中每条句子至少履行一次。句子掩盖是很弱的逻辑掩盖。

    ·断定掩盖 比句子掩盖稍强的掩盖规范是断定掩盖(DECision Coverage)。断定掩盖的意义是:规划满意的测验用例,使得程序中的每个断定至少都取得一次“真值”或“假值”,或者说使得程序中的每一个取“真”分支和取“假”分支至少阅历一次,因而断定掩盖又称为分支掩盖。

    ·条件掩盖 在规划程序中,一个断定句子是由多个条件组合而成的复合断定。为了更彻底地完成逻辑掩盖,可以选用条件掩盖(ConDItion Coverage)的规范。条件掩盖的意义是:结构一组测验用例,使得每一断定句子中每个逻辑条件的可能值至少满意一次。

    ·多条件掩盖 多条件掩盖也称条件组合掩盖,它的意义是:规划满意的测验用例,使得每个断定中条件的各种可能组合都至少呈现一次。明显满意多条件掩盖的测验用例是必定满意断定掩盖、条件掩盖和条件断定组合掩盖的。

    ·批改条件断定掩盖 批改条件断定掩盖是由欧美的航空/航天制造厂商和运用单位联合拟定的“航空运输和配备系统软件认证规范”,现在在国外的国防、航空航天范畴运用广泛。这个掩盖度量需求满意的测验用例来断定各个条件可以影响到包括的断定的成果。它要求满意两个条件:首要,每一个程序模块的进口和出口点都要考虑至少要被调用一次,每个程序的断定到一切可能的成果值要至少变换一次;其次,程序的断定被分解为经过逻辑操作符(and、or)衔接的布尔条件,每个条件关于断定的成果值是独立的。

    黑盒测验

    也称功用测验或数据驱动测验,它是在已知产品所应具有的功用,经过测验来检测每个功用是否都能正常运用,在测验时,把程序看作一个不能翻开的黑盆子,在彻底不考虑程序内部结构和内部特性的状况下,测验者在程序接口进行测验,它只检查程序功用是否依照需求规范说明书的规则正常运用,程序是否能适当地接纳输入数锯而发生正确的输出信息,并且坚持外部信息(如数据库或文件)的完整性。黑盒测验办法首要有等价类区分、边值剖析、因—果图、过错估测等,首要用于软件承认测验。 “黑盒”法着眼于程序外部结构、不考虑内部逻辑结构、针对软件界面和软件功用进行测验。“黑盒”法是穷举输入测验,只要把一切可能的输入都作为测验状况运用,才能以这种办法查出程序中一切的过错。实际上测验状况有无量多个,人们不只要测验一切合法的输入,并且还要对那些不合法可是可能的输入进行测验。

    选用黑盒技术规划测验用例的办法有:等价类区分、鸿沟值剖析、过错估测、因果图和归纳战略。

    黑盒测验注重于测验软件的功用性需求,也即黑盒测验使软件工程师派生出履行程序一切功用需求的输入条件。黑盒测验并不是白盒测验的替代品,而是用于辅佐白盒测验发现其他类型的过错。

    黑盒测验企图发现以下类型的过错:

    1)功用过错或遗失;

    2)界面过错;

    3)数据结构或外部数据库访问过错;

    4)功用过错;

    5)初始化和终止过错。

    黑盒测验的长处

    1. 根本上不用人管着,假如程序中止运行了一般就是被测验程序CRASh了

    2. 规划完测验例之后,下来的作业就是爽了,当然更苦闷的是断定crash原因

    黑盒测验的缺陷

    1. 成果取决于测验例的规划,测验例的规划部分来势来源于经验,OUSPG的东西很值得学习

    2. 没有状况变换的概念,现在一些成功的比如根本上都是针对PDU来做的,还做不到针对被测验程序的状况变换来作

    3. 就没有状况概念的测验来说,寻觅和断定形成程序crash的测验例是个费事作业,有必要把周围可能的测验例独自承认一遍。而就有状况的测验来说,就更费事了,尤其不是一个独自的tEStcase形成的问题。这些在堆的问题中体现的更为杰出。

    灰盒测验介于白盒测验与黑盒测验之间java测验的类型?黑盒测验?白盒测验?灰盒测验?白盒测验(White-box Testing,又称逻辑驱动测验,结构测验)是把测验目标看作一个翻开的盒子。运用白盒测验法进行动态测验时,需求测验软件产品的内部结构和处理进程,不需测验软件产品的功用。白盒测验又称为结构测验和逻辑驱动测验。白盒测验法的掩盖规范有逻辑掩盖、循环掩盖和根本途径测验。其间逻辑掩盖包括句子掩盖、断定掩盖、条件掩盖、断定/条件掩盖、条件组合掩盖和途径掩盖。 六种掩盖规范:句子掩盖、断定掩盖、条件掩盖、断定/条件掩盖、条件组合掩盖和途径掩盖发现过错的才能呈由弱至强的改变。句子掩盖每条句子至少履行一次。断定掩盖每个断定的每个分支至少履行一次。条件掩盖每个断定的每个条件应取到各种可能的值。断定/条件掩盖一起满意断定掩盖条件掩盖。条件组合掩盖每个断定中各条件的每一种组合至少呈现一次。途径掩盖使程序中每一条可能的途径至少履行一次。 白盒测验也称结构测验或逻辑驱动测验,它是知道产品内部作业进程,可经过测验来检测产品内部动作是否依照规范说明书的规则正常进行,依照程序内部的结构测验程序,查验程序中的每条通路是否都有能按预定要求正确作业,而不管它的功用,白盒测验的首要办法有逻辑驱动、基路测验等,首要用于软件验证。"白盒"法全面了解程序内部逻辑结构、对一切逻辑途径进行测验。"白盒"法是穷举途径测验。在运用这一计划时,测验者有必要检查程序的内部结构,从检查程序的逻辑着手,得出测验数据。贯穿程序的独立途径数是天文数字。但即便每条途径都测验了依然可能有过错。榜首,穷举途径测验决不能查出程序违反了规划规范,即程序自身是个过错的程序。第二,穷举途径测验不可能查出程序中因遗失途径而犯错。第三,穷举途径测验可能发现不了一些与数据相关的过错。白盒测验现在首要用在具有高可靠性要求的软件范畴,例如:军工软件、航天航空软件、工业操控软件等等。白盒测验东西在选购时应当首要是对开发言语的支撑、代码掩盖的深度、嵌入式软件的测验、测验的可视化等。对开发言语的支撑:白盒测验东西是对源代码进行的测验,测验的首要内容包括词法剖析与语法剖析、静态过错剖析、动态检测等。可是关于不同的开发言语,测验东西完成的方式和内容差别是较大的。现在测验东西首要支撑的开发言语包括:规范C、C++、Visual C++、Java、Visual J+ 等。代码的掩盖深度:从掩盖源程序句子的翔实程度剖析,逻辑掩盖规范包括以下不同的掩盖规范:句子掩盖、断定掩盖、条件掩盖、条件断定组合掩盖、多条件掩盖和批改断定条件掩盖。·句子掩盖 为了露出程序中的过错,程序中的每条句子至少应该履行一次。因而句子掩盖(STatement Coverage)的意义是:挑选满意多的测验数据,使被测程序中每条句子至少履行一次。句子掩盖是很弱的逻辑掩盖。·断定掩盖 比句子掩盖稍强的掩盖规范是断定掩盖(DECision Coverage)。断定掩盖的意义是:规划满意的测验用例,使得程序中的每个断定至少都取得一次“真值”或“假值”,或者说使得程序中的每一个取“真”分支和取“假”分支至少阅历一次,因而断定掩盖又称为分支掩盖。·条件掩盖 在规划程序中,一个断定句子是由多个条件组合而成的复合断定。为了更彻底地完成逻辑掩盖,可以选用条件掩盖(ConDItion Coverage)的规范。条件掩盖的意义是:结构一组测验用例,使得每一断定句子中每个逻辑条件的可能值至少满意一次。·多条件掩盖 多条件掩盖也称条件组合掩盖,它的意义是:规划满意的测验用例,使得每个断定中条件的各种可能组合都至少呈现一次。明显满意多条件掩盖的测验用例是必定满意断定掩盖、条件掩盖和条件断定组合掩盖的。·批改条件断定掩盖 批改条件断定掩盖是由欧美的航空/航天制造厂商和运用单位联合拟定的“航空运输和配备系统软件认证规范”,现在在国外的国防、航空航天范畴运用广泛。这个掩盖度量需求满意的测验用例来断定各个条件可以影响到包括的断定的成果。它要求满意两个条件:首要,每一个程序模块的进口和出口点都要考虑至少要被调用一次,每个程序的断定到一切可能的成果值要至少变换一次;其次,程序的断定被分解为经过逻辑操作符(and、or)衔接的布尔条件,每个条件关于断定的成果值是独立的。黑盒测验也称功用测验或数据驱动测验,它是在已知产品所应具有的功用,经过测验来检测每个功用是否都能正常运用,在测验时,把程序看作一个不能翻开的黑盆子,在彻底不考虑程序内部结构和内部特性的状况下,测验者在程序接口进行测验,它只检查程序功用是否依照需求规范说明书的规则正常运用,程序是否能适当地接纳输入数锯而发生正确的输出信息,并且坚持外部信息(如数据库或文件)的完整性。黑盒测验办法首要有等价类区分、边值剖析、因—果图、过错估测等,首要用于软件承认测验。 “黑盒”法着眼于程序外部结构、不考虑内部逻辑结构、针对软件界面和软件功用进行测验。“黑盒”法是穷举输入测验,只要把一切可能的输入都作为测验状况运用,才能以这种办法查出程序中一切的过错。实际上测验状况有无量多个,人们不只要测验一切合法的输入,并且还要对那些不合法可是可能的输入进行测验。选用黑盒技术规划测验用例的办法有:等价类区分、鸿沟值剖析、过错估测、因果图和归纳战略。 黑盒测验注重于测验软件的功用性需求,也即黑盒测验使软件工程师派生出履行程序一切功用需求的输入条件。黑盒测验并不是白盒测验的替代品,而是用于辅佐白盒测验发现其他类型的过错。黑盒测验企图发现以下类型的过错:1)功用过错或遗失;2)界面过错;3)数据结构或外部数据库访问过错;4)功用过错;5)初始化和终止过错。黑盒测验的长处1. 根本上不用人管着,假如程序中止运行了一般就是被测验程序CRASh了2. 规划完测验例之后,下来的作业就是爽了,当然更苦闷的是断定crash原因黑盒测验的缺陷1. 成果取决于测验例的规划,测验例的规划部分来势来源于经验,OUSPG的东西很值得学习2. 没有状况变换的概念,现在一些成功的比如根本上都是针对PDU来做的,还做不到针对被测验程序的状况变换来作3. 就没有状况概念的测验来说,寻觅和断定形成程序crash的测验例是个费事作业,有必要把周围可能的测验例独自承认一遍。而就有状况的测验来说,就更费事了,尤其不是一个独自的tEStcase形成的问题。这些在堆的问题中体现的更为杰出。

    展开全文
  • 文章的目的在于通过比较发现条件判定覆盖(即Condition/Decision Coverage C/DC)和修正条件判定覆盖(Modified Condition/Decision Coverage即MC/DC)的差异.软件测试是一项大型的软件工程中必不可少且非常重要的一...

    简介

    文章的目的在于通过比较发现条件判定覆盖(Condition/Decision Coverage C/DC)和修正条件判定覆盖(Modified Condition/Decision CoverageMC/DC)的差异.软件测试是一项大型的软件工程中必不可少且非常重要的一部分,软件测试使用两种测试方法:静态测试和动态测试.静态测试是指不用执行程序的测试,它主要采取方案——代码走查、技术评审、代码审查的方法对软件产品进行测试;而动态测试是指实际运行程序,并通过观察程序运行的实际结果来发现错误的软件测试技术,它分为黑盒测试和白盒测试.黑盒测试是在不知道程序内部结构,只知道程序规格的情况下采用的测试技术或策略;而白盒测试是一种在知道程序内部结构的情况下采用的测试技术或策略,就是要选取足够的测试用例,对源代码实现比较充分的覆盖,以便尽可能多地发现程序中的错误.它包括逻辑覆盖法和路径测试法的两种技术.C/DCMC/DC就是白盒测试方法中的逻辑覆盖方法中的两个成员.目前这两种方法在软件测试中被广泛应用,尤其是MC/DC更是被很多大型软件测试(如飞行控制软件的测试)所应用

    C/DCMC/DC的描述

    2.1 C/DC的定义

    C/DCCondition/Decision Coverage的缩写,含义是条件判定覆盖.对它的定义为:

    Condition/Decision Coverage——it combines the requirements for decision coverage with those for condition coverageThat isthere must be suficient test cases to toggle the decision outcome between true and false and to toggle each condition value between true and false

    例如:if A and (B or C) then else 测试这条语句使用C/DC方法可以从表l(具有3个条件的真值表)中选择它的测试集为{ TTFFFT},分析如下:当 BC的值依次分别取TTF时判定A and (B or C)的值为T;当将ABC的值依次分别取FFT时,判定A and (B or C)的值为F;在测试中,3个条件ABC的所有可能取值TF,都被测试,而判定 A and (B or C)的所有可能取值TF也都被执行了一次,由此说明此测试集满足C/DC方法的要求,是C/DC方法的其中一个测试集合.

    2.2 MC/DC的定义

    MC/DCModified Condition/Decision Coverage(MC/DC)的缩写,含义是修正条件判定覆盖.对它的定义为:

    Condition —— a Boolean expression containing no Boolean operators

    Decision —— a Boolean expression composed of conditions and zero or more Boolean operators

    Modified Condition/Decision Coverage —— every point of entry and exit in the program has been invoked at least onceevery condition in the program has taken all possible outcomes at least onceand each condition in a decision has been shown to independently affect a decision S outcome by varying just that condition while holding fixed all other possible conditions.

    由上可知:在MC/DC这种测试方法中,条件表示不含有布尔操作符号的布尔表达式;判定表示由条件和零或者很多布尔操作符号所组成的一个布尔表达式;而修正条件判定覆盖方法要求在一个程序中每一种输入输出至少得出现一次,在程序中的每一个条件必须产生所有可能的输出结果至少一次,并且每一个判定中的每一个条件必须能够独立影响一个判定的输出,即在其他条件不变的前提下仅改变这个条件的值,而使判定结果改变.

    与上文同样的例子:if and (B or C) then else 这条语句,A and (B or C)是一个判定,ABC均为条件,使用MC/DC方法找出分别对应此3个条件的测试集中有4组元素为:{TTF FTFTFFT}.方法如下:测试元素均从表1中选取,保持AB的值不变测试元素TFFTFT可以改变C条件的值和整个表达式的结果(F变成了T);而保持AC的值不变测试元素TTFTFT可以改变B条件的值和整个表达式的执行结果(T变成了F);而当保持BC的值不变测试元素TFTFFT可以改变A条件的值和整个表达式的执行结果(T变成了F).这个测试集完全满足MC/DC的要求即当锁定其它的条件保持不变,而改变判定中一项条件的值,必然引起整个表达式执行的变化.

    图:Mcdc表

    3 C/DCMC/DC之间的差异

    3.1选取两种方法的条件不同

    当以下的需求在程序测试中遇到时,需要考虑用MC/DC方法:每一个程序模块的输入和输出点都要考虑至少出现1次,每个程序的判定到所有可能的结果值要至少实现1次;程序的判定被分解为通过逻辑操作符(ANDORetc)连接为BOOL条件,每一个条件对于判定的结果值是独立的,或者说单个条件的变化将导致判定的最后变化.

    而对于C/DC方法而言,在程序需要测试时,由于它只要求“判定中每个条件的所有可能取值至少执行一次,同时每个判定的所有可能判定结果至少执行一次”,要求比较简单,所以它可以与其他覆盖方法一样适合于使用在绝大多数的程序的测试中.

    3.2 两者的测试集不同

    The MC/DC criterion enhances the condition/decision coverage criterion by requiring that each condition be shown to independently affect the outcome of the decisionMC/DC方法虽是在C/DC方法上的改进,但是两者在寻找测试集时是不同的,原因在于MC/DC方法要求对于判定中的所有条件当固定其他条件的值时每一个已选定的条件必须能够独立地影响一个判定的输出.

    在以上的举例中:if A and (B or C) thenelse 这条语句上文已找出用C/DC方法其一个测试集合为{TTFFFT},同时如果采用MC/DC方法其测试集合可为{TTFTFFTFTFFT}.对比两个测试集可发现测试集中的元素是不同的,而且元素组数也是不同(C/DC方法有2组,MC/DC方法有4).原因是:对于C/DC方法来说,不管条件个数有多少,一个测试集中的元素组数最少可以为2个.推导如下:各个条件的取值只有两种TF,从每个条件的取值中取出一个将它们组合起来形成一组元素,并使得这组元素分别一一对应相应条件而代人整个判定得出的最后结果值为T;然后从剩下的各个条件的取值中组合形成另一组元素并使得元素中的各个值分别对应相应条件代人整个判定后能使表达式的结果值为F(这两种情况是一定可以从真值表中找到的),这样就达到了C/DC取测试集的要求,即各个条件的可能取值TF都必须取到,且判定结果的可能取值TF也必须实现.而另外对于MC/DC方法来说如果在一个表达式中N个条件只出现一次,那么一个测试集中的元素组数为N+1个.这句话说明测试集中的元素组数与表达式中的条件个数有关.

    3.3两者在测试中的覆盖面不同

    对于MC/DC方法,它的覆盖面是要大于C/DC方法的,也就是指在测试一个程序或一个软件时,MC/DC能比C/DC找到更多的错误之处,原因就在于MC/DC的测试集检测出错误发生的概率比较高.再举一个很简单的例子:对于这条If A or B then else⋯语句,由文章的前部可知使用C/DC方法它的测试集可为{TTFF};可是如果在这条语句中的操作符号是笔误(and一时大意写成了or ),那么即使采用了{TTFF}来测试仍然检测不到错误(因为T and T = T or T,且F and F = F or F,即无论将测试集中的哪组元素代人到两个判定中⋯ V  ,⋯ ^  ,两者所得到的判定结果相同),由此可说明虽然使用了判定条件覆盖(C/DC)准则来测试语句,逻辑表达式中的有些错误仍然不能检测出来;可是如果大家用MC/DC方法,由它的规则可得测试集合为{FFTFFT },只需使用其中的一组数据TF,就可知道其中发生了错误.原因是:T or F值为T,而 T and F值为FT and F语句的判定结果本来应该得到F却得到了T,由此可说明中间的操作符号发生了错误,这样就检测到了错误.所以这个例子说明MC/DC的测试集合的覆盖面要大于C/DC方法,若用户对于测试程序的质量要求较高,而不考虑其他因素,那么可以使用MC/DC的方法来测试自己的大型软件或单个程序.

    3.4两者的用途不同

    由于MC/DC在寻找测试集时的要求比C/DC要严格,所以相比较下在测试时为了寻找出测试集合所花费的时间多,由此而引起的人力、物力、财力三重开销也会直接攀升,但是MC/DC测试错误的准确率却是特别地高,因此MC/DC适合那些大型的并且要求测试非常精确的软件测试所用.为达到用户的目的和一个较高的信价比,近年来MC/DC方法主要应用于大型的航空航天软件程序的测试上.

    对比而言C/DC方法要求较低,开销少,而覆盖率也低,所以比较适合对于例如C++Java等小型的程序的}4试当中使用,这正是因为小型程序所拥有的项目经费较少、语句代码少则导致相应地寻找错误也比较容易.此时使用C/DC方法足以测试软件.

    4总结

    本文介绍了条件判定覆盖和修正条件判定覆盖两个测试方法的定义和使用,并且通过比较分析出两者之间所存在的差异.目前,在市场上,C/DCMC/DC两种测试方法被社会广泛应用,但是由于两者的各个不同点,用户必须根据软件自身测试时能给出的条件及软件测试所需要达到的程度选择使用适当的测试方法.

     

    参考文献:

    1.         周苏,王文.软件工程学教程[M].北京:科学出版社出版,2004

    2.         KELLY J HAYHURSTDAN S VEERHUSENJOHN J CHILENSKILEANNA K RIERSONA practical tutorial on modified condition/decision coverage[R]NASA/TM2001.210876

    3.         JOHN JOSEPH CHILENSKISTEVEN P MILLERApplicability of modified condition/ decision coverage to software testing[J]Software Engineering Journal19949(5)193200

    4.         KALPESH KAPOORJONATHAN BOW ENExperimental Evaluation of the Tolerance for ControlF1OW Test Criteria[J]Journal of Software Testing Verification and Reliability200414(3)121

    5.         WHITE A LComments on the probability model for the modified condition/decision coverage method of testing software[ M]IEE proe Soflw2003.150

    展开全文
  • 判定覆盖条件覆盖软件测试白盒方法 * 路径分析 基路径测试:基本路径测试法是在程序控制流图的基础上,通过分析控制构造的环路复杂性,导出基本可执行路径集合,从而设计测试用例的方法。 循环测试是一种着重循环...
  • 其中判定是指决定if或者循环语句是否执行的那个逻辑表达式。 基本思路。逻辑与表达式测试所有条件为真的情况,然后分别测试每个条件为假,其他条件都为真的情况。逻辑或表达式测试所有条件为假的情况,然后分别测试...
  • 判定覆盖 - 设计一套测试 让被测对象中所有判定得到测试覆盖 条件覆盖 - 设计一套测试 让被测对象中所有条件得到测试覆盖 路径覆盖 - 设计一套测试 让被测对象中所有路径得到测试覆盖 上图中: 3. 例题解析 例题1...
  • 白盒测试的5种逻辑覆盖法

    千次阅读 2020-12-31 09:48:54
    分别是判定覆盖(DC),条件覆盖(CC),判定-条件覆盖(CDC),条件组合覆盖(MCC)和修改的条件/判定覆盖(MC/DC)。
  • 本文目的主要为软考准备的复习内容。实例代码:int method(bool a, bool b, bool c){1 int x;2 x=0;3 if(a && (b || c))4 x=1;...可选测试用例:a=1, b=1, c=1 【1,2,3,4,5】2、判定覆盖:每个分...
  • 程序测试的逻辑覆盖测试方法

    千次阅读 2021-03-16 20:29:50
    逻辑覆盖是以程序内部的逻辑结构为基础的设计测试用例的技术。它属白盒测试。白盒测试的测试方法有代码检查法、静态结构分析法、静态质量度量法、逻辑覆盖法、基本路径测试法、域测试、符号测试、Z路径覆盖、程序...
  • 判定表的概念:判定表是分析和表达多逻辑条件下执行不同操作的情况的工具。 • 判定表的优点:能够将复杂的问题按照各种可能的情况全部列举出来,简明并避 免遗漏。因此,利用判定表能够设计出完整的测试用例...
  • 4.判定条件覆盖:判定中每个条件的每个分支至少执行一次,所有判定的可能结果至少执行一次。 5.条件组合覆盖:每个判定中所有可能的条件取值组合至少执行一次。 6.路径覆盖:覆盖程序中所有可能的路径。 (1)当...
  • 逻辑覆盖

    2019-09-27 05:41:45
    参考内容: ...逻辑覆盖是以程序内部的逻辑结构为基础的设计测试用例的技术。它属白盒测试。 逻辑覆盖是通过对程序逻辑结构的遍历实现程序的覆盖。它是一系列测试过程的总称,这组测试过程逐渐进行...
  • 逻辑回归评分卡整理

    2021-11-25 16:18:54
    逻辑回归评分卡整理
  • 白盒测试之逻辑覆盖法

    千次阅读 2020-08-01 14:53:25
    修正判定条件覆盖 点覆盖 边覆盖 路径覆盖 几种逻辑覆盖标准发现错误的能力呈由弱至强的变化。 语句覆盖 语句覆盖是指选择足够的测试用例,使得运行这些测试用例时,被测程序的每一个语句至少执行一次,其覆盖标准...
  • 文章目录逻辑斯蒂方程魔鬼的诞生从有序到混沌魔鬼与系统稳定性 逻辑斯蒂方程 我们对马尔萨斯的名字并不陌生,对他的人口论更有切身的体会。马尔萨斯的人口论基于一个很简单的公式: Xn+1=(1+r)Xn=kXn(1) X_{n+1}=...
  • MC/DC逻辑覆盖

    万次阅读 多人点赞 2014-06-25 14:09:45
    修正条件判定覆盖 修正条件判定覆盖是由欧美的航空/航天制造厂商和使用单位联合制定的“航空运输和装备系统软件认证标准”,目前在国外的国防、航空航天领域应用广泛。这个覆盖度量需要足够的测试用例来确定各个...
  • 1 逻辑回归 1.1 介绍 回归模型是用来处理连续型标签样本的算法模型。 逻辑回归模型是一种广泛应用于分类问题中的回归模型。 1.1.1 线性回归 z=θ0+θ1x1+θ2x2+...+θnxnz=[θ0,θ1,θ2...θn] \begin{aligned} z =&...
  • 逻辑覆盖法

    千次阅读 2020-03-10 15:44:28
    逻辑覆盖是以程序内部的逻辑结构为基础的设计测试用例的技术。它属于白盒测试。 根据覆盖目标的不同和覆盖源程序语句的详尽程度,逻辑覆盖又可分为: 1.语句覆盖 语句覆盖就是设计若干个测试用例使得程序中每一个可...
  • 一致性哈希修正了CARP使用的简单哈希算法带来的问题,使得分布式哈希(DHT)可以在P2P环境中真正得到应用。 一致性hash算法提出了在动态变化的Cache环境中,判定哈希算法好坏的四个定义: 1、平衡性(Balance): ...
  • 逻辑错误清洗

    2020-08-11 09:12:46
    逻辑错误清洗 逻辑错误除了以下列举的情况,还有很多未列举的情况,在实际操作中要酌情处理。另外,这一步骤在之后的数据分析建模过程中有可能重复,因为即使问题很简单,也并非所有问题都能够一次找出,我们能做的...
  • 逻辑覆盖包括语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、条件组合覆盖和路径覆盖。 六种覆盖标准发现错误的能力呈由弱到强的变化: 1.语句覆盖 2.判定覆盖 3.条件覆盖 4.判定/条件覆盖 5.条件组合覆盖 6....
  • 逻辑回归总结

    千次阅读 2018-09-02 21:36:26
    一句话概括逻辑回归:逻辑回归假设数据服从伯努利分布,通过极大化似然函数的方法运用梯度下降来求解参数,以达到将数据分类的目的。(求解参数时常见的算法还有:随机梯度下降法,牛顿法,拟牛顿法等) 逻辑回归的...
  • 软件测试流程梳理

    2021-07-23 16:46:31
    单元测试以白盒为主,测试单元内部独立路径、逻辑结构、规范等; 集成测试也是以白盒为主,黑盒辅助,注重测试模块间接口数据传递、参数的个数、属性和顺序的正确性 测试粒度最大:验收 单元...
  • 修正判定条件覆盖单元的入口与出口必须至少被调用一次,程序中判断的每一个分支必须至少被执行一次。对于程序中通过逻辑运算(AND,OR等)组成判断的基本布尔条件,每个条件必须取遍 所有可能的值且每一个...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 8,580
精华内容 3,432
关键字:

修正条件逻辑判定