SlideShare a Scribd company logo
Путь к чистому и компактному коду 
исполняемых спецификаций 
Writing clean and DRY code for 
executable specifications 
Вагиф Абилов 
Miles Oslo
Коротко обо мне 
 Электронная почта: vagif.abilov@gmail.com 
 Твиттер: @ooobject 
 GitHub: object 
 BitBucket: object 
 Блог: http://vagifabilov.wordpress.com/ 
 Статьи: http://www.codeproject.com
План презентации 
 Насколько хорош код тестов? 
Или насколько плох? 
 Тестировщики как полноправные граждане 
 10 шагов, ведущих к улучшению кода тестов 
 Примеры и случаи из практики
Придумывание 
наименований 
49% 
Разработка решения 
2%
Насколько хорош код тестов? 
Или насколько плох? 
 Какое качество вы ожидаете от кода тестов? 
 Уступает код тестов или превосходит качество кода 
продукта? Или же их качество на одном уровне? 
 Как долго живет код тестов? 
 Столько же, сколько код продукта? Больше? Меньше?
Тестировщики как полноправные граждане 
 Все, что выпускается, публикуется или отсылается 
заказчику, обычно является предметом более строгих 
требований, чем программы для внутреннего 
использования 
 Внутренности продукта подчиняются внешним 
требованиям, внутренности тестов подчиняются 
внутренним требованиям
Тестировщики как полноправные граждане 
 Руководство зачастую относится менее строго к 
выбору тестерами средств и языков 
программирования 
 Нет причин, по которым тестировщики не должны 
обращать в свою пользу либерализм руководства - 
тестировщики ПО обладают большими 
возможностями адаптирования новых методов и 
технологий
Путь к чистому и компактному коду 
исполняемых спецификаций 
1. Преодолевайте барьеры понимания 
2. Приемочные тесты как исполняемые спецификации 
3. Дайте актерам действовать в сценариях 
4. Спустите КАК на нижние уровни 
5. Уменьшайте количество уровней трансляции
Путь к чистому и компактному коду 
исполняемых спецификаций 
6. Пользуйтесь исследовательскими скриптами 
7. Группируйте код автоматизации тестов в библиотеки 
8. От DRY к DRO - следите за сообществами 
9. Пробуйте динамические языки 
10. Восстанавливайте лишь существенные хранимые 
состояния
1. Преодолевайте барьеры понимания 
«BDD is a 2nd generation, outside-in, pull-based, 
multiple-stakeholder, multiple-scale, high-automation, 
Agile methodology. It describes a 
cycle of interactions with well-defined outputs, 
resulting in the delivery of working, tested software 
that matters» 
Дэн Норт
1. Преодолевайте барьеры понимания 
 «Для метода BDD тестирование не является 
первичным. Вы получите из него тесты, но обычно 
потребуется и дополнительное тестирование. Куда 
важнее в этом разработка и понимание того, что 
должно стать конечным результатом.» – Лиз Кеог 
 «Обсуждение является гораздо более важным, чем 
инструментальные средства BDD» – Лиз Кеог
2. Приемочные тесты как исполняемые 
спецификации (executable specifications) 
Scenario: The answer with the highest vote gets to the 
top 
Given there is a question «What is your favourite 
color» with the answers 
| Answer | Vote | 
| Red | 1 | 
| Green | 1 | 
When I upvote the answer «Green» 
Then the answer «Green» should be on the top
2. Приемочные тесты как исполняемые 
спецификации (executable specifications) 
Сценарий: Ответ с наибольшим количеством голосов 
выдается первым 
Дано вопрос «Какой ваш любимый цвет?» с ответами 
| Ответ | Голосов | 
| Красный | 1 | 
| Зеленый | 1 | 
Если я отдам голос за «Зеленый» 
То ответ «Зеленый» должен стать первым в списке 
ответов
Преимущества исполняемых спецификаций 
 Пишутся на естественном языке (и своем языке) 
 Формализуют требования к продукту 
 Интегрируются в ежедневные билды 
 Живая документация 
 Показывают прогресс разработки 
 Функциональное покрытие
