Поведенческая разработка - Википедия - Behavior-driven development

Разработка программного обеспечения
Активность ядер
Парадигмы и модели
Методологии и рамки
Вспомогательные дисциплины
Практики
Инструменты
Стандарты и свод знаний
Глоссарии
Контуры

В программная инженерия, поведенческая разработка (BDD) является Гибкая разработка программного обеспечения процесс, который поощряет сотрудничество между разработчиками, QA и нетехническими или бизнес-участниками программного проекта.[1][2][3] Он побуждает команды использовать беседу и конкретные примеры для формализации общего понимания того, как должно вести себя приложение.[4] Это возникло из разработка через тестирование (TDD).[1][2][5][6][нечеткий ][7] Поведенческая разработка сочетает в себе общие методы и принципы TDD с идеями от предметно-ориентированный дизайн и объектно-ориентированный анализ и дизайн чтобы предоставить командам разработчиков и менеджеров программного обеспечения общие инструменты и общий процесс для совместной разработки программного обеспечения.[2][7]

Хотя BDD в основном представляет собой идею о том, как разработка программного обеспечения должна управляться как бизнес-интересами, так и техническими знаниями, практика BDD действительно предполагает использование специализированных программных инструментов для поддержки процесса разработки.[5] Хотя эти инструменты часто разрабатываются специально для использования в проектах BDD, их можно рассматривать как специализированные формы инструментов, поддерживающих разработку через тестирование. Инструменты служат для добавления автоматизации к вездесущий язык это центральная тема BDD.

BDD в значительной степени упрощается за счет использования простого предметно-ориентированный язык (DSL) с использованием конструкций на естественном языке (например, предложений на английском языке), которые могут выражать поведение и ожидаемые результаты. Сценарии тестирования уже давно являются популярным приложением DSL с разной степенью сложности. BDD считается эффективной технической практикой, особенно когда «проблемное пространство» бизнес-задачи, которую необходимо решить, является сложным.[8]

История

Поведенческая разработка является продолжением разработка через тестирование:[9] разработка, использующая простой предметно-ориентированный язык сценариев (DSL). Эти DSL преобразуют структурированные операторы естественного языка в исполняемые тесты. Результатом является более тесная связь с критериями приемки для данной функции и тестами, используемыми для проверки этой функциональности. Таким образом, это естественное расширение тестирования TDD в целом.

BDD фокусируется на:

  • С чего начать в процессе
  • Что тестировать, а что нет
  • Сколько тестировать за один раз
  • Как называть тесты
  • Как понять, почему тест не проходит

По сути, BDD - это переосмысление подхода к модульное тестирование и приемочное тестирование чтобы избежать проблем, которые возникают естественным образом. Например, BDD предлагает, чтобы имена модульных тестов были целыми предложениями, начинающимися с условного глагола (например, «should» на английском языке), и должны быть написаны в порядке деловой ценности. Приемочные тесты должны быть написаны с использованием стандартной гибкой структуры история пользователя: «Как [роль / актер / заинтересованное лицо] я хочу, чтобы [функция / возможность] приносила [выгоду]». Критерии приемки должны быть записаны в виде сценариев и реализованы в классах: Учитывая [исходный контекст], когда [событие происходит], тогда [обеспечить некоторые результаты] .

Начиная с этого момента, многие люди разрабатывали фреймворки BDD в течение многих лет, наконец, образуя их в терминах среды общения и совместной работы для разработчиков. QA и нетехнические или бизнес-участники программного проекта.[10] Во время «Agile-спецификаций, BDD и Testing eXchange» в ноябре 2009 г. в Лондоне Дэн Норт[11] дал следующее описание BDD:

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

Во время интервью с Дэном Нортом на конференции GOTO в 2013 году Лиз Кио[12] определяет BDD как:

Он использует примеры, чтобы обсудить, как ведет себя приложение ... И обсудить эти примеры.[13]

Дэн Норт создал структуру BDD, JBehave, за которым следует BDD-фреймворк на уровне истории для Ruby под названием RBehave[14] который позже был интегрирован в RSpec проект.[15] Он также работал с Дэвидом Челимски, Аслаком Хеллесой и другими над разработкой RSpec, а также над написанием «Книги RSpec: разработка на основе поведения с помощью RSpec, Cucumber и Friends». Первая основанная на сюжете структура в RSpec была позже заменена на Огурец в основном разработан Аслак Хеллесой. Капибара, который является частью среды тестирования Cucumber, является одним из таких веб-приложений для автоматизации тестирования.

Принципы BDD

Разработка через тестирование - это методология разработки программного обеспечения, которая, по сути, гласит, что для каждой единицы программного обеспечения разработчик программного обеспечения должен:

  • определить набор тестов для устройства первый;
  • сделать тесты неудачными;
  • затем реализовать агрегат;
  • наконец, убедитесь, что реализация модуля обеспечивает успешное выполнение тестов.

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

Разработка, управляемая поведением, определяет, что тесты любой единицы программного обеспечения должны быть определены с точки зрения желаемого поведения единицы.[5][7][1] Заимствование из гибкая разработка программного обеспечения «желаемое поведение» в этом случае состоит из требований, установленных бизнесом, то есть желаемого поведения, которое ценность бизнеса для любой организации, вводящей в эксплуатацию строящийся программный модуль.[5][1] В практике BDD это называется деятельностью BDD «снаружи внутрь».[16]

Характеристики поведения

После этого фундаментального выбора компания BDD сделала второй выбор: как необходимо указать желаемое поведение. В этой области BDD предпочитает использовать полуформальный формат для поведенческой спецификации, который заимствован из спецификаций пользовательских историй из области объектно-ориентированный анализ и дизайн. В сценарий аспект этого формата можно рассматривать как применение Логика Хоара к поведенческой спецификации программных модулей с помощью Доменный язык ситуации.

BDD указывает, что бизнес-аналитики и разработчики должны сотрудничать в этой области и должны определять поведение с точки зрения пользовательские истории, каждый из которых явно записан в отдельном документе.[1][16] Каждый История пользователя должен каким-то образом следовать следующей структуре:[5][16]

Заголовок
Явное название.
Повествование
Короткий вводный раздел со следующей структурой:
  • Как: человек или роль, которые получат выгоду от функции;
  • я хочу: особенность;
  • так что: выгода или ценность функции.
Критерии приемки
Описание каждого конкретного сценарий повествования со следующей структурой:
  • Данный: начальный контекст в начале сценария в одном или нескольких предложениях;
  • Когда: событие, запускающее сценарий;
  • потом: ожидаемый результат в одном или нескольких пунктах.

BDD не предъявляет никаких формальных требований именно к как эти пользовательские истории должен быть записан, но он настаивает на том, чтобы каждая команда, использующая BDD, придумала простой стандартизированный формат для записи пользовательские истории который включает элементы, перечисленные выше.[5][16] Однако в 2007 году Дэн Норт предложил шаблон для текстового формата, который нашел широкое применение в различных программных инструментах BDD.[16] Очень краткий пример этого формата может выглядеть так:

Заголовок: Возврат и обмен идут в инвентарь.Как владелец магазина,я хочу для добавления предметов обратно в инвентарь при их возврате или обмене,так что Я могу отслеживать инвентарь.Сценарий 1: Предметы, возвращенные для возврата, должны быть добавлены в инвентарь.Данный что клиент ранее купил у меня черный свитери У меня в инвентаре три черных свитера,когда возвращают черный свитер на возврат денег,тогда У меня в инвентаре должно быть четыре черных свитера.Сценарий 2: Обмененные предметы следует вернуть в инвентарь.Данный что клиент ранее купил у меня синюю одеждуи У меня в инвентаре две синие одеждыи три черных одежды в инвентаре,когда они меняют синюю одежду на черную одежду,тогда У меня в инвентаре должно быть три синих предмета одеждыи две черные одежды в инвентаре.

