Посібник для початківців для тестування: Помилки при обробці випадків краю

Створюючи складні програми, незалежно від мови, ви починаєте помічати закономірність у своїх тестових звичках. На різних платформах чи проектах виникатимуть однакові проблеми, схожі на вигляд. Незалежно від того, чи ви створюєте чергову просту демонстрацію списку справ для розмови, чи створюєте всеосяжний бек-енд для запуску PaaS, починають з’являтися ті самі загальні шаблони.

Є шість випадків, які слід перевірити, що засвітить дивовижну кількість питань. Вони не призначені для того, щоб бути всебічними або повноцінними власними тестовими наборами. Швидше, вони легко запам’ятовуються підмножиною загальних парадигм тестування, які можуть застосовуватися до будь-якої мови, середовища чи середовища.

Ці випадки відразу корисні у двох аспектах щоденних процедур кодування: налагодження конкретних проблем у міру їх виникнення та у створенні набору тестування для кодової бази. Вони призначені для загальних абстрактних форм тестування, які засвітять деякі найпоширеніші проблеми, з якими стикаються молодші розробники.

Вони будуть корисні лише в обхідному напрямку для функціонального програмування. Функціональне програмування обходить багато найпростіших типів помилок, описаних нижче. У будь-якому випадку, корисно мати на увазі подібні абстрактні межові випадки, оскільки вони забезпечують захист від поганих практик у коді.

Шість тестів такі:

  • Нуль
  • Один
  • Два
  • Від двох до max-1
  • макс
  • макс. + 1

Незважаючи на те, що це граничні випадки, їх значення полягає в тому, що вони представляють. Переконуючись, що ваші тести охоплюють всю функціональність вашої програми, ви повинні тримати тести простими з якомога меншим чуттям.

Нуль

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

Один

Один, як Zero, є найосновнішою формою узагальненого єдиного тесту. Функція тестується з першим дійсним, звичайним входом. Це найбільш корисно для регресійного тестування. У майбутніх ітераціях коду цей тест швидко покаже, чи працює програма (або процес) належним чином.

Одне тестування дає вам базовий рівень успіху, будь то успішна автентифікація в кінцевій точці адміністратора, дійсне завантаження файлу або правильна модифікація масиву.

Два

Два - це не просто тестування індексу масиву 2 або те, чи працює ваш алгоритм з 2 входами. Він також охоплює те, що відбувається, коли ви запускаєте один і той же код двічі.

Якщо хтось робить запит DELETE HTTP двічі поспіль на один і той же ресурс, що відбувається? Якщо функцію сортування за допомогою нестандартного компаратора викликають двічі поспіль, чи поводиться вона належним чином?

Два - це цікаве число, оскільки це перший раз, коли дійсний код, який працює при одноразовому виклику, може виявити побічні ефекти при повторних виконаннях. Зробіть невелику зміну функцій, які ми перевірили вище.

Це зводиться до модифікацій стану та розуміння поведінки функції. Якщо все, що ми маємо, - це назва функції, тоді цей код поводиться точно так, як передбачалося. У вас є змінна з назвою 0, ви викликаєте функцію setVarToOne, а потім стверджуєте, що вона дорівнює одиниці.

На перший погляд, це поводилося точно так, як очікувалося. Однак тестування його з ідеєю двох на увазі висвітлить глибші проблеми з кодом. Ви б протестували його, зателефонувавши двічі, і стверджуючи, що в обох випадках mVar дорівнює 1.

Від двох до max-1

Два до max-1 - це перевірка осудності. Це дуже схоже на тест One, але є незначна різниця. Це має бути середній варіант використання - не найпростіший чи найпростіший чи найпростіший для читання. Просто середній випадок використання, який, можливо, не особливо простий, але це досить поширене явище .

Макс

Макс досить простий: він просто перевіряє межі вашого додатку, особливо навколо визначених максимальних констант.

Якщо у вас є проста реалізація пов'язаного списку, ви можете уявити, що у вас є, здавалося б, нескінченна кількість дозволених вставок. Насправді існує верхня межа - будь то INT_MAX, кількість дескрипторів файлів, яку може мати ваша ОС, або просто обсяг пам'яті або дискового простору, виділеного для вашої програми.

За певних обставин Макс може здатися неможливим тестом, оскільки для будь-якого тестуючого не існує макс. Однак ціль у цих випадках має інший характер: стрес-тест на вашу заявку.

Наприклад, можливо, що певна частина даних, що подаються користувачем, зменшується та передається через функції, поки не досягне певного вами циклу. Якщо ці дані, скажімо, INT_MAX, для заповнення коду може знадобитися незначна кількість часу. Гірше того, це може перевести ваш код у стан, що не зупиняється. Це можуть бути тонкі проблеми, які виникають лише після того, як ваш код надходить у виробництво, тому важливо вловлювати їх на етапі тестування.

Макс. + 1

Max + 1 - це тест, який в основному використовується для перевірки стандартів або правил, встановлених програмістом. Це передбачає тестування будь-чого до його теоретичної межі + епсилон.

Це може виявлятися як проблема масиву за межами межі, помилка вимкнення на одну цілу, помилка переповнення цілого числа або будь-яка інша проблема, яка виникає, коли ви досягаєте меж своєї функції або програми.

Якщо максимальний розмір файлу для завантаження становить 2 Мб, спробуйте завантажити файл розміром 2 Мб + 1b. Якщо у вас обмежено кількість записів у каталозі користувачів, переконайтеся, що перевірка відбувається як на стороні клієнта, так і насторона сервера.

Висновок

Як зазначалося вище, це не повне уявлення про те, якими повинні бути ваші процедури налагодження або тестування. Це просто забезпечує надійну загальну базову лінію, яка повинна перевищувати будь-який конкретний пакет тестування або структуру.

Тести зазвичай розглядають як межові або крайні випадки, але вони можуть підвести свою потворну голову в місцях, які не одразу очевидні.