У чому різниця між крайовим регістром, кутовим корпусом, базовим корпусом і крайовим відмітком?


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
Я вважаю, край і межа загалом однакові. Але вони стосуються тестування, а не перевірки умов у коді.
— Річард

@ Richard Тестування не код? Це не моє розуміння - чи є у вас посилання на підтвердження того, що ви вважаєте, що ці терміни не застосовуються до коду?
— Бред Томас

Відповіді:


94

Я також не є носієм англійської мови. Але згідно Вікіпедії:

  • Випадок краю відбувається за крайнім (максимальним або мінімальним) робочим параметром.
  • Кутовий випадок відбувається за межами нормальних робочих параметрів , зокрема, коли декілька змінних умов або умов одночасно знаходяться на екстремальних рівнях, навіть якщо кожен параметр знаходиться у визначеному діапазоні для цього параметра . ("Зовнішні нормальні робочі параметри", очевидно, означають щось на зразок "поза типовою комбінацією робочих параметрів", а не суворо "поза дозволеними робочими параметрами". Тобто ви все ще знаходитесь у дійсному просторі параметрів, але біля його кута.)
  • Прикордонний випадок виникає, коли один із входів знаходиться або перевищує максимальні або мінімальні межі.
  • Базовий випадок - це закінчення рекурсії .

Отже, номенклатура, здається, повністю заплутана, хоча, здається, кутовий випадок означає щось трохи інше (поєднання значень), ніж крайові та межові випадки, які, безумовно, є синонімами. Напевно, можна з упевненістю сказати, що крайові, кутові та межі випадків - це одне і те ж у загальній промові. Хтось міг би сказати різні речі кожен з них, але навряд чи спільної згоди.

Ваші 1) і 2) - це те, що ви написали, 3) це край / граничний випадок, 4) базовий випадок, і 5) - окремий випадок.


Це дуже корисна відповідь, щоб зрозуміти поняття, що стоять за кожним технічним словом.
— Jignesh Fadadu

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π. У python,import cmath; assert(cmath.log(-1) == 3.141592653589793j)
— Боб Штейн
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.