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

Какво, не как

Накратко: Сценарият казва какво прави системата, не как се цъка по екрана. „Натисни бутона „Поръчай““ се чупи при всяка промяна на дизайна, а правилото не се е сменило. Един сценарий проверява едно поведение: едно „Когато“. Думите са на бизнеса: количка, поръчка, доставка, не таблици и адреси.

Проблем

Четирийсет сценария и един бутон

Магазинът сменя дизайна на количката. Бутонът „Поръчай“ става „Към плащане“ и отива на нов ред. Нищо в правилата не се е сменило.

На следващата сутрин 40 сценария падат. Всички са за доставката и започват така:

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

Собственикът също не може да ги чете. Търси правилото за доставката и вижда бутони.

Идеята

Какво, не как

Този сценарий казва как се цъка по екрана. Затова се нарича императивен: поредица от команди. Същият пример, казан като какво прави системата, е декларативен:

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

Три реда вместо пет, и никой от тях не знае за бутони. Ако утре поръчката се прави с глас или през мобилното приложение, сценарият остава същият. Правилото не се е сменило, значи и сценарият не трябва.

„Как“ не изчезва. То отива в кода, който връзва стъпката „Когато поръчам“ със системата. Един ред там се поправя при новия бутон, а не 40 сценария.

Пробвай

Какво или как?

1. Коя стъпка е декларативна?
2. Коя стъпка е декларативна?
3. Коя стъпка е декларативна?

Упражнение

Пренапиши го

1. Без бутоните. В редактора е сценарият от началото на урока.

Пренапиши сценария на езика на речника: без сайт, бутони и екран. Добави и пример точно на границата, за да се хванат и двете грешки.

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

Идеята

Едно поведение на сценарий

Ето още нещо, което изглежда пестеливо:

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

Това са два сценария в едно. Ако падне, трябва да четеш редовете, за да разбереш кое поведение е счупено. А ако падне първата половина, втората изобщо не се пуска.

Правилото е едно поведение на сценарий: едно „Когато“, и името казва това поведение. Ако ти трябва „и“ в името („отказ и връщане на парите“), поведенията са две.

Упражнение

Раздели го

2. Два в един. В тази задача две „Когато“ в един сценарий са грешка.

Раздели сценария на два: всеки с едно поведение и име, което го казва.

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

Идеята

Езикът на бизнеса

Думите в сценария са думите на собственика и на клиента: количка, поръчка, доставка, промо код. Същите, както в сторито и на дъската от Example Mapping. Ако бизнесът казва „поръчка“, сценарият не казва „заявка“, а кодът не казва cart_submission.

Не пишем:

  • имена на таблици и полета (orders.delivery_fee);
  • адреси и отговори на сървъра (POST /api/orders, 200);
  • имена на функции (calcDelivery(4999)).

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

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

Документацията на Cucumber („Writing better Gherkin“) казва същото: сценарият описва поведението на системата, не как е направена, тоест какво, не как. Тя не забранява императивния стил: в някои случаи подробностите са важни, но такива сценарии са по-скъпи за поддръжка.

Кога „как“ е самото изискване? Когато се проверява достъпността на формата за плащане, клавиатурата и надписите са поведението. Тогава сценарият ги казва. Но правилото за доставката не зависи от бутон.

Идеята за общ език на бизнеса и екипа има име в проектирането на софтуер: ubiquitous language от Domain-Driven Design на Ерик Евънс (2003). Думите в разговора, в сценария и в кода са едни и същи.

Тест

Провери се

1. Защо „натисни бутона „Поръчай““ е лоша стъпка в сценарий за доставката?
2. Сценарий има две „Когато“. Какво да направиш?
3. Име на сценарий: „Отказ и връщане на парите“. Какво подсказва?
4. Кой сценарий е на езика на бизнеса?

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