yamaya 发表于 2006-11-29 11:38:54

白盒测试中,for循环怎样设计测试用例?

在设计白盒测试用例时,应该考虑判断条件覆盖。需要测的程序是用C语言编的,测试用例也用C来编。我是一个新手,请问如果遇到for循环,应该怎样设计测试用例?
谢谢。

VisualUnit 发表于 2006-11-29 17:46:58

循环结构一般看作具有两个分支的分支结构,即考虑进入循环和不进入循环,不考虑循环的次数。有些测试方法介绍中主张考虑循环的上下界,实际应用中不太实用,一是很多时候要依靠外部输入来实现上下界覆盖很困难,二是实际效果并不突出。如果循环内有分支,倒是要考虑内部的分支要能覆盖。

yangkinki 发表于 2006-11-29 17:48:44

那就用判断条件、语句覆盖编写测试用例
for (i=0;i<10;i++)
假如是这样的for循环,然后结合测试用例设计方法,等价类、边界值、因果图、错误推测方法设计用例,具体还是根据i的数据类型来分析,简单设计的用例如下,假如i为整型
当i=0时,。。。
当i=—6时,
当i=5时,
当i=9时,
当i=10时
.....

hayerk 发表于 2006-11-29 19:14:12

for (i=0;i<10;i++)
假如是这样的for循环,然后结合测试用例设计方法,等价类、边界值、因果图、错误推测方法设计用例,具体还是根据i的数据类型来分析,简单设计的用例如下,假如i为整型
当i=0时,。。。
当i=—6时,
当i=5时,
当i=9时,
当i=10时


为什么要考虑i=-6和i=5呢?这是用错误推测法?

VisualUnit 发表于 2006-11-29 22:04:02

原帖由 yangkinki 于 2006-11-29 17:48 发表
那就用判断条件、语句覆盖编写测试用例
for (i=0;i<10;i++)
假如是这样的for循环,然后结合测试用例设计方法,等价类、边界值、因果图、错误推测方法设计用例,具体还是根据i的数据类型来分析,简单设 ...

假如是这样一个函数
int Func(参数表)
{
    ....

    for(i=0; i<10; i++)
    {
      ....
    }

    ....
}

请问如何设计测试用例,分别覆盖 i=0 / i=5 / i=9 / i=10 呢? 这种情形下必定进入循环,除非内部有跳出语句,否则i等于0到9必定会分别执行一次,什么测试用例都一样,不进入循环的情况是不会发生的,也就是说,不进入循环是一个不可覆盖分支。如果是这样:

int Func(int N)
{
    ....

    for(int i=0; i<N; i++)
    {
      ....
    }

    ....
}

那么就可以考虑设计测试用例,覆盖 N > 0 和 N <= 0,即进入循环和不进入循环两种情况,如果for内部没有分支,这样就够了,如果有分支,可能需要通过考虑覆盖内部分支来增加测试用例。

[ 本帖最后由 VisualUnit 于 2006-11-30 09:23 编辑 ]

qrz2000 发表于 2006-11-30 10:45:38

for (i=0;i<10;i++)
假如是这样的for循环,然后结合测试用例设计方法,等价类、边界值、因果图、错误推测方法设计用例,具体还是根据i的数据类型来分析,简单设计的用例如下,假如i为整型
当i=0时,。。。
当i=—6时,
当i=5时,
当i=9时,
当i=10时


为什么要考虑i=-6和i=5呢?这是用错误推测法?


i=5及i=负数,都是等价类吧.
i=5是循环内的等价类
i=负数是循环外的等价类

VisualUnit 发表于 2006-11-30 11:55:25

原帖由 qrz2000 于 2006-11-30 10:45 发表
for (i=0;i<10;i++)
假如是这样的for循环,然后结合测试用例设计方法,等价类、边界值、因果图、错误推测方法设计用例,具体还是根据i的数据类型来分析,简单设计的用例如下,假如i为整型
当i=0时,。 ...


问题是,你怎么做得到呢? 例如:

int Func(int i)
{
    ...

    for(i=0; i<10; i++)
    {
      ....
    }

    ....
}

无论参数i的输入是什么,for循环都是一样的,输入-6或5或其他什么值,对于测试这个for循环有什么意义呢?

yamaya 发表于 2006-11-30 12:31:53

谢谢大家的讲解,请问,像
for(int i=0; i<N; i++)
    {
      ....
    }
这样的循环,在白盒测试时,是否应该分别考虑i<0; i=0; i=N-1; i=N四种情况分别选择测试用例?
但等价类划分和边界值法都是黑盒测试时考虑的方法,在白盒时也这么考虑吗?

yangkinki 发表于 2006-11-30 15:30:58

回复 #8 yamaya 的帖子

如果楼主是想测试这个循环的内部操作,那么就只要考虑满足这个循环条件的用例,即o<=i<=9的整数时的操作,如果说要测试这个循环,当然得考虑循环之外的数据,如果不满足条件的数据也进行了这个循环呢,所以i=-6等无效数据也是必须要有的
至于测试用例设计方法,黑盒和白盒都能用得上的

xiuminwu 发表于 2006-12-20 11:05:22

回复 #7 VisualUnit 的帖子

你是用VisualUint工具进行C++语言程序测试的吗?这个工具好用不好用呢,我初步学习使用,还没找到门路,只是看说明文档!

henryhappier 发表于 2009-4-6 09:36:53

原帖由 yangkinki 于 2006-11-30 15:30 发表 http://bbs.51testing.com/images/common/back.gif
如果楼主是想测试这个循环的内部操作,那么就只要考虑满足这个循环条件的用例,即o

斑竹说的好。就是应该考虑这么多。
另外,边界值和等价类划分,不论白盒黑盒都用得到的。

ivanland 发表于 2009-9-6 21:03:32

我觉得现在普遍用的都是灰盒,用黑盒的测试技术来设计白盒的测试用例

black_tulip 发表于 2009-9-6 22:08:03

对于这样的循环:
for(i=0; i<10; i++)
去测什么0,-6,5,9,10的循环条件,都挺扯淡的。这等于是在测试编译器是否按照C语言的语法规定编译代码了。不知道哪个编译器会犯这样的错误。

就算是要看写这段代码的人是否写对了上下边界,也不是用0和10来能测得出的,这是需要理解上下文代码的。
页: [1]
查看完整版本: 白盒测试中,for循环怎样设计测试用例?