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

Какво покритието не казва

Накратко: Покритието на изискванията брои колко изисквания имат поне един тест. Не казва дали тестът хваща грешката, дали проверява цялото изискване, какво става, когато две правила се срещнат, и какво изобщо не е записано. Затова до числото винаги се пита „какво не е проверено и защо“.

Проблем

Сто процента, и пак грешно

Отчетът преди пускането на есенната кампания е зелен: всички изисквания са покрити, всички тестове минават.

Седмица по-късно поддръжката получава оплакване. Количка за 52,00 € с ЕСЕН10, след отстъпката 46,80 €. В количката пише „Доставка: безплатна“, а при плащането клиентът е таксуван 4,90 €. Количката смята прага преди отстъпката, а плащането след нея.

Доставката има тестове. Промо кодът има тестове. Но никой тест не пуска двете правила заедно. А когато QA пита кой отговор е верен, се оказва, че никой не е решил: прагът от 50 € преди отстъпката ли се смята, или след нея.

Идеята

Какво брои числото

Покритието на изискванията брои изискванията, които имат поне един тест. Четири от четири: 100 %. Нищо повече.

Числото не казва:

  • Дали тестът хваща грешката. Тест за 120,00 € покрива „безплатна от 50,00 €“, но не хваща „над 50 €“. Отметката е истинска, тестът е слаб.
  • Дали проверява цялото изискване. „Кодът дава 10 % и не важи за намалени продукти“ са две правила в едно изречение. Един тест за 10-те %, и редът е покрит.
  • Какво става между изискванията. Матрицата има ред за правило, не за срещата на две правила. Количката за 52,00 € с код не е на нито един ред.
  • Какво не е записано. Редове има само за изискванията в списъка. Изискване, което никой не е записал, не прави празен ред. То просто липсва.

Това са границите на покритието (coverage limits). Покритието е полезно. Нулата е тревога, а празният ред е истинска дупка. Но 100 % казва само, че няма празни редове.

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

Покритието винаги е спрямо нещо: изисквания, класове на входа, граници, преходи, разклонения в кода. Ще ги видиш в модула „Техники за тестов дизайн“. 100 % по един критерий значи, че всички негови елементи са упражнени поне веднъж. Не значи, че няма дефекти: тестването показва, че има дефекти, а не че няма. Това е първият от седемте принципа на ISTQB CTFL v4.0.1 (раздел 1.3).

ISTQB CTFL v4.0.1 (раздел 1.4.4) посочва оценката на покритието като една от ползите на проследимостта. Покритието отговаря на въпроса „има ли тест за всяко изискване“. Колко добре тестът проверява е друг въпрос, и той има свои мерки.

Пробвай

Къде лъже числото?

1. Изискването „Доставката е безплатна от 50,00 € включително“ има един тест: „Количка за 120,00 €: доставката е безплатна“. Програмата казва „над 50 €“ вместо „от 50 €“. Ще падне ли тестът?
2. Изискването е „Промо кодът дава 10 % отстъпка и не важи за намалени продукти“. Единственият тест е „Тениска за 20,00 € с ЕСЕН10: 18,00 €“. Какво не е проверено?
3. Доставката има тестове. Промо кодът има тестове. Кое не проверява нито един от тях?
4. Отчетът казва „95 % покритие на изискванията“. Кой въпрос казва най-много?

Пробвай

Сто процента на отстъпките

Отбележи връзките, после двата чифта тестове, които проверяват едно и също. Виж колко е покритието и какво още не е проверено.

Тестове

  • Т-1: Количка за 30,00 €: доставката е 4,90 €.
  • Т-2: Количка за 120,00 €: доставката е безплатна.
  • Т-3: Количка за 25,00 €: доставката е 4,90 €.
  • Т-4: Тениска за 20,00 € с ЕСЕН10: 18,00 €.
  • Т-5: Лоялен клиент, дънки в намаление за 40,00 €: 38,00 €.
  • Т-6: Лоялен клиент с ЕСЕН10, тениска за 20,00 €: 18,00 €, не 17,00 €.
  • Т-7: Тениска за 30,00 € с ЕСЕН10: 27,00 €.

