Behavior - Driven Development Бибичев Андрей март 2010 г.

Презентация:



Advertisements
Похожие презентации
Разработка ПО через тестирование поведения средствами Cucumber Динерштейн Леонид, Флэтсофт.
Advertisements

Тестирование программного обеспечения 2009, v.2.8 Тест-дизайн.
Test Driven Development или как не выстрелить себе в ногу Дмитрий Хрюкин Fuse 8 Online Вторая конференция.NET разработчиков.
Назначение CTesK. Архитектура теста в CTesK. Тестовая система Тестовая система Тестирование Целевая система Результаты тестирования результаты воздействия.
Первые шаги в TDD 1. Павел Габриель руководитель проектов, программист «Смарт системз» 2.
DevCon12 // msdevcon.ru #msdevcon мая, 2012 г. Microsoft.
Денис Тучин Круглый стол «Как управлять качеством проекта? Когда, как и чем его можно измерить?» 2015 Почему всегда не успеваем QA? Как могут помочь гибкие.
SOFTWARE DEVELOPMENT PODGOTOVIL TVOU ZHOPY K SDACHE.
Mock-объекты mock (англ.) – ложный, фиктивный, мнимый, фальшивый, поддельный.
Автоматизированное тестирование веб-приложений Вадим Кадученко.
LOGO Модульное тестирование. Виды тестов Модульные Тестируется функционал ограниченной части кода (минимум – класса) Тесты изолированы от других частей.
11 BASIC DRESS-UP FEATURES. LESSON II : DRESS UP FEATURES 12.
The questions without answers One day Looking at nowhere I stopped to think of …
EXtreme Programming XP Тема 2. XP Заказчики определяют: объем работ; приоритеты; композиции версий; сроки выпуска версий. Разработчики определяют: оценку.
Introduction Expressing opinion Giving arguments (not less than 3) Justifications (explanations, examples) Conclusion.
Методология SCRUM Методология гибкой разработки программного обеспечения.
Multiples Michael Marchenko. Definition In mathematics, a multiple is the product of any quantity and an integer. in other words, for the quantities a.
Учебный центр ИТ УРАНСОФТ Учим, устраиваем, развиваем!
Microsoft TechDays Межов Александр Разработчик ПО ОАО ЧЭМК
Ecology and fashion. Project was done by Borodina Ludmila from 10 B.
Транксрипт:

Behavior - Driven Development Бибичев Андрей март 2010 г.

GProfile: bibigonebibigone SlideShare: bibiginebibigine GMail:bibigonebibigone 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 – MethodA – MethodB – MethodC MyClassTests – TestMethodA – TestMethodB – 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 thats 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 NorthBetter SoftwareIntroducing BDD

«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» «Whats the next most important thing the system doesnt do?»

От пользовательских историй к описанию поведения As [role] I want/can [action] So that [result] Как [роль] Я хочу/могу [действие] Так что [результат] Given [initial context] When [event/action] 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 GREEN REFACTOR Написание неработающего теста для новой функциональности Пишем ровно столько кода, чтобы тест прошел Рефакторим код, чтобы тесты продолжили проходить, а код стал чистым Полный цикл – несколько минут

Традиционный цикл разработки CODING COMPILING DEBUGING Пишем сразу заметный кусок функциональности Добиваемся компилируемости Отлаживаем код, ловим и исправляем поверхностные баги Полный цикл – несколько часов

Написание тестов с использованием *Unit-фреймворков Unit-тестирование (в строгом смысле)

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

Функциональные тесты Нагрузочные тесты Стресс-тесты …

BDD – TDD done well? « I believe this is more than just doing TDD well. I think its 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 theyre not part of any definition of TDD Ive 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 BDDTDD Синергетический эффект

Фреймворки

SpecUnit.Net

MSpec

NBehave

SubSpec for xUnit.Net

Своими руками

Заключение

vs. [TestMethod] void Test…() { // Arrange … // Action … // Assertion … } [TestMethod] void Should…() { // GIVEN … // WHEN … // THEN … }

Гипотеза лингвистической относительности aka «гипотеза Сепира-Уорфа» существующие в сознании человека системы понятий, а, следовательно, и существенные особенности его мышления определяются тем конкретным языком, носителем которого этот человек является

Аналитик Разработчик Тестировщик GUI Модель Поведение модели

Спасибо за внимание!