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


9

Зараз я досліджую тестові рамки BDD, як огірок, і мені цікаво, коли люди кажуть

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

але чи не є природна мова причиною більшості проблем, які ми маємо в інженерії програмного забезпечення?

Природна мова неоднозначна, і тому багато програмних проектів виходять з ладу через неправильне тлумачення вимог клієнтів та розуміння розробника. Я тут не отримую ніші.

Так, розбивка тестів на крихітні прості виконуючі дії має сенс і дає певний рівень ясності, але чи покращує це продуктивність в цілому?

PS: Я не експерт, і я не висловлюю тут свою думку. Мені просто цікаво зрозуміти концепцію.


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

Використання мови BDD призначене для відображення існуючої мови ділової галузі, яка вже повинна бути невідповідною для бізнесу. У статті у Вікіпедії зазначено, що на початку цього тексту.
Мартін Спамер

Відповіді:


8

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

Тепер, чому BDD насправді вартий, незважаючи на те, що не вирішує цю проблему? Є деякі причини, і цей перелік, безумовно, не є повним.

Неоднозначність не вирішена

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

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

Всюдисуща мова

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

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

Історії користувачів є трохи кращими на цьому фронті, оскільки вони також включають усіх зацікавлених сторін у їх створенні. Щодо всюдисущої мови, я б не сказав, що або BDD, або історії користувачів є кращими - хоча в наступному пункті вони суттєво відрізняються.

Заповітність

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

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

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

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

Загалом, Test First - це принцип, який був дуже корисним на всіх етапах розробки програмного забезпечення, і BDD - це його застосування до самого зовнішнього шару розробки (порівняно з f.ex. TDD на рівні одиниці).

Підсумок

Підсумовуючи це, BDD не позбавляє вас від проблем неоднозначності природних мов. Однак це допоможе вам вирішити цю проблему за допомогою двох важливих моментів: зосередити увагу на всюдисущій мові, щоб зменшити двозначності (це не усуне їх повністю, але це допоможе тоні!) Та змусивши вас писати виконуваний файл технічні характеристики. Останній пункт допомагає вирішувати проблеми неоднозначності здебільшого тому, що саме тоді двозначності починають проявлятися як проблеми в іншому випадку.


це приголомшлива відповідь. Після цього питання я трохи дослідив цю проблему, і мені слід погодитися з більшістю ваших точок. Одна з головних проблем із використанням таких інструментів, як огірок або будь-який інструмент BDD, полягає в тому, що розробник не розуміє ідеї BDD на рівні дзен . Ось цікава стаття з цього приводу Елізабет Кео.
Raghuram8892

4

Коли щось написано «природною мовою», це може означати ряд речей:

  • Це буквально англійська. Оскільки англійська мова є дуже неоднозначною та неточною мовою, такий режим введення є незадовільним у контексті розробки програмного забезпечення.

  • Це англійська мова, але відповідні терміни точно визначені. Така мова використовується в юридичних документах або математичних текстах.

  • Це формальна мова, але мова моделюється дуже тісно за умовами природної мови. Це певною мірою описує всі мови програмування. Чим більше англійська формальна мова, тим легше її зрозуміти для непідготовлених читачів. Помітні приклади мов програмування з цією метою включають COBOL і SQL: select id, name from persons where age > 18це відразу очевидно. Недоліком цих мов є те, що вам потрібно зрозуміти формальну мову для написання робочого коду. Також ці мови часто дуже багатослівні.

DDD припускає, що проект використовує всюдисущу мову для опису домену. Це, по суті, випадок 2: визначте відповідні терміни, щоб ви могли точно спілкуватися на природній мові.

Сам огірок - випадок 3: формальна мова, яка має намір читати дуже близько до звичайної англійської. Точніше: огірок - це рамка, яка дозволяє визначити просту формальну мову, яку можна використовувати для висловлення вимог / тестів. Сенс у тому, що той самий документ представляє вимоги природної мови та автоматично виконувані тести, тому обидва завжди будуть синхронізовані. Ви можете прочитати сценарій з огірком і переконатися, що він правильно висловлює вашу вимогу, не розуміючи, як все це працює.

Огірок працює, порівнюючи документ із відомими фрагментами природної мови. Ці фрагменти потрібно визначити спочатку. Щоб написати сценарій в огірку, вам потрібно знати про доступні фрагменти - програмне забезпечення не буде читати вашу думку. Ці фрагменти також є джерелом можливих проблем: Коли ви реалізуєте поведінку текстового фрагмента, ваш код може зробити щось дещо інше, ніж текст фрагменту. Це навряд чи буде проблемою, якщо один і той же фрагмент використовується багато разів. Огірок тому добре підходить для опису правил бізнесу, які складаються з меншої сукупності умов, дій та результатів. Інші рамки тестування можуть бути кращими, якби кожен фрагмент використовувався лише один чи два рази, наприклад, тому що установка для кожного тестового випадку є унікальною.


дякую за детальну інформацію. Я відчуваю, що огірок дещо знаходиться в сірій зоні між випадком 2 і випадком 3. його на відміну від SQL, де ви насправді не можете мати якусь "Вільну волю" і дотримуватися суворого формального синтаксису. Наскільки мені відомо, не дозволяйте огіркам дозволити будь-яку форму тексту після ключових слів "Дано", "Коли" для його сценарію? Це може бути настільки просто, але я з не рідної англійської країни, і її, швидше за все, важко змусити людей дати точні фрагменти.
Raghuram8892

1
Так, ви можете поставити все, що завгодно, після Given/ When/ Then, але а) ви та ваша команда точно визначаєте, що це означає, і б) ви визначаєте значення у відповідниках у коді , тобто формальній мові.
Йорг W Міттаг

0

@ Raghuram8892, текст після ключових слів Дано / Коли / Тоді / І повинен відповідати "фрагменту", інакше крок не відповідає визначенню або "очікує на очікування". Як такий, він прямо підпадає під дію 3.

Щодо "англійської", огірка та його мови, Gherkin призначені для міжнародного використання. Ви можете викликати команду, cucumber --i18n helpпереглянути список підтримуваних мов та cucumber --i18n $CODEпобачити ключові слова для певного мовного коду. Наприклад, cucumber --i18n eoдає ключові слова для есперанто.

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