Тестовые случаи черного ящика для процедуры вставки

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;
    }
}

Какие несколько хороших тестовых примеров для этой конкретной процедуры вставки?


person AJ.    schedule 20.04.2010    source источник
comment
Я бы начал с написания спецификации функции. Желательно в комментариях прямо над ним. Используйте синтаксис вашей любимой системы извлечения комментариев. (Я использую wwww.doxygen.org, если у вас его еще нет.)   -  person sbi    schedule 20.04.2010
comment
Если вы хотите написать тестовые примеры черного ящика, код функции бесполезен, требуется спецификация функции с предварительными и последующими условиями. Вот что означает черный ящик.   -  person Dean Povey    schedule 20.04.2010


Ответы (2)


Если я правильно прочитал эту функцию, любой ввод с этим свойством 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 запускаться более одного раза без segfault, поэтому я бы сказал, что там есть логическая ошибка

person Dean Povey    schedule 20.04.2010

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

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

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

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

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

Дальнейшее изучение
По мере роста количества параметров быстро становится невозможным тестировать все комбинации. Здесь может пригодиться тестирование всех пар.

person Lieven Keersmaekers    schedule 20.04.2010