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


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.