这里没有软件测试的泛泛理论,只有博主的最佳实践。 博主的研究方向为静态分析和性能测试,致力于各种测试工具的引入、评估和开发。 本博的测试文章均为作者原创,转载请务必注明出处。

相同的测试用例,不同的MC/DC覆盖率结果?

上一篇 / 下一篇  2008-07-08 15:04:24 / 个人分类:C++test

示例代码:

#include <stdio.h>
int mcdc(int a, int b, int c)
{
 int result;
 
 printf("a=%d, b=%d, c=%d\n", a, b, c);
 
 if((a > 1) && ((b > 2) || (c < 3)))
 {
  result = a*b+c;
 }
 else
 {
  result =  a+b*c;
 }
 printf("result = %d", result);
 
 return result;
}

通过以上的简单实例,说明一下目前比较常用的几种覆盖率。透过这个过程,相信您也会对覆盖率测试有个基本的认识。

×CASE(a,b,c)表示的是测试用例的输入,如第一个用例输入的是a = 2 b= 3 c = 4

×MC/DC覆盖率翻译名称为“修正条件判定覆盖”。它是DO-178B level A级别的认证标准中规定的。欧美的民用航空飞机的软件要求强制性的遵守DO-178B level A标准。MC/DC是目前要求最严格的覆盖率。

×以上实验的覆盖率数据使用c++test统计完成。

×使用Logiscope TestChecker统计的MC/DC的结果略有不同,如执行完第一条测试用例后,Logiscope TestChecker认为此时MC/DC覆盖率应该是25%,如下图:

×虽然两个工具对单个测试用例的覆盖率数据不同,但二者都认为当执行完表格中的4条用例后,MC/DC覆盖可以达到100%。可以看出两个工具对MC/DC的理解不完全相同。

×我个人认为c++test的理解更准确一些。大家怎么看?欢迎讨论!

 


TAG:

引用 删除 aagain78   /   2009-12-07 14:00:26
我觉得,
c++test似乎是从mcdc中的条件数出发的,上例中条件数为3,因此,当条件a>1独立影响判定两次后,才有覆盖率1/3=33%;
logiscope似乎是从需完成mcdc100%覆盖的测试用例数出发的,上例中一共需的用例数为4(应该是n+1到2^n之间,不过似乎经常是n+1),因此,当执行完一个用例时,覆盖率就为1/4=25%。
比较起来,我觉得用例数随着不同的情况会有很多变化,反而条件数基本上是确定的。因此,我更倾向于c++test。不过两者似乎也只是殊途同归而已。
p.s.我想向您请教下静态分析和覆盖测试的细节问题,不知可否详谈?我的邮箱是aagain78@yahoo.com.cn
 

评分:0

我来说两句

Open Toolbar