В настоящее время я изучаю рамки тестирования BDD, такие как огурец, и мне интересно, когда люди говорят
поскольку файлы объектов представлены простым естественным языком, это улучшает ясность и дает ясное видение
но разве естественный язык не является причиной большинства проблем, с которыми мы сталкиваемся в разработке программного обеспечения?
Естественный язык неоднозначен, и именно поэтому многие программные проекты терпят неудачу из-за неправильного толкования требований клиентов и понимания разработчика. Я не получаю нишу здесь.
Да, разбивка тестов на крошечные простые выполнимые действия имеет смысл и дает определенный уровень ясности, но повышает ли это производительность в целом?
PS: я не эксперт, и я не делаю здесь мнение. Мне просто любопытно понять концепцию.
Ответы:
Ты прав. BDD не устраняет проблемы с языковой неоднозначностью - совсем нет. Как указывали другие, переводимые фрагменты должны быть сопоставлены путем правильного их определения, но это также не решает основную проблему неоднозначности.
Теперь, почему BDD действительно стоит, несмотря на то, что эта проблема не решена? Есть несколько причин, и этот список, конечно, не полный.
Неоднозначность не была решена
Это не повод ни в пользу BDD, ни против него. Но когда вы противопоставляете это другим подходам, таким как пользовательские истории или требования, тогда все подходы к разработке ПО страдают от языковой неоднозначности, поскольку все они так или иначе начинаются с формулировки естественного языка.
Технически проблема языковой неоднозначности была решена с помощью искусственных языков, таких как ложбан , но, опять же, ваш клиент и разработчики, скорее всего, не будут знать этот язык.
Вездесущий язык
BDD идет рука об руку с идеей вездесущего языка. Возможность задавать сценарии вместе со всеми заказчиками, тестировщиками и разработчиками просто дает BDD преимущество над другими подходами.
Рассмотрим традиционного инженера требований, записывающего все требования. Как только вы, как тестировщик или заказчик, получите этот 300-страничный документ, полный требований для проверки, у вас возникнет гораздо больше насущных проблем, чем в используемой там терминологии.
Пользовательские истории немного лучше в этом плане, поскольку они также включают в себя все заинтересованные стороны. С точки зрения вездесущего языка, я бы не сказал, что BDD или пользовательские истории лучше - хотя они значительно отличаются в следующем пункте.
способность быть свидетелем в суде
Основным аспектом BDD является то, что ваши спецификации на самом деле исполняются (через Cucumber или тому подобное). Ни требования, ни пользовательские истории не предлагают эту функцию. Лично для меня это главный пункт продажи BDD.
Сравните это с традиционными требованиями - мы веками говорили инженерам по требованиям, что их требования должны быть проверяемыми. Тем не менее, каждый проект сталкивается с ситуацией, когда где-то в будущем тестировщики понимают, что они понятия не имеют, как проверить определенное требование.
Пользовательские истории, если все сделано правильно, включают тестировщиков на ранней стадии их создания, чтобы убедиться в этом. К сожалению, это тот случай, когда теория сталкивается с реальным миром, где я видел множество историй, которых раньше не видел ни один тестер.
С другой стороны, BDD автоматически дает вам исполняемый сценарий тестирования. Нет никаких оправданий и способов обойти это (хорошо, если вы полностью не игнорируете слои автоматизации и просто записываете сценарии для причудливой поэзии).
В более общем смысле, Test First - это принцип, который был очень полезен на всех этапах разработки программного обеспечения, а BDD - его применение на самом внешнем уровне разработки (по сравнению, например, с TDD на уровне устройств).
Резюме
Таким образом, BDD не избавляет вас от проблем неясности естественного языка. Это, однако, поможет вам решить эту проблему с помощью двух важных моментов: сосредоточиться на вездесущем языке, чтобы уменьшить неоднозначности (это не устранит их полностью, но это очень поможет!) И заставив вас написать исполняемый файл технические характеристики. Последний момент помогает решить проблемы неоднозначности главным образом потому, что именно в этом случае двусмысленности начинают проявляться как проблемы в противном случае.
источник
Когда что-то написано на «естественном языке», это может означать несколько вещей:
Это буквально английский. Поскольку английский является очень двусмысленным и неточным языком, этот режим ввода неудовлетворителен в контексте разработки программного обеспечения.
Это английский, но соответствующие термины точно определены. Такой язык используется в юридических документах или математических текстах.
Это формальный язык, но язык моделируется очень близко после соглашений естественного языка. Это описывает все языки программирования, в некоторой степени. Чем больше английский похож на формальный язык, тем легче его понять для неопытных читателей. Известные примеры языков программирования с этой целью включают COBOL и SQL:
select id, name from persons where age > 18
это сразу очевидно. Недостатком этих языков является то, что вам нужно понимать формальный язык для написания рабочего кода. Кроме того, эти языки часто очень многословны.DDD предполагает, что проект использует вездесущий язык для описания домена. По сути, это случай 2: определите соответствующие термины, чтобы вы могли общаться именно на естественном языке.
Сам по себе огурец - это случай 3: формальный язык, который имеет намерение читать очень близко к нормальному английскому языку. Точнее: Cucumber - это фреймворк, который позволяет вам определить простой формальный язык, который можно использовать для выражения требований / тестов. Дело в том, что один и тот же документ представляет требования к естественному языку и автоматически выполняемые тесты, поэтому они всегда будут синхронизированы. Вы можете прочитать сценарий огурца и убедиться, что он правильно отражает ваши требования, не понимая, как все это работает.
Огурец работает путем сопоставления документа с известными фрагментами естественного языка. Эти фрагменты должны быть определены в первую очередь. Чтобы написать сценарий в Cucumber, вы должны знать о доступных фрагментах - программа не будет читать ваши мысли. Эти фрагменты также являются источником возможных проблем: когда вы реализуете поведение текстового фрагмента, ваш код может сделать что-то немного отличное от того, что предлагает текст фрагмента. Это вряд ли будет проблемой, если один и тот же фрагмент используется много раз. Поэтому огурец хорошо подходит для описания бизнес-правил, которые состоят из меньшего набора условий, действий и результатов. Другие структуры тестирования могли бы быть лучше, если бы каждый фрагмент использовался только один или два раза, например, потому что настройка для каждого контрольного примера уникальна.
источник
Given
/When
/Then
, но а) вы и ваша команда точно определяете, что это значит, и б) вы определяете значение в сопоставителях в коде , то есть формальный язык.@ Raghuram8892, текст после ключевых слов Given / When / Then / And должен соответствовать «фрагменту», в противном случае шаг завершается ошибкой как неопределенный или «ожидающий выполнения». Как таковой, он попадает прямо в случай 3.
Что касается «английского», огурца и его языка, огурчик предназначен для международного использования. Вы можете вызвать команду,
cucumber --i18n help
чтобы увидеть список языков, поддерживаемых в настоящее время, иcucumber --i18n $CODE
просмотреть ключевые слова для конкретного кода языка. Например,cucumber --i18n eo
дает ключевые слова для эсперанто.источник