Класове на еквивалентност
Накратко: Стойностите, с които правилото се държи еднакво, са клас на еквивалентност. 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.
Пробвай
Кое е един клас?
Идеята
Таблицата с тестови случаи
В задачите по-долу пишеш тестови случаи като таблица: вход и очакван резултат на ред. „Пусни“ ги пуска срещу две неща:
- правилната система, където всеки ред трябва да мине: ако не мине, очакваното ти е грешно;
- версии на магазина с по една грешка, каквито се срещат в истинските магазини. Добрият набор тестове пада на всяка от тях.
Отговорът казва колко грешки хващаш и къде да търсиш останалите, не кой ред да добавиш.
Празна клетка в очакваното не се проверява. Сумите се пишат като 49,99, а „Отказ“ е „да“ или „не“.
Пробвай
Класовете на доставката
Напиши по един тест за всеки клас на правилото за доставката. Колкото по-малко редове, толкова по-добре.
Правилото: Доставката е безплатна при поръчка от 50 € включително, иначе е 4,90 €. Празна количка не се поръчва.
| Вход | Очаквано | Правилната система | |||
|---|---|---|---|---|---|
| # | Сума на количката | Отказ | Доставка | ||
Празна клетка за резултат не се проверява. Сумите се пишат като 49,99.
Решение
| Сума на количката | Отказ | Доставка |
|---|---|---|
| 0 | да | |
| 30 | не | 4,90 |
| 80 | не | 0 |
Три реда, три класа: 0 € (отказ), 30 € (4,90 €), 80 € (0,00 €). Количка за 30 € хваща версията, в която границата е изписана 5 € вместо 50 €. Количка за 0 € хваща празната количка с доставка. А 40 € до 30 € не хваща нищо ново: двата реда са един клас.
Идеята
Валидни и невалидни класове
Класовете са два вида. Валидните са стойностите, които правилото обработва. Невалидните са тези, които системата трябва да откаже: отрицателна сума, отрицателен брой бройки, текст вместо число.
Когато входовете са няколко, всеки има свои класове. Лимитът в количката („най-много 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.
Решение
| В количката | Добавям | Отказ | В количката след това |
|---|---|---|---|
| 2 | 3 | не | 5 |
| 5 | 8 | да | 5 |
| 3 | -2 | да | 3 |
Три реда: (2, добавям 3) е прието и стават 5; (5, добавям 8) е отказ, а количката остава с 5; (3, добавям -2) е отказ, а количката остава с 3. Ако всички редове са с празна количка, две грешки минават: версията, която сравнява с 10 само добавяните бройки, и тази, която при отказ изпразва количката. С празна количка и двете изглеждат правилни.
Идеята
Какво не вижда черната кутия
Класовете идват от правилото. А правилото не казва всичко за кода.
Да кажем, че в кода е останал ред от старата тарифа: „от 100 € доставката пак е 4,90 €“. За правилото 80 € и 150 € са един клас. За кода са два. Тестът с 80 € ще мине, и грешката ще остане.
Черната кутия не може да види клас, който съществува само в кода. Затова има и други техники: бялата кутия гледа кода, а опитът подсказва къде такива неща обикновено се крият. А на границата между класовете, където грешките са най-гъсти, е следващият урок.
Тест
Провери се
Свързани уроци
Раздел „Свързани уроци“- Нужно отпреди: Видове изисквания · Когато таблицата е по-ясна · Критерии за приемане · Защо рано
- Продължава в: Гранични стойности · Таблица на решения · Преходи на състоянията · Тестване по двойки
- Задачи по темата: Техники за тестов дизайн