SlideShare une entreprise Scribd logo
1  sur  113
Télécharger pour lire hors ligne
Behavior-Driven
 Development

  Бибичев Андрей
     март 2010 г.
GProfile:   bibigone
SlideShare: bibigine

GMail:     bibigone
Skype:     bibigine
«Вы любите Unit-тесты,
  как люблю их я?»
Сказочка
MyStack
+ Count : int
+ Push(v : int)
+ Pop() : int
+ Peek() : int
Симптоматическое
    лечение
 Builder-ы / Custom Assert-ы
• тестовые методы называются в стиле TestSomeMethod и являют собой
  длинную простыню хитросплетений разных сценариев для проверки
  работы одного метода;
• значительную часть тестовых методов занимает подготовка и настройка
  окружения, так что тяжело понять, что же именно проверяется;
• попытки поместить создание всего окружения в SetUp-методы делают
  тестовые классы путанными, а отдельные тестовые методы
  зависимыми друг от друга;
• рекомендация держать ровно один Assert на тест не выполняется или
  приводит к огромному дублированию кода;
• при изменении требований не так-то легко найти какие тесты нужно
  поправить, и даже найдя их, еще нужно сообразить что и как поправить
  в длинном витьеватом коде;
• что делать, если у нескольких тестов есть общая часть, - как ее следует
  оформить?
• как "правильно" называть тесты, как их группировать в тестовые
  классы?
• как соотносятся между собой acceptance-критерии выполнения
  требований и набор unit-тестов?
FLUENT BUILDER-Ы
Их можно объединять в целые
  «потемкинские деревни»
Главное:
не делать больших «деревень»,
   лучше иметь N маленьких
CUSTOM ASSERT-Ы
Ваша цель -
ЛАКОНИЧНЫЕ ТЕСТЫ
БЕЗ ВЕТВЛЕНИЙ И ЦИКЛОВ
BDD
Разработка на основе поведения
Итак, еще остались существенные
            проблемы:
• MyClass              • MyClassTests
  – MethodA              – TestMethodA
  – MethodB              – TestMethodB
  – MethodC              – TestMethodC




              + тестировщики
              + менеджеры
MyStack
+ Count : int
+ Push(v : int)
+ Pop() : int
+ Peek() : int
Давайте попробуем описать
      поведение класса MyStack
• «класс MyStack должен (should):»
  – создавать пустой стек
  – инициировать исключение при попытке
    извлечь элемент из пустого стека
  – извлекать последний положенный в него
    элемент
  – извлекать все положенные в него элементы в
    обратном порядке
• «класс MyStack должен (should):»

  – создавать пустой стек
  GIVEN an empty stack           ДАН пустой стек
  WHEN Count property is asked   КОГДА запрашивается Count
  THEN it returns zero           ТОГДА возвращается 0


  – инициировать исключение при попытке извлечь
    элемент из пустого стека
  GIVEN an empty stack           ДАН пустой стек
  WHEN Pop() method is called    КОГДА вызывается Pop()
  THEN exception is raised       ТОГДА возникает исключение
• «класс MyStack должен (should):»

  – извлекать последний положенный в него
    элемент

    GIVEN an empty stack
          and some integer item
    WHEN this item is pushed
         and Pop() is called
    THEN it returns the last item that’s pushed
         and it removes item from the stack
         and further Pop() call throws exception
Экстремально важный шаблон
      тестового метода
Дано:

   арбуз + гиря 1 кг = гиря 6 кг
   арбуз = ?


Решение:

        x+1=6
        x=6–1=5


Ответ: 5 кг
Март 2006
Журнал «Better Software»
Статья «Introducing BDD»
       Dan North
«Test method names should be sentences»

«A simple sentence template keeps test
methods focused. This sentence template –
The class should do something»

«“Behavior” is a more useful word than “test”»

«What’s the next most important thing the
system doesn’t do?»
От пользовательских историй
          к описанию поведения
• As [role]               • Given [initial context]
  I want/can [action]       When [event/action]
  So that [result]          Then [ensure some outcomes]



• Как [роль]             • Дано [начальный контекст]
  Я хочу/могу [действие]   Когда [событие/действие]
  Так что [результат]      Тогда [конкретный результат]
Пример: калькулятор
• Как тугой на голову
  Я хочу иметь возможность складывать,
  вычитать, делить и умножать два числа
  Чтобы видеть результат и не считать в уме
Пример: калькулятор
• Дан калькулятор и два числа – «2» и «2»
  Когда вводим первое число, «плюс», второе
  число
  Тогда видим результат «4»


• Дан калькулятор и два числа – «123» и «23»
  Когда вводим первое число, «минус», второе
  число
  Тогда видим результат «100»
Сценарии



  Поведение
Новые интересные метрики
• Количество описанных «Поведений»
• Процент автоматизированных тестов на
  «Поводение» по отношению к общему
  числу описанных «Поведений»
• Отношение количества «Поведений» к
  количеству Пользовательских историй или
  фич
Ноябрь 2009
Конференция «Agile Specifications,
   BDD and Testing eXchange»
          Dan North

«BDD is a second-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.»
Agile 2.0 ? 
Связь с TDD и DDD
TEST-DRIVEN DEVELOPMENT
Написание Unit-тестов

          ≠
Test-Driven Development
Цикл разработки в TDD
                  Написание неработающего теста
                    для новой функциональности


                              RED



            REFACTOR                       GREEN
   Рефакторим код, чтобы              Пишем ровно столько кода,
тесты продолжили проходить,             чтобы тест прошел
     а код стал чистым
Традиционный цикл разработки
                       Пишем сразу заметный
                      кусок функциональности


                          CODING



       DEBUGING                            COMPILING


  Отлаживаем код,                             Добиваемся
 ловим и исправляем                        компилируемости
 поверхностные баги
