51Testing软件测试论坛

标题: 问一个单元测试的问题 [打印本页]

作者: edwin_chen    时间: 2006-7-26 14:19
标题: 问一个单元测试的问题
大家都知道,做单元测试的时候,往往对被测试函数写驱动以及桩
桩和驱动都比较容易理解,但是在实际写驱动的过程中遇到一个问题.
问题描述如下:
这是被测试代码:
int main()
{
  int i, l = 0;
  for (i = 3; i < 65536; i += 2) {
    int j, k, m = 1;
    k = sqrt(i)+1;
    for (j = 3; j < k; j += 2) {
      if (i % j == 0) {
        m = 0;
        break;
      }
    }
    if (m == 1) {
       l++;
    }
  }
  printf("%i\n", l);
  return 0;
}

我们看到了,所要测试的是 main 函数!!!!
如何写驱动呢?

问题二:同样是这个函数,如果没有覆盖率的需求(既直接给这么一个函数,就要求做单元测试),那么我们自己是不是就要考虑覆盖率呢?

以该函数为例子,望解答................................
作者: guolm1225    时间: 2006-7-26 19:00
这个函数是打印出3到65536之间的质数个数的吧,该函数根本就没有输入数据,要驱动干什么。。驱动本来就是接受测试数据并把它传送给被测单元的。
我觉得这个main()函数根本不需要测试。。它没有需要测试的接口什么的,而且语句覆盖100%,所有循环都跑到了。。

一定要测试的话,就程序插桩吧。。

个人意见,仅供参考。

[ 本帖最后由 guolm1225 于 2006-7-27 07:42 编辑 ]
作者: 忧郁の真人    时间: 2006-7-26 22:04
呵呵。JJKUI说的有道理哦。觉得像是大学里程序设计后的调试。在加上头文件,在加上调用这个函数的一个语句直接在TC下编译调试后看运行结果就可以判断是否正确了。没有必要用驱动函数了。。。。。。。。
个人意见,仅供参考,如有异议,还请指教。
作者: edwin_chen    时间: 2006-7-27 09:51
我感谢前面两位同学的解答
不过,注意到了没有,该main有返回值,既然有返回值的话,就应该要测试啊

正是考虑 main()可以直接运行,所以一直疑问怎么写驱动?
不是有main()就不用测试的,假设一个程序,把所有的功能都写到了 main()函数中(当然,这种写法不理想的),难道也不测试吗?当然不会

当然,这个是给的任务,不测也得测
作者: 天网    时间: 2006-7-27 13:54
千万不要陷入教条主义

1、这本来就是顶层函数,可以从外接受输入(当然这里不需要输入),还要写驱动干什么?
2、就这个对象而言,内部流程完全不受外部控制,是不需要考虑逻辑覆盖的。只要把它看成一个黑盒验证其结果是否正确就行了。
作者: firemonth    时间: 2006-7-28 00:58
标题: 这样的代码为什么要写成MAIN函数?
感觉不符合编程的风格,封装在其它函数里,用MAIN函数调用不是更好?函数还可以重用。
作者: 数码相机    时间: 2006-7-29 20:44
要测的是主函数,而那又是个函数又没子模块,都相当于测整个程序了,又没界面,都可以看成是系统测试的,不知道这么想对不对!
作者: stringw    时间: 2006-7-30 20:29
同意六楼的说法,这样就可以将main 函数作为驱动来解决没有驱动的问题了。
作者: stringw    时间: 2006-7-30 20:32
而且这段程序输出的只有一个值而已,似乎与作者的原意不符。
作者: lxm    时间: 2006-7-30 21:17
测试需要依据,光一段代码就要测试?似乎太不规范了。
同意 2楼的意见。
如果该程序要求输入一个3~65535之内的限制值x,打印3~x之间的质数个数那么还有点意思。




欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/) Powered by Discuz! X3.2