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


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) особый случай.


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

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).

Неискушенный нит: logₑ-1 есть iπ. В питоне,import cmath; assert(cmath.log(-1) == 3.141592653589793j)
— Боб Стейн
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.