Написание тестов
 с использованием
*Unit-фреймворков

        ≠
Unit-тестирование
 (в строгом смысле)
Тестируем как
                                     черный ящик
Тестируем как
 прозрачный
    ящик        Интеграционные
                     тесты                Mock-и,
                                          Stub-ы



                Модульные
                  тесты
                (в строгом смысле)
Функциональные тесты




 Нагрузочные тесты



    Стресс-тесты


         …
BDD – TDD done well?

   «I believe this is more than just ‘doing TDD well’.
 I think it’s ‘doing TDD and a number of other practices
   related to professional software development well’.
                The five practices above might
          conceivably be done in addition to TDD,
but they’re not part of any definition of TDD I’ve seen.»
DOMAIN-DRIVEN DESIGN
История
                            2004 год
                            Eric Evans
«Domain-Driven Design - Tackling Complexity in the Heart of Software»
Domain (словарь)
• наследственная собственность; имение,
  поместье; земли; владение         e.g. DNS
• территория, зона, область, район
  (отмеченные некоторыми физическими
  особенностями)
• сфера (интересов), поле (деятельности),
  область (знаний)             В данном случае
                                   этот смысл
• область определения (мат.)
                                Домен поля
                               таблицы в БД
Т.е. это о


Business Domain
   Предметной области
        и


 Business Logic
            Бизнес-логики
Центральная роль в
   мышлении,
 проектировании,
   реализации
                     DDD
Три аспекта DDD
• Даны шаг бегунка в исходном состоянии
  и текущий пользователь – «Петров»
 Когда для этого шага выполняется действие
 «Подтвердить»
 Тогда сам шаг переходит в состояние «+»
 и автором подтверждения помечается
 «Петров»
• Даны шаг бегунка в состоянии «?»
  и в бегунке есть следующий шаг в исходном
  состоянии
  и текущий пользователь – «Петров»
 Когда для этого шага выполняется действие
 «Подтвердить»
 Тогда сам шаг переходит в состояние «+»
 и автором подтверждения помечается
 «Петров»
 и следующий шаг бегунка переходит в
 состояние «?»
ИТОГО ПО *DD
Синергетический
   эффект 


                   DDD


             TDD         BDD
Фреймворки
SpecUnit.Net
MSpec
NBehave
SubSpec for xUnit.Net
Своими руками
Заключение
vs.
[TestMethod]             [TestMethod]
void Test…()             void Should…()
{                        {
    // Arrange               // GIVEN
    …                        …
    // Action                // WHEN
    …                        …
    // Assertion             // THEN
    …                        …
}                        }
Гипотеза
 лингвистической относительности

• aka «гипотеза Сепира-Уорфа»

• существующие в сознании человека
  системы понятий, а, следовательно, и
  существенные особенности его мышления
  определяются тем конкретным языком,
  носителем которого этот человек является
GUI
     Модель
Поведение модели
                       Аналитик




             Тестировщик      Разработчик
Спасибо за
        внимание!

                biBIGone@gmail.com
http://www.google.com/profiles/biBIGone

Contenu connexe

Tendances

Testing RIA with Selenium
Testing RIA with SeleniumTesting RIA with Selenium
Testing RIA with SeleniumSergey Shvets
 
Евгений Сафронов "Тестирование. точка зрения разработчика"
Евгений Сафронов "Тестирование. точка зрения разработчика"Евгений Сафронов "Тестирование. точка зрения разработчика"
Евгений Сафронов "Тестирование. точка зрения разработчика"DataArt
 
C# Desktop. Занятие 17.
C# Desktop. Занятие 17.C# Desktop. Занятие 17.
C# Desktop. Занятие 17.Igor Shkulipa
 
XP Days Ukraine 2014 - Refactoring legacy code
XP Days Ukraine 2014 - Refactoring legacy codeXP Days Ukraine 2014 - Refactoring legacy code
XP Days Ukraine 2014 - Refactoring legacy codeDmytro Mindra
 
Лучшие практики на практике
Лучшие практики на практикеЛучшие практики на практике
Лучшие практики на практикеDenis Tuchin
 
Sqa.days.2010.beskov.system.analyst.and.test.engineers.interaction
Sqa.days.2010.beskov.system.analyst.and.test.engineers.interactionSqa.days.2010.beskov.system.analyst.and.test.engineers.interaction
Sqa.days.2010.beskov.system.analyst.and.test.engineers.interactionAlexei Lupan
 
QA Fest 2014. Алексей Лупан. Не тест-кейсы красят тестировщика, а...
QA Fest 2014. Алексей Лупан. Не тест-кейсы красят тестировщика, а...QA Fest 2014. Алексей Лупан. Не тест-кейсы красят тестировщика, а...
QA Fest 2014. Алексей Лупан. Не тест-кейсы красят тестировщика, а...QAFest
 
Документация тестировщика - Александр Трибушный
Документация тестировщика - Александр ТрибушныйДокументация тестировщика - Александр Трибушный
Документация тестировщика - Александр ТрибушныйDataArt
 
Test Driven Development in .NET Applications
Test Driven Development in .NET ApplicationsTest Driven Development in .NET Applications
Test Driven Development in .NET ApplicationsAnton Vidishchev
 
Тестируем код с Visual Studio 2012 - XP Days Ukraine 2012
Тестируем код с Visual Studio 2012 - XP Days Ukraine 2012Тестируем код с Visual Studio 2012 - XP Days Ukraine 2012
Тестируем код с Visual Studio 2012 - XP Days Ukraine 2012Dmytro Mindra
 
Визуализация покрытия автоматизированными UI тестами
Визуализация покрытия автоматизированными UI тестамиВизуализация покрытия автоматизированными UI тестами
Визуализация покрытия автоматизированными UI тестамиSQALab
 