В сценарии в идеале сформулированы декларативно, а не императивно - на деловом языке, без ссылки на элементы пользовательского интерфейса, через которые происходит взаимодействие.[17]

Этот формат называется языком Gherkin, синтаксис которого аналогичен приведенному выше примеру. Период, термин Корнишон, однако, специфичен для Огурец, JBehave, Салат,[18] вести себя и Бехат программные инструменты.[19][20][21][22]

Спецификация как повсеместный язык

Развитие, основанное на поведении, заимствует концепцию вездесущий язык из предметно-ориентированный дизайн.[5][7] Вездесущий язык - это (полу) формальный язык, которым пользуются все члены команды разработчиков программного обеспечения - как разработчики программного обеспечения, так и нетехнический персонал.[23] Рассматриваемый язык используется и разрабатывается всеми членами команды в качестве общего средства обсуждения предметной области программного обеспечения.[23] Таким образом, BDD становится средством связи между всеми различными ролями в программном проекте.[5][24]

Распространенный риск, связанный с разработкой программного обеспечения, включает нарушения связи между разработчиками и заинтересованными сторонами.[25] BDD использует спецификацию желаемого поведения как универсальный язык для членов команды проекта. Это причина того, что BDD настаивает на полуформальном языке для описания поведения: некоторая формальность является требованием для повсеместного использования языка.[5] Кроме того, наличие такого повсеместного языка создает модель предметной области спецификаций, так что о спецификациях можно рассуждать формально.[26] Эта модель также является основой для различных доступных программных инструментов, поддерживающих BDD.

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

Большинство приложений BDD используют текстовые DSL и подходы к спецификации. Однако графическое моделирование сценариев интеграции также успешно применяется на практике, например, для целей тестирования. [27]

Поддержка специализированного инструмента

Подобно практике проектирования, основанного на тестировании, разработка на основе поведения предполагает использование в проекте специализированных инструментов поддержки. BDD можно рассматривать как более конкретную версию TDD, поскольку она требует предоставления не только тестового кода, но и отдельного документа в дополнение к описанию поведения на более понятном для человека языке. Это требует двухэтапного процесса для выполнения тестов, чтения и анализа описаний, а также чтения тестового кода и поиска соответствующей реализации теста для выполнения. Этот процесс делает BDD немного более трудоемким для работы с разработчиком, но из-за своей удобочитаемой природы ценность этих документов распространяется на еще менее техническую аудиторию и, следовательно, может служить средством коммуникации для описания требований («функций» ).

Принципы инструмента

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

Как уже говорилось, повсеместный язык позволяет бизнес-аналитикам записывать поведенческие требования таким образом, чтобы они были понятны разработчикам. Принцип инструментария поддержки BDD состоит в том, чтобы сделать те же самые документы требований исполняемыми напрямую как набор тестов. Если это не может быть достигнуто по причинам, связанным с техническим инструментом, который позволяет выполнять спецификации, то необходимо изменить стиль написания поведенческих требований или инструмент.[28] Точная реализация поведенческих требований варьируется в зависимости от инструмента, но гибкая практика предполагает следующий общий процесс:

  • Инструмент читает документ спецификации.
  • Инструмент непосредственно понимает полностью формальные части вездесущего языка (например, Данный ключевое слово в примере выше). Исходя из этого, инструмент разбивает каждый сценарий на значимые пункты.
  • Каждое отдельное предложение в сценарии преобразуется в своего рода параметр для проверки пользовательской истории. Эта часть требует от разработчиков программного обеспечения работы над конкретным проектом.
  • Затем платформа выполняет тест для каждого сценария с параметрами из этого сценария.

Дэн Норт разработал ряд сред, поддерживающих BDD (включая JBehave и RBehave ), работа которого основана на предложенном им шаблоне для записи пользовательских историй.[5] Эти инструменты используют текстовое описание для вариантов использования, и несколько других инструментов (например, CBehave) последовали их примеру. Однако этот формат не требуется, поэтому есть другие инструменты, которые также используют другие форматы. Например, Фитнес (который построен вокруг таблицы решений ), также использовался для развертывания BDD.[29]

