Тестовые случаи черного ящика для процедуры вставки - PullRequest
2 голосов
/ 20 апреля 2010
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;
    }
}

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

Ответы [ 2 ]

1 голос
/ 20 апреля 2010

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

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

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

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

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

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

1 голос
/ 20 апреля 2010

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

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

Не похоже, что есть какие-либо полезные входные данные, из-за которых цикл запускается более одного раза без segfault, поэтому я бы сказал, что там есть логическая ошибка

...