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

Гранични стойности

Накратко: Границата е последната стойност на един клас и първата на следващия. С две точки се тестват границата и съседът ѝ от другия клас: 49,99 и 50,00 €. С три точки и съседите от двете страни: 49,99, 50,00 и 50,01 €. Така се хващат „>“ вместо „>=“, закръглянето и грешката с единица, които представителят от средата на класа никога не вижда.

Проблем

Тестовете минаха, границата не

От миналия урок имаш три теста за доставката: 0 €, 30 € и 80 €. Всички минават. Програмистът е написал:

доставката е безплатна, ако сумата е > 50

Количка за 50,00 € плаща 4,90 €. Тестът с 80 € е от същия клас и минава, защото 80 е и > 50, и >= 50. Представителят от средата на класа не може да види къде точно свършва класът.

Идеята

Границата

Класовете на доставката са подредени: празна, платена, безплатна. Там, където един клас свършва и почва друг, е границата:

Клас От До
празна количка 0 € 0 €
платена доставка 0,01 € 49,99 €
безплатна доставка 50,00 € без горна граница

Граничните стойности са най-малката и най-голямата стойност на всеки клас. Тук грешките са най-гъсти, защото тук програмистът решава „>“ или „>=“, закръгля, брои от 0 или от 1. Една сгрешена черта в кода мести границата с една стъпка. Стъпката при сумите е един цент.

Анализът на граничните стойности работи само за подредени класове: суми, бройки, дати. Начин на плащане няма „преди“ и „след“.

Идеята

Две точки и три точки

Има два начина.

С две точки: за всяка граница се тестват граничната стойност и съседът ѝ от другия клас. За доставката: 0 и 0,01 €; 49,99 и 50,00 €. Четири теста.

С три точки: за всяка гранична стойност се тестват тя и двата ѝ съседа. Около 50,00 €: 49,99, 50,00 и 50,01 €.

Защо три? Представи си код „доставката е безплатна, ако сумата е точно 50“. С две точки: 49,99 плаща, 50,00 е безплатна. Минава. С три точки 50,01 € трябва да е безплатна, а кодът иска 4,90 €. Хванат.

Трите точки струват повече тестове и хващат повече грешки. Кое да избереш, зависи от риска: за плащането си струват, за цвета на бутона не.

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

ISTQB CTFL v4.0.1 описва техниката в раздел 4.2.2 (boundary value analysis) и двата варианта: 2-value BVA и 3-value BVA. Покритието е броят тествани гранични стойности (с техните съседи при трите точки) върху всички. Според програмата трите точки са по-строги: хващат грешки, които двете пропускат.

Техниката стъпва на класовете на еквивалентност. Без класовете не е ясно къде са границите, а без границите класовете пропускат най-честите грешки.

Пробвай

Кои стойности?

1. Границата между платена и безплатна доставка е при 50,00 €. Кои стойности дава анализът с две точки?
2. Кои стойности дава анализът с три точки около 50,00 €?
3. Програмистът е написал „сумата е точно 50 → безплатна“ вместо „от 50 нагоре“. Коя стойност хваща грешката?
4. Кои са границите на класа „платена доставка“?

Идеята

49,99 не е 30

49,99 € и 30 € са в един клас. Защо тогава 49,99 е по-добрият тест?

Защото някои грешки се виждат само до границата. Ако кодът закръгля сумата до цели евро, преди да я сравни, 49,99 € става 50 € и доставката става безплатна. 30 € закръглено е пак 30, и тестът минава.

Добрият тест е на мястото, където грешката би се показала. Средата на класа е най-безопасното място, и затова е най-лошото за тест.

Пробвай

Границите на доставката

Напиши тестовете за границите на доставката, с две точки. Хвани всички грешки с колкото може по-малко редове.

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

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

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

Идеята

Границите са навсякъде

Щом правилото има число, има граница:

  • Бройки: най-много 10 от продукт. 10 се приема, 11 се отказва. И отдолу: добавя се поне 1 бройка, значи 0 се отказва.
  • Дни: връщане до 14 дни от получаването. Получена на 1 октомври: 15 октомври се приема, 16 октомври се отказва.
  • Време: кодът важи до 31 октомври. 23:59 и 00:00 на 1 ноември. И по чий часовник?
  • Две граници наведнъж: лимитът е за сумата в количката, не за добавяното. 9 в количката плюс 1 е 10 и се приема. 10 плюс 1 е 11 и се отказва.

Граничната стойност често отваря въпрос, който изискването не е задало. „До 14 дни“: включително ли? От получаването или от доставката? Това е и рецензия: тестовият дизайн, направен рано, е най-добрият чеклист за изискванията.

Упражнение

Границите на лимита и на дните

1. Лимитът в количката. Границите са две: на добавяното количество и на бройките в количката след добавянето.

Напиши тестовете за двете граници на лимита: колко се добавя (0 и 1) и колко става в количката (10 и 11). Провери и какво остава в количката.

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

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

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

2. Дни и бройки. Намери граничните стойности.

1. Правилото: „Връщане до 14 дни от получаването.“ Пратката е получена на 1 октомври. Кои дни дава анализът с две точки?
2. Промо кодът важи до 31 октомври включително. Кой момент е най-важният тест?
3. В количката може да има най-много 10 бройки от продукт. Кои са граничните стойности на бройките в количката след добавянето?

Тест

Провери се

1. Защо грешките са най-гъсти на границите?
2. Кога се прилагат граничните стойности?
3. Какво хваща 49,99 €, което 30 € не хваща?
4. Колко са граничните стойности на правилото за доставката с две точки?

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