2010-04-20 75 views
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; 
    } 
} 

对于这个特殊的插入程序,很少有什么好的测试用例?插入程序的黑盒测试用例

+1

我会先写一个函数规范开始。最好在正上方注释。使用您最喜欢的评论提取引擎的语法。 (如果您还没有,请使用http://wwww.doxygen.org。) – sbi 2010-04-20 09:14:20

+3

如果你想编写“黑盒子”测试用例,功能代码是没有用的,具有前置和后置条件的函数的规范是。这就是“黑匣子”的含义。 – 2010-04-20 09:24:52

回答

1

如果我读这个函数正确地输入任何与此属性 一个[0]> A [2]将SEG故障通过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 (a[p[-1] > k) - >段错误

这可能是一个很好的考验:-)

它看起来不像有任何有用的投入,将使该while循环运行超过一次没有段错误,所以我会说有一个逻辑错误有

1

我会与这些

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

望着实现(我并不在C PROGRAMM),我怀疑有些意志AV的。

简而言之,您至少应该对输入参数进行边界分析,并对每个参数进行边界和入站时的每个参数的测试。


如果有1个参数,并确定边界是0和10中,它应导致6个测试用例。你应该通过在-1,0,1,9,10和11

进一步研究
作为参数ammount的增长,这将很快成为不可能测试所有组合。这是all-pairs testing会派上用场的地方。