Тестирование требований: Зачем - понятно, а вот Как?
Тестирование требований: Зачем - понятно, а вот Как?Тестирование требований: Зачем - понятно, а вот Как?
Тестирование требований: Зачем - понятно, а вот Как?Grigoriy Pechenkin
 
QA Fest 2019. Андрей Солнцев. Десять причин моей ненависти
QA Fest 2019. Андрей Солнцев. Десять причин моей ненавистиQA Fest 2019. Андрей Солнцев. Десять причин моей ненависти
QA Fest 2019. Андрей Солнцев. Десять причин моей ненавистиQAFest
 
(Seleniumcamp) Selenium IDE как артефакт пикника на обочине
(Seleniumcamp) Selenium IDE как артефакт пикника на обочине(Seleniumcamp) Selenium IDE как артефакт пикника на обочине
(Seleniumcamp) Selenium IDE как артефакт пикника на обочинеAlexei Lupan
 
Grammarly Test Club#2. Выступление Алексея Лупана (SysIQ, Inc.): "Без тест-ке...
Grammarly Test Club#2. Выступление Алексея Лупана (SysIQ, Inc.): "Без тест-ке...Grammarly Test Club#2. Выступление Алексея Лупана (SysIQ, Inc.): "Без тест-ке...
Grammarly Test Club#2. Выступление Алексея Лупана (SysIQ, Inc.): "Без тест-ке...GTestClub
 
Grail: шаги для ваших Python-тестов
Grail: шаги для ваших Python-тестовGrail: шаги для ваших Python-тестов
Grail: шаги для ваших Python-тестовCodeFest
 
Путь к чистому и компактному коду исполняемых спецификаций
Путь к чистому и компактному коду исполняемых спецификацийПуть к чистому и компактному коду исполняемых спецификаций
Путь к чистому и компактному коду исполняемых спецификацийVagif Abilov
 
09 - Java. Тестирование Java-программ
09 - Java. Тестирование Java-программ09 - Java. Тестирование Java-программ
09 - Java. Тестирование Java-программRoman Brovko
 
Экономически эффективный процесс тестирования
Экономически эффективный процесс тестированияЭкономически эффективный процесс тестирования
Экономически эффективный процесс тестированияCodeFest
 
андрей дмитриев взгляд со стороны разработчика
андрей дмитриев взгляд со стороны разработчикаандрей дмитриев взгляд со стороны разработчика
андрей дмитриев взгляд со стороны разработчикаAlexei Lupan
 

Tendances (20)

Testing RIA with Selenium
Testing RIA with SeleniumTesting RIA with Selenium
Testing RIA with Selenium
 
Евгений Сафронов "Тестирование. точка зрения разработчика"
Евгений Сафронов "Тестирование. точка зрения разработчика"Евгений Сафронов "Тестирование. точка зрения разработчика"
Евгений Сафронов "Тестирование. точка зрения разработчика"
 
C# Desktop. Занятие 17.
C# Desktop. Занятие 17.C# Desktop. Занятие 17.
C# Desktop. Занятие 17.
 
XP Days Ukraine 2014 - Refactoring legacy code
XP Days Ukraine 2014 - Refactoring legacy codeXP Days Ukraine 2014 - Refactoring legacy code
XP Days Ukraine 2014 - Refactoring legacy code
 
Лучшие практики на практике
Лучшие практики на практикеЛучшие практики на практике
Лучшие практики на практике
 
Sqa.days.2010.beskov.system.analyst.and.test.engineers.interaction
Sqa.days.2010.beskov.system.analyst.and.test.engineers.interactionSqa.days.2010.beskov.system.analyst.and.test.engineers.interaction
Sqa.days.2010.beskov.system.analyst.and.test.engineers.interaction
 
QA Fest 2014. Алексей Лупан. Не тест-кейсы красят тестировщика, а...
QA Fest 2014. Алексей Лупан. Не тест-кейсы красят тестировщика, а...QA Fest 2014. Алексей Лупан. Не тест-кейсы красят тестировщика, а...
QA Fest 2014. Алексей Лупан. Не тест-кейсы красят тестировщика, а...
 
Документация тестировщика - Александр Трибушный
Документация тестировщика - Александр ТрибушныйДокументация тестировщика - Александр Трибушный
Документация тестировщика - Александр Трибушный
 
Test Driven Development in .NET Applications
Test Driven Development in .NET ApplicationsTest Driven Development in .NET Applications
Test Driven Development in .NET Applications
 
Тестируем код с Visual Studio 2012 - XP Days Ukraine 2012
Тестируем код с Visual Studio 2012 - XP Days Ukraine 2012Тестируем код с Visual Studio 2012 - XP Days Ukraine 2012
Тестируем код с Visual Studio 2012 - XP Days Ukraine 2012
 
Визуализация покрытия автоматизированными UI тестами
Визуализация покрытия автоматизированными UI тестамиВизуализация покрытия автоматизированными UI тестами
Визуализация покрытия автоматизированными UI тестами
 
Тестирование требований: Зачем - понятно, а вот Как?
Тестирование требований: Зачем - понятно, а вот Как?Тестирование требований: Зачем - понятно, а вот Как?
Тестирование требований: Зачем - понятно, а вот Как?
 
QA Fest 2019. Андрей Солнцев. Десять причин моей ненависти
QA Fest 2019. Андрей Солнцев. Десять причин моей ненавистиQA Fest 2019. Андрей Солнцев. Десять причин моей ненависти
QA Fest 2019. Андрей Солнцев. Десять причин моей ненависти
 
(Seleniumcamp) Selenium IDE как артефакт пикника на обочине
(Seleniumcamp) Selenium IDE как артефакт пикника на обочине(Seleniumcamp) Selenium IDE как артефакт пикника на обочине
(Seleniumcamp) Selenium IDE как артефакт пикника на обочине
 
