BDD: как работает Baby Steps? - PullRequest
0 голосов
/ 08 июля 2011

Я пытаюсь узнать о BDD, и я прочитал о маленьких шагах. Как они работают? Я пытаюсь понять это.

Например, используя следующую функцию:

Feature: Months and days to days 
In order to see months and days as days
As a date conversion fan 
I need a webpage where users can enter days and
     months and convert them to days.

Scenario: Convert 12 months and 0 days to days 
Given “12” months And “0” days
When I click on convert button 
Then I should get: 360

Должен ли я создать код, чтобы выполнить преобразование прямо в методах шагов, а затем выполнить рефакторинг кода и поместить их в классы, или я должен начать с классов?

Это выглядит просто, но я в замешательстве. Я хочу узнать о маленьких шагах и не хочу их ломать ...

Спасибо.

Ответы [ 3 ]

1 голос
/ 11 июля 2011

Насколько я понимаю, детские шаги означают, что вы должны выполнять только небольшие изменения шаг за шагом.Это похоже на TDD: написать новый тест, написать код, убедиться, что он не работает, заставить его работать нормально, написать новый тест ... и т. Д. Давайте посмотрим на ваш пример:

Convert12 месяцев и 0 дней до дней. Даны «12» месяцев и «0» дней. Когда я нажимаю кнопку «Преобразовать», я получаю: 360

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

int convertToDays(int monthCount,int daysCount)

и выполните следующие действия.Сначала вы описываете поведение вашего кода, кодирование идет после него.Следующие шаги будут примерно такими:

  1. Заполните метод для корректной работы со значениями типа int
  2. Заставьте его работать со строковыми входными значениями.
  3. Добавьте проверку дляданные, набранные в
  4. Сделать уведомление пользователя, если ввод неверен
  5. Провести рефакторинг

Надеюсь, это поможет вам.Спасибо.

0 голосов
/ 25 июля 2011

Вы еще ничего не сказали о том, на какой платформе вы работаете, и есть ли у вас какой-либо код. Рубин? Rails? Джава? C #? Python?

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

Существует другая фраза, часто используемая в комбинации, которая звучит примерно так: «Пусть компилятор руководит вашими шагами».

Если у вас нет кода, и вы используете, скажем, Cucumber и RSpec - описание не сильно изменится на других платформах - когда вы запустите свою историю в cucumber, она скажет вам, что у вас есть невыполненные шаги, и даже даст вам основные рекомендации о том, как реализовать ваше заданное, когда и тогда.

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

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

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

Посмотрите этот урок, он дает вам некоторое представление.

http://www.slideshare.net/josephwilk/outsidein-development-with-cucumber-and-rspec

0 голосов
/ 10 июля 2011

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

...