2010-04-20 4 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://www.doxygen.org, если у вас его еще нет.) – sbi

+3

Если вы хотите написать тестовые примеры «черного ящика», код функции не подходит, спецификация функции с условиями pre и post. Вот что означает «черный ящик». –

ответ

1

Если я прочитал эту функцию правильно любой вход с этим свойством а [0]> а [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] пока условие цикла верно, поэтому j-- == 0
  6. Следующая evaulation из пока условие будет делать: while (a[p[-1] > k) -> Segfault

Это может быть хорошим тестом :-)

Это не выглядит как есть любой полезный вклад, который сделал бы, что во время запуска цикла более чем один раз без Segfault, так что я бы сказал, что есть логическая ошибка там

1

Я хотел бы начать с этих

  • отрицательное число в []. Каким должен быть результат?
  • отрицательное число в р [].
  • отрицательное число N.
  • пустой массив.
  • пустой массив p.
  • N = 0

Глядя на реализацию (я не программка в с), я подозреваю, что некоторые из них будут AV.

В двух словах, вы должны, по крайней мере, провести анализ границ ваших входных параметров и устройства для каждого параметра с каждым значением вне границы, на границе и входе.

Пример
Если у Вас есть 1 параметр и определить границы равны 0 и 10, это должно привести к 6 testcases. Вы должны пройти в -1, 0, 1, 9, 10 и 11.

Дальнейшее изучение
Как суммой параметров растет, он быстро станет невозможно проверить все комбинации. Здесь пригодится all-pairs testing.