Grammarly Test Club#2. Выступление Алексея Лупана (SysIQ, Inc.): "Без тест-ке...
Grammarly Test Club#2. Выступление Алексея Лупана (SysIQ, Inc.): "Без тест-ке...Grammarly Test Club#2. Выступление Алексея Лупана (SysIQ, Inc.): "Без тест-ке...
Grammarly Test Club#2. Выступление Алексея Лупана (SysIQ, Inc.): "Без тест-ке...
 
Grail: шаги для ваших Python-тестов
Grail: шаги для ваших Python-тестовGrail: шаги для ваших Python-тестов
Grail: шаги для ваших Python-тестов
 
Путь к чистому и компактному коду исполняемых спецификаций
Путь к чистому и компактному коду исполняемых спецификацийПуть к чистому и компактному коду исполняемых спецификаций
Путь к чистому и компактному коду исполняемых спецификаций
 
09 - Java. Тестирование Java-программ
09 - Java. Тестирование Java-программ09 - Java. Тестирование Java-программ
09 - Java. Тестирование Java-программ
 
Экономически эффективный процесс тестирования
Экономически эффективный процесс тестированияЭкономически эффективный процесс тестирования
Экономически эффективный процесс тестирования
 
андрей дмитриев взгляд со стороны разработчика
андрей дмитриев взгляд со стороны разработчикаандрей дмитриев взгляд со стороны разработчика
андрей дмитриев взгляд со стороны разработчика
 

En vedette

От сердца к сердцу или эмоциональный маркетинг
От сердца к сердцу или эмоциональный маркетингОт сердца к сердцу или эмоциональный маркетинг
От сердца к сердцу или эмоциональный маркетингArtjoker
 
Анализ эффективности управленческой деятельности
Анализ эффективности управленческой деятельностиАнализ эффективности управленческой деятельности
Анализ эффективности управленческой деятельностиpedkolledzh
 
3. эмоции в структуре личности и поведении (тема 3)+
3. эмоции  в структуре личности и поведении (тема 3)+3. эмоции  в структуре личности и поведении (тема 3)+
3. эмоции в структуре личности и поведении (тема 3)+poav210
 
Bdd j behave or cucumber jvm plus appium for efficient cross platform mobile ...
Bdd j behave or cucumber jvm plus appium for efficient cross platform mobile ...Bdd j behave or cucumber jvm plus appium for efficient cross platform mobile ...
Bdd j behave or cucumber jvm plus appium for efficient cross platform mobile ...ISsoft
 
Как позитив помогает продавать в соц сетях. практические советы и кейсы.
Как позитив помогает продавать в соц сетях. практические советы и кейсы.Как позитив помогает продавать в соц сетях. практические советы и кейсы.
Как позитив помогает продавать в соц сетях. практические советы и кейсы.Rusfet Kadyrov
 
Негативные эмоции и их последствия
Негативные эмоции и их последствияНегативные эмоции и их последствия
Негативные эмоции и их последствияCATTBA COM
 
эмоции радость
эмоции радостьэмоции радость
эмоции радостьostolga
 
окомистин др
окомистин дрокомистин др
окомистин др1ivanr33
 
Российский e-Wow сервис. Удобство! Сроки! Эмоции!
Российский e-Wow сервис. Удобство! Сроки! Эмоции!Российский e-Wow сервис. Удобство! Сроки! Эмоции!
Российский e-Wow сервис. Удобство! Сроки! Эмоции!Timofey Shikolenkov
 
эмоции человека
эмоции человекаэмоции человека
эмоции человекаOlga Demyanova
 
Чтобы видеть эмоции
Чтобы видеть эмоцииЧтобы видеть эмоции
Чтобы видеть эмоцииArtur Danielyan
 
теория.гвоздев.анализ эмоции страха среди учащихся. маоусош №45.
теория.гвоздев.анализ эмоции страха среди учащихся. маоусош №45.теория.гвоздев.анализ эмоции страха среди учащихся. маоусош №45.
теория.гвоздев.анализ эмоции страха среди учащихся. маоусош №45.lesayau
 
Базовые потребности и эмоции человека
Базовые потребности и эмоции человекаБазовые потребности и эмоции человека
Базовые потребности и эмоции человекаSergey Aleksanin
 
Журнал "Про e-learning" #4
Журнал "Про e-learning" #4Журнал "Про e-learning" #4
Журнал "Про e-learning" #4eLearning center
 
Управление людьми. Как эмоции влияют на характер? Вадим Нарейко
Управление людьми. Как эмоции влияют на характер? Вадим НарейкоУправление людьми. Как эмоции влияют на характер? Вадим Нарейко
Управление людьми. Как эмоции влияют на характер? Вадим НарейкоVadim Nareyko
 
Технологии продления молодости
Технологии продления молодостиТехнологии продления молодости
Технологии продления молодостиMikhail Kryzhanovskiy
 
эмоции человека
эмоции человекаэмоции человека
эмоции человекаaf1311
 

En vedette (20)

От сердца к сердцу или эмоциональный маркетинг
От сердца к сердцу или эмоциональный маркетингОт сердца к сердцу или эмоциональный маркетинг
От сердца к сердцу или эмоциональный маркетинг
 
Анализ эффективности управленческой деятельности
Анализ эффективности управленческой деятельностиАнализ эффективности управленческой деятельности
Анализ эффективности управленческой деятельности
 
3. эмоции в структуре личности и поведении (тема 3)+
3. эмоции  в структуре личности и поведении (тема 3)+3. эмоции  в структуре личности и поведении (тема 3)+
3. эмоции в структуре личности и поведении (тема 3)+
 
