BDD: Початок роботи


9

Я починаю з BDD, і це моя історія:

Feature: Months and days to days
    In order to see months and days as days
    As a date conversion fan
    I need a webpage where users can enter
    days and months and convert them to days.

У мене є сумніви ...

Чи слід писати свої сценарії, перш ніж щось кодувати, або спершу слід написати сценарій, а потім написати код, написати сценарій ще раз, а потім написати код тощо?

Якщо я повинен написати свої сценарії раніше, чи можна схвалити мої кроки, а виробничий код все ще не буде виконано?

Коли я повинен робити рефакторинг свого коду? Після того, як функція буде виконана або після кожної реалізації сценарію?


"Чи можна затвердити мої кроки, а виробничий код все ще не буде виконано?" Що це означає? Будь ласка, поясніть.
S.Lott

Відповіді:


12

З історії я роблю висновок, що ви кодуєте самостійно.

Зазвичай мета BDD полягає в тому, щоб дозволити розмови, особливо між бізнесом та розробниками, щоб команда могла бути впевнена, що вони дійшли спільного взаєморозуміння. Ми також хочемо включити тестери, оскільки вони можуть помітити, коли ми пропустили сценарії.

Якщо ви робите це самостійно, візьміть гумову качку та поясніть поведінку вашої заявки качці. Наведіть кілька прикладів, як це має працювати. Це будуть ваші сценарії.

Для початку я б запропонував не автоматизувати ці сценарії. Ви можете записати їх, якщо хочете. Пам’ятайте, що результати бізнесу, якими ви поділилися з качкою, приблизно на правильному рівні, щоб їх сформулювати. Тепер у вас має бути уявлення про те, як поводиться додаток, і ви можете прогоняти сценарії вручну. Мені подобається ставитися до всього, що ще не працює, як до помилки . Я б іноді почав з автоматизацією, але тільки тоді , коли я дуже добре знаю , як працює система, я знайомий з інструментами, а призначений для користувача інтерфейс добре розуміють. Навіть тоді мені часто доводиться переробляти це, коли я писав код.

На нижчому рівні розкажіть своїй качці, як поводиться кожен клас. Наведіть кілька прикладів. Гумові качки цілком здатні зрозуміти технічну мову. Тепер у вас є BDD-рівень на рівні одиниці, який також називається тестовими одиницями. Тут відбувається цикл червоно-зеленого рефактора. (Мені більше не потрібно більше рефакторировать, тому що я думаю про обов'язки своїх класів, формулюючи це мовою, орієнтованою на бізнес, і все одно вона випадає досить красиво. Але я я займаюся цим деякий час. Це нормально, якщо ви робите.)

Не переробляйте це занадто сильно. Ми все ще хочемо отримати зворотний зв'язок щодо нашого коду, тому що завжди є речі, про які ми не знаємо, що не знаємо . Вдосконалення - це ваш ворог тут. Зробіть його досить хорошим, зробіть його читабельним, а потім рухайтеся далі. Якщо вам потрібно зробити щось ідеальне, щоб внести подальші зміни, зробіть це, коли внесете подальші зміни.

Якщо у вас є можливість отримати відгук про свої сценарії від зацікавлених сторін бізнесу, але вони не сидіти з вами, ви можете надсилати сценарії до них, як тільки ви написали тоді, і перед тим, як автоматизувати їх. Ви також можете надіслати макет інтерфейсу користувача, щоб вони могли співвідносити слова з діями. Не надто далеко випереджаючи кодування цього. Працюйте з припущенням, що те, що ви вже зробили, є неправильним , і вам потрібно отримати зворотній зв'язок, щоб дізнатися, як це зробити.

В якості останньої підказки, як правило, не фразуйте історії з точки зору користувача (сценарії, так, але не історії). Вони не користувацькі історії. Напевно, слід прочитати щось на зразок:

In order to attract people to my website
As @thom
I want users to easily convert months and days to days.

Все одно є якась мета вищого рівня. Це також допоможе вам намалювати необхідні можливості. Удачі в цьому і вибачення за позадовгий пост.


1
«Гумова качка» частина чудова. Я думав, що я єдиний, хто думав про це!
NoChance

3

Чи слід писати свої сценарії, перш ніж щось кодувати, або спершу слід написати сценарій, а потім написати код, написати сценарій ще раз, а потім написати код тощо?

Обидва будуть працювати. Вибрати один.

Це не має великого значення.

Чим більше у вас сценаріїв, тим більше дизайну ви можете зробити наперед.

Чим більше у вас сценаріїв, тим довше потрібно зробити щось.

Коли я повинен робити рефакторинг свого коду? Після того, як функція буде виконана або після кожної реалізації сценарію?

Ні. Ви рефактор, коли вам важко спроектувати наступний сценарій.


Я поставив нове запитання ... "Якщо я повинен написати свої сценарії раніше ...". Чи можете ви подивіться, будь ласка? Дуже дякую.
1111

1
@ S.Lott Хороша відповідь, але одна приказка: грунтуючись на корисності циклу червоно-зелений рефактор, я б запропонував рефакторинг постійно протягом процесу BDD, відразу після кожного зеленого тесту.
Рейн Генріхс

@Rein Henrichs: Альтернативою було б зазначити, що рефакторинг для того, щоб закінчити всі тести на одну історію, відбувається як невідворотна і неминуча частина кодування. Навіть чудовий дизайн не може покрити всі основи. Цей рефакторинг не здавався вагомим згадувати. Однак ти це добре вказав. Рефакторинг між історіями, однак, є більш серйозною та трудомісткою операцією, оскільки набір функцій розвивається за рахунок збільшення кількості оповідань.
S.Lott

3

Використовуйте описові дієслова

Feature: CONVERT Months and days to days

Не приймайте дизайнерських рішень в оповіданнях ["Мені потрібна веб-сторінка" - це дизайнерське рішення]

As a date conversion fan
I want to convert days and months into days

Використовуйте цілі ділових цінностей у розповідях

So that [some business reason]

Напишіть якомога більше функцій та історій, перш ніж починати кодувати; історії інформують один одного , впливають на особливості та інформують про дизайн.

Рефактор після кожної історії. Червоно-зелений-Рефактор.


+1, хороша відповідь. Але чи не "спосіб BDD" перетворювати рефактор як частину внутрішнього циклу тестування блоку, а не зовнішнього циклу приймання-випробування?
pdr

@pdr: ось що я мав на увазі, рефактор після кожної історії. BDD / TDD тестує шкалу від одиниці до приймання, є лише один цикл (на мій погляд) ;-)
Стівен А. Лоу

Чому "мені потрібна веб-сторінка" - це дизайнерське рішення? Дякую!
1111

@thom: розповіді користувачів повинні виражати те, що користувач хоче зробити, а не як це буде реалізовано. Іншими словами, функції, сюжети та сценарії - це вимоги та функціональні характеристики. Не приймайте дизайнерських рішень, поки не отримаєте повну картину. У цьому (імовірно штучному) прикладі бізнес-потреби користувача загалом можуть вказувати на те, що веб-сторінка може бути не найзручнішим рішенням - віджет для настільних ПК або мобільний додаток може бути кращим, залежно від того, як / коли їм потрібно ним користуватися. Деталі про реалізацію переповнюють історії та можуть занадто рано зафіксувати вас у певному дизайні.
Стівен А. Лоу
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.