Натисни клетката, където тестът проверява изискването; отново, за да махнеш връзката. Стрелките местят между клетките, Space или Enter отбелязва.

ИзискванияТ-1: Количка за 30,00 €: доставката е 4,90 €.Т-2: Количка за 120,00 €: доставката е безплатна.Т-3: Количка за 25,00 €: доставката е 4,90 €.Т-4: Тениска за 20,00 € с ЕСЕН10: 18,00 €.Т-5: Лоялен клиент, дънки в намаление за 40,00 €: 38,00 €.Т-6: Лоялен клиент с ЕСЕН10, тениска за 20,00 €: 18,00 €, не 17,00 €.Т-7: Тениска за 30,00 € с ЕСЕН10: 27,00 €.Покрито от
И-1 Доставката е безплатна от 50,00 € включително, иначе е 4,90 €.0
И-2 Промо кодът дава 10 % отстъпка и не важи за намалени продукти.0
И-3 Лоялният клиент получава 5 % отстъпка, и за намалени продукти.0
И-4 Отстъпките не се сумират: важи по-голямата.0
Проверява0000000
Кои тестове са излишни (повтарят друг тест)?

Идеята

Грешката е между тях

Повечето правила в магазина са прости поотделно. Доставката е едно сравнение. Промо кодът е 10 %. Сложното е, когато се срещнат:

  • прагът за доставка и отстъпката: преди или след?
  • кодът и връщането: ако платената поръчка с кода се върне, може ли кодът да се ползва пак?
  • кодът и лоялността върху продукт в намаление: кодът не важи, лоялността важи, значи 5 %. Отговорът следва от правилата, но тест за него няма.

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

Затова празното място в матрицата не е само празен ред. Понякога то е между два пълни.

Идеята

Когато числото стане цел

Ако ръководството поиска „100 % покритие до петък“ и гледа само това, ще го получи. Отметките ще се сложат набързо, част от тях там, където тестът само минава покрай изискването. Числото расте, а проверката не.

Затова до покритието в отчета стоят и други въпроси:

  • Какво не е покрито и защо? Списък, не процент.
  • Колко е важно непокритото? Цветът на бутона или плащането.
  • На границите ли са тестовете? 49,99 и 50,00 €, 14-ият и 15-ият ден.
  • Какво казват дефектите? Ако след пускането грешките идват от едно място, там тестовете са слаби, каквото и да казва числото.

Качеството на тестовете се мери другояче: тестовете се пускат срещу версия на системата с истинска грешка и се вижда дали падат. По-нататък в курса ще го правиш с всяка своя таблица и всеки свой сценарий.

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

Наблюдението, че мярка, която стане цел, престава да бъде добра мярка, е известно като закон на Гудхарт (по икономиста Чарлз Гудхарт). Формулировката в този вид е по-късна, на антроположката Мерилин Стратърн.

Упражнение

Тестът, който липсва

1. Какво да добавиш. Матриците са пълни. Кой тест носи нещо ново?

1. Матрицата на доставката е пълна: тестовете са 30,00 €, 25,00 € и 120,00 €. Кой нов тест носи най-много?
2. Изискванията за отстъпките са покрити. Кой тест липсва за „Промо кодът не важи за намалени продукти“?
3. Тестът „Лоялен клиент с ЕСЕН10, тениска за 20,00 €: 18,00 €“ е вързан и към лоялността. Програмата не дава 5-те % изобщо. Ще падне ли тестът?

Тест

Провери се

1. Какво брои покритието на изискванията?
2. Всички изисквания са покрити и всички тестове минават. Какво може да се каже?
3. Защо матрицата не показва грешката между две правила?
4. Ръководството иска „100 % покритие“ до петък. Кое е най-вероятното, ако това е единственото мерило?
5. Как се разбира дали тестовете са добри, ако покритието не казва?

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