Примеры инструментов

Существует несколько различных примеров программных инструментов BDD, используемых сегодня в проектах для различных платформ и языков программирования.

Возможно, наиболее известным является JBehave, который был разработан Дэном Норт, Элизабет Кио и некоторыми другими.[30] Следующий пример взят из этого проекта:[20]

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

Данный игра 5 на 5Когда Я переключаю ячейку на (3, 2)потом сетка должна выглядеть так ................. X .......Когда Я переключаю ячейку на (3, 1)потом сетка должна иметь вид ................. X .... X ..Когда Я переключаю ячейку на (3, 2)потом сетка должна иметь вид ...................... X ..

Жирный шрифт не является частью ввода; он включен сюда, чтобы показать, какие слова распознаются как формальный язык. JBehave признает условия Данный (как предварительное условие, определяющее начало сценария), Когда (как триггер события) и потом (как постусловие, которое должно быть проверено как результат действия, следующего за триггером). Исходя из этого, JBehave может читать текстовый файл, содержащий сценарий и разбор это в пункты (пункт настройки, а затем три триггера событий с проверяемыми условиями). Затем JBehave берет эти предложения и передает их коду, который может устанавливать тест, реагировать на триггеры событий и проверять результат. Этот код должен быть написан разработчиками в команде проекта (в Ява, потому что это платформа, на которой основан JBehave). В этом случае код может выглядеть так:

частный Игра игра;частный StringRenderer рендерер;@Данный("игра $ ширина на $ высота")общественный пустота theGameIsRunning(int ширина, int высота) {    игра = новый Игра(ширина, высота);    рендерер = новый StringRenderer();    игра.setObserver(рендерер);}    @Когда(«Я переключаю ячейку в ($ столбец, $ строка)»)общественный пустота iToggleTheCellAt(int столбец, int ряд) {    игра.toggleCellAt(столбец, ряд);}@Потом("сетка должна выглядеть как $ grid")общественный пустота theGridShouldLookLike(Нить сетка) {    утверждать, что(рендерер.asString(), равно(сетка));}

В коде есть метод для каждого типа предложения в сценарии. JBehave определит, какой метод соответствует какому предложению, с помощью аннотации и будет вызывать каждый метод по порядку при прохождении сценария. Предполагается, что текст в каждом предложении в сценарии будет соответствовать тексту шаблона, приведенному в коде для этого предложения (например, Данный в сценарии ожидается, что за ним последует пункт формы «игра X на Y»). JBehave поддерживает сопоставление предложений с шаблонами и имеет встроенную поддержку для выбора терминов из шаблона и передачи их методам в тестовом коде в качестве параметров. Тестовый код обеспечивает реализацию для каждого типа предложения в сценарии, который взаимодействует с тестируемым кодом и выполняет тест на основе сценария. В этом случае:

  • В theGameIsRunning метод реагирует на Данный пункт, настроив начальную игровую сетку.
  • В iToggleTheCellAt метод реагирует на Когда предложение, запустив событие переключения, описанное в предложении.
  • В theGridShouldLookLike метод реагирует на потом предложение, сравнивая состояние игровой сетки с ожидаемым состоянием из сценария.

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

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

История против спецификации

Отдельную подкатегорию разработки, основанной на поведении, составляют инструменты, использующие спецификации в качестве языка ввода, а не пользовательские истории. Примером этого стиля является RSpec инструмент, который также изначально был разработан Дэном Нортом. Инструменты спецификации не используют пользовательские истории в качестве формата ввода для тестовые сценарии а используйте функциональные спецификации для тестируемых устройств. Эти спецификации часто имеют более технический характер, чем пользовательские истории, и обычно менее удобны для общения с бизнес-персоналом, чем пользовательские истории.[5][31] Пример спецификации для куча может выглядеть так:

