Негативното тестване при тестването на софтуер е техника, с която се проверява как приложението ви реагира на неочаквано поведение или невалидни данни. Този тип тестване може да помогне на екипите за осигуряване на качеството да подобрят надеждността и стабилността на своя софтуер, като откриват изключения, които причиняват замръзване, срив или други нежелани резултати.
В тази статия ще разгледаме какво представлява негативното тестване на софтуера, защо е важно, както и някои от различните подходи, техники и инструменти, които можете да използвате за тази техника.
Какво представлява отрицателното тестване на софтуера?
Негативното тестване е техника за тестване на софтуер, при която системата умишлено се захранва с невалидни входни данни или неочаквани данни, за да се види как се справя с тези сценарии. Този подход, известен още като тестване за отказ или тестване на пътя на грешката, симулира разнообразен набор от реални сценарии, с които ще се сблъска приложението ви, като например потребители, които въвеждат невалидни дати или символи или използват определени функционалности по начин, който не сте предвидили.
При повечето видове тестване се използват валидни данни за тестване на дадено приложение. При негативното тестване обаче се използва различен подход, като се тестват перифериите и типичните входни данни и се проверява как приложението се справя с изключенията.
Важно е да тествате дали приложението ви работи по предназначение. Но от друга страна, разбирането на това, какво се случва, когато потребителите се отклонят от резервацията, също е жизненоважно, особено ако тези непреднамерени употреби водят до сривове, замръзване или други дефекти.
Разлика между положителен и отрицателен тест
тестване при тестване на софтуер
Както посочихме по-горе, при отрицателното тестване се използват неочаквани или невалидни данни, за да се провери поведението на дадена система. За разлика от тях положителното тестване използва очаквани или валидни данни, за да провери дали системата работи според очакванията.
С други думи:
- Положителното тестване ви помага да разберете дали приложението ви работи по план.
- Негативното тестване определя дали приложението ви може да се справи с неочаквани събития.
Ако искате да тествате стриктно своето приложение, са необходими както положителни, така и отрицателни тестове при тестването на софтуер.
Защо отрицателното тестване на софтуера е жизненоважно?
Когато разработчиците създават софтуер, те имат ясна представа как се очаква потребителят да използва софтуера. Потребителите обаче не винаги спазват правилата. Много често те се опитват да кликнат върху несъществуващи бутони, да въвеждат букви в полета с числа или да въвеждат данни, които просто не очаквате.
Негативното тестване има за цел да отчете тези крайни случаи, които не могат да бъдат открити чрез техники за позитивно тестване, като например
unit
,
система
или
интеграционно тестване
. Изисква се нестандартно мислене, за да се измислят „криви топки“, които да се хвърлят към системата. Крайният резултат обаче е по-стабилно и надеждно приложение.
Каква е целта на отрицателните тестове
в тестването на софтуер?
Негативното тестване има сходни цели с тези на другите видове тестване на софтуер. А именно – за откриване на грешки, дефекти и уязвимости в дадено приложение. Той обаче играе специална роля при откриването на дефекти, които не могат да бъдат открити чрез използването на валидни данни. Ето някои от причините да възприемете подход на негативно тестване.
1. Разкриване на дефекти
Основната цел на отрицателното тестване при тестването на софтуер е да се открият дефекти, които са резултат от невалидни данни или неочаквани входни данни. Това позволява на тестерите да прилагат по-активен подход към откриването на грешки и да гарантират, че софтуерът отговаря на очакванията.
2. Сигурност
Неочакваните входове или невалидните данни могат да разкрият уязвимости в сигурността. Тестването и разрешаването на тези крайни случаи води до по-сигурно и надеждно приложение, като намалява възможността за злонамерени атаки, грешки при инжектирането или опити за неоторизиран достъп.
3. Обработка на грешки
Негативното тестване е полезно за валидиране на обработката на грешки. Става дума не само за осигуряване на стабилността на системата след сблъсък с неочаквани входове или данни, но и за начина, по който тя реагира на тези събития, като например изготвяне на съобщения за грешка, за да се гарантира, че крайният потребител знае, че данните са невалидни.
4. Подобряване на покритието на тестовете
Позитивното и негативното тестване при тестването на софтуер се допълват в голяма степен. И двете обхващат различни елементи на въвеждане на данни, което означава, че тестването е по-всеобхватно.
5. По-добър потребителски опит
Негативното тестване помага да се открие източникът на съобщения за грешки, сривове и други неочаквани поведения, които могат да окажат негативно влияние върху потребителското изживяване.
Разлика между положителен и отрицателен
тестване в софтуерното инженерство
Както споменахме по-горе, при негативното тестване се изпращат неочаквани или невалидни данни, за да се провери поведението на дадена система. От друга страна, при позитивното тестване се изпращат очаквани или валидни данни, за да се провери дали системата работи според очакванията.
Разликата между положителните и отрицателните тестове включва:
1. Цели:
Позитивното тестване проверява дали софтуерът работи по предназначение; негативното тестване има за цел да разбере какво се случва при непредвидени сценарии.
2. Данни:
При положителното тестване се използват валидни данни, а при отрицателното – невалидни входни данни, екстремни стойности и неочаквани формати.
3. Фокус:
Позитивното тестване се фокусира върху успешните сценарии, докато негативното тестване е по-скоро насочено към неуспешните сценарии.
Различни видове отрицателни тестове
Негативното тестване е понятие, което обхваща няколко различни подхода за потвърждаване на качеството и целостта на дадено приложение. Ето седем вида отрицателни тестове, които трябва да познавате.
#1. Изпитване на гранични стойности
Тестването на гранични стойности има за цел да тества софтуера с входове, които са на границите или в краищата на входния обхват. Той тества както максималните, така и минималните очаквани стойности, но също така тества и стойности, които са малко над тези стойности.
Пример: Полето за въвеждане приема числа от 1 до 9. Тестът за гранична стойност ще въведе 1 и 9, но също така ще тества 0 и 10.
#2. Тестване на входната стойност
Тестването на входните стойности определя как системата ще реагира на неочаквани или невалидни входни данни. Някои от входните данни, които ще бъдат тествани, включват:
- Неправилни типове данни
- Стойности извън обхвата
- Специални символи
- Празни полета.
Пример: В полето за въвеждане се изисква само число, затова при теста ще се въведе буква и ще се види как ще реагира системата.
#3. Тестване на натоварването
Тестване на натоварването
помага на тестващите да преценят как системата ще реагира при силен стрес или натоварване, като например големи масиви от данни или големи обеми трафик.
Инструменти за автоматизация на тестването
могат да симулират тези екстремни условия, за да разберат как системата реагира при натоварване.
Пример: Тестерът ще симулира хиляди потребители, които имат едновременен достъп до даден уебсайт.
#4. Тестване на изключения
При този тип тестване се изследва как системата ще реагира на извънредни събития или грешки. Някои от тестовете включват
- Симулиране на сривове на системата
- Неуспехи на мрежата
- Грешки в базата данни
- Проблеми с дисковото пространство
- Липсващи файлове.
Пример: Тестът може да изследва какво се случва, когато потребителят изтегля файл от приложението и интернет е прекъснат.
#5. Тестване на сигурността
Тестването на сигурността използва подход на отрицателно тестване, за да се подчертаят и разберат уязвимостите в софтуера, които могат да бъдат разкрити чрез невалидни или неочаквани входни данни. При този подход се проверяват често срещани атаки, като например:
- Инжектиране на SQL
- Скриптиране на кръстосани сайтове (XSS)
- Препълване на буфера.
Пример: Тест за сигурност може да се опита да инжектира злонамерен код в поле за въвеждане на данни от потребителя.
#6. Тестване на потребителския интерфейс
Този вид тестване се фокусира върху грешките, които възникват при взаимодействието на потребителя със софтуера. Някои от нещата, които се опитва да определи, включват:
- Неочаквани отговори на взаимодействията с потребителя
- Неправилни съобщения за грешки
- Проблеми с навигацията
Пример: Тестът ще изследва какво се случва, когато определени действия се изпълняват не в тяхната последователност.
#7. Тестване на целостта на данните
Тестването на целостта на данните гарантира, че данните остават точни и последователни при различни операции в приложението. Някои от тестваните неща включват:
- Потенциални повреди на данни
- Сценарии за загуба на данни
- Непреднамерени модификации на данни
Пример: Тестът ще провери дали данните остават същите след предаване.
Както виждате, има много различни подходи за отрицателно тестване. Общото между тях е използването на неочаквани входни данни или невалидни данни, за да се види как приложението работи при нетипични условия.
Предимства на отрицателните тестове
Негативното тестване се състои в това да разберете как работи вашето приложение при възникване на неочаквани ситуации. Ето някои от основните предимства на този подход.
- Тя ви помага да разберете въздействието, което неочакваните входни данни или невалидните данни ще окажат върху вашето приложение. Ще се срине ли? Изписва неточно съобщение за грешка?
- Негативното тестване е част от отговорния подход за осигуряване на качеството, тъй като има за цел да идентифицира слабостите в системата.
- Негативното тестване подлага софтуера на изпитания, като тества реакцията му при непредвидени или неочаквани сценарии, с които ще се сблъска в реални условия.
- Негативното тестване отново е съществен компонент на задълбочения подход към сигурността, тъй като то разкрива потенциалните вектори на атака, от които кибератаките могат да се възползват.
Недостатъци на отрицателните тестове
Негативните тестове предлагат много предимства, но имат и някои недостатъци, които трябва да бъдат преодолени.
- Задълбоченото отрицателно тестване може да изисква допълнителен хардуер и софтуер, което може да увеличи разходите за тестване. За екипите, които разполагат с ограничен бюджет, това може да се окаже неблагоприятно.
- Негативното тестване може да отнеме доста време, тъй като изисква създаването на много тестови случаи, които да обхванат различните пермутации на входни данни, с които софтуерът ще се сблъска в производството.
- Съществуват ограничения за броя на непредвидимите ситуации, които можете да покриете с отрицателни тестове. Всъщност някои ситуации могат да бъдат толкова неочаквани, че тестерите да не могат да ги разгледат.
- Автоматизирането на отрицателни тестови случаи е предизвикателство. С подходящия софтуер, като например ZAPTEST, обаче процесът е много по-лесно управляем.
Предизвикателства при отрицателни тестове
Негативното тестване е от решаващо значение, ако искате да създадете стабилен и надежден софтуер, който да издържи на натоварванията и напрежението при взаимодействие с потребителите. Въпреки това има някои предизвикателства при прилагането на този подход, които трябва да се имат предвид.
Нека да разгледаме някои от най-сериозните предизвикателства.
1. Идентифициране на негативни сценарии при тестване на софтуер
Достатъчно покритие:
Едно от най-големите предизвикателства при негативното тестване е да се гарантира, че са обхванати достатъчно неочаквани сценарии. Съществуват много негативни сценарии и варианти, така че разглеждането на всички тях изисква творчески подход към представянето на начина, по който вашите потребители ще взаимодействат със софтуера.
Определяне на приоритети:
При толкова много потенциални негативни сценарии, които трябва да се поставят под микроскоп, тестващите не винаги са сигурни откъде да започнат. Някои солидни критерии за оценка на приоритетите включват прогнозиране:
- Ситуации с висока вероятност за дефекти
- Тежестта на резултата от дефектите.
2. Проектиране на подходящи отрицателни тестови случаи
Валидиране на входните данни:
Проектирането на солидни отрицателни тестови случаи изисква доста задълбочено разбиране на поведението, архитектурата и ограниченията на вашата система. Тестването на софтуера изисква използването на внимателно обмислени входни данни и информация. Макар че случайният подход може да ви помогне да разкриете някои дефекти, той бледнее в сравнение с по-прецизния и систематичен подход към отрицателното тестване.
Разнообразие на данните:
В зависимост от особеностите на вашата система може да се наложи да тествате с доста разнообразен набор от данни. Всъщност има много различни формати на данни, като числа, текст, дати и т.н., всеки от които може да бъде приет от вашето приложение. Предизвикателството тук е свързано с проектирането на тестови случаи, които могат да отчитат всеки формат и по-специално всеки вариант на невалидни данни. Тази ситуация може да отнеме доста време на екипите за тестване.
3. Ефективност и автоматизация на тестовете
Отнема много време:
Положителното тестване има за цел да валидира софтуера спрямо очакваните резултати. От друга страна, негативното тестване трябва да се занимава с неочаквани неща и да изследва потенциални сценарии. Преминаването през неизследвана територия отнема повече време. В резултат на това, ако искате да получите изчерпателни резултати, които се получават при отрицателни тестове, трябва да сте готови да инвестирате няколко допълнителни часа.
Сложност на автоматизацията:
Негативните тестове могат да отнемат много време и ресурси. В този смисъл това е идеална работа за автоматизация на софтуерни тестове. Въпреки това има някои трудности, които трябва да бъдат преодолени. Например за проектирането на тестови случаи, които определят очакваните резултати при неочаквани входни данни, са необходими известен опит и ноу-хау. Освен това съществуващата рамка за тестове за автоматизация може да не поддържа невалидните данни, които искате да изпратите на приложението си, което добавя още един слой сложност.
4. Оценка на резултатите
Фалшиви положителни резултати:
Калибрирането на тестовете, за да се осигури задоволителен баланс между точност и изчерпателност, е познат проблем за отрицателните тестери. В някои ситуации прекалено чувствителната обработка на грешки погрешно бърка валидни входни данни с отрицателни входни данни, което води до загуба на време за проблеми, които не са от значение.
Двусмислени резултати:
Когато една система получи невалиден вход, това може да доведе до сривове, грешки или замръзване. В много случаи това е сигурен признак за грешка. В други случаи обаче това е доказателство за необработен краен случай, който разработчиците не са взели предвид. Разграничаването на тези отделни ситуации е важно, но изследването на истинската причина отнема много време.
Управление на данните:
Отрицателните тестове изискват значително количество данни. Тази информация за тестване трябва да се генерира и поддържа. При сценарии за разработка с кратки срокове това е допълнителна работа, която трябва да се вземе предвид.
5. Организационни въпроси
Липса на експертен опит в областта на отрицателните тестове:
Въпреки че негативното тестване е популярно, много от тестващите нямат умения и опит за цялостно прилагане на този вид тестване. Проектирането на определени отрицателни тестови случаи е по-малко интуитивно от техния положителен еквивалент. Нещо повече, внедряването на автоматизация на тестовете може да се окаже предизвикателство, ако не разполагате с подходящите експертни познания.
Бизнес натиск:
Заинтересованите страни, тестващите и ръководството трябва да разберат важната роля, която отрицателното тестване играе при разработването на надеждни приложения. Неспособността да се оцени значението му може да доведе до натиск за съсредоточаване върху положителните тестове за сметка на отрицателните.
Ясно е, че има няколко предизвикателства пред екипите, които искат да отключат ползите от негативното тестване. С правилния подход и подходящите инструменти за тестване на софтуер обаче можете да преодолеете тези проблеми и да създадете софтуер, който надхвърля очакванията на потребителите.
Как да пишем отрицателни тестови случаи за тестване на софтуер
Писането на отрицателни тестови случаи за тестване на софтуер изисква известен опит и творческо мислене. Ето ръководство стъпка по стъпка, което ще ви помогне да изградите тези важни тестови случаи.
#1. Определете целите си
Преди да напишете отрицателните тестови случаи за тестване на софтуер, трябва да разберете защо искате да извършите отрицателно тестване. Не всички приложения се възползват от отрицателното тестване.
Затова разберете какво искате да постигнете. Негативното тестване има за цел да открие грешки и сривове, които са резултат от неочаквани сценарии или условия на взаимодействие с потребителя.
#2. Очертаване на потенциални негативни сценарии
На следващо място, трябва да си дадете сметка за негативните сценарии, които могат да възникнат при взаимодействието на потребителите с вашия софтуер. Проучването на този етап е от решаващо значение. Някои области, които трябва да проучите, са:
- Системни изисквания
- Типични случаи на употреба
- Характеристики и функции на приложението
Проучете тези ситуации и съставете списък на сценариите, при които приложението може да не функционира според вашите намерения.
След това разгледайте сценариите за валидиране на критични данни. Обикновено това включва формуляри за въвеждане на данни, полета за вход и т.н.
И накрая, вземете предвид безбройните нестандартни начини, по които потребителите могат да взаимодействат с вашия софтуер, и неочакваните събития, които могат да доведат до неблагоприятни резултати, като прекъсване на връзката с мрежата, внезапно изключване на системата, масивно прехвърляне на данни и т.н.
След като сте документирали възможно най-много сценарии, е време да определите очакваните резултати от тези неочаквани сценарии.
#3. Очертайте очакваните резултати
Всеки тестови случай трябва да има очакван резултат и отрицателният тестови случай не е по-различен. Най-добрата практика тук е да напишете всеки негативен сценарий и да определите какъв трябва да бъде резултатът.
Някои от потенциалните резултати могат да включват:
- Точни и информативни съобщения за грешки
- Подходящи пренасочвания
- Плавна работа със системата, например предотвратяване на замръзване или срив на системата.
#4. Изберете входове за тестване
Сега е време да видите кои входове трябва да тествате. Тези входове трябва да са тези, които е най-вероятно да предизвикат грешка или друго негативно поведение.
Някои данни, които трябва да включите, са:
- Стойности извън обхвата (отрицателни стойности в поле за възраст и др.)
- Невалидни данни (букви в цифрово поле и др.)
- Неочаквани символи или знаци
- Специални символи
- Липсващи данни
#5. Напишете тестовите си случаи
След като сте събрали всички сценарии, е време да напишете тестовите случаи. Сега, при отрицателното тестване, има почти неограничен брой тестови случаи, които можете да напишете. В края на краищата този тип тестване цели да установи какво се случва, когато хората използват софтуера по начин, който не сте предвидили. Въпреки това сроковете налагат да съкратите списъка с потенциални случаи до ситуациите, които е най-вероятно да предизвикат проблеми.
Както винаги, пишете тестовите си случаи на ясен, кратък и обективен език. Тук няма място за двусмислие.
Ето един добър формат за отрицателните тестови случаи.
- Използване на идентификатор на тестовия случай
- Опишете точно какво се тества
- Отбележете всички предварителни условия за отрицателния тест
- очертайте набора от стъпки
- Определяне на ясни и обективни резултати
- Запишете действителния резултат от теста
#6. Планиране на теста
Сега трябва да планирате тестовете си. Отново е важно да се даде приоритет на сценариите, които имат най-сериозни неблагоприятни последици, като например катастрофи, или при които е най-вероятно да бъдат разкрити проблеми.
Примерен отрицателен тестови случай
Ето един пример за отрицателен тестови случай.
Идентификатор на тестовия случай: TC001
Описание: Проверете дали се показва съобщение за грешка, ако потребителят въведе невалиден имейл адрес
Предварителни условия: Потребителят трябва да се намира на страницата за вход в приложението
Стъпки: 1. Въведете невалиден имейл адрес. 2. Натиснете „Вход“
Очаквани резултати: Когато потребителят натисне бутона „Влез“, се появява съобщение за грешка, което гласи „въведен неправилен имейл адрес“.
Резултат: Запишете какво се е случило, когато е избрано „Вход“.
Примери за негативни сценарии при тестване на софтуер
Ето някои типични сценарии, които можете да проверите с помощта на методи за отрицателно тестване.
1. Типове данни и полета
Ако сте попълвали формуляр онлайн, знаете, че тези полета са настроени да приемат определени видове данни. Някои от тях са само числа, а други приемат дати, текст или други видове данни.
Негативните тестове за тези полета включват изпращане на невалидни данни, например въвеждане на букви в цифрово поле.
2. Задължителни полета
И тук задължителните полета са често срещани характеристики на формулярите и приложенията. Те са удобен инструмент, който гарантира, че цялата важна информация е събрана, преди потребителят да премине към следващия етап.
Добър тестови случай за тези сценарии е да се види какво се случва, когато тези полета са оставени празни. В идеалния случай трябва да се задейства съобщение за грешка, което да призове потребителя да попълни задължителното поле.
3. Подходящ брой символи
Ако тествате приложение от уеб страници, може да имате поле за данни, което изисква ограничен брой символи. Това може да се отнася за потребителски имена, телефонни номера, регистрационни номера и т.н.
Можете да създадете отрицателни тестови случаи за тези полета, като напишете тестове, които въвеждат повече от максимално допустимите символи, за да видите как ще реагира приложението.
4. Граници и ограничения на данните
Някои формуляри имат полета с фиксирани граници. Например, ако искате някой да оцени нещо със 100 точки, границите на данните ще бъдат 1-100.
Създайте отрицателен тестови случай, в който се опитвате да въведете 0, 101 или други отрицателни или положителни стойности от 1 до 100.
Най-добри практики за отрицателно тестване
Съществуват няколко най-добри практики за осигуряване на висококачествено отрицателно тестване. Ето няколко съвета, които ще ви помогнат да го постигнете.
1. Дефинирайте невалидните си входове:
Прегледайте документацията за разработката, случаите на употреба и потребителския интерфейс/УС, за да разберете и идентифицирате потенциални невалидни данни. Следете за невалидни типове данни, екстремни стойности, липсващи данни, празни полета, неочаквани формати и др.
2. Използвайте анализ на граничните стойности:
Както беше споменато по-горе, очертайте граничните стойности, за да откриете крайни случаи, които могат да предизвикат неочаквани реакции.
3. Разделяне на служителите по еквивалентност:
Разгледайте входните си домейни и ги разделете на еквивалентни дялове от валидни и невалидни стойности. Този процес помага да се намали броят на тестовите случаи, които ще трябва да напишете, защото ако еквивалентна част от невалидни данни създава проблеми за един вход, тя вероятно ще бъде представена в целия клас.
4. Имитиране на лоши потребители:
Положителното тестване проверява очакваното поведение на потребителя. Негативното тестване изследва какво се случва, когато хората използват приложението ви неправилно. Затова помислете за различните сценарии, при които това може да се случи, и ги възпроизведете в тестовите си случаи.
5. Позволете на риска и въздействието да направляват вашето тестване:
Никой тестер не разполага с неограничено време. В някакъв момент ще трябва да направите труден избор, защото не можете да тествате (или дори да знаете) всеки неочакван изход. Когато трябва да решите кои видове отрицателни тестове да проведете, дайте приоритет на областите, които ще доведат до най-голям риск или отрицателно въздействие върху вашия продукт.
6. Проверка на обработката на грешки:
Уверете се, че обработката на грешки е част от тестовете ви, като проверявате дали съобщенията за грешки са полезни и точни.
7. Автоматизирайте възможно най-много:
Автоматизацията умее да се справя с обикновени и повтарящи се задачи. Въпреки това отрицателното тестване все още изисква ръчен подход за проучвателно тестване и откриване на крайни случаи.
Най-добрите инструменти за отрицателно тестване за 2024 г.
Въпреки че отрицателното тестване на софтуер е често срещано в индустрията, липсват отделни инструменти за тази работа. Голяма причина за това е универсалният характер на отрицателните тестове. Нещо повече, много от същите инструменти, които се използват за положително тестване, работят и за отрицателно тестване, когато коригирате входните данни.
ZAPTEST е най-добрият инструмент за отрицателно тестване поради своята гъвкавост и модулност. Той е лесен за използване и персонализиране, а благодарение на възможностите за работа с различни платформи и приложения предлага гъвкавост, която трудно може да бъде надмината.
Тестване, базирано на данни, и
тестване с мутации
правят ZAPTEST идеален за отрицателни тестове. Нещо повече, благодарение на RPA функции, можете да симулирате реални потребители, да използвате повторно тестове и да изготвяте отчети и документация с лекота. Накратко, способността на ZAPTEST да работи с най-съвременните софтуери за автоматизация на софтуера и автоматизация на роботизирани процеси го прави универсално средство за всяка задача за автоматизация, включително отрицателно тестване.
Заключителни мисли
Негативното тестване при тестването на софтуер помага на екипите да разберат как тяхното приложение ще се справи с неочаквани входове и невалидни данни. Докато при положителното тестване се проверява дали софтуерът ви функционира по предназначение, отрицателното тестване на софтуера ви помага да разберете какво се случва, когато потребителите избират входни данни и данни неправилно. И двата подхода са важни, ако искате да създадете солидно и надеждно приложение, което да може да се справи с напрежението и натоварването при разнообразното взаимодействие с потребителите.