Bdd j behave or cucumber jvm plus appium for efficient cross platform mobile ...
Bdd j behave or cucumber jvm plus appium for efficient cross platform mobile ...Bdd j behave or cucumber jvm plus appium for efficient cross platform mobile ...
Bdd j behave or cucumber jvm plus appium for efficient cross platform mobile ...
 
The Dangers of Cucumber
The Dangers of CucumberThe Dangers of Cucumber
The Dangers of Cucumber
 
усикова полина
усикова полинаусикова полина
усикова полина
 
Как позитив помогает продавать в соц сетях. практические советы и кейсы.
Как позитив помогает продавать в соц сетях. практические советы и кейсы.Как позитив помогает продавать в соц сетях. практические советы и кейсы.
Как позитив помогает продавать в соц сетях. практические советы и кейсы.
 
Негативные эмоции и их последствия
Негативные эмоции и их последствияНегативные эмоции и их последствия
Негативные эмоции и их последствия
 
эмоции радость
эмоции радостьэмоции радость
эмоции радость
 
окомистин др
окомистин дрокомистин др
окомистин др
 
Российский e-Wow сервис. Удобство! Сроки! Эмоции!
Российский e-Wow сервис. Удобство! Сроки! Эмоции!Российский e-Wow сервис. Удобство! Сроки! Эмоции!
Российский e-Wow сервис. Удобство! Сроки! Эмоции!
 
эмоции человека
эмоции человекаэмоции человека
эмоции человека
 
Чтобы видеть эмоции
Чтобы видеть эмоцииЧтобы видеть эмоции
Чтобы видеть эмоции
 
теория.гвоздев.анализ эмоции страха среди учащихся. маоусош №45.
теория.гвоздев.анализ эмоции страха среди учащихся. маоусош №45.теория.гвоздев.анализ эмоции страха среди учащихся. маоусош №45.
теория.гвоздев.анализ эмоции страха среди учащихся. маоусош №45.
 
Motcsii
MotcsiiMotcsii
Motcsii
 
Базовые потребности и эмоции человека
Базовые потребности и эмоции человекаБазовые потребности и эмоции человека
Базовые потребности и эмоции человека
 
Журнал "Про e-learning" #4
Журнал "Про e-learning" #4Журнал "Про e-learning" #4
Журнал "Про e-learning" #4
 
Управление людьми. Как эмоции влияют на характер? Вадим Нарейко
Управление людьми. Как эмоции влияют на характер? Вадим НарейкоУправление людьми. Как эмоции влияют на характер? Вадим Нарейко
Управление людьми. Как эмоции влияют на характер? Вадим Нарейко
 
Технологии продления молодости
Технологии продления молодостиТехнологии продления молодости
Технологии продления молодости
 
эмоции человека
эмоции человекаэмоции человека
эмоции человека
 

Similaire à BDD

Обзор Feature-Driven Development и Domain-Driven Design
Обзор Feature-Driven Development и Domain-Driven DesignОбзор Feature-Driven Development и Domain-Driven Design
Обзор Feature-Driven Development и Domain-Driven DesignAndrey Bibichev
 
TDD или как я стараюсь писать код
TDD или как я стараюсь писать кодTDD или как я стараюсь писать код
TDD или как я стараюсь писать кодMoscowDjango
 
"Outside In". Web application testing.
"Outside In". Web application testing."Outside In". Web application testing.
"Outside In". Web application testing.Mad Devs
 
Повышение качества тестов и автоматическая валидация REST API документации
Повышение качества тестов и автоматическая валидация REST API документацииПовышение качества тестов и автоматическая валидация REST API документации
Повышение качества тестов и автоматическая валидация REST API документацииCEE-SEC(R)
 
BDD. Gherkin+Ruby или автотесты для гуманитариев
BDD. Gherkin+Ruby или автотесты для гуманитариевBDD. Gherkin+Ruby или автотесты для гуманитариев
BDD. Gherkin+Ruby или автотесты для гуманитариевSQALab
 
Программирование как способ выражения мыслей.
Программирование как способ выражения мыслей. Программирование как способ выражения мыслей.
Программирование как способ выражения мыслей. Levon Avakyan
 
Grail - CodeFest'2015
Grail - CodeFest'2015Grail - CodeFest'2015
Grail - CodeFest'2015Igor Khrol
 
Собеседование на позицию Java Developer
Собеседование на позицию Java DeveloperСобеседование на позицию Java Developer
Собеседование на позицию Java DeveloperOlexandra Dmytrenko
 
Унификация взаимодействия
Унификация взаимодействияУнификация взаимодействия
Унификация взаимодействияNikita Efimov
 
Проходим тест Джоэла
Проходим тест ДжоэлаПроходим тест Джоэла
Проходим тест Джоэла0leGG
 
Роман Кокин «Организация тестирования в больших командах»
Роман Кокин «Организация тестирования в больших командах»Роман Кокин «Организация тестирования в больших командах»
Роман Кокин «Организация тестирования в больших командах»DataArt
 
Tech Talks @NSU: Проходим тест Джоэла
Tech Talks @NSU: Проходим тест ДжоэлаTech Talks @NSU: Проходим тест Джоэла
Tech Talks @NSU: Проходим тест ДжоэлаTech Talks @NSU
 
Никита Ефимов Lead UX Architect, New Cloud Technologies
Никита Ефимов Lead UX Architect, New Cloud Technologies Никита Ефимов Lead UX Architect, New Cloud Technologies
Никита Ефимов Lead UX Architect, New Cloud Technologies Anton Anokhin
 
Архитектура в Agile: слабая связность
Архитектура в Agile: слабая связностьАрхитектура в Agile: слабая связность
Архитектура в Agile: слабая связностьAndrey Bibichev
 
TDD или как я стараюсь писать код
TDD или как я стараюсь писать кодTDD или как я стараюсь писать код
TDD или как я стараюсь писать кодVladimir Filonov
 