Технические характеристики: КучаКогда создается новый стекпотом это пустоКогда элемент добавляется в стекпотом этот элемент находится наверху стекаКогда в стеке N элементов И элемент E находится на вершине стекапотом операция pop возвращает EИ новый размер стека - N-1

Такая спецификация может точно определять поведение тестируемого компонента, но менее значима для бизнес-пользователя. В результате тестирование на основе спецификации рассматривается в практике BDD как дополнение к тестированию на основе историй и работает на более низком уровне. Тестирование спецификаций часто рассматривается как замена свободного формата модульное тестирование.[31]

Инструменты тестирования спецификаций, такие как RSpec и JDave, несколько отличаются по своей природе от таких инструментов, как JBehave. Поскольку они рассматриваются как альтернатива базовым инструментам модульного тестирования, таким как JUnit эти инструменты, как правило, предпочитают отказаться от разделения кода истории и тестирования и вместо этого предпочитают встраивать спецификацию непосредственно в код тестирования. Например, тест RSpec для хеш-таблица может выглядеть так:[32]

описывать Хеш делать  позволять(: hash) { Хеш[:Привет, 'Мир'] }  Это { ожидать(Хеш.новый).к экв({}) }  Это "хеширует правильную информацию в ключе" делать    ожидать(хэш[:Привет]).к экв('Мир')  конец  Это 'включает ключ' делать    хэш.ключи.включают?(:Привет).должен быть истинный  конецконец

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

Результатом проверки будет:

 Hash should eq {} включает ключевые хеши правильную информацию в ключе

Три Амигоса

Три Amigos, также называемые «Семинар по спецификациям», представляют собой встречу, на которой Владелец продукта обсуждает требование в форме «Спецификация на примере» с различными заинтересованными сторонами, такими как отдел контроля качества и команда разработчиков. Ключевая цель этого обсуждения - вызвать обсуждение и выявить любые недостающие спецификации. Обсуждение также дает платформу для QA, команды разработчиков и владельца продукта, чтобы сойтись и выслушать точки зрения друг друга, чтобы обогатить требования, а также убедиться, что они создают правильный продукт.[33]

Три Amigos

  • Бизнес - роль бизнес-пользователя заключается только в определении проблемы (а не в попытках предложить какое-либо решение)
  • Разработка - Роль разработчиков заключается в том, чтобы предлагать способы решения проблемы.
  • Тестирование - роль тестировщиков заключается в том, чтобы подвергнуть сомнению решение, выявить как можно больше различных возможностей для мозгового штурма по сценариям «Что, если» и помочь сделать решение более точным, чтобы устранить проблему.

Смотрите также

