Jump to content

Развитие, основанное на поведении

(Перенаправлено из Specflow )

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

BDD предполагает использование предметно-ориентированного языка (DSL) с использованием конструкций естественного языка (например, предложений, подобных английскому), которые могут выражать поведение и ожидаемые результаты.

Сторонники утверждают, что это поощряет сотрудничество между разработчиками, экспертами по обеспечению качества и представителями клиентов в программном проекте. [1] [2] [3] Это побуждает команды использовать беседы и конкретные примеры для формализации общего понимания того, как должно вести себя приложение. [4] BDD считается эффективной практикой, особенно когда проблемное пространство является сложным. [5]

BDD считается усовершенствованием разработки через тестирование (TDD). [1] [2] [6] [7] [ нечеткий ] [8] [9] BDD сочетает в себе методы TDD с идеями предметно-ориентированного проектирования и объектно-ориентированного анализа и проектирования, чтобы предоставить группам разработки и управления ПО общие инструменты и общий процесс для совместной разработки программного обеспечения. [2] [8]

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

BDD — это процесс, с помощью которого структурированные операторы естественного языка DSL преобразуются в исполняемые тесты. Результатом являются тесты, которые читаются как критерии приемки для данной функции.

Таким образом, BDD является расширением TDD.

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

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

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

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

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

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

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

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

Принципы

[ редактировать ]

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

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

Поведенческие характеристики

[ редактировать ]

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

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

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

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

Title: Returns and exchanges go to inventory.

As a store owner,
I want to add items back to inventory when they are returned or exchanged,
so that I can sell them again.

Scenario 1: Items returned for refund should be added to inventory.
Given that a customer previously bought a black sweater from me
and I have three black sweaters in inventory,
when they return the black sweater for a refund,
then I should have four black sweaters in inventory.

Scenario 2: Exchanged items should be returned to inventory.
Given that a customer previously bought a blue garment from me
and I have two blue garments in inventory
and three black garments in inventory,
when they exchange the blue garment for a black garment,
then I should have three blue garments in inventory
and two black garments in inventory.

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

Этот формат называется языком Gherkin . Однако термин Gherkin относится только к Cucumber , JBehave, Lettuce, [18] Behat и Behat . программные инструменты [19] [20] [21] [22]

Спецификация как вездесущий язык

[ редактировать ]

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

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

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

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

Специализированный инструмент

[ редактировать ]

Как и TDD, BDD может включать использование специализированных инструментов.

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

Принципы оснастки

[ редактировать ]

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

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

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

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

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

[ редактировать ]

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

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

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

Given a 5 by 5 game
When I toggle the cell at (3, 2)
Then the grid should look like
.....
.....
.....
..X..
.....
When I toggle the cell at (3, 1)
Then the grid should look like
.....
.....
.....
..X..
..X..
When I toggle the cell at (3, 2)
Then the grid should look like
.....
.....
.....
.....
..X..

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

private Game game;
private StringRenderer renderer;

@Given("a $width by $height game")
public void theGameIsRunning(int width, int height) {
    game = new Game(width, height);
    renderer = new StringRenderer();
    game.setObserver(renderer);
}
    
@When("I toggle the cell at ($column, $row)")
public void iToggleTheCellAt(int column, int row) {
    game.toggleCellAt(column, row);
}

@Then("the grid should look like $grid")
public void theGridShouldLookLike(String grid) {
    assertThat(renderer.asString(), equalTo(grid));
}

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

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

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

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

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

[ редактировать ]

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

Specification: Stack

When a new stack is created
Then it is empty

When an element is added to the stack
Then that element is at the top of the stack

When a stack has N elements 
And element E is on top of the stack
Then a pop operation returns E
And the new size of the stack is N-1

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

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

describe Hash do
  let(:hash) { Hash[:hello, 'world'] }

  it { expect(Hash.new).to eq({}) }

  it "hashes the correct information in a key" do
    expect(hash[:hello]).to eq('world')
  end

  it 'includes key' do
    hash.keys.include?(:hello).should be true
  end
end

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

Результатом теста будет:

 Hash
   should eq {}
   includes key
   hashes the correct information in a key

Три друга

[ редактировать ]

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

Три амиго:

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

См. также