разработка бизнес приложений (7)
разработка бизнес приложений (7)разработка бизнес приложений (7)
разработка бизнес приложений (7)Alexander Gornik
 
Тест-план и исследовательское тестирование
Тест-план и исследовательское тестированиеТест-план и исследовательское тестирование
Тест-план и исследовательское тестированиеVasiliy Burov
 

Similaire à BDD (20)

Обзор Feature-Driven Development и Domain-Driven Design
Обзор Feature-Driven Development и Domain-Driven DesignОбзор Feature-Driven Development и Domain-Driven Design
Обзор Feature-Driven Development и Domain-Driven Design
 
TDD или как я стараюсь писать код
TDD или как я стараюсь писать кодTDD или как я стараюсь писать код
TDD или как я стараюсь писать код
 
DDD Workshop
DDD WorkshopDDD Workshop
DDD Workshop
 
"Outside In". Web application testing.
"Outside In". Web application testing."Outside In". Web application testing.
"Outside In". Web application testing.
 
Повышение качества тестов и автоматическая валидация REST API документации
Повышение качества тестов и автоматическая валидация REST API документацииПовышение качества тестов и автоматическая валидация REST API документации
Повышение качества тестов и автоматическая валидация REST API документации
 
BDD. Gherkin+Ruby или автотесты для гуманитариев
BDD. Gherkin+Ruby или автотесты для гуманитариевBDD. Gherkin+Ruby или автотесты для гуманитариев
BDD. Gherkin+Ruby или автотесты для гуманитариев
 
Программирование как способ выражения мыслей.
Программирование как способ выражения мыслей. Программирование как способ выражения мыслей.
Программирование как способ выражения мыслей.
 
Grail - CodeFest'2015
Grail - CodeFest'2015Grail - CodeFest'2015
Grail - CodeFest'2015
 
Собеседование на позицию Java Developer
Собеседование на позицию Java DeveloperСобеседование на позицию Java Developer
Собеседование на позицию Java Developer
 
Унификация взаимодействия
Унификация взаимодействияУнификация взаимодействия
Унификация взаимодействия
 
Проходим тест Джоэла
Проходим тест ДжоэлаПроходим тест Джоэла
Проходим тест Джоэла
 
Роман Кокин «Организация тестирования в больших командах»
Роман Кокин «Организация тестирования в больших командах»Роман Кокин «Организация тестирования в больших командах»
Роман Кокин «Организация тестирования в больших командах»
 
Tech Talks @NSU: Проходим тест Джоэла
Tech Talks @NSU: Проходим тест ДжоэлаTech Talks @NSU: Проходим тест Джоэла
Tech Talks @NSU: Проходим тест Джоэла
 
Никита Ефимов Lead UX Architect, New Cloud Technologies
Никита Ефимов Lead UX Architect, New Cloud Technologies Никита Ефимов Lead UX Architect, New Cloud Technologies
Никита Ефимов Lead UX Architect, New Cloud Technologies
 
Архитектура в Agile: слабая связность
Архитектура в Agile: слабая связностьАрхитектура в Agile: слабая связность
Архитектура в Agile: слабая связность
 
Tdd php
Tdd phpTdd php
Tdd php
 
TDD или как я стараюсь писать код
TDD или как я стараюсь писать кодTDD или как я стараюсь писать код
TDD или как я стараюсь писать код
 
разработка бизнес приложений (7)
разработка бизнес приложений (7)разработка бизнес приложений (7)
разработка бизнес приложений (7)
 
Black box testing
Black box testingBlack box testing
Black box testing
 
Тест-план и исследовательское тестирование
Тест-план и исследовательское тестированиеТест-план и исследовательское тестирование
Тест-план и исследовательское тестирование
 

Plus de Andrey Bibichev

О usability водопроводных кранов
О usability водопроводных крановО usability водопроводных кранов
О usability водопроводных крановAndrey Bibichev
 
Geeks vs Managers (part 2)
Geeks vs Managers (part 2)Geeks vs Managers (part 2)
Geeks vs Managers (part 2)Andrey Bibichev
 
Быстрое введение в TDD от А до Я
Быстрое введение в TDD от А до ЯБыстрое введение в TDD от А до Я
Быстрое введение в TDD от А до ЯAndrey Bibichev
 
Фрактальная природа IT-проектов (блиц)
Фрактальная природа IT-проектов (блиц)Фрактальная природа IT-проектов (блиц)
Фрактальная природа IT-проектов (блиц)Andrey Bibichev
 
Usability-for-programmers
Usability-for-programmersUsability-for-programmers
Usability-for-programmersAndrey Bibichev
 
Natural User Interface (WUDRU-2011)
Natural User Interface (WUDRU-2011)Natural User Interface (WUDRU-2011)
Natural User Interface (WUDRU-2011)Andrey Bibichev
 
Пользовательский автоматизм
Пользовательский автоматизмПользовательский автоматизм
Пользовательский автоматизмAndrey Bibichev
 
О текстовом вводе замолвите слово
О текстовом вводе замолвите словоО текстовом вводе замолвите слово
О текстовом вводе замолвите словоAndrey Bibichev
 
Проектирование больших ИС в Agile (статья)
Проектирование больших ИС в Agile (статья)Проектирование больших ИС в Agile (статья)
Проектирование больших ИС в Agile (статья)Andrey Bibichev
 
Проектирование больших ИС в Agile
Проектирование больших ИС в AgileПроектирование больших ИС в Agile
Проектирование больших ИС в AgileAndrey Bibichev
 
Enterprise Level Agile The Art Of Start
Enterprise Level Agile   The Art Of StartEnterprise Level Agile   The Art Of Start
Enterprise Level Agile The Art Of StartAndrey Bibichev
 
Humane Interface (Гуманный интерфейс)
Humane Interface (Гуманный интерфейс)Humane Interface (Гуманный интерфейс)
Humane Interface (Гуманный интерфейс)Andrey Bibichev
 
Безудержный рефакторинг: как не убиться об стену
Безудержный рефакторинг: как не убиться об стенуБезудержный рефакторинг: как не убиться об стену
Безудержный рефакторинг: как не убиться об стенуAndrey Bibichev
 
Практика внедрения Scrum (статья)
Практика внедрения Scrum (статья)Практика внедрения Scrum (статья)
Практика внедрения Scrum (статья)Andrey Bibichev
 

Plus de Andrey Bibichev (20)

О usability водопроводных кранов
О usability водопроводных крановО usability водопроводных кранов
О usability водопроводных кранов
 
Geeks vs Managers (part 2)
Geeks vs Managers (part 2)Geeks vs Managers (part 2)
Geeks vs Managers (part 2)
 
Быстрое введение в TDD от А до Я
Быстрое введение в TDD от А до ЯБыстрое введение в TDD от А до Я
Быстрое введение в TDD от А до Я
 
Фрактальная природа IT-проектов (блиц)
Фрактальная природа IT-проектов (блиц)Фрактальная природа IT-проектов (блиц)
Фрактальная природа IT-проектов (блиц)
 
Usability-for-programmers
Usability-for-programmersUsability-for-programmers
Usability-for-programmers
 
Geeks vs Managers
Geeks vs ManagersGeeks vs Managers
Geeks vs Managers
 
Tdd and decomposition
Tdd and decompositionTdd and decomposition
Tdd and decomposition
 
Mockist vs Classicist
Mockist vs ClassicistMockist vs Classicist
Mockist vs Classicist
 
Natural User Interface (WUDRU-2011)
Natural User Interface (WUDRU-2011)Natural User Interface (WUDRU-2011)
Natural User Interface (WUDRU-2011)
 
Puasson burning
Puasson burningPuasson burning
Puasson burning
 
Пользовательский автоматизм
Пользовательский автоматизмПользовательский автоматизм
Пользовательский автоматизм
 
Augmented Reality
Augmented RealityAugmented Reality
Augmented Reality
 
Agile: Think different
Agile: Think differentAgile: Think different
Agile: Think different
 
О текстовом вводе замолвите слово
О текстовом вводе замолвите словоО текстовом вводе замолвите слово
О текстовом вводе замолвите слово
 
Проектирование больших ИС в Agile (статья)
Проектирование больших ИС в Agile (статья)Проектирование больших ИС в Agile (статья)
Проектирование больших ИС в Agile (статья)
 
Проектирование больших ИС в Agile
Проектирование больших ИС в AgileПроектирование больших ИС в Agile
Проектирование больших ИС в Agile
 
Enterprise Level Agile The Art Of Start
Enterprise Level Agile   The Art Of StartEnterprise Level Agile   The Art Of Start
Enterprise Level Agile The Art Of Start
 
Humane Interface (Гуманный интерфейс)
Humane Interface (Гуманный интерфейс)Humane Interface (Гуманный интерфейс)
Humane Interface (Гуманный интерфейс)
 
Безудержный рефакторинг: как не убиться об стену
Безудержный рефакторинг: как не убиться об стенуБезудержный рефакторинг: как не убиться об стену
Безудержный рефакторинг: как не убиться об стену
 
Практика внедрения Scrum (статья)
Практика внедрения Scrum (статья)Практика внедрения Scrum (статья)
Практика внедрения Scrum (статья)
 

