Лошите сценарии
Накратко: Лош сценарий може да минава, а пак да вреди: дълго пътешествие с много „Когато“, сценарий, който разчита на предишния, проверка на поле в базата вместо на това, което клиентът вижда, бутони и цветове, „И“ с подробности, които не са важни. Всеки има поправка: раздели, дай своето начало, провери видимото, остави важното.
Проблем
Двеста сценария, които никой не чете
Екипът има 200 сценария. Минават за 40 минути. Един падна снощи: „Пълен път на клиента“, 26 стъпки. Падна на стъпка 19.
Програмистът го чете половин час. Оказва се, че грешката е в промо кода, а сценарият е за количката. Междувременно още три сценария падат, защото разчитат на същата количка от „Пълния път“.
Всички сценарии минаваха. Но не помагаха.
Идеята
Пет познати миризми
Има няколко вида сценарии, които се повтарят във всеки проект. Наричат ги „миризми“ (smells): нещо не е наред, дори да минава.
| Миризма | Как изглежда | Защо боли | Поправка |
|---|---|---|---|
| дълго пътешествие | много „Когато“ и „То“ едно след друго | когато падне, не се знае кое поведение е счупено | всяко поведение е свой сценарий |
| свързани сценарии | сценарий без начало, който разчита на предишния | пуснат сам или в друг ред, пада | всеки сценарий носи своето „Дадено“ |
| проверка на вътрешности | „То в таблицата orders…“, „То се вика услугата…“ | чупи се при промяна в кода, без правилото да се смени | провери това, което клиентът вижда |
| подробности от екрана | бутони, цветове, полета, секунди | чупи се при всеки нов дизайн | декларативни стъпки |
| „И“ навсякъде | осем реда „И“ с имена, адреси, телефони | важното се губи между неважното | остави само това, от което зависи резултатът |
Някои от тях вече видя в урока за декларативните сценарии. Тук ще поправиш два, които се срещат най-често.
Пробвай
Каква е миризмата?
Упражнение
Пътешествието
1. Количката. В редактора е сценарий, който пълни количката стъпка по стъпка.
Раздели пътешествието на два сценария с по едно „Когато“: десетата бройка се приема, единайсетата се отказва. Всеки трябва да започва от своята количка и да хване всичките четири грешки.
Решение
# language: bg
Функционалност: Най-много 10 бройки от продукт
Сценарий: Десетата бройка се приема
Дадено в количката има 9 бройки от продукта
Когато добавя 1 бройка
То в количката има 10 бройки от продукта
Сценарий: Единайсетата бройка се отказва
Дадено в количката има 10 бройки от продукта
Когато добавя 1 бройка
То добавянето е отказано
И в количката има 10 бройки от продукта
Двата сценария започват направо от интересното място: 9 бройки и 10 бройки. Не е нужно да се пълни количка от нула, за да се провери границата. След отказа се проверява и какво е останало в количката: без тази проверка системата, която изпразва количката при отказ, минава незабелязана.
Идеята
Всеки сценарий отначало
Сценариите се пускат поотделно. Всеки започва с празна система: няма количка, няма клиент, нищо от предишния. Инструментите могат да ги пуснат в друг ред, само един или няколко наведнъж.
Затова сценарий, който разчита на предишния, е капан. Във файла изглежда наред, защото се чете отгоре надолу. Но пуснат сам, той няма от какво да тръгне.
Упражнение
Свързаните сценарии
2. После поръчка от 50 €. Вторият сценарий няма начало.
Пусни сценариите и виж защо вторият пада на правилната система. После го поправи така, че да може да се пусне сам.
Решение
# language: bg
Функционалност: Безплатна доставка
Сценарий: Малка поръчка
Дадено количка за 49,99 €
Когато поръчам
То доставката е 4,90 €
Сценарий: Поръчка от 50 €
Дадено количка за 50,00 €
Когато поръчам
То доставката е безплатна
Пуснат сам, вторият сценарий няма количка. Във файла изглеждаше, че продължава първия, но всеки сценарий тръгва отначало. С „Дадено количка за 50,00 €“ той носи своето начало и може да се пусне в какъвто и да е ред.
Идеята
Вътрешности и подробности
Двете останали миризми се поправят еднакво: проверява се това, което вижда клиентът.
# language: bgФункционалност: Безплатна доставка
Сценарий: Доставка под границата Дадено клиент Мария Петрова И адрес ул. „Шипка“ 5, София И имейл maria@example.com И количка за 49,99 € Когато поръчам То в таблицата orders полето delivery_fee е 490 И бутонът „Плати“ е зеленТук важното е два реда: сумата и доставката. Името, адресът и телефонът не влияят на доставката, но трябва да ги прочетеш, за да го разбереш. Полето в базата е вярно днес, но утре таксата може да се пази в евро, не в центове. А бутонът е дизайн.
Поправеният сценарий е три реда: количка за 49,99 €, поръчам, доставката е 4,90 €. Подробностите не изчезват от системата. Те не са част от това поведение.
По-точно, за любопитните
Думата „миризма“ идва от code smells от книгата на Мартин Фаулър за рефакторирането (1999), където Кент Бек и Фаулър описват признаци на код, който работи, а е труден за промяна. За сценариите имената не са стандартизирани: различните книги ги наричат малко по-различно.
Справочникът на Gherkin в документацията на Cucumber дава едно мерило: предистория, по-дълга от 4 реда, вероятно държи подробности, които трябва да станат стъпки на по-високо ниво. Същото важи и за дълги „Дадено“ с много „И“.
„Проверката на вътрешности“ не значи, че базата не се тества никога. Тестовете на ниво компонент и интеграция проверяват точно това, и имат своето място в модула за нивата на тестване. Но сценарият на Gherkin е приемен тест: той говори за поведението, което бизнесът приема.
Тест
Провери се
Свързани уроци
Раздел „Свързани уроци“- Нужно отпреди: Защо програмите грешат · Дадено, Когато, То · Рамка на сценарий и Примери · Какво, не как
- Продължава в: Жива документация
- Задачи по темата: Сценарии с Gherkin