Към съдържанието
wannacode

Класове на еквивалентност

Накратко: Стойностите, с които правилото се държи еднакво, са клас на еквивалентност. 30 € и 40 € са един клас за доставката: ако едната сума е наред, и другата е. Затова от всеки клас стига един тест. Покритието е колко от класовете са тествани. Невалидните класове се тестват поотделно, за да не се крие една грешка зад друга.

Проблем

Двайсет теста, една идея

Тестерът получава правилото за доставката и пише тестове: количка за 5 €, 10 €, 15 €, 20 € и така до 45 €. После 55 €, 60 € и така до 100 €. Двайсет теста, всичките минават.

След пускането клиент натиска „Поръчай“ с празна количка и му излиза поръчка за 0,00 € с доставка 4,90 €.

Двайсетте теста проверяваха две неща: платена доставка и безплатна доставка. Десет пъти всяко. Третото нещо, празната количка, не провери никой.

Идеята

Техники на черната кутия

Изчерпателното тестване е невъзможно. Сумите в количката са милиони. Нужен е начин да се изберат малко тестове, които казват много. Това е тестовият дизайн, и този модул е за неговите техники.

Първите четири са техники на черната кутия (black-box): тестовете идват от правилото, от спецификацията, а не от кода. Тестерът вижда входа и изхода. Какво има вътре, не му трябва.

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

После идват техниките на бялата кутия (от кода) и тези, базирани на опит.

Идеята

Един клас, един тест

Правилото: „Доставката е безплатна от 50,00 € включително, иначе е 4,90 €. Празна количка не се поръчва.“

То дели сумите на групи, с които се държи еднакво:

Клас Суми Поведение
празна количка 0 € отказ
платена доставка от 0,01 до 49,99 € 4,90 €
безплатна доставка от 50,00 € нагоре 0,00 €

Всяка група е клас на еквивалентност (equivalence partition). Ако системата смята правилно 30 €, почти сигурно смята правилно и 40 €. Затова от всеки клас стига един тест, представител на класа.

Колко от класовете са тествани, е покритието на класовете. Двайсетте теста от началото имаха покритие 2 от 3. Три теста, по един от клас, имат 3 от 3.

Пробвай

Кое е един клас?

1. Количка за 30 € и количка за 40 €. Колко класа са това за правилото на доставката?
2. Колко класа има правилото „безплатна от 50,00 € включително, иначе 4,90 €, празна количка не се поръчва“?
3. Количка за 50,00 € и количка за 1000 €. В един клас ли са?
4. Количка за -10 €. Какво е това?

Идеята

Таблицата с тестови случаи

В задачите по-долу пишеш тестови случаи като таблица: вход и очакван резултат на ред. „Пусни“ ги пуска срещу две неща:

  • правилната система, където всеки ред трябва да мине: ако не мине, очакваното ти е грешно;
  • версии на магазина с по една грешка, каквито се срещат в истинските магазини. Добрият набор тестове пада на всяка от тях.

Отговорът казва колко грешки хващаш и къде да търсиш останалите, не кой ред да добавиш.

Празна клетка в очакваното не се проверява. Сумите се пишат като 49,99, а „Отказ“ е „да“ или „не“.

Пробвай

Класовете на доставката

Напиши по един тест за всеки клас на правилото за доставката. Колкото по-малко редове, толкова по-добре.

Правилото: Доставката е безплатна при поръчка от 50 € включително, иначе е 4,90 €. Празна количка не се поръчва.

ВходОчакваноПравилната система
#Сума на количкатаОтказДоставка

Празна клетка за резултат не се проверява. Сумите се пишат като 49,99.

Идеята

Валидни и невалидни класове

Класовете са два вида. Валидните са стойностите, които правилото обработва. Невалидните са тези, които системата трябва да откаже: отрицателна сума, отрицателен брой бройки, текст вместо число.

Когато входовете са няколко, всеки има свои класове. Лимитът в количката („най-много 10 бройки от продукт, добавя се поне 1 бройка“) има два входа: колко има в количката и колко се добавят. Класовете на резултата са три:

  • добавянето е прието: 2 в количката, добавям 3, стават 5;
  • отказ, защото става повече от 10: 5 в количката, добавям 8;
  • отказ, защото количеството е невалидно: добавям -2 или 0.

И едно правило за невалидните: по един на тест. Ако един ред е едновременно с -2 бройки и с 15 в количката, системата ще откаже. Но заради кое? Ако проверката за отрицателно число липсва, тестът пак минава, защото лимитът е спасил положението.

По-точно, за любопитните

ISTQB CTFL v4.0.1 описва техниката в раздел 4.2.1 (equivalence partitioning). Покритието се мери като брой тествани класове върху всички класове, в проценти. Когато входовете са няколко, най-простото мерило е Each Choice coverage: всеки клас на всеки вход е тестван поне веднъж. То не изисква всички комбинации между входовете. Комбинациите са тема на таблиците на решения и на тестването по двойки.

Класовете не са само за входовете. Делят се и изходите (прието, отказано), и времената (преди срока, след срока), и всичко, с което правилото се държи различно.

Упражнение

Класовете на лимита

1. Лимитът в количката. Тук входовете са два, а класовете са по резултата.

Напиши по един тест за всеки клас: прието, отказ заради лимита, отказ заради невалидно количество. Провери и какво остава в количката.

Правилото: В количката може да има най-много 10 бройки от един продукт. Добавяне над 10 се отказва със съобщение, а количката остава същата. Добавя се поне 1 бройка.

ВходОчакваноПравилната система
#В количкатаДобавямОтказВ количката след това

Празна клетка за резултат не се проверява. Сумите се пишат като 49,99.

Идеята

Какво не вижда черната кутия

Класовете идват от правилото. А правилото не казва всичко за кода.

Да кажем, че в кода е останал ред от старата тарифа: „от 100 € доставката пак е 4,90 €“. За правилото 80 € и 150 € са един клас. За кода са два. Тестът с 80 € ще мине, и грешката ще остане.

Черната кутия не може да види клас, който съществува само в кода. Затова има и други техники: бялата кутия гледа кода, а опитът подсказва къде такива неща обикновено се крият. А на границата между класовете, където грешките са най-гъсти, е следващият урок.

Тест

Провери се

1. Какво е клас на еквивалентност?
2. Тестовете за доставката са 10, 20, 30 и 40 €. Какво е покритието на класовете?
3. Защо невалидните класове се тестват по един на тест?
4. Защо техниката е на черната кутия?
5. Какво не може да хване тази техника сама?

Създаден от Иво Гергов като част от кампанията на Evo Tech за достъпно обучение по програмиране ·