BDD

  • 1. Behavior-Driven Development Бибичев Андрей март 2010 г.
  • 2. GProfile: bibigone SlideShare: bibigine GMail: bibigone Skype: bibigine
  • 3. «Вы любите Unit-тесты, как люблю их я?»
  • 5.
  • 6. MyStack + Count : int + Push(v : int) + Pop() : int + Peek() : int
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34. Симптоматическое лечение Builder-ы / Custom Assert-ы
  • 35.
  • 36. • тестовые методы называются в стиле TestSomeMethod и являют собой длинную простыню хитросплетений разных сценариев для проверки работы одного метода; • значительную часть тестовых методов занимает подготовка и настройка окружения, так что тяжело понять, что же именно проверяется; • попытки поместить создание всего окружения в SetUp-методы делают тестовые классы путанными, а отдельные тестовые методы зависимыми друг от друга; • рекомендация держать ровно один Assert на тест не выполняется или приводит к огромному дублированию кода; • при изменении требований не так-то легко найти какие тесты нужно поправить, и даже найдя их, еще нужно сообразить что и как поправить в длинном витьеватом коде; • что делать, если у нескольких тестов есть общая часть, - как ее следует оформить? • как "правильно" называть тесты, как их группировать в тестовые классы? • как соотносятся между собой acceptance-критерии выполнения требований и набор unit-тестов?
  • 38.
  • 39.
  • 40.
  • 41. Их можно объединять в целые «потемкинские деревни»
  • 42.
  • 43.
  • 44. Главное: не делать больших «деревень», лучше иметь N маленьких
  • 46.
  • 47.
  • 48.
  • 49.
  • 50. Ваша цель - ЛАКОНИЧНЫЕ ТЕСТЫ БЕЗ ВЕТВЛЕНИЙ И ЦИКЛОВ
  • 52. Итак, еще остались существенные проблемы: • MyClass • MyClassTests – MethodA – TestMethodA – MethodB – TestMethodB – MethodC – TestMethodC + тестировщики + менеджеры
  • 53. MyStack + Count : int + Push(v : int) + Pop() : int + Peek() : int
  • 54. Давайте попробуем описать поведение класса MyStack • «класс MyStack должен (should):» – создавать пустой стек – инициировать исключение при попытке извлечь элемент из пустого стека – извлекать последний положенный в него элемент – извлекать все положенные в него элементы в обратном порядке
  • 55.
  • 56. • «класс MyStack должен (should):» – создавать пустой стек GIVEN an empty stack ДАН пустой стек WHEN Count property is asked КОГДА запрашивается Count THEN it returns zero ТОГДА возвращается 0 – инициировать исключение при попытке извлечь элемент из пустого стека GIVEN an empty stack ДАН пустой стек WHEN Pop() method is called КОГДА вызывается Pop() THEN exception is raised ТОГДА возникает исключение
  • 57. • «класс MyStack должен (should):» – извлекать последний положенный в него элемент GIVEN an empty stack and some integer item WHEN this item is pushed and Pop() is called THEN it returns the last item that’s pushed and it removes item from the stack and further Pop() call throws exception
  • 58.
  • 59. Экстремально важный шаблон тестового метода
  • 60. Дано: арбуз + гиря 1 кг = гиря 6 кг арбуз = ? Решение: x+1=6 x=6–1=5 Ответ: 5 кг
  • 61. Март 2006 Журнал «Better Software» Статья «Introducing BDD» Dan North
  • 62.
  • 63. «Test method names should be sentences» «A simple sentence template keeps test methods focused. This sentence template – The class should do something» «“Behavior” is a more useful word than “test”» «What’s the next most important thing the system doesn’t do?»
  • 64. От пользовательских историй к описанию поведения • As [role] • Given [initial context] I want/can [action] When [event/action] So that [result] Then [ensure some outcomes] • Как [роль] • Дано [начальный контекст] Я хочу/могу [действие] Когда [событие/действие] Так что [результат] Тогда [конкретный результат]
  • 65. Пример: калькулятор • Как тугой на голову Я хочу иметь возможность складывать, вычитать, делить и умножать два числа Чтобы видеть результат и не считать в уме
  • 66. Пример: калькулятор • Дан калькулятор и два числа – «2» и «2» Когда вводим первое число, «плюс», второе число Тогда видим результат «4» • Дан калькулятор и два числа – «123» и «23» Когда вводим первое число, «минус», второе число Тогда видим результат «100»
  • 68. Новые интересные метрики • Количество описанных «Поведений» • Процент автоматизированных тестов на «Поводение» по отношению к общему числу описанных «Поведений» • Отношение количества «Поведений» к количеству Пользовательских историй или фич
  • 69.
  • 70. Ноябрь 2009 Конференция «Agile Specifications, BDD and Testing eXchange» Dan North «BDD is a second-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.»
  • 71. Agile 2.0 ?
  • 74. Написание Unit-тестов ≠ Test-Driven Development
  • 75.
  • 76. Цикл разработки в TDD Написание неработающего теста для новой функциональности RED REFACTOR GREEN Рефакторим код, чтобы Пишем ровно столько кода, тесты продолжили проходить, чтобы тест прошел а код стал чистым
  • 77. Традиционный цикл разработки Пишем сразу заметный кусок функциональности CODING DEBUGING COMPILING Отлаживаем код, Добиваемся ловим и исправляем компилируемости поверхностные баги
  • 78. Написание тестов с использованием *Unit-фреймворков ≠ Unit-тестирование (в строгом смысле)
  • 79. Тестируем как черный ящик Тестируем как прозрачный ящик Интеграционные тесты Mock-и, Stub-ы Модульные тесты (в строгом смысле)
  • 80. Функциональные тесты Нагрузочные тесты Стресс-тесты …
  • 81. BDD – TDD done well? «I believe this is more than just ‘doing TDD well’. I think it’s ‘doing TDD and a number of other practices related to professional software development well’. The five practices above might conceivably be done in addition to TDD, but they’re not part of any definition of TDD I’ve seen.»
  • 83. История 2004 год Eric Evans «Domain-Driven Design - Tackling Complexity in the Heart of Software»
  • 84. Domain (словарь) • наследственная собственность; имение, поместье; земли; владение e.g. DNS • территория, зона, область, район (отмеченные некоторыми физическими особенностями) • сфера (интересов), поле (деятельности), область (знаний) В данном случае этот смысл • область определения (мат.) Домен поля таблицы в БД
  • 85. Т.е. это о Business Domain Предметной области и Business Logic Бизнес-логики
  • 86. Центральная роль в мышлении, проектировании, реализации DDD
  • 88.
  • 89.
  • 90.
  • 91. • Даны шаг бегунка в исходном состоянии и текущий пользователь – «Петров» Когда для этого шага выполняется действие «Подтвердить» Тогда сам шаг переходит в состояние «+» и автором подтверждения помечается «Петров»
  • 92. • Даны шаг бегунка в состоянии «?» и в бегунке есть следующий шаг в исходном состоянии и текущий пользователь – «Петров» Когда для этого шага выполняется действие «Подтвердить» Тогда сам шаг переходит в состояние «+» и автором подтверждения помечается «Петров» и следующий шаг бегунка переходит в состояние «?»
  • 93.
  • 95. Синергетический эффект  DDD TDD BDD
  • 98.
  • 99. MSpec
  • 100.
  • 102.
  • 104.
  • 106.
  • 107.
  • 108.
  • 110. vs. [TestMethod] [TestMethod] void Test…() void Should…() { { // Arrange // GIVEN … … // Action // WHEN … … // Assertion // THEN … … } }
  • 111. Гипотеза лингвистической относительности • aka «гипотеза Сепира-Уорфа» • существующие в сознании человека системы понятий, а, следовательно, и существенные особенности его мышления определяются тем конкретным языком, носителем которого этот человек является
  • 112. GUI Модель Поведение модели Аналитик Тестировщик Разработчик
  • 113. Спасибо за внимание! biBIGone@gmail.com http://www.google.com/profiles/biBIGone