Функциональное покрытие
Покрытие юнит-тестами
Демонстрация исполняемых спецификаций 
Relish 
Публикация исполняемых спецификаций 
Примеры: 
GDS/whitehall 
brighterplanet/flight
3. Дайте действующим лицам действовать в 
сценариях 
Feature: Pay bill 
Background: Prices 
Given the following operations are available: 
| operation | price | 
| routine check up | 10 | 
| shots | 5 | 
Scenario: Dave pays for Fluffy 
Given Dave owns a pet Fluffy 
And Dave brings Fluffy into the clinic for the following operations: 
| routine check up | 
| shots | 
When the veterinarian charges Dave for the visit 
And Dave pays cash 
Then Dave is given a receipt which looks like this: 
Operations: 
$10 (routine check up) 
$5 (shots) 
Total to pay: $15 (из блога Мэта Уинна)
3. Дайте действующим лицам действовать в 
сценариях 
Feature: Pay bill 
Background: Prices 
Given the following operations are available: 
| operation | price | 
| routine check up | 10 | 
| shots | 5 |
3. Дайте действующим лицам действовать в 
сценариях 
Scenario: Dave pays for Fluffy 
Given Dave owns a pet Fluffy 
And Dave brings Fluffy into the clinic for the following 
operations: 
| routine check up | 
| shots | 
When the veterinarian charges Dave for the visit 
And Dave pays cash 
Then Dave is given a receipt which looks like this: 
Operations: 
$10 (routine check up) 
$5 (shots) 
Total to pay: $15
Пример из проекта 
Добавление действующего лица 
в сценарий
Обновление результатов норвежских 
парламентских выборов 
Scenario: Received report is saved and notification message is 
enqueued 
Given table RP07 doesn’t contain reports for 46010000 
And notification queue is empty 
When receival service receives report RP07 with data 
| Element | Value | 
| dateCreated | 2013-05-01T10:01:02 | 
| identifier | 46010000 | 
| mandates | Ap=6;H=5;V=4 | 
Then receival service should return OK 
And table RP07 should contain report for 46010000 
And notification queue should contain message 
| Code | Identifier | Mandates | 
| RP07 | 46010000 | Ap=6;H=5;V=4 | 
(пример 1)
Обновление результатов норвежских 
парламентских выборов 
When receival service receives report RP07 with data 
| Element | Value | 
| dateCreated | 2013-05-01T10:01:02 | 
| identifier | 46010000 | 
| mandates | Ap=6;H=5;V=4 | 
Then receival service should return OK 
And table RP07 should contain report for 46010000 
And notification queue should contain message 
| Code | Identifier | Mandates | 
| RP07 | 46010000 | Ap=6;H=5;V=4 | 
(пример 1)
Переработанный сценарий 
Scenario: Parliament overview is updated shortly upon the report 
receival 
Given I see following Parliament party mandates overview 
| Party | Mandates | 
| Ap | 3 | 
| H | 2 | 
| V | 1 | 
When receival service receives report RP07 with data 
| Party | Mandates | 
| Ap | 6 | 
| H | 5 | 
| V | 4 | 
And I wait 10 seconds 
Then I should see following Parliament party mandates overview 
| Party | Mandates | 
| Ap | 6 | 
| H | 5 | 
| V | 4 |
4. «Спустите КАК на нижние уровни» 
 Цитата из доклада Себа Роуза и Мэтта Уинна 
 Гойко Аджич определил три уровня автоматизации тестов интерфейса 
пользователя: 
 Бизнес-правила 
 Интерфейс пользователя / рабочий процесс 
 Технический
