Какво е отрицателен тест? Тестови случаи с пример
⚡ Умно обобщение
Негативното тестване проверява как се държи софтуерното приложение, когато получава неочаквани входни данни или работни условия, така че продуктът да се деградира грациозно, вместо да се срива, да поврежда данни или да разкрива дупка в сигурността.

Отрицателен тест
Отрицателен тест е вид софтуерно тестване, използвано за проверка на софтуерно приложение срещу неочаквани входни данни и условия. Неочакваните данни или условия варират от грешен тип данни в просто поле на формуляр до умишлена хакерска атака. Целта на отрицателното тестване е да се предотврати срив на приложението при невалиден вход и да се подобри качеството и стабилността на продукта.
Само положителното тестване доказва, че системата работи при нормални условия. Отрицателното тестване потвърждава, че същата система се справя и с анормални условия, което е необходимо за един отказоустойчив продукт.
Пример за отрицателен тест
Асансьорът е примерът, който най-често се използва за обяснение на отрицателно тестване, защото както нормалното му поведение, така и поведението му при повреда са лесни за представяне.
Изискванията за асансьор са познати: натискането на номер на етаж изпраща асансьора до този етаж и вратата се отваря автоматично, след като асансьорът достигне посочения етаж.
Някои отрицателни сценарии за същото повишаване са изброени по-долу, до предположението, което прави положителното тестване.
| Отрицателен тест | Положителен тест |
|---|---|
| Какво се случва, ако броят на лицата (теглото) надвиши определения лимит? | Предполага се, че само определеният брой хора ще влязат в асансьора |
| Какво се случва, ако някой пуши или предизвика пожар вътре в асансьора? | Предполага се, че няма да има дим или огън вътре в асансьора |
| Какво се случва, ако има прекъсване на захранването по време на работа? | Предполага се, че няма да има прекъсване на електрозахранването, докато асансьорът работи |
Всички тези случаи попадат под отрицателни тестове. Не може да се гарантира, че нито един от тях никога няма да се случи, така че всеки един трябва да бъде овладян.
Да предположим, че условието за претоварване никога не се проверява и асансьорът се държи необичайно, след като е претоварен. Тази единствена празнина уврежда надеждността на системата и дори може да застраши живота. Това е какво означава отрицателното тестване на практика и защо е важно.
Софтуерът се държи по същия начин. Отрицателният тест умишлено се отклонява от нормалната оперативна процедура. Да разгледаме регистрационен формуляр.
| Отрицателен тест | Положителен тест |
|---|---|
| Въведете невалиден имейл адрес в полето за имейл | В полето за имейл се въвеждат само валидни имейл адреси |
| Въведете невалиден телефонен номер, например символи, в поле за телефонен номер | В полето за число се въвеждат само числа |
| Качете изображение с размер извън зададената граница | Качват се само изображения в рамките на посочения размер |
| Качвайте невалидни файлове, като например XML or SQL файлове в поле за качване на изображения | Качват се само валидни графични формати, като например .jpg или .png |
Всеки един от тези отрицателни случаи все пак трябва да накара системата да работи. Ако в числово поле бъде въведен символ, приложението не може да обработи неочакваните данни, които никога не е очаквало, и може да се срине. Още по-лошо, SQL инжекция Низ в същото поле може да изтрие съдържанието на базата данни. Загуби от този вид са причината за съществуването на отрицателни тестове.
Защо се прави отрицателен тест?
Тестването отнема време и пари, така че е важно да се реши какво, как и колко да се тества. Аргументите за изразходване на част от този бюджет за отрицателно тестване изглеждат различно от двете страни на проекта.
Организационна перспектива
Предоставянето на качествен продукт на клиента е отговорност на организацията, а отрицателните тестове са част от това задължение. Това е и доказателство за организацията, че е направила всичко разумно, за да предотврати повреда, въпреки че никоя система не е напълно без грешки.
Въздействието е решаващият фактор. Сайт за електронна търговия може да премине всеки положителен тест и все пак да съдържа вратичка, която позволява на атакуващ да извърши SQL инжекция и да изтрие данните зад нея. Това е сериозен пробив в сигурността и само отрицателното тестване го търси.
Публично достъпните приложения, по-специално уебсайтовете, почти не предлагат контрол върху това как посетителите ги използват, така че отрицателното тестване е единственият начин да се потвърди, че необичайната употреба е покрита и ограничена. Същото важи и за злонамерените потребители: нападателите активно търсят възможност да пробият система, а хакерските сценарии принадлежат категорично към покритието с отрицателно тестване.
Клиентска гледна точка
Клиентите очакват продукт с нулеви уязвимости, а отрицателните тестове са това, което подкрепя това очакване. За чувствителни продукти като електронна търговия или онлайн търговия с акции, тестване на сигурността и отрицателните тестове са задължителни, а не незадължителни.
Единствената реална грижа на клиента е цената. След като въздействието на дадена грешка бъде анализирано, клиентът е в позиция да реши докъде трябва да стигнат усилията за отрицателно тестване.
Как да се направи отрицателен тест
Негативното тестване започва с разглеждане на всеки вход, който приложението може физически да получи, не само входните данни, които би трябвало да получи. Всеки от тях принадлежи в Тестов случай дори когато това е очевидно грешен начин за използване на функцията. Полето за имейл се тества с всичко, което не е валиден имейл адрес, а контролата за качване на изображения се тества с всеки тип файл, който не е изображение.
Списъкът с възможни невалидни входни данни е практически безкраен, така че отрицателните тестови случаи трябва да бъдат приоритизирани. За поле за изображение, което приема само .png файлове, качваните кандидати включват .jpeg, .xml, .xls и много други. XML или SQL файл има много по-голямо потенциално въздействие от .jpeg, така че тези случаи се изпълняват първо. Класирането на случаите по въздействие преди изпълнение е това, което прави отрицателното тестване достъпно.
Повечето отрицателни тестови случаи идват от малък набор от установени техники за проектиране, а не от импровизация:
- Гранични стойности: упражнявайте стойностите непосредствено извън валиден диапазон, като например 0 и 101 за поле, което приема от 1 до 100.
- Невалидни класове на еквивалентност: изберете по един представител от всеки клас отхвърлен вход, например букви в числово поле.
- Грешка при предположение: използвайте опита от минали дефекти, за да се насочите към входните данни, които е най-вероятно да нарушат този вид функция.
- Деформирани и враждебни данни: тагове на скриптове, SQL фрагменти и прекалено големи полезни товари, които проверяват валидацията и обработката на сигурността.
- Тестване на размита информация: генерират автоматично големи обеми от произволни или мутирали входни данни, за да открият необработени сривове.
- Прекъснати потоци: анулиране, обновяване, изтичане на времето или загуба на връзка по време на транзакция.
Независимо от техниката, която води до случая, очакваният резултат трябва да бъде записан като контролиран, четлив неуспех – съобщение за валидиране, отхвърлено качване, чисто връщане назад – и никога просто като „системата не се срива“.
Плюсове и минуси на отрицателното тестване
Както всяка друга техника за тестване, отрицателното тестване има предимства и недостатъци, които зависят от това къде, кога и в каква степен се прилага.
Предимства на отрицателния тест
- Това защитава директно качеството на продукта, защото един качествен продукт е такъв, който няма уязвимости, които могат да бъдат използвани.
- Това разширява обхвата. Невалидните данни достигат до активна система умишлено или случайно, така че отрицателните случаи трябва да се наблюдават редом с положителни, за да има обхват смислен.
- Това повишава доверието на клиентите, преди дадена версия да бъде пусната на пазара.
- Той разкрива дефекти, до които положителното тестване структурно не може да достигне, като например необработени изключения и слаба валидация на входните данни.
Недостатъци на отрицателния тест
- В някои ситуации това е загуба на време и енергия. Ако приложението е създадено за един потребител, случаят със 100 едновременни потребители не си струва да се тества, така че изборът на правилните условия е от значение и някои системи се нуждаят от много малко отрицателни тестове.
- Изискват се квалифицирани и опитни хора, които да проектират кутиите.
- От гледна точка на клиента, това добавя разходи и може да забави издаването.
- Конкурира се за усилия. Екип, който харчи много за отрицателни тестове, може да се окаже, че не инвестира достатъчно в положителни тестове.