Рекомендации

  1. ^ а б c d е Норт, Дэн (март 2006 г.). «Представляем BDD». Дэн Норт. Получено 25 апреля 2019.
  2. ^ а б c «Развитие, управляемое поведением». Архивировано из оригинал 1 сентября 2015 г.. Получено 12 августа 2012.
  3. ^ Кио, Лиз (07.09.2009). «Введение в разработку, основанную на поведении». SkillsMatter. Получено 1 мая 2019.
  4. ^ Джон Фергюсон Смарт (2014). BDD в действии: разработка на основе поведения для всего жизненного цикла программного обеспечения. Публикации Мэннинга. ISBN  9781617291654.
  5. ^ а б c d е ж грамм час я j k Харинг, Рональд (февраль 2011 г.). де Руйтер, Роберт (ред.). «Разработка на основе поведения: Beter dan Test Driven Development». Журнал Java (на голландском). Журналы Veen (1): 14–17. ISSN  1571-6236.
  6. ^ Солис, Карлос; Ван, Сяофэн (2011). «Исследование характеристик развития, обусловленного поведением». Разработка программного обеспечения и передовые приложения (SEAA), 37-я конференция EUROMICRO, 2011 г.: 383–387. Дои:10.1109 / SEAA.2011.76. HDL:10344/1256. ISBN  978-1-4577-1027-8.
  7. ^ а б c d Bellware, Скотт (июнь 2008 г.). «Развитие, управляемое поведением». Журнал Code. Архивировано из оригинал 12 июля 2012 г.. Получено 1 мая 2019.
  8. ^ Тараил, Ранджит (15 февраля 2016 г.). «Разработка, основанная на поведении: упрощение сложного пространства проблем». РешенияIQ. Получено 15 февраля 2018.
  9. ^ Лиз Кио (27 июня 2011 г.). «ATDD против BDD, и история некоторых связанных вещей». Получено 6 мая 2019.
  10. ^ "Книга RSpec - вопрос о главе 11: Написание важного программного обеспечения". Архивировано из оригинал на 2009-11-07. Получено 2009-08-09.
  11. ^ Дэн Норт: Как продать BDD бизнесу В архиве 2010-11-25 на Wayback Machine
  12. ^ "Лиз Кио".
  13. ^ GOTO 2013 • Интервью с Лиз Кио и Дэном Норт https://www.youtube.com/watch?v=g5WpUJk8He4
  14. ^ Д. Норт, Представляем RBehave
  15. ^ С. Миллер, InfoQ: RSpec включает RBehave
  16. ^ а б c d е Норт, Дэн (11 февраля 2007 г.). "Что в рассказе?". Дэн Норт. Получено 12 августа 2012.
  17. ^ Маби, Бен. «Императивные и декларативные сценарии в пользовательских историях». Архивировано из оригинал 3 июня 2010 г.. Получено 19 мая 2008.
  18. ^ "Вкратце - Документация по Салату 0.2.23 (выпуск криптонита)". салат-латук. Получено 2020-02-06.
  19. ^ «Корнишон». Получено 7 июн 2020.
  20. ^ а б "Что такое JBehave?". JBehave.org. Получено 20 октября 2015.
  21. ^ «Beeve - это разработка на основе поведения в стиле Python». Архивировано из оригинал 22 января 2018 г.. Получено 30 января 2018.
  22. ^ «Возможности написания - документация Behat 3.0.12». Behat документация. Архивировано из оригинал 19 сентября 2015 г.. Получено 20 октября 2015.
  23. ^ а б Эванс, Эрик (2003). Доменно-ориентированный дизайн: преодоление сложности в самой основе программного обеспечения. Эддисон-Уэсли. ISBN  978-0-321-12521-7. Получено 12 августа, 2012.
  24. ^ Норт, Дэн (31 мая 2012 г.). «BDD похож на TDD, если…». более быстрые организации, более быстрое программное обеспечение. Дэн Норт и партнеры. Получено 12 августа 2012.
  25. ^ Geneca (16 марта 2011 г.). «Почему программные проекты терпят неудачу». Получено 16 марта 2011.
  26. ^ Махмудул Хак Азад (6 февраля 2011 г.). "Передайте привет разработке, основанной на поведении". Получено 12 августа 2012.
  27. ^ Любке, Даниэль; ван Лессен, Таммо (2016). «Моделирование тестовых примеров в BPMN для разработки, управляемой поведением». Программное обеспечение IEEE. 33 (5): 15–21. Дои:10.1109 / MS.2016.117.
  28. ^ Адам Крейвен (21 сентября 2015 г.). «Основы разработки, ориентированной на поведение предприятия (BDD)». Получено 14 января 2016.
  29. ^ Кетил Дженсен (13 декабря 2009 г.). «BDD с таблицами сценариев в Fitnesse Slim». Прогулка пешком. Wordpress. Получено 12 августа 2012.
  30. ^ "jbehave.org/team-list". JBehave. 2017-05-28. Получено 1 мая 2019.
  31. ^ а б Рой Ошеров (4 октября 2008 г.). «BDD: поведение и спецификации». Получено 12 августа 2012.
  32. ^ Джейсон Сейфер (7 декабря 2011 г.). «Введение в RSpec». Получено 27 октября 2012.
  33. ^ "Что такое три Amigos в Agile?". Agile Alliance. 2016-06-16. Получено 2019-06-10.