Спецификации отражают сущности домена 
(Из блога Мэтта Уинна)
5. Уменьшайте количество уровней трансляции 
«Сценарии BDD транслируют пользовательские 
сущности в системные. 
Чем больше работы 
производится в этих сценариях, 
тем больше вносится искажений в систему.» 
@richarddalton
В поисках наиболее эффективного языка для 
сценариев 
Scenario: Refunded items should be returned to stock 
Given a customer buys a black jumper 
And I have 3 black jumpers left in stock 
When he returns the jumper for a refund 
Then I should have 4 black jumpers in stock
Примеры реализации кода шагов сценария 
1. C#/SpecFlow 
2. Ruby/Cucumber 
3. F#/TickSpec 
(Примеры 2-4)
6. Пользуйтесь исследовательскими 
скриптами 
 Не бросайтесь писать библиотеку автоматизации 
тестов, пока не исследуете систему 
 Поищите инструменты REPL для языка ваших тестов 
 Исследуйте систему из скриптов 
 Воспользуйтесь результатами исследований для 
написания автоматизированных тестов 
 Помните, что у ручных скриптов и 
автоматизированных тестов различные контексты, и 
обычно они не взаимозаменяемы
Демонстрация 
Скрипт для интерфейса 
пользователя 
на основе 
scriptcs и FluentAutomation
7. Группируйте код автоматизации тестов в 
библиотеки 
 Если вы напрямую вызываете интерфейс WebDriver в 
ваших тестах, ваши тесты написаны неверно (Саймон 
Стюарт) 
Tests Tests 
UI 
Automatio 
n 
API 
UI
8. От DRY к DRO – следите за сообществами 
 DRY – Don’t repeat yourself 
 DRO – Don’t repeat others 
 Различные (и бесплатные!) библиотеки уже 
удовлетворили большинство ваших нужд в 
форматировании, конвертировании и передачи 
данных 
 Генерация псевдослучайных данных 
 Конвертация таблиц сценариев 
 Сравнение содержимого таблиц с содержимым баз данных 
 Перевод DTO в динамические объекты
Пример: проверка данных 
ввода пользователя 
Scenario: Validate users 
Given the following users exists in the database: 
| Name | Birth date | Length in meters 
| 
| John | 1940-10-09 | 1.80 | 
| Paul | 1942-06-18 | 1.80 
| 
| George | 1943-02-25 | 1.77 | 
| Ringo | 1940-07-07 | 1.68 | 
Then the following users must exist in the database: 
| John | 1940-10-09 | 1.80 | 
| Paul | 1942-06-18 | 1.80 
| 
| George | 1943-02-25 | 1.77 | 
| Ringo | 1940-07-07 | 1.68 | 
(Примеры 9-12)
9. Пробуйте динамические языки 
 Меньше церемоний – больше действий 
 Доступ к базам данных без необходимости создания 
промежуточных классов 
 Доступ к веб-сервисам без необходимости импорта 
файлов WSDL 
 Нет нужды в объектах передачи данных (DTO) 
(Примеры 13-15)
10. Восстанавливайте лишь существенные 
хранимые состояния 
 Тест не должен рассчитывать на определенное хранимое 
состояние 
 После завершения теста не нужно восстанавливать 
первоначальное хранимое состояние 
 Не тратьте время на сложные процедуры удаления 
взаимосвязанных данных 
 Просто отодвиньте в сторону данные, которые мешают 
исполнению теста 
(Примеры 16-17)
Повторим еще раз 
 Преодолевайте барьеры понимания 
 Пользуйтесь исполняемыми спецификациями 
 Дайте действующим лицам действовать в сценариях 
 Спустите КАК на нижние уровни 
 Уменьшайте количество уровней трансляции 
 Пользуйтесь исследовательскими скриптами 
 Группируйте код автоматизации тестов в библиотеки 
 От DRY к DRO - следите за сообществами 
 Пробуйте динамические языки 
 Восстанавливайте лишь существенные хранимые 
