Якщо ви пишете специфікації у стилі BDD, чи слід використовувати "слід", чи ні? [зачинено]


12

Я усвідомлюю, що це дещо суб'єктивно, але я не можу знайти гарного випадку для того чи іншого:

він "повинен щось робити"
він "щось робить"

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

Чи існує консенсус з цього приводу чи це суто питання стилю?

Відповіді:


3

Ласкаво просимо до юридичної англійської мови.

Використання "повинен" == "повинно" == договірне зобов'язання. Це легалізм. Це не призводить до "допиту". Він позначає вирок як формальне договірне зобов'язання.

Використання "би" == "буде" == хороша ідея. Він позначає речення як необов’язковий ознака.

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

Використання голого дієслова без модифікатора робить речення трохи складніше виділити як формальну вимогу. А у випадку надскладних дієслів, то можна трохи заграти, щоб зрозуміти, як його сполучити.

Легко - дієслова на зразок "сповіщати" або "створювати".

  • Система повідомляє електронною поштою. (Дієслово "сповіщати" сполучається "сповіщає" для "системи" - що б там не було.)

  • Система повідомляє про це електронною поштою. ("сповіщати" стає "сповіщатиму" - ніяких сполучень. Дуже просто.)

Жорсткі - дієслівні фрази на кшталт "увійти" або специфічні доменні словосполучення типу "витягнути, очистити, перетворити, подвоїти та завантажити" або іменник типу "перспектива", який був досліджений. Більш довгу фразу, в якій закопано кілька дієслів, важко сполучити: сполучати кожне дієслово? Або спробувати поєднати довгу фразу так, ніби це було одне слово? Оскільки будь-який іменник може бути дієслівним англійською мовою, важко знати, як сполучити ці складені дієслова.

  • Система витягує, очищає, перетворює, дублює та завантажує, коли користувач натискає кнопку. (Англійські тривіально дієслова будь-яка іменникова фраза.) Або це витягує, очищає, перетворює, дедублює та завантажує?

  • Система повинна витягувати, очищати, трансформувати, дублювати та завантажувати, коли користувач натискає кнопку. (Огидна фраза залишається недоторканою, ніякої таємниці щодо сполучення дієслова.)

["Що?" ви говорите: "будь-який іменник може бути дієслівним в англійській мові?". Так. Будь-який іменник. Я йду на цей камінь. Я часто обробляв це питання. Навіть технічні характеристики повинні відповідати цьому.]


5
Ви говорите, що використання "слід" не призводить до "опитування"; мій досвід полягає в тому, що це робиться, особливо з новими для тестування / TDD. Це також впливає на розмежування результатів від контексту та подій. "І замовлення надходить на склад" не говорить мені, чи я змушую прийти до замовлення натисканням кнопки, чи це має відбутися автоматично, тоді як "І замовлення має надійти на склад", говорить мені, що це це те, що я повинен перевірити. BDD - це розмовна, а не юридична, англійська (або натуральна мова на вибір).
Lunivore

3
Я ціную, що у вас є інша мова там. BDD розпочався в Лондоні, хоча ... зі словом "слід";) ОП запитала, чи існує консенсус щодо цього, і існує з 2004 року -> dannorth.net/introducing-bdd
Lunivore

1
Це ідея, що ви використовуєте "слід" у законному, не запитуваному вигляді, що я не вважаю корисним. Вигляд, протилежний умовному способу відкриття, з якого розпочався BDD. Я проводжу своє життя, намагаючись допомогти людям, які почали з "спец", а потім відчуваю, що вони не можуть допитати цього.
Lunivore

1
Якби ви відредагували свою відповідь так, щоб вона включала щось на кшталт "Деяким людям подобається" слід ", оскільки це призводить до запитань" замість того, що він зараз каже, а це "це не призводить до запитання", я був би дуже щасливий. Аскетуючий аспект BDD є для мене одним з найважливіших, і спосіб, яким ви це поставили, усуває цей аспект, а не надає додатковий контекст. Дякую за цю розмову, незалежно від того, редагуєте ви відповідь чи ні; Я дуже ціную шанобливий діалог.
Lunivore

11
Стандарт IETF для написання РЛКА конкретно йдеться , що «MUST» і «ПОВИНЕН» є «REQUIRED», «повинен» є «РЕКОМЕНДУЄТЬСЯ» і «МАЙ» є «ДОДАТКОВО».
oosterwal

4

Суто питання стилістичних уподобань. Це зводиться до запитання, чи ви / ваші клієнти вважаєте за краще думати про систему в теперішньому чи майбутньому часі?

Кваліфікатори, такі як "повинен" або "воля", передбачають майбутнє час, але це м'яко і читається досить добре, коли мислимо в теперішньому часі. Відсутність кваліфікатора, безумовно, вказує на теперішнє напруження (тобто в цей момент).

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

У будь-якому випадку, якщо ви вирішили використовувати класифікатор, я настійно рекомендую використовувати "повинен" замість "повинен" . "Слід" можна інтерпретувати як необов'язковий (незважаючи на твердження С.Лотта про протилежне), але "повинен" повністю усуває будь-яку неоднозначність - повинен чітко означати "не обов'язково".


І тому, що я поки не можу коментувати (обмеження карми), це відповідь С.Лотта про Should / Shall vs. Will / Will: існує багато неоднозначностей щодо того, що буде і буде, навіть у написанні юридичних договорів. Дивіться цю статтю для пояснення .


"відсутність кваліфікатора читає трохи дивним чином під час розробки, коли все в майбутньому напружено" - ну, якщо ви зробили TDD і написали тест, але ще не написали код, ваш тест закінчується. Хоча семантика "це повинно пройти в майбутньому" означало б, що воно може пройти ЗАРАЗ. Таким чином, теперішній час приносить більше ясності, принаймні у випадку з TDD: це не обіцянка про майбутнє, яка провалюється, це поведінка, яка очікується ЗАРАЗ, не дотримується.
Михайло Васін

2

Я за те, щоб використовувати третю особу, теперішнє час без кваліфікатора.

Мій головний аргумент такий: Тест - це історія.

Історія складається з сцен. Кожна сцена описує:

  • предмет
  • контекст
  • дії

Приклад:

ОПИСАННЯ : getReceiptфункція

КОНТЕКСТ : квитанція існує

IT : повертає квитанцію

Як і хороша історія, хороший тест легко читати.

Історія розповідає про те, що робить програма, наприклад

  • починає транзакцію
  • робить запит
  • нормалізує реакцію
  • завершує транзакцію
  • повертає квитанцію

З іншого боку, використання класифікатора (не має значення, це "повинно" чи "повинно") перетворює тест у список тверджень, наприклад:

  • слід розпочати транзакцію
  • слід зробити запит
  • повинні нормалізувати відповідь
  • має закінчити транзакцію
  • повинен повернути квитанцію

Немає суцільної історії: ваш розум оцінює перелік тверджень.

Це суб'єктивно, але читати природну мову (історію) простіше, ніж читати список тверджень.


1

На мою думку, ви завжди повинні використовувати "слід".

Міркування - з BDD, коли ви пишете тест, програмне забезпечення не все ж робити те , що ви хочете, щоб це зробити, так сказавши , що це «що - то робить» помилково. Це "повинно щось робити", і тести будуть проходити до тих пір, поки воно продовжує щось робити.


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

1

З веб-сайту behaviour-driven.org під назвою "GettingTheWordsRight" :

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

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

Однак я бачив, що майже «релігійне» застосування цього слова повинно зазнати невдачі, коли воно застосовується як префікс тестових назв, оскільки це змусило програмістів, які займаються, пройти певну розумову та лінгвістичну гімнастику, щоб надати тестове ім'я, яке це мало сенс, і в таких випадках це означало, що намір правильно сказати слова не відповідає його очікуванням, а самі тести в результаті складно розшифрувати. Коли така ситуація розвивається, я зазвичай вживаю слово слідв будь-якому місці назви методу тестування, щоб переконатися, що ім’я передає його метод просто та чітко. Я, звичайно, не став би застосовувати певне слово, якби інші слова були однаково доречними в даному контексті. Однак хитрість полягає в тому, щоб вибрати слова, які не залишають місця для аргументів про те, що щось представляє в коді, і це спонукає вас задуматися про те, що повинен робити ваш код, не покладаючись на просте значення.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.