MC/DC覆盖率准则

来源:互联网 发布:flac数值模拟软件 编辑:程序博客网 时间:2024/05/17 03:05

原文链接:http://blog.csdn.net/u011233181/article/details/34433233

修正条件判定覆盖 修正条件判定覆盖是由欧美的航空/航天制造厂商和使用单位联合制定的航空运输和装备系统软件认证标准,目前在国外的国防、航空航天领域应用广泛。这个覆盖度量需要足够的测试用例来确定各个条件能够影响到包含的判定的结果。

改进条件 /判定范围 (MC/DC ModifiedCondition/Decision Coverage):程序中的每个入口点和出口点至少被调用一次;判定中每个条件的所有取值至少出现一次;每个判定的所有可能结果至少出现一次;每个条件都能独立地影响判定的结果,即在其它所有条件不变的情况下改变该条件的值,使得判定结果改变。

不同的测试工具对于代码的覆盖能力也是不同的,通常能够支持修正条件判定覆盖的测试工具价格是极其昂贵的。

MC/DC对: 一个MC/DC对是一对真值向量, 这对真值向量使得判定语句有不同的结果, 但结果的不同仅仅是由于真值向量中一个条件值的变化; 同时, 这对真值向量又称为对偶真值向量。

MC/DC对的定义, 可以看出, 符合MC/DC对的两组真值向量能够独立影响结果。即某个条件的 MC/DC对, 对于结果的影响来说, 该条件是惟一的。那么, 我们就可以穷举出一个判定中所有条件的真值组合, 通过两两对照因果, 从而确定出每个条件的MC/DC对。

l 最小测试用例集快速设计方法

考虑一个最简单的仅包含一个布尔操作符的布尔表达式“A and B”,其中 A均为布尔变量,取值为{0, 1}。“A and B”完备的测试用例集见表 1

A and B”完备测试用例集

用例组号

   A

   B

   结果

1

   1

   1

   1

2

   0

   1

   0

3

   1

   0

   0

4

   0

   0

   0


考察表 中的第 1组测试用例:条件的所有取值均出现一次;判定“A and B”的所有可能结果出现一次;条件A在条件B不变的情况下独立地影响判定的结果。

考察表 中的第 1组测试用例:条件 的所有取值均出现一次;条件B在条件A不变的情况下独立地影响判定的结果。

综上分析可得出满足 MC/DC 准则的测试用例集(见表 2)。

 

A and B”满足MC/DC 测试用例集

用例组号

   A

   B

   结果

1

   1

   1

   1

2

   0

   1

   0

3

   1

   0

   0

 

布尔表达式“A or B”完备的测试用例集中的条件组合与“A and B”相同(参见表1)。参照上面的分析,可以得出满足 MC/DC 准则的测试用例集(见表 3)。

 

表 A or B”满足MC/DC 测试用例集

用例组号

   A

   B

   结果

1

   1

   0

   1

2

   0

   0

   0

3

   0

   1

   1

 

已知对于具有 个条件的布尔表达式,其完备的测试用例有2N组。当的取值比较大时,若还是采取先列出完备的测试用例集,然后再选出适合 MC/DC 的组合的方法,则此方法不仅繁琐而且耗时。Chilenski研究发现,对于一个具有N个条件的布尔表达式,满足 MC/DC 准则的测试用例至少有N1组。为此,将满足MC/DC 准则的N1组测试用例集合称为最小测试用例集。下面给出一种最小测试用例集的快速设计方法。

针对一个相对复杂的布尔表达式,如“ ( A or B ) and C or D )”,首先按照自左向右的顺序,分别列出布尔表达式中的每个条件。针对第一个条件 A,任取其一个可能值,比如 1,并让其直接作用到结果1。为此将设为(此处使用表3中“or”的测试用例设计思路),将( C or D )设为 (此处使用表中“and”的测试用例设计思路),再次使用表 中“or”的测试用例设计思路将条件D设为(1, 0)(0, 1),在此我们选用(1,0),至此完成第组测试用例的设计:

 

用例组号

   A

   B

   C

   D

   结果

1

   1

   0

   1

   0

     1

继续针对第一个条件 A,取其另一可能值 0,不改变其它所有条件的值,并且条件 直接作用到结果0。第组测试用例的设计如下:

用例组号

   A

B

C

D

   结果

1

   1

0

1

0

   1

2

   0

0

1

0

   0

完成条件 的所有取值后,针对第二个条件B,在前面已设计的测试用例中,选取条件 的取值直接作用到结果的测试用例作为参照对象(此处为第 组测试用例),改变条件 的取值1,同时保持其它所有条件的值不变,此时条件B的取值直接作用到结果1。第组测试用例的设计如下:

用例编号

   A

   B

   C

   D

   结果

1

   1

   0

   1

   0

     1

2

   0

   0

   1

   0

     0

3

   0

   1

   1

   0

     1

依照上述方法,设计出最小测试用例集如下:

用例编号

           条件组合

         判定结果

         MC/DC对的对应编号

   A

   B

   C

   D

   (A||B) && (C || D )

   A

   B

   C

   D

1

   1

   0

   1

   0

               1

   2

 

 

 

2

   0

   0

   1

   0

               0

   1

   3

 

 

3

   0

   1

   1

   0

               1

 

   2

   4

 

4

   0

   1

   0

   0

               0

 

 

   3

   5

5

   0

   1

   0

   1

               1

 

 

 

   4

