Как поведенческая разработка улучшает ясность, когда естественные языки неоднозначны?

9

В настоящее время я изучаю рамки тестирования BDD, такие как огурец, и мне интересно, когда люди говорят

поскольку файлы объектов представлены простым естественным языком, это улучшает ясность и дает ясное видение

но разве естественный язык не является причиной большинства проблем, с которыми мы сталкиваемся в разработке программного обеспечения?

Естественный язык неоднозначен, и именно поэтому многие программные проекты терпят неудачу из-за неправильного толкования требований клиентов и понимания разработчика. Я не получаю нишу здесь.

Да, разбивка тестов на крошечные простые выполнимые действия имеет смысл и дает определенный уровень ясности, но повышает ли это производительность в целом?

PS: я не эксперт, и я не делаю здесь мнение. Мне просто любопытно понять концепцию.

Raghuram8892
источник
1
Очень хороший вопрос Должен сказать, что я никогда не видел таких вещей, как то, что огурец предлагает на практике. Естественный язык не подходит для точных технических задач, таких как определение тестов.
Андрес Ф.
Использование языка BDD предназначено для отражения существующего языка бизнес-сферы, который уже должен быть непризнанным для бизнеса. Статья в Википедии утверждает, что в начале текста.
Мартин Спамер

Ответы:

8

Ты прав. BDD не устраняет проблемы с языковой неоднозначностью - совсем нет. Как указывали другие, переводимые фрагменты должны быть сопоставлены путем правильного их определения, но это также не решает основную проблему неоднозначности.

Теперь, почему BDD действительно стоит, несмотря на то, что эта проблема не решена? Есть несколько причин, и этот список, конечно, не полный.

Неоднозначность не была решена

Это не повод ни в пользу BDD, ни против него. Но когда вы противопоставляете это другим подходам, таким как пользовательские истории или требования, тогда все подходы к разработке ПО страдают от языковой неоднозначности, поскольку все они так или иначе начинаются с формулировки естественного языка.

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

Вездесущий язык

BDD идет рука об руку с идеей вездесущего языка. Возможность задавать сценарии вместе со всеми заказчиками, тестировщиками и разработчиками просто дает BDD преимущество над другими подходами.

Рассмотрим традиционного инженера требований, записывающего все требования. Как только вы, как тестировщик или заказчик, получите этот 300-страничный документ, полный требований для проверки, у вас возникнет гораздо больше насущных проблем, чем в используемой там терминологии.

Пользовательские истории немного лучше в этом плане, поскольку они также включают в себя все заинтересованные стороны. С точки зрения вездесущего языка, я бы не сказал, что BDD или пользовательские истории лучше - хотя они значительно отличаются в следующем пункте.

способность быть свидетелем в суде

Основным аспектом BDD является то, что ваши спецификации на самом деле исполняются (через Cucumber или тому подобное). Ни требования, ни пользовательские истории не предлагают эту функцию. Лично для меня это главный пункт продажи BDD.

Сравните это с традиционными требованиями - мы веками говорили инженерам по требованиям, что их требования должны быть проверяемыми. Тем не менее, каждый проект сталкивается с ситуацией, когда где-то в будущем тестировщики понимают, что они понятия не имеют, как проверить определенное требование.

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

С другой стороны, BDD автоматически дает вам исполняемый сценарий тестирования. Нет никаких оправданий и способов обойти это (хорошо, если вы полностью не игнорируете слои автоматизации и просто записываете сценарии для причудливой поэзии).

В более общем смысле, Test First - это принцип, который был очень полезен на всех этапах разработки программного обеспечения, а BDD - его применение на самом внешнем уровне разработки (по сравнению, например, с TDD на уровне устройств).

Резюме

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

Фрэнк
источник
это потрясающий ответ. Я провел небольшое исследование по этому вопросу после того, как задал этот вопрос, и я должен согласиться с большинством ваших соображений. Одна из основных проблем с использованием таких инструментов, как огурец или любой другой инструмент BDD, заключается в том, что разработчик не понимает идею BDD на уровне дзен. , Вот интересная статья об этом Элизабет Кеог.
Raghuram8892
4

Когда что-то написано на «естественном языке», это может означать несколько вещей:

  • Это буквально английский. Поскольку английский является очень двусмысленным и неточным языком, этот режим ввода неудовлетворителен в контексте разработки программного обеспечения.

  • Это английский, но соответствующие термины точно определены. Такой язык используется в юридических документах или математических текстах.

  • Это формальный язык, но язык моделируется очень близко после соглашений естественного языка. Это описывает все языки программирования, в некоторой степени. Чем больше английский похож на формальный язык, тем легче его понять для неопытных читателей. Известные примеры языков программирования с этой целью включают COBOL и SQL: select id, name from persons where age > 18это сразу очевидно. Недостатком этих языков является то, что вам нужно понимать формальный язык для написания рабочего кода. Кроме того, эти языки часто очень многословны.

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

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

Огурец работает путем сопоставления документа с известными фрагментами естественного языка. Эти фрагменты должны быть определены в первую очередь. Чтобы написать сценарий в Cucumber, вы должны знать о доступных фрагментах - программа не будет читать ваши мысли. Эти фрагменты также являются источником возможных проблем: когда вы реализуете поведение текстового фрагмента, ваш код может сделать что-то немного отличное от того, что предлагает текст фрагмента. Это вряд ли будет проблемой, если один и тот же фрагмент используется много раз. Поэтому огурец хорошо подходит для описания бизнес-правил, которые состоят из меньшего набора условий, действий и результатов. Другие структуры тестирования могли бы быть лучше, если бы каждый фрагмент использовался только один или два раза, например, потому что настройка для каждого контрольного примера уникальна.

Амон
источник
спасибо за подробную информацию. Я чувствую, что огурец находится в некоторой серой области между случаем 2 и случаем 3. В отличие от SQL, где вы на самом деле не можете иметь какую-то «свободную волю» и придерживаться строгого формального синтаксиса. Насколько мне известно, не разрешают ли огурцы использовать любую форму текста после ключевых слов "Дано" и "Когда" для своего сценария? Это может быть так просто, но я из не родной страны, и, скорее всего, трудно заставить людей давать точные фрагменты.
Raghuram8892
1
Да, вы можете поместить все, что захотите, после Given/ When/ Then, но а) вы и ваша команда точно определяете, что это значит, и б) вы определяете значение в сопоставителях в коде , то есть формальный язык.
Йорг Миттаг
0

@ Raghuram8892, текст после ключевых слов Given / When / Then / And должен соответствовать «фрагменту», в противном случае шаг завершается ошибкой как неопределенный или «ожидающий выполнения». Как таковой, он попадает прямо в случай 3.

Что касается «английского», огурца и его языка, огурчик предназначен для международного использования. Вы можете вызвать команду, cucumber --i18n helpчтобы увидеть список языков, поддерживаемых в настоящее время, и cucumber --i18n $CODEпросмотреть ключевые слова для конкретного кода языка. Например, cucumber --i18n eoдает ключевые слова для эсперанто.

хрустящий
источник