состояния
Путь к чистому и компактному коду исполняемых спецификаций
Время для караоке! 
«Beautiful Code» 
Christina Agile-Era
Путь к чистому и компактному коду исполняемых спецификаций
Путь к чистому и компактному коду исполняемых спецификаций
Путь к чистому и компактному коду исполняемых спецификаций
Путь к чистому и компактному коду исполняемых спецификаций
Путь к чистому и компактному коду исполняемых спецификаций
Путь к чистому и компактному коду исполняемых спецификаций
Путь к чистому и компактному коду исполняемых спецификаций
Путь к чистому и компактному коду 
исполняемых спецификаций 
Спасибо! 
Вагиф Абилов 
vagif.abilov@gmail.com 
@ooobject 
GitHub: object 
BitBucket: object

More Related Content

PDF
Алексей Ильенко "In real-time with Apache Kafka"
PPTX
DLR Hosting
PDF
l10n, или особенности локализации программного обеспечения, Александр Денисо...
PDF
Egor Fedorov "Behavior-driven development in Python"
PDF
XpDays - Automated testing of responsive design (GalenFramework)
PDF
The Responsible Developer - XP days Ukraine 2014
PPTX
XP Days Ukraine 2014 - Refactoring legacy code
PDF
Extreme Programming practices for your team
Алексей Ильенко "In real-time with Apache Kafka"
DLR Hosting
l10n, или особенности локализации программного обеспечения, Александр Денисо...
Egor Fedorov "Behavior-driven development in Python"
XpDays - Automated testing of responsive design (GalenFramework)
The Responsible Developer - XP days Ukraine 2014
XP Days Ukraine 2014 - Refactoring legacy code
Extreme Programming practices for your team

Similar to Путь к чистому и компактному коду исполняемых спецификаций (20)

PPTX
Повышение качества тестов и автоматическая валидация REST API документации
PDF
Юлия Викторова; Александр Тарасов. DevOps без булшита.
PPTX
Sdlc by Anatoliy Anthony Cox
PPT
Evgeny Rybak Presentation
PPT
Dynamic Language Runtime
PPTX
Виды QA: Всё что вы не знали и боялись спростить
PPTX
Python-технология которую легко продавать!
PDF
Видеозвонки и шаринг экрана в мобильном приложении
PPTX
Автоматизированный подход к локализации корпоративных приложений
PDF
Rempl – крутая платформа для крутых инструментов
PPT
Open Source Testing Framework: real project example and best practices
PPT
Реализация тестового фреймворка на основе OPEN-SOURCE инструментов
PDF
Услуга «Техническая поддержка разработки»
PPTX
Breaking logs
PPTX
Docsvision 5 – что нового
PPTX
Читабельные отчеты для автоматизации на C# / Gallio / BDDfy
PDF
Wild microservices and imaginary DevOps
POTX
Разработка надежных параллельных, распределенных приложений: быстро и дешево
PPT
Что вас ждет на пути реализации Soa (Битрикс отступает)
Повышение качества тестов и автоматическая валидация REST API документации
Юлия Викторова; Александр Тарасов. DevOps без булшита.
Sdlc by Anatoliy Anthony Cox
Evgeny Rybak Presentation
Dynamic Language Runtime
Виды QA: Всё что вы не знали и боялись спростить
Python-технология которую легко продавать!
Видеозвонки и шаринг экрана в мобильном приложении
Автоматизированный подход к локализации корпоративных приложений
Rempl – крутая платформа для крутых инструментов
Open Source Testing Framework: real project example and best practices
Реализация тестового фреймворка на основе OPEN-SOURCE инструментов
Услуга «Техническая поддержка разработки»
Breaking logs
Docsvision 5 – что нового
Читабельные отчеты для автоматизации на C# / Gallio / BDDfy
Wild microservices and imaginary DevOps
Разработка надежных параллельных, распределенных приложений: быстро и дешево
Что вас ждет на пути реализации Soa (Битрикс отступает)
Ad

More from Vagif Abilov (8)

