Часть серии статей о |
Разработка программного обеспечения |
---|
Разработка на основе поведения ( BDD ) подразумевает именование тестов программного обеспечения с использованием языка предметной области для описания поведения кода .
BDD подразумевает использование предметно-ориентированного языка (DSL) с использованием конструкций естественного языка (например, предложений, подобных английскому), которые могут выражать поведение и ожидаемые результаты.
Сторонники утверждают, что он поощряет сотрудничество между разработчиками, экспертами по обеспечению качества и представителями клиентов в рамках программного проекта. [1] [2] Он поощряет команды использовать общение и конкретные примеры для формализации общего понимания того, как должно вести себя приложение. [3] BDD считается эффективной практикой, особенно когда проблемное пространство является сложным. [4]
BDD считается усовершенствованием разработки через тестирование (TDD). [1] [5] [6] [ неопределенно ] [7] [8] BDD сочетает в себе методы TDD с идеями проектирования на основе предметной области и объектно-ориентированного анализа и проектирования, чтобы предоставить группам разработки и управления ПО общие инструменты и общий процесс для совместной разработки ПО. [1] [7]
На высоком уровне BDD — это идея о том, как разработка программного обеспечения должна управляться как деловыми интересами, так и техническим пониманием. Ее практика подразумевает использование специализированных инструментов. [5] Некоторые инструменты, специально предназначенные для BDD, могут использоваться для TDD. Эти инструменты автоматизируют вездесущий язык .
BDD — это процесс, посредством которого структурированные на естественном языке DSL утверждения преобразуются в исполняемые тесты. Результатом являются тесты, которые читаются как критерии приемки для данной функции.
Таким образом, BDD является расширением TDD.
BDD фокусируется на:
По своей сути BDD заключается в переосмыслении подхода к автоматизированному тестированию (включая модульное тестирование и приемочное тестирование ), чтобы избежать проблем, которые возникают естественным образом. Например, BDD предлагает, чтобы имена модульных тестов были целыми предложениями, начинающимися с условного глагола (например, «should» в английском языке), и должны быть написаны в порядке деловой ценности. Приемочные тесты должны быть написаны с использованием стандартной гибкой структуры пользовательской истории : «Будучи [ролью/актером/заинтересованной стороной], я хочу [функцию/возможность], дающую [преимущество]». Критерии приемки должны быть написаны в терминах сценариев и реализованы в классах: учитывая [исходный контекст], когда [событие происходит], то [обеспечить некоторые результаты] .
Начиная с этого момента, многие люди в течение многих лет разрабатывали фреймворки BDD, в конечном итоге сформулировав их как фреймворк для общения и совместной работы разработчиков, QA и нетехнических или деловых участников программного проекта. [9]
BDD предполагает, что тесты программного обеспечения должны называться в терминах желаемого поведения . [5] [7] Заимствуя из гибкой разработки программного обеспечения, «желаемое поведение» в этом случае состоит из требований, установленных бизнесом, — то есть желаемое поведение, которое имеет ценность для бизнеса для любой организации, заказавшей разрабатываемую единицу программного обеспечения. [5] В практике BDD это называется BDD как «снаружи-внутрь» деятельность.
TDD не различает тесты с точки зрения высокоуровневых требований к программному обеспечению, низкоуровневых технических деталей или чего-либо между ними. Поэтому один из способов взглянуть на BDD заключается в том, что это эволюция TDD, которая делает более конкретные выборы.
Другое предложение BDD касается того, как должно быть указано желаемое поведение. BDD предлагает использовать полуформальный формат для спецификации поведения, который заимствован из спецификаций пользовательских историй из области объектно-ориентированного анализа и проектирования . Сценарный аспект этого формата можно рассматривать как применение логики Хоара к спецификации поведения программного обеспечения с использованием предметно-ориентированного языка.
BDD предполагает, что бизнес-аналитики и разработчики программного обеспечения должны сотрудничать в этой области и должны определять поведение в терминах пользовательских историй, каждая из которых явно документирована. Каждая пользовательская история должна, в некоторой степени, следовать структуре: [5]
BDD не требует, как форматируется эта информация, но предполагает, что команда должна выбрать относительно простой стандартизированный формат с указанными выше элементами. [5] Он также предполагает, что сценарии должны быть сформулированы декларативно, а не императивно — на деловом языке, без ссылок на элементы пользовательского интерфейса, через которые происходит взаимодействие. [10] Этот формат упоминается в Cucumber как язык Gherkin .
BDD заимствует концепцию универсального языка из проектирования, ориентированного на предметную область . [5] [7] Универсальный язык — это (полу)формальный язык, который используется всеми членами команды разработчиков программного обеспечения — как разработчиками программного обеспечения, так и нетехническим персоналом. [11] Рассматриваемый язык используется и разрабатывается всеми членами команды как общее средство обсуждения предметной области рассматриваемого программного обеспечения. [11] Таким образом, BDD становится средством общения между всеми различными ролями в проекте по разработке программного обеспечения. [5]
Распространенным риском при разработке программного обеспечения являются сбои в коммуникации между разработчиками и заинтересованными сторонами бизнеса. [12] BDD использует спецификацию желаемого поведения как универсальный язык для членов команды проекта. Вот почему BDD настаивает на полуформальном языке для спецификации поведения: некоторая формальность является обязательным условием для того, чтобы быть универсальным языком. [5] Кроме того, наличие такого универсального языка создает доменную модель спецификаций, так что спецификации могут быть обоснованы формально. [13] Эта модель также является основой для различных доступных программных инструментов, поддерживающих BDD.
Приведенный выше пример устанавливает пользовательскую историю для разрабатываемой программной системы. Эта пользовательская история определяет заинтересованную сторону, бизнес-эффект и бизнес-ценность. Она также описывает несколько сценариев, каждый из которых имеет предварительное условие, триггер и ожидаемый результат. Каждая из этих частей точно идентифицируется более формальной частью языка (например, термин Given можно считать ключевым словом ) и, следовательно, может быть обработана каким-то образом инструментом, который понимает формальные части повсеместного языка.
Большинство приложений BDD используют текстовые DSL и подходы спецификации. Однако графическое моделирование сценариев интеграции также успешно применялось на практике, например, для целей тестирования. [14]
Подобно TDD, BDD может подразумевать использование специализированных инструментов.
BDD требует не только тестового кода, как TDD, но и документа, описывающего поведение на более понятном человеку языке. Это требует двухэтапного процесса для выполнения тестов, чтения и разбора описаний, чтения тестового кода и поиска соответствующей реализации теста для выполнения. Этот процесс делает BDD более трудоемким для разработчиков. Сторонники предполагают, что из-за его понятности для человека ценность этих документов распространяется на относительно нетехническую аудиторию и, следовательно, может служить средством коммуникации для описания требований («функций»).
В принципе, инструмент поддержки BDD представляет собой тестовую среду для программного обеспечения, во многом похожую на инструменты, поддерживающие TDD. Однако, в то время как инструменты TDD, как правило, довольно свободны в том, что разрешено для указания тестов, инструменты BDD привязаны к определению повсеместного языка.
Вездесущий язык позволяет бизнес-аналитикам документировать поведенческие требования таким образом, чтобы их понимали и разработчики. Принцип инструментария поддержки BDD заключается в том, чтобы сделать эти же документы с требованиями непосредственно исполняемыми как набор тестов. Если этого невозможно достичь по причинам, связанным с техническим инструментом, который позволяет выполнять спецификации, то необходимо либо изменить стиль написания поведенческих требований, либо изменить инструмент. [15] Точная реализация поведенческих требований различается в зависимости от инструмента, но гибкая практика вывела следующий общий процесс:
Отдельная подкатегория разработки на основе поведения формируется инструментами, которые используют спецификации в качестве входного языка, а не пользовательские истории. Инструменты спецификации не используют пользовательские истории в качестве входного формата для тестовых сценариев , а используют функциональные спецификации для тестируемых единиц. Эти спецификации часто имеют более техническую природу, чем пользовательские истории, и обычно менее удобны для общения с бизнес-персоналом, чем пользовательские истории. [5] [16] Пример спецификации для стека может выглядеть следующим образом:
Спецификация: СтекКогда создается новый стек, то он пуст.Когда элемент добавляется в стек, то этот элемент оказывается наверху стека.Когда в стеке N элементов и элемент E находится наверху стека , то операция извлечения возвращает E , а новый размер стека равен N-1.
Такая спецификация может точно определять поведение тестируемого компонента, но менее значима для бизнес-пользователя. В результате тестирование на основе спецификации рассматривается в практике BDD как дополнение к тестированию на основе историй и работает на более низком уровне. Тестирование спецификации часто рассматривается как замена модульному тестированию свободного формата. [16]
«Три амиго», также называемые «Семинар по спецификации», представляют собой встречу, на которой владелец продукта обсуждает требование в форме спецификации на примере с различными заинтересованными сторонами, такими как QA и команда разработчиков. Основная цель этого обсуждения — инициировать разговор и выявить любые недостающие спецификации. Обсуждение также дает платформу для QA, команды разработчиков и владельца продукта, чтобы сблизиться и выслушать точку зрения друг друга, чтобы обогатить требование, а также убедиться, что они создают правильный продукт. [17]
Эти три друга: