Ви праві. BDD не усуває проблем із двозначністю мови - зовсім не. Як зазначали інші, фрагменти, які отримують переклади, необхідно узгоджувати, правильно визначаючи їх, але це також не вирішує основну проблему двозначності.
Тепер, чому BDD насправді вартий, незважаючи на те, що не вирішує цю проблему? Є деякі причини, і цей перелік, безумовно, не є повним.
Неоднозначність не вирішена
Це не є причиною на користь BDD, ні проти неї. Але коли ти протиставляєш його іншим підходам, таким як розповіді користувачів або вимоги, то всі підходи до розробки ПЗ страждають від мовної неоднозначності, оскільки всі вони так чи інакше починаються з природного мовного формулювання.
Технічно проблема неясності мови була вирішена за допомогою таких штучних мов, як лойбан , але потім, знову ж таки, ваш клієнт та розробники, швидше за все, не знають цієї мови.
Всюдисуща мова
BDD йде рука об руку з ідеєю всюдисущої мови. Можливість задавати сценарії разом із усіма замовниками, тестерами та розробниками, просто дає BDD перевагу перед іншими підходами.
Розглянемо, як інженер з традиційних вимог записує всі вимоги. Як тільки ви, як тестувач або клієнт, отримаєте документ на 300 сторінок, повний вимог до перегляду, у вас виникне набагато більше нагальних проблем, ніж термінологія, яка там використовується.
Історії користувачів є трохи кращими на цьому фронті, оскільки вони також включають усіх зацікавлених сторін у їх створенні. Щодо всюдисущої мови, я б не сказав, що або BDD, або історії користувачів є кращими - хоча в наступному пункті вони суттєво відрізняються.
Заповітність
Основним аспектом BDD є те, що ваші технічні характеристики фактично виконуються (через огірок тощо). Ні вимоги, ні історії користувачів не пропонують цю функцію. Для мене особисто це головна точка продажу BDD.
На відміну від традиційних вимог - ми говорили інженерам про вимоги впродовж віків, що їхні вимоги повинні бути перевірені. Але кожен проект бачить випадок, коли десь внизу лінії тестери розуміють, що вони не мають уявлення, як перевірити певну вимогу.
Історії користувачів, якщо зроблено правильно, включають тестерів на етапі їх раннього створення, щоб переконатися в цьому. На жаль, це випадок теорії, що стикається з реальним світом, де я бачив численні історії, яких жоден тестер раніше не бачив.
З іншого боку, BDD автоматично дає вам тестовий сценарій, що виконується. Немає жодних виправдань і шляхів навколо цього (ну хіба що ви повністю ігноруєте шари автоматизації та просто записуєте сценарії для фантазійної поезії).
Загалом, Test First - це принцип, який був дуже корисним на всіх етапах розробки програмного забезпечення, і BDD - це його застосування до самого зовнішнього шару розробки (порівняно з f.ex. TDD на рівні одиниці).
Підсумок
Підсумовуючи це, BDD не позбавляє вас від проблем неоднозначності природних мов. Однак це допоможе вам вирішити цю проблему за допомогою двох важливих моментів: зосередити увагу на всюдисущій мові, щоб зменшити двозначності (це не усуне їх повністю, але це допоможе тоні!) Та змусивши вас писати виконуваний файл технічні характеристики. Останній пункт допомагає вирішувати проблеми неоднозначності здебільшого тому, що саме тоді двозначності починають проявлятися як проблеми в іншому випадку.