понедельник, апреля 02, 2012

Specification by Example: A love story (Alister Scott)

На недавно прошедшей конференции “Watir Bazaar” прозвучал интереснейший доклад Алистера Скотта по теме “Specification by Example: A love story”. Видео доклада вы можете просмотреть по следующей ссылке:
http://kondoot.com/videos/224a1105b17

Слайды этого и других докладов находятся здесь:
https://github.com/watir/watir-bazaar/wiki/Presentations

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

Feature: Beautiful Tea Shipping
Scenario: Free shipping in Australia
Given I am on the Beautiful Tea homepage
When I search for ‘Byron Breakfast’ tea
Then I see the page for ‘Byron Breakfast’ tea
When I add ‘Byron Breakfast’ tea to my card
And I select 10 as the quantity
Then I see 10 x ‘Byron Breakfast’ tea in my card
When I select ‘Check Out’
And I enter my country as ‘Australia’
Then I see the total including GST
And I see that I am eligible for free shipping
Scenario: No free shipping outside Australia
Given I am on the Beautiful Tea homepage
When I search for ‘Byron Breakfast’ tea
Then I see the page for ‘Byron Breakfast’ tea
When I add ‘Byron Breakfast’ tea to my card
And I select 10 as the quantity
Then I see 10 x ‘Byron Breakfast’ tea in my card
When I select ‘Check Out’
And I enter my country as ‘New Zealand’
Then I see the total without GST
And I see that I am eligible for free shipping
Scenario: No free shipping in Australia
Given I am on the Beautiful Tea homepage
When I search for ‘Byron Breakfast’ tea
Then I see the page for ‘Byron Breakfast’ tea
When I add ‘Byron Breakfast’ tea to my card
And I select 1 as the quantity
Then I see 1 x ‘Byron Breakfast’ tea in my card
When I select ‘Check Out’
And I enter my country as ‘Australia’
Then I see the total including GST
And I see that I am not eligible for free shipping

С трудом дочитав это до конца, я понял, что есть какая-то разница между Австралийцами и Новозеландцами. И то, что Австралийцы не хотят доставлять своим соседям из Новой Зеландии чай ‘Byron Breakfast’ на халяву. Дискриминация просто налицо. Кроме того, оказывается что мне, жителю Австралии, бесплатная доставка положена, только если я закажу 10 упаковок чая ‘Byron Breakfast’.
И не положена, если я закажу одну упаковку. А если 5?
Кроме того, мне абсолютно непонятно, почему я должен платить некий GST, а эти ссс… соседи из Новой Зеландии его не платят. А что если я сделаю заказ из Украины? Я буду платить этот GST? (фиг его знает, что это такое, напридумывают тут аббревиатур)

Но исправленный пример для той же самой фичи просто открывает глаза:

Feature: Beautiful Tea Shipping Cost
  • Australian customers pay GST
  • Overseas customers don’t pay GST
  • Australian customers get free shipping for orders $100 and above
  • Overseas customers all pay the same shipping rate regardless of order size
Scenario: Calculate GST status and shipping rate
Given the customer is from <customer’s country>
When the customer’s order totals <order total>
Then the customer <pays GST>
And they are charged <shipping rate>
Examples:
customer’s countrypays GSTorder totalshipping rate
AustraliaMust$99.99Standard Domestic
AustraliaMust$100.00Free
New ZealandMust Not$99.99Standard International
New ZealandMust Not$100.00Standard International
Zimbabwe Must Not$100.00Standard International
И мне, как человеку с улицы, как-то стает более ясна общая картина задуманной фичи.
Во-первых из заголовка я понимаю, что есть некоторые законы, которые заставляют платить этот GST только австралийцев. Во-вторых… ну какой нафиг чай? Речь вообще идет о сумме заказа. Заказал на 100 баксов и более – получи бесплатную доставку, если ты австралиец. Заказал на 10 баксов – плати за доставку.

В первом варианте описания фичи было откровенное нечитабельное месиво из чая, кнопки Check Out, GST и австралийцев. За деревьями не видно леса. Второй вариант короче, но четко описывает фичу и дает хорошие примеры. Теперь нам не нужно переписывать тест-кейсы всякий раз когда цена на чай падает.

Кроме того, я уверен что автоматизировать тестирование этой фичи теперь стало еще проще по сравнению с предыдущем вариантом.

Комментариев нет: