技术开发 频道

条件判定覆盖和修正条件判定覆盖的差异

【IT168 技术文章】

    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的要求即当锁定其它的条件保持不变,而改变判定中一项条件的值,必然引起整个表达式执行的变化.

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

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

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

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

0
相关文章