Какво, не как
Накратко: Сценарият казва какво прави системата, не как се цъка по екрана. „Натисни бутона „Поръчай““ се чупи при всяка промяна на дизайна, а правилото не се е сменило. Един сценарий проверява едно поведение: едно „Когато“. Думите са на бизнеса: количка, поръчка, доставка, не таблици и адреси.
Проблем
Четирийсет сценария и един бутон
Магазинът сменя дизайна на количката. Бутонът „Поръчай“ става „Към плащане“ и отива на нов ред. Нищо в правилата не се е сменило.
На следващата сутрин 40 сценария падат. Всички са за доставката и започват така:
# language: bgФункционалност: Безплатна доставка
Сценарий: Доставка под границата Дадено отварям сайта на магазина И слагам в количката чаша за 49,99 € И отварям количката Когато натисна бутона „Поръчай“ То в долния край на екрана пише „Доставка: 4,90 €“Собственикът също не може да ги чете. Търси правилото за доставката и вижда бутони.
Идеята
Какво, не как
Този сценарий казва как се цъка по екрана. Затова се нарича императивен: поредица от команди. Същият пример, казан като какво прави системата, е декларативен:
# language: bgФункционалност: Безплатна доставка
Сценарий: Поръчка малко под границата Дадено количка за 49,99 € Когато поръчам То доставката е 4,90 €Три реда вместо пет, и никой от тях не знае за бутони. Ако утре поръчката се прави с глас или през мобилното приложение, сценарият остава същият. Правилото не се е сменило, значи и сценарият не трябва.
„Как“ не изчезва. То отива в кода, който връзва стъпката „Когато поръчам“ със системата. Един ред там се поправя при новия бутон, а не 40 сценария.
Пробвай
Какво или как?
Упражнение
Пренапиши го
1. Без бутоните. В редактора е сценарият от началото на урока.
Пренапиши сценария на езика на речника: без сайт, бутони и екран. Добави и пример точно на границата, за да се хванат и двете грешки.
Решение
# language: bg
Функционалност: Безплатна доставка
Сценарий: Поръчка малко под границата
Дадено количка за 49,99 €
Когато поръчам
То доставката е 4,90 €
Сценарий: Поръчка точно на границата
Дадено количка за 50,00 €
Когато поръчам
То доставката е безплатна
Стъпките за бутони и екрани ги няма в речника, затова не могат да се пуснат. Речникът е езикът, на който се разбират бизнесът и екипът: количка, поръчка, доставка. Двата сценария хващат по една грешка: границата при 50,00 € и таксата при 49,99 €.
Идеята
Едно поведение на сценарий
Ето още нещо, което изглежда пестеливо:
# language: bgФункционалност: Безплатна доставка
Сценарий: Доставката Дадено количка за 49,99 € Когато поръчам То доставката е 4,90 € Дадено количка за 50,00 € Когато поръчам То доставката е безплатнаТова са два сценария в едно. Ако падне, трябва да четеш редовете, за да разбереш кое поведение е счупено. А ако падне първата половина, втората изобщо не се пуска.
Правилото е едно поведение на сценарий: едно „Когато“, и името казва това поведение. Ако ти трябва „и“ в името („отказ и връщане на парите“), поведенията са две.
Упражнение
Раздели го
2. Два в един. В тази задача две „Когато“ в един сценарий са грешка.
Раздели сценария на два: всеки с едно поведение и име, което го казва.
Решение
# language: bg
Функционалност: Безплатна доставка
Сценарий: Под 50 € доставката се плаща
Дадено количка за 49,99 €
Когато поръчам
То доставката е 4,90 €
Сценарий: От 50 € доставката е безплатна
Дадено количка за 50,00 €
Когато поръчам
То доставката е безплатна
Сега всеки сценарий има име, което се чете като правило: „Под 50 € доставката се плаща“, „От 50 € доставката е безплатна“. Когато единият падне, името казва какво е счупено, без да се четат стъпките.
Идеята
Езикът на бизнеса
Думите в сценария са думите на собственика и на клиента: количка, поръчка, доставка, промо код. Същите, както в сторито и на дъската от Example Mapping. Ако бизнесът казва „поръчка“, сценарият не казва „заявка“, а кодът не казва cart_submission.
Не пишем:
- имена на таблици и полета (
orders.delivery_fee); - адреси и отговори на сървъра (
POST /api/orders,200); - имена на функции (
calcDelivery(4999)).
Те са решения на екипа и се сменят, а правилото остава. Сценарият, който ги съдържа, се чупи заради тях и не може да се прочете от този, който знае правилото.
По-точно, за любопитните
Документацията на Cucumber („Writing better Gherkin“) казва същото: сценарият описва поведението на системата, не как е направена, тоест какво, не как. Тя не забранява императивния стил: в някои случаи подробностите са важни, но такива сценарии са по-скъпи за поддръжка.
Кога „как“ е самото изискване? Когато се проверява достъпността на формата за плащане, клавиатурата и надписите са поведението. Тогава сценарият ги казва. Но правилото за доставката не зависи от бутон.
Идеята за общ език на бизнеса и екипа има име в проектирането на софтуер: ubiquitous language от Domain-Driven Design на Ерик Евънс (2003). Думите в разговора, в сценария и в кода са едни и същи.
Тест
Провери се
Свързани уроци
Раздел „Свързани уроци“- Нужно отпреди: Какво е стори · Критерии за приемане · Дадено, Когато, То · Рамка на сценарий и Примери
- Продължава в: Лошите сценарии · Жива документация · API и потребителски интерфейс
- Задачи по темата: Сценарии с Gherkin