[ редактировать ]
  1. ^ Перейти обратно: а б с д и Норт, Дэн (март 2006 г.). «Знакомство с BDD» . Дэн Норт . Проверено 25 апреля 2019 г.
  2. ^ Перейти обратно: а б с «Развитие, основанное на поведении» . Архивировано из оригинала 1 сентября 2015 года . Проверено 12 августа 2012 г.
  3. ^ Кио, Лиз (7 сентября 2009 г.). «Введение в развитие, основанное на поведении» . Навыки имеют значение . Архивировано из оригинала 25 февраля 2021 г. Проверено 1 мая 2019 г.
  4. ^ Джон Фергюсон Смарт (2014). BDD в действии: разработка на основе поведения для всего жизненного цикла программного обеспечения . Публикации Мэннинга. ISBN  9781617291654 .
  5. ^ Тарайил, Ранджит (15 февраля 2016 г.). «Разработка, основанная на поведении: упрощение сложного проблемного пространства» . РешенияIQ . Проверено 15 февраля 2018 г.
  6. ^ Перейти обратно: а б с д и ж г час я дж к Харинг, Рональд (февраль 2011 г.). де Рюитер, Роберт (ред.). «Разработка, основанная на поведении: лучше, чем разработка, основанная на тестировании». Журнал Java (на голландском языке) (1). Журналы Veen: 14–17. ISSN   1571-6236 .
  7. ^ Солис, Карлос; Ван, Сяофэн (2011). «Исследование характеристик развития, основанного на поведении». 2011 37-я конференция EUROMICRO по программной инженерии и передовым приложениям . стр. 383–387. дои : 10.1109/SEAA.2011.76 . hdl : 10344/1256 . ISBN  978-1-4577-1027-8 . S2CID   3392536 .
  8. ^ Перейти обратно: а б с д Bellware, Скотт (июнь 2008 г.). «Развитие, основанное на поведении» . Журнал «Код» . Архивировано из оригинала 12 июля 2012 года . Проверено 1 мая 2019 г.
  9. ^ Лиз Кио (27 июня 2011 г.). «ATDD против BDD и краткая история некоторых связанных с этим вещей» . Проверено 6 мая 2019 г.
  10. ^ «Книга RSpec – Вопрос к главе 11: Написание важного программного обеспечения» . Архивировано из оригинала 07.11.2009 . Проверено 9 августа 2009 г.
  11. ^ Дэн Норт. «Как продать BDD бизнесу» . www.skillsmatter.com . Архивировано из оригинала 25 ноября 2010 г. Проверено 7 февраля 2023 г.
  12. ^ «Лиз Кио» .
  13. ^ Интервью с Лиз Кио и Дэном Нортом • GOTO 2013 , получено 7 февраля 2023 г.
  14. ^ Д.Норт, Представляем RBehave. Архивировано 20 июня 2007 г. в Wayback Machine.
  15. ^ Шон Миллер (31 октября 2007 г.). «RSpec добавляет долгожданную функциональность RBehave для интеграционного тестирования» . ИнфоQ . Проверено 7 февраля 2023 г.
  16. ^ Перейти обратно: а б с д и Норт, Дэн (11 февраля 2007 г.). «Что в истории?» . Дэн Норт . Проверено 12 августа 2012 г.
  17. ^ Мэйби, Бен. «Императивные и декларативные сценарии в пользовательских историях» . Архивировано из оригинала 3 июня 2010 года . Проверено 19 мая 2008 г.
  18. ^ «В двух словах — документация по салату 0.2.23 (выпуск криптонита)» . салат.это . Проверено 6 февраля 2020 г.
  19. ^ «Корнишон» . Проверено 7 июня 2020 г.
  20. ^ Перейти обратно: а б «Что такое JBehave?» . JBehave.org . Проверено 20 октября 2015 г.
  21. ^ «behave — это разработка, основанная на поведении, в стиле Python» . Архивировано из оригинала 22 января 2018 года . Проверено 30 января 2018 г.
  22. ^ «Функции написания — документация Behat 3.0.12» . документация по поведению . Архивировано из оригинала 19 сентября 2015 года . Проверено 20 октября 2015 г.
  23. ^ Перейти обратно: а б Эванс, Эрик (2003). Доменно-ориентированное проектирование: решение проблем, лежащих в основе программного обеспечения . Аддисон-Уэсли. ISBN  978-0-321-12521-7 . Проверено 12 августа 2012 г.
  24. ^ Норт, Дэн (31 мая 2012 г.). «BDD — это как TDD, если…» более быстрые организации, более быстрое программное обеспечение . Дэн Норт и партнеры . Проверено 12 августа 2012 г.
  25. ^ Генека (16 марта 2011 г.). «Почему программные проекты терпят неудачу» . Проверено 16 марта 2011 г.
  26. ^ Махмудул Хаке Азад (6 февраля 2011 г.). «Передайте привет развитию, основанному на поведении» . Проверено 12 августа 2012 г.
  27. ^ Любке, Даниэль; ван Лессен, Таммо (2016). «Моделирование тестовых примеров в BPMN для разработки, основанной на поведении». Программное обеспечение IEEE . 33 (5): 15–21. дои : 10.1109/MS.2016.117 . S2CID   14539297 .
  28. ^ Адам Крэйвен (21 сентября 2015 г.). «Основы разработки, основанной на поведении (BDD)» в масштабе предприятия . Проверено 14 января 2016 г.
  29. ^ Кетил Йенсен (13 декабря 2009 г.). «BDD с таблицами сценариев в Fitnesse Slim» . Иди, иди . Вордпресс . Проверено 12 августа 2012 г.
  30. ^ «jbehave.org/team-list» . JBehave. 28 мая 2017 г. Проверено 1 мая 2019 г.
  31. ^ Перейти обратно: а б Рой Ошеров (4 октября 2008 г.). «BDD: поведение и рамки спецификаций» . Проверено 12 августа 2012 г.
  32. ^ Джейсон Сейфер (7 декабря 2011 г.). «Введение в RSpec» . Проверено 27 октября 2012 г.
  33. ^ «Что такое три друга в Agile?» . Гибкий Альянс . 16 июня 2016 г. Проверено 10 июня 2019 г.
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 14948531f188da9df7817a842ba0fbbe__1713270000
URL1:https://arc.ask3.ru/arc/aa/14/be/14948531f188da9df7817a842ba0fbbe.html
Заголовок, (Title) документа по адресу, URL1:
Behavior-driven development - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)