В чем разница между краевым случаем, угловым случаем, базовым случаем и пограничным случаем?

86

Я не носитель английского языка. На моем родном языке мне известны некоторые термины, используемые для обозначения проверенного условия, чтобы остановить рекурсию, и условия, проверенного на крайние, маловероятные или сверхпростые случаи. В английском я встречал термины «крайний случай», «угловой случай», «граничный случай» и «базовый случай», но я не могу понять, какие различия и что используется для обозначения чего; Я хотел бы получить краткое изложение различий между ними.

В частности, я был бы очень рад, если бы кто-то мог предоставить аннотации для строк в следующем примере кода:

    int transmogrify(int n) {
1.      assert(n <= 1000000);
2.      if (n < 0) return -1;
3.      if (n == 1000000) return PRE_CALC;
4.      if (n == 0) return n+1;            // For stopping the recursion
5.      if (n == 1251) return 3077;
        return transmogrify(n-1);
    }

Я думаю, что это:

  1. Санитарная проверка
  2. Проверка ввода
  3. Граничный случай? Крайний случай? Угловой корпус?
  4. Базовый вариант? Граничный случай?
  5. Угловой корпус? Крайний случай?
дуб
источник
4
Я считаю, что границы и границы, как правило, одинаковы. Но они относятся к тестированию, а не к проверке условий в коде.
Ричард
@ Ричард Тестирование не код? Это не мое понимание - есть ли у вас ссылка, подтверждающая тот факт, что вы считаете, что эти условия не относятся к коду?
Брэд Томас,

Ответы:

94

Я тоже не носитель английского языка. Но согласно Википедии:

  • Пограничный случай возникает при экстремальном (максимальном или минимальном) рабочем параметре.
  • Угловой случай возникает за пределами нормальных рабочих параметров , в частности, когда несколько переменных среды или условий находятся одновременно на экстремальных уровнях, даже если каждый параметр находится в пределах указанного диапазона для этого параметра . («Внешние нормальные рабочие параметры», очевидно, означают что-то вроде «вне типичной комбинации рабочих параметров», а не строго «вне допустимых рабочих параметров». То есть вы все еще находитесь в допустимом пространстве параметров, но около его угла.)
  • Граничный случай возникает, когда один из входов находится на максимальном или минимальном пределе или чуть выше его.
  • Базовый случай - это конец рекурсии .

Таким образом, номенклатура, кажется, полностью запутана, хотя угловой случай, кажется, означает что-то немного отличающееся (комбинация значений) от краевых и граничных случаев, которые определенно являются синонимами. Вероятно, можно с уверенностью сказать, что крайние, угловые и граничные случаи - это одно и то же в обычной речи. Кто-то может сказать по-разному каждый из них, но вряд ли есть общее согласие.

Ваши 1) и 2) - это то, что вы написали, 3) это случай ребра / границы, 4) базовый случай и 5) особый случай.

Joonas Pulakka
источник
Это очень полезный ответ для понимания концепций каждого технического слова.
Джинеш Фададу
25

Независимо от различий между словами, то, что вы будете использовать для описания теста, зависит от семантики (значения) теста, а не от точного кода - в представленном примере неясно, что означает каждый из тестов. Кроме того, вот как я их понимаю:

  • Проверка работоспособности = Имеет ли это смысл? Например, если ваше приложение выводит только целые числа sqrt(-1)и log(-1)не определено.
  • Проверка ввода = проверяет ввод пользователя, в отличие от некоторой внутренней структуры данных или вывода функции. Например, в Bash [ $# -gt 0 ]проверяет, что вы получили хотя бы один входной параметр, который также может быть проверкой работоспособности для команды, подобной findили mail.
  • Проверка края / границы = максимальный или минимальный вход, который, как ожидается, будет давать правильный выход . Например, функция, которая просто добавляет единицу к номеру, будет иметь рабочий диапазон от <MIN_INT> до <MAX_INT> - 1, так как ввод, меньший чем <MIN_INT>, не может быть предоставлен пользователем, а вывод больше чем <MAX_INT> не будет полезным.
  • Проверка углового случая = более сложная проверка границ (угол является двумерной границей), например, комбинирование <MIN_INT> и <MAX_INT> в расчете.
  • Проверка специального случая = Неочевидные, неограниченные специальные значения , например log(1 + the smallest floating point number).
l0b0
источник
Неискушенный нит: logₑ-1 есть iπ. В питоне,import cmath; assert(cmath.log(-1) == 3.141592653589793j)
Боб Стейн