技术开发 频道

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

    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两种测试方法被社会广泛应用,但是由于两者的各个不同点,用户必须根据软件自身测试时能给出的条件及软件测试所需要达到的程度选择使用适当的测试方法.

0
相关文章