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

Таблица на решения

Накратко: В таблицата на решения всяка колона е комбинация от условия с един резултат, и всяка колона е тестов случай. Три условия с „да“ или „не“ дават 8 колони. Колони с еднакъв резултат, които се различават само по едно условие, се сливат с „—“ (няма значение), и тестовете стават по-малко. Празната или спорна клетка е въпрос към собственика.

Проблем

Три теста, грешна цена

Правилото за отстъпките ти е познато: промо кодът дава 10 %, не важи за намалени продукти; лоялните клиенти имат 5 %, и за намалените; отстъпките не се събират, важи по-голямата.

Тестерът пише три теста: клиент с код (10 %), лоялен клиент без код (5 %), клиент без нищо (0 %). Минават.

След пускането лоялна клиентка въвежда код за продукт без намаление и получава 15 %. Всяко условие беше тествано. Комбинацията, в която живееше грешката, не беше.

Идеята

Всяка колона е тест

В урока „Когато таблицата е по-ясна“ таблицата на решения беше изискване. Сега е тестов дизайн: всяка колона е тестов случай.

1 2 3 4 5 6 7 8
Кодът е валиден да да да да не не не не
Продуктът е в намаление да да не не да да не не
Клиентът е лоялен да не да не да не да не
Отстъпка ? ? ? 10 % ? ? 5 % 0 %

Тестовете от началото бяха колони 4, 7 и 8. Грешката беше в колона 3. Покритието на таблицата е колко от колоните са тествани: тук 3 от 8.

Пълната таблица е лесна за правене: условията стават редове, а колоните са всички комбинации. Три условия с „да“ или „не“ дават 2 × 2 × 2 = 8.

Пробвай

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

Попълни отстъпката за всяка от осемте колони. Тук колоните на таблицата са редове: всеки ред е един тестов случай.

Правилото: Валиден промо код дава 10 %, но не важи за продукти в намаление. Лоялният клиент има 5 %, и за намалените продукти. Отстъпките не се събират: важи по-голямата.

ВходОчакваноПравилната система
#Валиден кодВ намалениеЛояленОтстъпка

Отстъпката се пише като число: 10 или 10 %. Празна клетка за резултат не се проверява.

Идеята

Съкращаване

Погледни колони 1 и 5. Различават се само по кода, а резултатът е един: 5 %. Когато продуктът е в намаление и клиентът е лоялен, кодът няма значение. Двете колони се сливат в една, а на мястото на кода се пише „—“.

1+5 2+6 3+4 7 8
Кодът е валиден — — да не не
Продуктът е в намаление да да не не не
Клиентът е лоялен да не — да не
Отстъпка 5 % 0 % 10 % 5 % 0 %

Осем теста стават пет. Това е съкращаването на таблицата.

Цената му: сливането казва „по правилото това условие няма значение“. Но черната кутия не знае дали кодът е съгласен. Колони 3 и 4 се сливат в „код да, намаление не“, а колона 3 е точно тази, в която кодът даваше 15 %. Ако от слятата колона тестваш само нелоялен клиент, грешката минава.

Тестът не може да е „—“: на мястото на тирето се избира стойност. Избери тази, при която грешка е най-вероятна. Затова за рисковите правила се тества пълната таблица, а съкращава се, когато тестовете са скъпи и рискът е малък.

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

ISTQB CTFL v4.0.1 описва техниката в раздел 4.2.3 (decision table testing). Условията и действията са редове, колоните са правилата (комбинациите). Нотацията: „T“ и „F“ (или „да“ и „не“) за условията, „—“ за условие без значение, „N/A“ за невъзможна комбинация, „X“ за действие, което се изпълнява. Покритието е броят тествани колони върху всички възможни (без невъзможните). Съкращаването (collapsing, minimization) намалява броя на тестовете, но програмата казва, че така се губи част от проверката.

Пробвай

Слей колоните

Направи съкратената таблица: най-много 5 реда, които пак хващат всички грешки. Където в урока има „—“, избери стойност.

Правилото: Валиден промо код дава 10 %, но не важи за продукти в намаление. Лоялният клиент има 5 %, и за намалените продукти. Отстъпките не се събират: важи по-голямата.

ВходОчакваноПравилната система
#Валиден кодВ намалениеЛояленОтстъпка

Отстъпката се пише като число: 10 или 10 %. Празна клетка за резултат не се проверява.

Идеята

Повече от две стойности

„Кодът е валиден“ изглежда като „да“ или „не“. В магазина не е. Кодът може да е невъведен, валиден, изтекъл или вече ползван, и всяко дава различно нещо на клиента:

1 2 3 4 5
Кодът е въведен не да да да да
Изтекъл е N/A не да не да
Ползван е N/A не не да да
Клиентът вижда сумата без код отстъпката „Кодът е изтекъл“ „Кодът вече е ползван“ ?

Две неща се виждат веднага.

Невъзможните комбинации. Невъведен код не може да е изтекъл. Тези колони се отбелязват като невъзможни (N/A) и не се тестват.

Празната клетка. Колона 5: кодът е и изтекъл, и ползван. Кое съобщение? Правилото не казва. Тестерът не решава вместо собственика. Това е находка, и тя излезе от таблицата, преди да има код. Затова тестовият дизайн е и рецензия.

Колоните растат бързо: условие с четири стойности и две с по две дават 4 × 2 × 2 = 16. При десет условия с „да“ или „не“ са 1024. Тогава правилото се дели на по-малки таблици, а комбинациите се избират с друга техника, като тестването по двойки по-нататък в модула.

Упражнение

Таблиците на кода

1. Какво казва таблицата? Четири въпроса, които тестерът намира, докато пише таблицата.

1. Кодът е въведен, изтекъл е и вече е ползван. Кое съобщение вижда клиентът?
2. Условието „кодът е изтекъл“ при колона „код не е въведен“. Какво се пише в клетката?
3. Условието за кода има четири стойности: няма код, валиден, изтекъл, ползван. Намалението и лоялността са „да“ или „не“. Колко колони има пълната таблица?
4. Количката е за 55 € преди отстъпката и 49,50 € след нея. Каква е доставката?

Тест

Провери се

1. Тестовете са за колони 4, 7 и 8 от таблицата на отстъпките. Какво е покритието ѝ?
2. Кое е един тестов случай в таблицата на решения?
3. Колко колони има пълната таблица за 4 условия с „да“ или „не“?
4. Кога две колони могат да се слеят?
5. Какво намира таблицата на решения, освен тестове?
6. Таблицата има 10 условия. Какво правиш?

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