Що таке негативний тест? Тестові випадки з прикладом
⚡ Розумний підсумок
Негативне тестування перевіряє, як поводиться програмний додаток, коли він отримує неочікувані вхідні дані або робочі умови, тому продукт коректно деградує, а не аварійно завершує роботу, пошкоджує дані або виявляє дірку в безпеці.

Негативне тестування
Негативне тестування – це тип тестування програмного забезпечення, який використовується для перевірки програмного застосунку на наявність неочікуваних вхідних даних та умов. Неочікувані дані або умови варіюються від неправильного типу даних у простому полі форми до навмисної хакерської атаки. Мета негативного тестування – запобігти збою застосунку через недійсні вхідні дані та покращити якість і стабільність продукту.
Позитивне тестування лише доводить, що система працює за нормальних умов. Негативне тестування підтверджує, що та сама система також справляється з аномальними умовами, що саме і вимагається відмовостійким продуктом.
Приклад негативного тесту
Ліфт – це приклад, який найчастіше використовується для пояснення негативного тестування, оскільки його нормальну поведінку та поведінку при відмові легко уявити.
Вимоги до ліфта знайомі: натискання номера поверху відправляє ліфт на цей поверх, а двері автоматично відчиняються, як тільки ліфт досягає зазначеного поверху.
Деякі негативні сценарії для того самого підйому наведено нижче, поряд із припущенням, яке натомість робить позитивне тестування.
| Негативне тестування | Позитивне тестування |
|---|---|
| Що станеться, якщо кількість осіб (вага) перевищить вказану межу? | Припускається, що в ліфт увійде лише зазначена кількість осіб |
| Що станеться, якщо хтось закурить або спричинить пожежу всередині ліфта? | Припускається, що всередині ліфта не буде диму чи вогню |
| Що станеться, якщо під час роботи зникне живлення? | Припускається, що під час роботи ліфта не буде відключення електроенергії |
Усі ці випадки підпадають під негативні результати тестування. Немає гарантії, що жоден з них ніколи не станеться, тому кожен з них має бути локалізований.
Припустимо, що умову надмірного навантаження ніколи не перевіряють, і ліфт поводиться ненормально після перевантаження. Цей єдиний пробіл шкодить надійності системи і навіть може загрожувати життю. Ось що означає негативне тестування на практиці, і чому це важливо.
Програмне забезпечення поводиться так само. Негативний тест навмисно відхиляється від звичайної операційної процедури. Розглянемо реєстраційну форму.
| Негативне тестування | Позитивне тестування |
|---|---|
| Введіть недійсний ідентифікатор електронної пошти в поле електронної пошти | У поле електронної пошти вводяться лише дійсні ідентифікатори електронної пошти |
| Введіть недійсний номер телефону, наприклад, символи, у поле номера телефону | У числове поле вводяться лише цифри |
| Завантажте зображення, розмір якого виходить за межі заданої межі | Завантажуються лише зображення в межах заданого розміру |
| Завантажте недійсні файли, такі як XML or SQL файли в полі завантаження зображень | Завантажуються лише зображення у дійсних форматах, таких як .jpg або .png |
Кожен із цих негативних випадків все одно має забезпечити працездатність системи. Якщо символ введено в числове поле, програма не може обробити неочікувані дані, яких вона ніколи не очікувала, і може призвести до збою. Що ще гірше, SQL injection Рядок у тому ж полі може стерти вміст бази даних. Втрати такого роду є причиною негативного тестування.
Навіщо робити негативний тест?
Тестування потребує часу та грошей, тому важливо вирішити, що, як і скільки тестувати. Аргументи на користь витрачання частини цього бюджету на негативне тестування виглядають інакше з обох сторін проекту.
Організаційна перспектива
Надання клієнту якісного продукту є відповідальністю організації, а негативні результати тестування є частиною цього зобов'язання. Це також є доказом того, що організація зробила все можливе, щоб запобігти збою, навіть якщо жодна система не є повністю безпомилковою.
Вплив є вирішальним фактором. Сайт електронної комерції може пройти всі позитивні тести та все одно містити лазівку, яка дозволяє зловмиснику виконати SQL-ін'єкцію та стерти дані, що стоять за нею. Це серйозне порушення безпеки, і лише негативне тестування шукає його.
Загальнодоступні програми, зокрема вебсайти, майже не надають жодного контролю над тим, як відвідувачі їх використовують, тому негативне тестування — єдиний спосіб підтвердити, що незвичне використання викрито та стримано. Те саме стосується зловмисних користувачів: зловмисники активно шукають можливості зламати систему, а сценарії злому однозначно належать до негативного тестування.
Клієнтська перспектива
Клієнти очікують продукту з нульовою вразливістю, і негативне тестування підтверджує це очікування. Для чутливих продуктів, таких як електронна комерція або онлайн-торгівля акціями, тестування безпеки і негативні тести є обов'язковими, а не необов'язковими.
Єдине, що справді хвилює клієнта, — це вартість. Після аналізу впливу невдачі клієнт може вирішити, наскільки далеко мають зайти зусилля з негативного тестування.
Як зробити негативний тест
Негативне тестування починається з розгляду кожного вхідного сигналу, який програма може фізично отримати, а не лише того, який вона повинна отримувати. Кожен з них належить до Тестовий випадок навіть якщо це явно неправильний спосіб використання функції. Поле електронної пошти тестується з усім, що не є дійсною адресою електронної пошти, а елемент керування завантаженням зображень тестується з кожним типом файлу, який не є зображенням.
Список можливих недійсних вхідних даних фактично нескінченний, тому негативним тестовим випадкам необхідно надавати пріоритет. Для поля зображення, яке приймає лише файли .png, кандидати для завантаження включають .jpeg, .xml, .xls та багато інших. Файл XML або SQL має набагато більший потенційний вплив, ніж .jpeg, тому ці випадки виконуються першими. Ранжування випадків за впливом перед виконанням робить негативне тестування доступним.
Більшість негативних тестових випадків виникають через невеликий набір усталених методів проектування, а не через імпровізацію:
- Граничні значення: використовувати значення безпосередньо за межами допустимого діапазону, наприклад, 0 та 101 для поля, яке приймає значення від 1 до 100.
- Недійсні класи еквівалентності: вибрати одного представника з кожного класу відхилених вхідних даних, наприклад, літери в числовому полі.
- Помилка вгадування: використовуйте досвід минулих дефектів, щоб зосередитися на входах, які найімовірніше порушать роботу цієї функції.
- Спотворені та ворожі дані: теги скриптів, фрагменти SQL та надмірно великі корисні навантаження, що перевіряють перевірку та обробку даних безпеки.
- Fuzz тестування: автоматично генерувати великі обсяги випадкових або мутованих вхідних даних для пошуку необроблених збоїв.
- Перервані потоки: скасувати, оновити, перевищити час очікування або втратити з’єднання під час транзакції.
Яким би методом не виникав випадок, очікуваний результат має бути записаний як контрольований, читабельний збій — повідомлення про перевірку, відхилення завантаження, чистий відкат — і ніколи не просто як «система не дає збою».
Плюси та мінуси негативного тестування
Як і будь-який інший метод тестування, негативне тестування має переваги та недоліки, які залежать від того, де, коли та в якій кількості його застосовують.
Переваги негативного тестування
- Це безпосередньо захищає якість продукту, оскільки якісний продукт – це продукт, у якого немає вразливостей, які можна експлуатувати.
- Це розширює охоплення. Недійсні вхідні дані потрапляють до активної системи навмисно чи випадково, тому негативні випадки повинні існувати разом із позитивними, щоб охоплення було змістовним.
- Це підвищує довіру клієнтів ще до публікації релізу.
- Він виявляє дефекти, які позитивне тестування структурно не може охопити, такі як необроблені винятки та слабка перевірка вхідних даних.
Недоліки негативного тестування
- У деяких ситуаціях це марна трата часу та енергії. Якщо застосунок створено для одного користувача, випадок зі 100 одночасними користувачами не вартий тестування, тому вибір правильних умов має значення, і деяким системам взагалі потрібно дуже мало негативного тестування.
- Для проектування корпусів потрібні кваліфіковані та досвідчені люди.
- З точки зору клієнта, це збільшує витрати та може затримати випуск.
- Це конкурує за зусилля. Команда, яка витрачає багато коштів на негативне тестування, може зрештою недостатньо інвестувати в позитивне тестування.