总结上面的方法得出如下结论:

1)牢记关于“and”和“or”最简布尔表达式的测试用例,因为任何复杂的布尔表达式均可视为“and”和“or”最简布尔表达式的逻辑组合(如上述“( A or B ) and ( C or D )”可分解为“X and Y”,其中X = A or BY = C or D

2)针对第一个条件,设计其直接作用到结果的第组测试用例,在对其它条件取值的时候不断地使用关于“and”和“or”最简布尔表达式的测试用例设计思路;

3)每个条件应取到所有可能的值;

4)针对每个条件,在前面已经设计的测试用例中,选取该条件直接作用到结果的测试用例为参照对象,改变该条件的取值,同时保持其它所有条件的值不变;

5)按照上述的思路设计出来的最小测试用例集不是唯一的,因为某些条件的第一次取值不是唯一的(如上述第 组用例中条件 AC的取值)。

if( A && (B||C) ) MC/DC覆盖的用例:

{ TTT, FTT, TTF, TFF }

 

给出下列布尔表达式的MC/DC最小测试用例集合:

1. (A||B) && (C&&D)

用例编号

         条件组合

       判定结果

           MC/DC对的对应编号

   A

   B

   C

   D

(A||B) && (C&&D)

   A

   B

   C

   D

1

   1

   0

   1

   0

            0

   2

 

 

 

2

   0

   0

   1

   0

            0

   1

   3

 

 

3

   0

   1

   1

   0

            0

 

   2

   4

 

4

   0

   1

   1

   1

            1

 

 

   3

   5

5

   0

   1

   0

   1

            0

 

 

 

   4

 

 

 

2. (A and B) and (C or D)

用例编号

            条件组合

           判定结果

         MC/DC对的对应编号

   A

B

C

D

   (A and B) and (C or D)

   A

B

C

D

1

   1

0

1

0

                  0

   2

 

 

 

2

   1

0

0

0

                  0

   1

3

 

 

3

   1

0

0

1

                  0

 

2

4

 

4

   1

1

0

1

                  1

 

 

3

5

5

   0

1

0

1

                  0

 

 

 

4

 

 

 

3. (A&&B)||(C&&D)

用例编号

           条件组合

      判定结果

           MC/DC对的对应编号

   A

B

C

D

  (A&&B)||(C&&D)

   A

B

C

D

1

   1

0

1

0

            0

   2

 

 

 

2

   1

0

1

1

            1

   1

3

 

 

3

   1

0

0

1

            0

 

2

4

 

4

   1

1

0

1

            1

 

 

3

5

5

   0

1

0

1

            0

 

 

 

4

 

 

 

 

4. A&&(B||C)  

用例编号

      条件组合

    判定结果

   MC/DC对的对应编号

   A

B

C

     A&&(B||C)  

   A

B

C

1

   1

0

1

         1

 

 

2

2

   1

0

0

         0

 

3

1

3

   1

1

0

         1

   4

2

 

4

   0

1

0

         0

   3

 

 

 

 

 

5. (A&&B)|(C&D&&E)  

用例编号

         条件组合

            判定结果

         MC/DC对的对应编号

   A

B

C

D

E

     (A&&B)|(C&D&&E) 

   A

B

C

D

E

1

   0

1

0

1

1

                  0

   2

 

 

 

 

2

   1

1

0

1

1

                  1

   1

3

 

 

 

3

   1

0

0

1

1

                  0

 

2

4

 

 

4

   1

0

1

1

1

                  1

 

 

3

5

6

5

   1

0

1

0

1

                  0

 

 

 

4

 

6

   1

0

1

1

0

                  0

 

 

 

 

4

 

 

6. (A&&B&&C)||(D&&E&&F)  

用例编号

      条件组合

                  判定结果

   MC/DC对的对应编号

   A

B

C

D

E

F

       (A&&B&&C)||(D&&E&&F)  

   A

B

C

D

E

F

1

   0

1

1

0

1

1

                        0

   2

 

 

 

 

 

2

   1

1

1

0

1

1

                        1

   1

3

4

 

 

 

3

   1

0

1

0

1

1

                        0

 

2

 

 

 

 

4

   1

1

0

0

1

1

                        0

 

 

2

5

 

 

5

   1

1

0

1

1

1

                        1

 

 

 

4

6

7

6

   1

1

0

1

0

1

                        0

 

 

 

 

5

 

7

   1

1

0

1

1

0

                        0

 

 

 

 

 

5

 

7. (A&&B&&C)||(D&&(E||F)||G)  

用例编号

            条件组合

                  判定结果

           MC/DC对的对应编号

   A

B

C

D

E

F

G

    (A&&B&&C)||(D&&(E||F)||G)  

   A

B

C

D

E

F

G

1

   0

1

1

1

0

1

1

                       1

   2

 

 

 

 

 

 

2

   1

1

1

1

0

1

1

                       1

   1

3

4

 

 

 

 

3

   1

0

1

1

0

1

1

                       1

 

2

 

 

 

 

 

4

   1

1

0

1

0

1

1

                       1

 

 

2

 

 

5

 

5

   1

1

0

1

0

0

1

                       1

 

 

 

 

6

4

 

6

   1

1

0

1

1

0

1

                       1

 

 

 

7

5

 

 

7

   1

1

0

0

1

0

1

                       1

 

 

 

6

 

 

8

8

   1

1

0

0

1

0

0

                       0

 

 

 

 

 

 

7

原创粉丝点击