2
insertion_procedure (int a[], int p [], int N)
{
    int i,j,k;
    for (i=0; i<=N; i++) p[i] = i;
    for (i=2; i<=N; i++)
    {
        k = p[i];
        j = 1;
        while (a[p[j-1]] > a[k]) {p[j] = p[j-1]; j--}
        p[j] = k;
    }
}

对于这个特定的插入过程,有哪些好的测试用例?

4

2 回答 2

1

我将从这些开始

  • a[] 中的负数。结果应该是什么?
  • p[] 中的负数。
  • 一个负数 N。
  • 一个空的数组。
  • 一个空的 p 数组。
  • N = 0

查看实现(我不在 c 中编程),我怀疑其中一些会 AV。

简而言之,您至少应该对输入参数进行边界分析,并对每个参数进行测试,其中每个值超出边界、边界和入站。

示例
如果您有 1 个参数并确定边界为 0 和 10,则应生成 6 个测试用例。您应该传入 -1、0、1、9、10 和 11。

进一步研究
随着参数数量的增加,很快就不可能测试所有组合。这就是全对测试派上用场的地方。

于 2010-04-20T09:40:00.960 回答
1

如果我正确阅读了这个函数,任何带有这个属性 a[0] > a[2] 的输入都会出现段错误

第一次循环for (i=2; i<=N; i++)

追踪我脑海中的变量。

  1. i = 2
  2. k = p[i] == 2
  3. j = 1
  4. p[j-1] = p[0] == 0
  5. 因为a[0] > a[2]while 循环条件为真,所以j-- == 0
  6. 下一次评估 while 条件将执行:while (a[p[-1] > k)-> SEGFAULT

这可能是一个很好的测试:-)

看起来没有任何有用的输入可以使 while 循环在没有段错误的情况下多次运行,所以我会说那里存在逻辑错误

于 2010-04-20T09:37:51.427 回答