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

Дадено, Когато, То

Накратко: Сценарият на Gherkin е пример, записан в три стъпки: Дадено (откъде тръгваме), Когато (какво се случва), То (какво се вижда). „И“ и „Но“ продължават стъпката преди тях. Добрият сценарий минава на правилната система и пада на системата с грешка, затова тук всеки сценарий се пуска срещу двете.

Проблем

Един пример, три прочита

На срещата за доставката има зелена карта: „Количка за 50,00 €: доставката е безплатна“. Всички кимат.

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

Трябва ни запис, който е един за всички: собственикът да го чете като изречение, а компютърът да го пуска като тест.

Идеята

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

Примерът се записва като сценарий (scenario) в три стъпки:

  • Дадено: откъде тръгваме. Какво има, преди нещо да се случи;
  • Когато: какво се случва. Действието, заради което е сценарият;
  • То: какво се вижда. Резултатът, който се проверява.
# language: bg
Функционалност: Безплатна доставка
Сценарий: Поръчка за точно 50 €
Дадено количка за 50,00 €
Когато поръчам
То доставката е безплатна

Езикът се казва Gherkin. Думите в началото на реда са ключовите му думи. Първият ред, # language: bg, казва, че са на български. Функционалност е заглавието на файла: нещото, което описваме. Под него са сценариите, всеки със своето име.

Останалото е обикновен текст. Затова сценарият се чете като изречение: „Дадена е количка за 50 €. Когато поръчам, доставката е безплатна.“

Пробвай

Коя стъпка?

1. „… количка за 49,99 €“
2. „… поръчам“
3. „… доставката е 4,90 €“
4. „… клиентът е лоялен“

Идеята

„И“ и „Но“

Понякога началото е от две неща, или проверките са две. Тогава следващата стъпка започва с И или с Но:

# language: bg
Функционалност: Безплатна доставка
Сценарий: Поръчка малко под границата
Дадено количка за 49,99 €
Когато поръчам
То поръчката е приета
Но доставката е 4,90 €

„И“ и „Но“ не са нов вид стъпка. Те взимат вида на стъпката преди себе си: тук „Но“ е още една проверка. Разликата между двете е само за четящия. „Но“ казва „и все пак“: поръчката е приета, но доставката се плаща.

Идеята

Как се проверява сценарият тук

В задачите пишеш сценарии в редактор. До него е речникът на стъпките: изреченията, които системата разбира, като Дадено количка за {сума} €. На мястото на {сума} пишеш число, например 49,99. Стъпка извън речника не може да се пусне, и проверката ти казва най-близката.

След това сценариите се пускат два пъти:

  1. Срещу правилната система. Тук всеки сценарий трябва да мине. Ако падне, очакването в него е грешно: провери го срещу правилото.
  2. Срещу версии с по една грешка. Всяка е същият магазин с един истински дефект: > вместо >= при 50 €, грешна такса, празна количка, която се плаща. Такава версия се казва мутант (mutant). Добрият сценарий пада на нея, тоест я хваща.

Отговорът звучи така: „Сценариите минават на правилната система и хващат 2 от 3 грешки. Минава незабелязана грешка: при празна количка.“ Не казва кой сценарий липсва. Казва къде да търсиш.

Упражнение

Първите сценарии

1. Точно 50 €. Името на сценария е готово.

Довърши сценария за поръчка за точно 50,00 €: Дадено, Когато, То.

GherkinБезплатна доставка

2. Три случая. Сценарият за 50 € вече е там.

Добави сценарий малко под границата (с „Но“ или „И“) и сценарий за празна количка. Трите сценария трябва да хванат и трите грешки.

GherkinБезплатна доставка

Идеята

Сценарият е пример

Погледни какво написа. Всеки сценарий е една зелена карта от Example Mapping, само че записана така, че да се пусне. Сценариите заедно са критериите за приемане на сторито.

Затова добрият сценарий има конкретни числа. „Дадено голяма поръчка“ не може да се пусне и всеки го чете различно. „Дадено количка за 50,00 €“ се чете само по един начин.

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

ISTQB CTFL v4.0.1, раздел 2.1.3 („Testing as a Driver for Software Development“), описва BDD (behavior-driven development) като подход, при който желаното поведение се изразява с тестови случаи на прост естествен език, разбираем за заинтересованите страни, обикновено във формата Given/When/Then. Раздел 4.5.2 нарича това сценарийна форма на критериите за приемане, до формата с правила (списък или таблица вход → изход).

Ключовите думи. Справочникът на Gherkin в документацията на Cucumber („Gherkin Reference“) дава основните думи и превода им на над 70 езика. Първият ред # language: bg казва на Cucumber кой език ползва файлът; без него се приема английски. На български са: Функционалност, Правило, Предистория, Сценарий (или Пример, двете са едно и също), Рамка на сценарий, Примери, Дадено, Когато, То, И, Но. Вместо ключова дума на стъпка може да се пише и *.

Двата езика. Същият сценарий на английски:

# language: en
Feature: Free delivery
Scenario: An order of exactly 50 €
Given a cart of 50.00 €
When I place the order
Then delivery is free

В курса сценариите са на езика на страницата, защото целта е бизнесът да ги чете, а клиентът тук пише на български. В международен екип сценариите се пишат на английски, за да ги чете всеки.

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

Тест

Провери се

1. Какво казва стъпката „То“?
2. Какво значи „И“ след „То“?
3. Сценарият за 49,99 € минава на правилната система. Значи ли това, че е добър?
4. Как се казва първият ред на файла, под който са сценариите?

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