Разделянето по еквивалентност при тестването на софтуер е техника за тестване „черна кутия“, която ви помага да изградите ефективни тестови случаи, без да правите компромис с покритието на тестовете.
В тази статия ще разгледаме какво представлява разделянето на класове на еквивалентност, защо е полезно и ще разгледаме някои от процесите и подходите, които можете да използвате, за да разкриете предимствата на тази техника.
Какво е разделяне на класове на еквивалентност
в тестването на софтуер?
Всеки софтуер има определени условия за въвеждане. В контекста на тестването на софтуер тези входни условия описват стойностите или данните, които тестерът трябва да използва, за да провери качеството и функционалността на своя софтуер. Тези входни данни могат да бъдат най-обикновени – от кликване с мишката до текст и числа.
Еквивалентното разделяне при тестването на софтуер изследва различните входове, необходими за използването на софтуера, и ги групира в класове на еквивалентност, т.е. множества от входове, които ще имат еквивалентен ефект върху поведението на софтуера.
Ако знаете как ще се държи всяка група входове, не е необходимо да тествате всеки представител на групата. В този смисъл разделянето на класове на еквивалентност е чудесен начин да се помогне на тестващите да намалят честотата на излишните тестове. В свят на свръхконкуренция и все по-кратки срокове за разработване на софтуер, спестяването на време и усилия в жизнения цикъл на софтуерното тестване (STLC) е от решаващо значение.
И накрая, струва си да се отбележи, че тестването за еквивалентност е техника за тестване на черна кутия. Накратко, това означава, че не е необходимо тестерите да познават вътрешния код на програмата или нейните вътрешни механизми. Тестовете се основават на входове, изходи и външно поведение. Поради това тези тестове са силно фокусирани върху поведението на потребителя по време на работа с програмата.
1. Разделяне на еквивалентност при тестване на софтуер накратко
Разделянето по еквивалентност разделя входните данни за тестване на софтуер на два лагера: валидни и невалидни входни данни. Стойностите във всеки дял трябва да предизвикват едно и също поведение на софтуера. Например:
- Ако условието на една стойност в дял А е вярно, то трябва да е вярно и за другите стойности в дял А.
- По същия начин, ако условията на една стойност в дял А са неверни, другите стойности в дял А също трябва да са неверни.
В контекста на тестването всеки дял трябва да бъде обхванат поне веднъж. Логически това означава, че ако един вход в дял А се провали, всички останали входове също ще се провалят. Този процес би трябвало да спести време, тъй като вместо да тестват всеки вход, който се намира в дял А, тестващите могат да тестват само един и да екстраполират резултата въз основа на общите му характеристики.
2. Защо е важно тестването на класове на еквивалентност при тестването на софтуер
Преди да се запознаем с преките ползи от тестването на класове на еквивалентност при тестването на софтуер, трябва да определим защо този подход е важен.
Всички тестери разбират, че тестването на софтуер изисква компромиси. Времето и бюджетите са ограничени, което означава, че тестващите трябва да се възползват максимално от ресурсите си. Разделянето на еквивалентността при тестване на софтуер помага на екипите да намерят баланс между ефективността и надеждността при тестването чрез намаляване на броя на входните данни.
Предимства на разделянето по еквивалентност
в областта на софтуерното тестване
Еквивалентното разделение при тестването на софтуер е предпочитано от екипите за тестване по различни причини. Ето някои от най-убедителните.
1. Ефективност
Голямото предимство на тестовете за еквивалентно разделяне се състои в тяхната ефективност. Когато тестващите използват разделяне по еквивалентност, те могат да намалят броя на необходимите тестови случаи, без да правят компромис с покритието на тестовете. Избирайки входен случай от всеки клас на еквивалентност, тестващите могат да се чувстват сигурни, че разбират как работи техният софтуер при различни входове.
2. Простота
Друго голямо предимство на еквивалентното разделяне на тестовете за софтуер е простотата. Разбиването на разнообразния набор от входни данни на валидни и невалидни данни означава, че планирането на тестовете е много по-просто. Тестването на всеки вход поотделно изисква много документация и координация. Съкращаването на това до един представителен пример оптимизира процеса на тестване.
Разширено покритие
Използването на класове на еквивалентност при тестването също така ви позволява да използвате времето за тестване по-ефективно. Намаляването на тестовите входове на класове означава, че можете да тествате по-обстойно всеки клас. Този всеобхватен подход би бил направо невъзможен, ако тествате всеки вход поотделно. Разделянето по еквивалентност позволява на екипите да се задълбочат и да тестват валидни и невалидни данни, крайни случаи, гранични стойности и др.
3. Възможност за повторна употреба
Първоначалното време, което инвестирате в създаването на всеки клас на еквивалентност при тестването на софтуер, се изплаща, ако използвате тези класове повторно за бъдещи входни тестове. Макар че не всички дялове ще бъдат подходящи за бъдещи тестове, тези, които са, ще ви спестят много време при бъдещи проекти или дори при регресионни тестове.
Недостатъци на разделянето по еквивалентност
в областта на софтуерното тестване
Въпреки че разделянето по еквивалентност предлага някои големи предимства, то не е идеалното решение за всеки сценарий. Нека разгледаме някои от ограниченията му.
1. Ред за въвеждане
В определени ситуации редът на въвеждане е важна част от тестването на функционалността на дадено приложение. Това не е нещо, което можете да намалите с помощта на еквивалентно разделяне. Тестерите трябва да се съобразяват с тези ситуации и да използват алтернативни техники, за да осигурят добро покритие.
2. Сложни входни зависимости
Сложният софтуер със сложни входни зависимости е друга област, в която се проявяват ограниченията на разделянето по еквивалентност. Например софтуер, който извежда изчисления въз основа на различни входни данни. При този сценарий тестерите ще трябва да използват различни техники, за да намалят комбинаторната експлозия и да увеличат вероятността за изолиране на дефекти.
Алтернативни подходи за допълване на
ограничения на изпитването за еквивалентност
Въпреки че тестването с еквивалентно разделяне е подходящо за много сценарии на тестване, изключително сложният софтуер със сложни зависимости между входните стойности може да изисква допълнителни подходи.
Когато става въпрос за писане на тестови случаи за сложен софтуер, използването на комбинация от тези подходи е добра идея.
1. Тестване по двойки
Тестването по двойки е техника за тестване на софтуер, при която се тестват всички възможни комбинации на всяка двойка входни параметри. Този подход гарантира, че всяка двойка параметри е тествана заедно поне веднъж.
2. Тестване на таблицата с решения
Таблицата за решения помага на тестващите методично да очертаят различни комбинации от входни данни. Това е добър начин за осигуряване на систематично покритие при наличие на сложни зависимости.
3. Тестване на прехода между състоянията
Този тип тестване измерва как софтуерът преминава между различни състояния в отговор на различни комбинации от входни данни.
4. Тестване на базата на модели
Този подход изисква създаването на модел, основан на вътрешната логика на софтуера, и използването на инструмент за автоматизация за създаване на тестови случаи въз основа на този модел. Тази техника се справя отлично със сложността и осигурява подходящо покритие.
Примери за тестване на разделяне на класове на еквивалентност
Най-добрият начин да разберете разделянето по еквивалентност е да разгледате как и къде можете да използвате клас по еквивалентност при тестване на софтуер. Ето няколко примера, които ще ви помогнат да си представите концепцията.
1. Пример за изпитване на разделяне на класове на еквивалентност № 1
Формуляр за онлайн поръчка е добър пример за клас на еквивалентност при тестване на софтуер.
Да речем, че създавате приложение за онлайн търговец на стационарно оборудване. Има типичен формуляр за поръчка на кочани с хартия А4. Ето как можете да използвате класове на еквивалентност, за да тествате тази форма.
Класове на еквивалентност:
Количествата хартия А4 са в определен диапазон, например от 1 до 100. И така, трите класа са:
- 1 до 100
- Числа под 1
- Числа над 100.
Тестови случаи:
Трябва да се изпълнят три тестови случая със следните очаквани резултати
- Всяко число между 1 и 100 = обработена поръчка
- Числа под 1 = съобщение за грешка
- Числа над 100 = съобщение за грешка
2. Пример за тестване на разделяне по еквивалентност № 2
Класът на еквивалентност при тестването на софтуер може да се занимава не само с числа. В този пример ще разгледаме как можете да използвате същия принцип за проверка на портал за качване на файлове. Да речем, че трябва да тествате за сайт, който изисква от потребителите да качват документи за самоличност, но може да приема само определени формати.
Класове на еквивалентност:
- Поддържаните документи са PDF и JPEG.
- Неподдържаните документи са всички други формати на документи
- Няма документ
Тестови случаи:
- Тест чрез качване на PDF или JPEG = успешно качване
- Тест чрез качване на неподдържан формат = съобщение за грешка
- Тест без качване на файлове = съобщение за грешка
Как да приложим разделяне по еквивалентност
подход за тестване на софтуер
Ако искате да използвате класове на еквивалентност при тестване, трябва да приложите стратегически подход. Ето едно полезно ръководство стъпка по стъпка за прилагане на разделяне по еквивалентност при тестване на софтуер.
Стъпка № 1: Определяне на входните променливи
Всеки софтуер реагира на различни входни променливи. При сложния софтуер тези променливи могат да бъдат огромни. Затова прегледайте изискванията и спецификациите на софтуера и определете всички променливи, които оказват влияние върху поведението на софтуера.
Някои от най-очевидните входни данни включват формуляри за въвеждане от потребителя. Въпреки това трябва да разгледате по-широк набор от данни за своя списък. Можете също така да вземете предвид променливите на околната среда, повикванията на API, вътрешните изчисления и т.н.
След това трябва да разберете различните видове променливи данни. Можете да категоризирате тези променливи като целочислени, булеви, низови и т.н., за да определите подходящи дялове.
И накрая, трябва да проучите ограниченията на входа. Това са неща като позволени символи, дефинирани формати и минимални/максимални стойности.
Стъпка 2. Определяне на валидни и невалидни дялове
Разгледайте всяка входна променлива и започнете да я разделяте според валидните и невалидните резултати. Това ще бъдат вашите класове на еквивалентност при тестването.
1. Валидни дялове
Валидните дялове могат да бъдат разделени на два класа.
Положителни класове на еквивалентност:
Стойности, които очаквате, че софтуерът ви ще обработва успешно. Например за софтуер, който записва оценки в проценти, е валидно всичко между 0 и 100.
Отрицателни класове на еквивалентност:
Тази категория ще бъде за стойности, които са извън границите на очакваното въвеждане, но които софтуерът ви трябва да обработи със съобщение за грешка. Например въведената стойност е 110 за процентна оценка, което кара софтуера да върне съобщение за грешка, гласящо: „Всички стойности трябва да са от 0 до 100“.
2. Невалидни дялове
Тези класове на еквивалентност ще включват входове, които ще предизвикат грешки или неочаквано поведение. В примера по-горе това може да включва опити за въвеждане на A+ или B или подобни данни в процентната оценка. Въпреки че тези данни могат да бъдат технически правилни, те са извън цифровите очаквания.
#3. Писане на ефективни тестови случаи
След това трябва да разработите тестови случаи, които да обхващат всеки дял на еквивалентност поне веднъж. Както беше споменато по-рано в статията, това осигурява подходящо покритие на тестовете.
Първо, трябва да изберете представителни стойности във всеки еквивалентен дял, които да обхващат както валидни, така и невалидни данни.
Съвети за писане на надеждни тестови случаи
- Помислете за граничните стойности: Уверете се, че сте тествали границите на разделите си. Минимален, максимален, включващ, изключващ и т.н., тъй като тези области са силни кандидати за грешки. Например, ако очакваните стойности на входа са между 0 и 100, тествайте за отрицателни стойности, както и за числа като 101.
- Обмислете положителни и отрицателни тестови сценарии за валидните и невалидните тестови случаи.
- Комбинираното тестване е добра идея. Използвайте няколко различни подхода, описани в нашите алтернативни подходи, за да допълните ограниченията на раздела за изпитване на еквивалентност по-горе.
- Документиране на причините, поради които входните стойности са разделени на определени дялове, и ясно очертаване на очакваното поведение на всеки тест.
- Където е възможно, използвайте визуални инструменти, за да внесете яснота и обективност в тестовите си случаи, като използвате диаграми или таблици, за да очертаете разделите си.
#4. Планиране и изпълнение на тестовите случаи
Приоритизирайте задачите си въз основа на фактори като:
- В кои области има най-голяма вероятност от дефекти
- Кои сценарии е най-вероятно да доведат до тежки сценарии, като сривове или замръзване.
След това изпълнете тестовете си и запишете резултатите и всички възникнали грешки. За сложни програми с много входни данни можете да използвате инструменти за RPA, за да имитирате действията на потребителя.
#5. Анализ на резултатите
Съберете събраните данни от тестовете и анализирайте резултатите. Някои от методите, които трябва да използвате, са:
- Разгледайте всеки тестови случай и сравнете действителните резултати с очакваните.
- Открийте всички несъответствия, проучете и докладвайте за грешки и дефекти.
#6 Допълнителни съвети
Макар че тези съвети няма да се прилагат във всеки случай, те ще се окажат полезни при тестване на сложен софтуер.
- Таблиците за решения са отличен начин за визуализиране на еквивалентните дялове и различните комбинации от входни данни, които може да искате да използвате.
- Можете да обединявате класове на еквивалентност, ако те имат почти идентично поведение, което допълнително оптимизира процеса на тестване.
- Използване на тестване на гранични стойности за подобряване на откриването на дефекти
- Когато е възможно, автоматизирайте тестовите случаи за разделяне на еквивалентност
Еквивалентно разделяне и анализ на граничните стойности
Разделянето по еквивалентност се основава на предположението, че всеки тест в рамките на разделянето ще даде един и същ резултат. Макар че това е вярно в много ситуации, невинаги е правилно. Например всички входове, които са били добавени към даден дял по погрешка, могат да останат непроверени, което води до намалено покритие и потенциална нестабилност на софтуера.
Решението на този проблем е тестването на граничните стойности. Тя позволява на екипите за тестване на софтуер да се съсредоточат върху областите, които най-вероятно съдържат рискове, и да тестват софтуера на тази основа. Накратко, той предлага рисковете да възникват най-вероятно по ръбовете или границите на входните дялове. Следователно тестерите могат да пишат тестови случаи в горната и долната граница на входовете в допълнение към другите тестови случаи на класа на еквивалентност.
Разделяне на еквивалентност и автоматизация със ZAPTEST
Инструментите за автоматизация на софтуерни тестове, като ZAPTEST, могат да помогнат на екипите да автоматизират разделянето на еквивалентността както по време на създаването, така и по време на изпълнението на тестовете.
Нека да проучим как ZAPTEST може да ви помогне да разкриете предимствата на този полезен подход за тестване на черна кутия.
1. Избор на инструменти
Изборът на правилния инструмент за работа е важен. Повечето инструменти за автоматизация на тестването са специализирани в уеб, мобилно или настолно тестване. ZAPTEST може да извършва тестване на различни платформи и приложения, което го прави солиден избор.
2. Написване и изпълнение на тестови случаи
ZAPTEST 1Script ви позволява да сканирате потребителския интерфейс, за да създадете автоматизация на тестовете. Освен това можете да сканирате и макети на приложения, ако сте в ранен етап на разработка. Използвайки функцията Scan GUI, ZAPTEST ще сканира всички тестови обекти и ще ги добави в списъка с обекти.
Оттук можете да добавяте обекти към диаграмата и да изграждате тестовите стъпки.
ZAPTEST ви позволява да автоматизирате писането на случаите с помощта на прост интерфейс за плъзгане и пускане. Не се нуждаете от опит в програмирането, за да създавате тестови случаи със ZAPTEST. Така че оттук можете да изберете съответната операция от падащ метод и да създадете тестови случай въз основа на входните стойности, необходими за вашия интерфейс. След това можете да създадете тестови случаи за всяка еквивалентност и да изпълните тестовите случаи. Можете дори да използвате повторно тестови случаи и да ги редактирате в редактора на стъпки, което спестява много време.
3. Отчитане и управление на тестови случаи
ZAPTEST ви позволява да изпълнявате тестови случаи паралелно, което спестява значително време. Това може да ви помогне да стартирате голям брой различни еквивалентни дялове наведнъж или да стартирате определени групи тестове.
Резултатите се събират лесно благодарение на подробните доклади за неуспешни/издържани тестове, снимки на екрани, дневници за изпълнение и показатели за производителност, свързани с всеки тестов случай.
4. Поддръжка на тестови случаи
Можете също така лесно да проследявате и поддържате тестовите си случаи благодарение на възможностите за качествен контрол на версиите. Нещо повече, потребителите на ZAPTEST могат да клонират и използват повторно тестове, за да постигнат ново ниво на ефективност.
ZAPTEST предлага много повече функционалности освен автоматизация на тестови случаи. С набор от RPA инструменти ZAPTEST предлага функционалност 2 в 1, запълвайки пропастта между DevOps и BizOps в едно бъдеще, белязано от хиперавтоматизация, където всичко, което може да бъде автоматизирано, ще бъде автоматизирано.
Заключителни мисли
Разделянето по еквивалентност е елегантно решение за ситуации, в които тестващите трябва да намерят баланс между ефективност и точност. Тъй като някои софтуери позволяват почти безкраен набор от входни данни, разделянето на класове на еквивалентност помага на екипите да разделят данните за тестване на управляеми, малки парчета, всяко от които може да бъде тествано обстойно.