hayerk 发表于 2006-9-2 01:04:35

MC/DC

MC/DC是修改的条件/判定覆盖,这是DO-178B(美军标?)中首次提出的,开始是为了提高航空软件测试中的覆盖率水平。在 DO-178B中阐明了MC/DC的意义: 对于关键性的实时程序而言,超过半数的可执行代码可能都与布尔运算表达式有关,表达式的复杂性应得到关注。MC/DC的提出是为了引起对布尔表达式的关注…
         根据DO-178B,MC/DC(Modified Condition/Decision Coverage)有如下要求:判定中每个条件的所有可能结果至少出现一次,每个判定本身的所有可能结果也至少出现一次,每个入口点和出口点至少要执行一次,并且每个条件都能单独影响判定结果。这里条件是指不含任何逻辑操作符的布尔表达式,由关系操作符构成。判定是指包含逻辑操作符的布尔表达式。如果同一个布尔表达式在一个判定中出现了多次,那么该表达式应算作多个条件。例如(A OR B)AND(A OR C)中有4个条件。条件A能单独影响判定结果是指,判定中的其他条件取值都不变时,条件A取值的改变会引起判定结果的改变。
         对于程序      
                           if((A==0 || B==0) && (C==0 || D==0))
                                              printf(“TRUE”);
             else
                   printf(“FALSE”);
         这个判定有4个条件,那么条件组合是16个。执行以下测试用例所达到的MC/DC覆盖率依次为:
               序号        输入A        输入B        输入C        输入D        MC/DC
                     1        1        1        1        0        0
                     2        1        0        1        0        25%
                     3        1        0        1        1        50%
                     4        1        0        0        1        75%
                     5        0        1        1        0        100%
      执行用例1和2以后,条件B能独立影响判定的取值,被覆盖。执行用例3-5后,条件D、C和A分别能独立影响判定的取值,MC/DC覆盖率逐渐增加。

      MC/DC发现的主要软件问题包括:
            ORF:Operator Reference Faults,例如“与”被误写成“或”。
            VNF:Variable Negation Faults,一个变量被误写成了它的否定。
            ENF:Expression Negation Faults,一个表达式被误写成了它的否定。

      对于n个条件的判定,为了达到MC/DC,一般需要n+1~2n个测试用例,测试用例的生成一般是按照条件真值表选择最小影响对组合。
      但是MC/DC覆盖有一个缺点,多个判定有关联情况下的MC/DC,例如,有如下两个判定:
                A = B OR C;
                E = A AND D;
      如果两个判定分别计算,则共有4个条件B、C、A和D。{BCD}={TFT,FTF,FFT}就能达到MC/DC100%。但是在同一个程序段中,A的取值实际是由B和C确定的,上述判定等价于E=(B OR C) AND D,这样就只有3个条件了。而此时,{BCD}={TFT,FTF,FFT}不足以达到MC/DC100%(C和D都没有单独影响判定结果E)。因此,对于逻辑等价的两种情况,可能需要不同的测试用例集才能达到MC/DC100%。
页: [1]
查看完整版本: MC/DC