PPTX
А нам-то зачем функциональное программирование?
PPTX
Cross-platform Mobile Development using Portable Class Libraries
PPTX
Staying Close to Experts with Executable Specifications
PPTX
SOLID Programming with Portable Class Libraries
PPTX
Typed? Dynamic? Both! Cross-platform DSLs in C#
PPTX
Practical OData
PPTX
F# in Action: Playing Functional Conway's Game of Life
PPTX
Executable Specifications in Action
А нам-то зачем функциональное программирование?
Cross-platform Mobile Development using Portable Class Libraries
Staying Close to Experts with Executable Specifications
SOLID Programming with Portable Class Libraries
Typed? Dynamic? Both! Cross-platform DSLs in C#
Practical OData
F# in Action: Playing Functional Conway's Game of Life
Executable Specifications in Action
Ad

Путь к чистому и компактному коду исполняемых спецификаций

  • 1. Путь к чистому и компактному коду исполняемых спецификаций Writing clean and DRY code for executable specifications Вагиф Абилов Miles Oslo
  • 2. Коротко обо мне  Электронная почта: vagif.abilov@gmail.com  Твиттер: @ooobject  GitHub: object  BitBucket: object  Блог: http://vagifabilov.wordpress.com/  Статьи: http://www.codeproject.com
  • 3. План презентации  Насколько хорош код тестов? Или насколько плох?  Тестировщики как полноправные граждане  10 шагов, ведущих к улучшению кода тестов  Примеры и случаи из практики
  • 4. Придумывание наименований 49% Разработка решения 2%
  • 5. Насколько хорош код тестов? Или насколько плох?  Какое качество вы ожидаете от кода тестов?  Уступает код тестов или превосходит качество кода продукта? Или же их качество на одном уровне?  Как долго живет код тестов?  Столько же, сколько код продукта? Больше? Меньше?
  • 6. Тестировщики как полноправные граждане  Все, что выпускается, публикуется или отсылается заказчику, обычно является предметом более строгих требований, чем программы для внутреннего использования  Внутренности продукта подчиняются внешним требованиям, внутренности тестов подчиняются внутренним требованиям
  • 7. Тестировщики как полноправные граждане  Руководство зачастую относится менее строго к выбору тестерами средств и языков программирования  Нет причин, по которым тестировщики не должны обращать в свою пользу либерализм руководства - тестировщики ПО обладают большими возможностями адаптирования новых методов и технологий
  • 8. Путь к чистому и компактному коду исполняемых спецификаций 1. Преодолевайте барьеры понимания 2. Приемочные тесты как исполняемые спецификации 3. Дайте актерам действовать в сценариях 4. Спустите КАК на нижние уровни 5. Уменьшайте количество уровней трансляции
  • 9. Путь к чистому и компактному коду исполняемых спецификаций 6. Пользуйтесь исследовательскими скриптами 7. Группируйте код автоматизации тестов в библиотеки 8. От DRY к DRO - следите за сообществами 9. Пробуйте динамические языки 10. Восстанавливайте лишь существенные хранимые состояния
  • 10. 1. Преодолевайте барьеры понимания «BDD is a 2nd generation, outside-in, pull-based, multiple-stakeholder, multiple-scale, high-automation, Agile methodology. It describes a cycle of interactions with well-defined outputs, resulting in the delivery of working, tested software that matters» Дэн Норт
  • 11. 1. Преодолевайте барьеры понимания  «Для метода BDD тестирование не является первичным. Вы получите из него тесты, но обычно потребуется и дополнительное тестирование. Куда важнее в этом разработка и понимание того, что должно стать конечным результатом.» – Лиз Кеог  «Обсуждение является гораздо более важным, чем инструментальные средства BDD» – Лиз Кеог
  • 12. 2. Приемочные тесты как исполняемые спецификации (executable specifications) Scenario: The answer with the highest vote gets to the top Given there is a question «What is your favourite color» with the answers | Answer | Vote | | Red | 1 | | Green | 1 | When I upvote the answer «Green» Then the answer «Green» should be on the top
  • 13. 2. Приемочные тесты как исполняемые спецификации (executable specifications) Сценарий: Ответ с наибольшим количеством голосов выдается первым Дано вопрос «Какой ваш любимый цвет?» с ответами | Ответ | Голосов | | Красный | 1 | | Зеленый | 1 | Если я отдам голос за «Зеленый» То ответ «Зеленый» должен стать первым в списке ответов
  • 14. Преимущества исполняемых спецификаций  Пишутся на естественном языке (и своем языке)  Формализуют требования к продукту  Интегрируются в ежедневные билды  Живая документация  Показывают прогресс разработки  Функциональное покрытие
  • 17. Демонстрация исполняемых спецификаций Relish Публикация исполняемых спецификаций Примеры: GDS/whitehall brighterplanet/flight
  • 18. 3. Дайте действующим лицам действовать в сценариях Feature: Pay bill Background: Prices Given the following operations are available: | operation | price | | routine check up | 10 | | shots | 5 | Scenario: Dave pays for Fluffy Given Dave owns a pet Fluffy And Dave brings Fluffy into the clinic for the following operations: | routine check up | | shots | When the veterinarian charges Dave for the visit And Dave pays cash Then Dave is given a receipt which looks like this: Operations: $10 (routine check up) $5 (shots) Total to pay: $15 (из блога Мэта Уинна)
  • 19. 3. Дайте действующим лицам действовать в сценариях Feature: Pay bill Background: Prices Given the following operations are available: | operation | price | | routine check up | 10 | | shots | 5 |
  • 20. 3. Дайте действующим лицам действовать в сценариях Scenario: Dave pays for Fluffy Given Dave owns a pet Fluffy And Dave brings Fluffy into the clinic for the following operations: | routine check up | | shots | When the veterinarian charges Dave for the visit And Dave pays cash Then Dave is given a receipt which looks like this: Operations: $10 (routine check up) $5 (shots) Total to pay: $15
  • 21. Пример из проекта Добавление действующего лица в сценарий
  • 22. Обновление результатов норвежских парламентских выборов Scenario: Received report is saved and notification message is enqueued Given table RP07 doesn’t contain reports for 46010000 And notification queue is empty When receival service receives report RP07 with data | Element | Value | | dateCreated | 2013-05-01T10:01:02 | | identifier | 46010000 | | mandates | Ap=6;H=5;V=4 | Then receival service should return OK And table RP07 should contain report for 46010000 And notification queue should contain message | Code | Identifier | Mandates | | RP07 | 46010000 | Ap=6;H=5;V=4 | (пример 1)
  • 23. Обновление результатов норвежских парламентских выборов When receival service receives report RP07 with data | Element | Value | | dateCreated | 2013-05-01T10:01:02 | | identifier | 46010000 | | mandates | Ap=6;H=5;V=4 | Then receival service should return OK And table RP07 should contain report for 46010000 And notification queue should contain message | Code | Identifier | Mandates | | RP07 | 46010000 | Ap=6;H=5;V=4 | (пример 1)
  • 24. Переработанный сценарий Scenario: Parliament overview is updated shortly upon the report receival Given I see following Parliament party mandates overview | Party | Mandates | | Ap | 3 | | H | 2 | | V | 1 | When receival service receives report RP07 with data | Party | Mandates | | Ap | 6 | | H | 5 | | V | 4 | And I wait 10 seconds Then I should see following Parliament party mandates overview | Party | Mandates | | Ap | 6 | | H | 5 | | V | 4 |
  • 25. 4. «Спустите КАК на нижние уровни»  Цитата из доклада Себа Роуза и Мэтта Уинна  Гойко Аджич определил три уровня автоматизации тестов интерфейса пользователя:  Бизнес-правила  Интерфейс пользователя / рабочий процесс  Технический
  • 26. Спецификации отражают сущности домена (Из блога Мэтта Уинна)
  • 27. 5. Уменьшайте количество уровней трансляции «Сценарии BDD транслируют пользовательские сущности в системные. Чем больше работы производится в этих сценариях, тем больше вносится искажений в систему.» @richarddalton
  • 28. В поисках наиболее эффективного языка для сценариев Scenario: Refunded items should be returned to stock Given a customer buys a black jumper And I have 3 black jumpers left in stock When he returns the jumper for a refund Then I should have 4 black jumpers in stock
  • 29. Примеры реализации кода шагов сценария 1. C#/SpecFlow 2. Ruby/Cucumber 3. F#/TickSpec (Примеры 2-4)
  • 30. 6. Пользуйтесь исследовательскими скриптами  Не бросайтесь писать библиотеку автоматизации тестов, пока не исследуете систему  Поищите инструменты REPL для языка ваших тестов  Исследуйте систему из скриптов  Воспользуйтесь результатами исследований для написания автоматизированных тестов  Помните, что у ручных скриптов и автоматизированных тестов различные контексты, и обычно они не взаимозаменяемы
  • 31. Демонстрация Скрипт для интерфейса пользователя на основе scriptcs и FluentAutomation
  • 32. 7. Группируйте код автоматизации тестов в библиотеки  Если вы напрямую вызываете интерфейс WebDriver в ваших тестах, ваши тесты написаны неверно (Саймон Стюарт) Tests Tests UI Automatio n API UI
  • 33. 8. От DRY к DRO – следите за сообществами  DRY – Don’t repeat yourself  DRO – Don’t repeat others  Различные (и бесплатные!) библиотеки уже удовлетворили большинство ваших нужд в форматировании, конвертировании и передачи данных  Генерация псевдослучайных данных  Конвертация таблиц сценариев  Сравнение содержимого таблиц с содержимым баз данных  Перевод DTO в динамические объекты
  • 34. Пример: проверка данных ввода пользователя Scenario: Validate users Given the following users exists in the database: | Name | Birth date | Length in meters | | John | 1940-10-09 | 1.80 | | Paul | 1942-06-18 | 1.80 | | George | 1943-02-25 | 1.77 | | Ringo | 1940-07-07 | 1.68 | Then the following users must exist in the database: | John | 1940-10-09 | 1.80 | | Paul | 1942-06-18 | 1.80 | | George | 1943-02-25 | 1.77 | | Ringo | 1940-07-07 | 1.68 | (Примеры 9-12)
  • 35. 9. Пробуйте динамические языки  Меньше церемоний – больше действий  Доступ к базам данных без необходимости создания промежуточных классов  Доступ к веб-сервисам без необходимости импорта файлов WSDL  Нет нужды в объектах передачи данных (DTO) (Примеры 13-15)
  • 36. 10. Восстанавливайте лишь существенные хранимые состояния  Тест не должен рассчитывать на определенное хранимое состояние  После завершения теста не нужно восстанавливать первоначальное хранимое состояние  Не тратьте время на сложные процедуры удаления взаимосвязанных данных  Просто отодвиньте в сторону данные, которые мешают исполнению теста (Примеры 16-17)
  • 37. Повторим еще раз  Преодолевайте барьеры понимания  Пользуйтесь исполняемыми спецификациями  Дайте действующим лицам действовать в сценариях  Спустите КАК на нижние уровни  Уменьшайте количество уровней трансляции  Пользуйтесь исследовательскими скриптами  Группируйте код автоматизации тестов в библиотеки  От DRY к DRO - следите за сообществами  Пробуйте динамические языки  Восстанавливайте лишь существенные хранимые состояния
  • 39. Время для караоке! «Beautiful Code» Christina Agile-Era
  • 47. Путь к чистому и компактному коду исполняемых спецификаций Спасибо! Вагиф Абилов vagif.abilov@gmail.com @ooobject GitHub: object BitBucket: object