TDD – Test-Driven Development Разработка через тестирование

Содержание

Слайд 2

Разработка через тестирование

Техника разработки ПО, основывающаяся на повторении очень коротких циклов разработки:

Разработка через тестирование Техника разработки ПО, основывающаяся на повторении очень коротких циклов

Написать тест, покрывающий желаемое изменение.
Написать код, который позволяет пройти тест.
Выполнить рефакторинг.

Слайд 3

Тест

Тест – это процедура, которая позволяет либо подтвердить, либо опровергнуть работоспособность кода.
Тесты

Тест Тест – это процедура, которая позволяет либо подтвердить, либо опровергнуть работоспособность
бывают ручные и автоматические.

Слайд 4

Ручное тестирование

Ручное тестирование состоит из двух этапов:
Стимулирование кода.
Проверка результата.

Ручное тестирование Ручное тестирование состоит из двух этапов: Стимулирование кода. Проверка результата.

Слайд 5

Автоматическое тестирование

Вместо программиста стимулирование кода и проверкой результатов занимается компьютер, который отображает

Автоматическое тестирование Вместо программиста стимулирование кода и проверкой результатов занимается компьютер, который
на экране результат выполнения теста:
Код работоспособен
Или
Код неработоспособен.

Слайд 6

Инверсия ответственности

От логики тестов и от их качества зависит, будет ли код

Инверсия ответственности От логики тестов и от их качества зависит, будет ли код соответствовать техническому заданию.
соответствовать техническому заданию.

Слайд 7

Модульное тестирование

Юнит-тестирование (unit testing) – процесс, позволяющий в автоматическом режиме проверить на

Модульное тестирование Юнит-тестирование (unit testing) – процесс, позволяющий в автоматическом режиме проверить
корректность отдельные модули программы.

Слайд 8

Методика TDD

Методика TDD заключается, в основном, в организации автоматических тестов (unit testing)

Методика TDD Методика TDD заключается, в основном, в организации автоматических тестов (unit
и выработке определенных навыков тестирования.
Одной из особенностей является написание тестов ДО написания кода.

Слайд 9

Test-first Сначала тест

Test-first Сначала тест

Слайд 10

Мантра TDD

Написать тест;
Добиться, чтобы тест сработал;
Устранить дублирование (выполнить рефакторинг).

Мантра TDD Написать тест; Добиться, чтобы тест сработал; Устранить дублирование (выполнить рефакторинг).

Слайд 11

Цикл разработки TDD

Цикл разработки TDD

Слайд 12

Связанные принципы

KISS – keep it simple, stupid (делай проще, тупица). Keep it

Связанные принципы KISS – keep it simple, stupid (делай проще, тупица). Keep
short and simple (делай короче и проще).
YAGNI – you ain’t gonna need it (вам это не понадобится).

Слайд 13

РЕФАКТОРИНГ

Изменение кода без изменения функциональности

РЕФАКТОРИНГ Изменение кода без изменения функциональности

Слайд 14

Рефакторинг

Процесс изменения внутренней структуры программы, не затрагивающий её внешнего поведения и имеющий

Рефакторинг Процесс изменения внутренней структуры программы, не затрагивающий её внешнего поведения и
целью облегчить понимание её работы.

Слайд 15

Не путать РЕФАКТОРИНГ с оптимизацией производительности и реинженирингом!

Не путать РЕФАКТОРИНГ с оптимизацией производительности и реинженирингом!

Слайд 16

Причины применения рефакторинга

Рефакторинг применяется постоянно при разработке кода. Основными стимулами являются:
Необходимо добавить

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

Слайд 17

Признаки плохого кода

Дублирование кода;
Длинный метод;
Большой класс;
Длинный список параметров;
«Завистливые» функции и «завистливые» классы;
Избыточные

Признаки плохого кода Дублирование кода; Длинный метод; Большой класс; Длинный список параметров;
временные переменные;
Классы данных;
Несгруппированные данные.
И т.д…

Слайд 18

TDD НА ПРИМЕРЕ

Мультивалютные деньги

TDD НА ПРИМЕРЕ Мультивалютные деньги

Слайд 19

Кент Бек. Экстремальное программирование: разработка через тестирование
Test-driven Development by Example
ISBN 5-8046-0051-6, 0-321-14653-0;

Кент Бек. Экстремальное программирование: разработка через тестирование Test-driven Development by Example ISBN 5-8046-0051-6, 0-321-14653-0; 2003 г.
2003 г.

Слайд 20

Отчет о портфеле акций

Отчет о портфеле акций

Слайд 21

Отчет о портфеле акций

*1 USD = 30 руб

Отчет о портфеле акций *1 USD = 30 руб

Слайд 22

Требуемая функциональность

Сложение величин в одной валюте;
Умножение величины в одной валюте (стоимость акции)

Требуемая функциональность Сложение величин в одной валюте; Умножение величины в одной валюте
на число (количество акций). Результатом должна быть величина в валюте;
Сложение двух величин в разных валютах и конвертировать результат с учетом курса обмена.

Слайд 23

ToDo List

$5 + 150 RUR = $10, если курс 1:30
$5 * 2

ToDo List $5 + 150 RUR = $10, если курс 1:30 $5 * 2 = $10
= $10

Слайд 24

Сначала тест!

Сначала тест!

Слайд 25

Тоже самое, но без NUnit

Тоже самое, но без NUnit

Слайд 26

Подключить System.Diagnostics

Подключить System.Diagnostics

Слайд 27

Вызвать функцию теста

Вызвать функцию теста

Слайд 28

TDD ШАГ ЗА ШАГОМ

ТЕСТ -> КОД -> РЕФАКТОРИНГ

TDD ШАГ ЗА ШАГОМ ТЕСТ -> КОД -> РЕФАКТОРИНГ

Слайд 29

Наш первый тест

Наш первый тест

Слайд 30

Нет класса Dollar;
Нет конструктора;
Нет метода times()
Нет переменной класса Amount.

Не компилируется – 4

Нет класса Dollar; Нет конструктора; Нет метода times() Нет переменной класса Amount.
ошибки!

Слайд 31

Маленькие шаги

Маленькие шаги

Слайд 32

Добавим класс Dollar

Добавим класс Dollar

Слайд 33

Результат выполнения теста

Результат выполнения теста

Слайд 34

Сообщение Assert (без NUnit)

Сообщение Assert (без NUnit)

Слайд 35

Зеленая полоса как можно быстрее!

Зеленая полоса как можно быстрее!

Слайд 36

Успешный тест – зеленая полоса!

Успешный тест – зеленая полоса!

Слайд 37

Полный цикл TDD

Добавить небольшой тест.
Запустить все тесты, при этом обнаружить, что что-то

Полный цикл TDD Добавить небольшой тест. Запустить все тесты, при этом обнаружить,
не срабатывает.
Внести небольшое изменение.
Снова запустить тесты и убедиться, что все они успешно выполняются.
Устранить дублирование с помощью рефакторинга.

Слайд 38

Где дублирование?

Где дублирование?

Слайд 40

Перенос умножения в функцию times()

Перенос умножения в функцию times()

Слайд 41

Где взять 5?

Где взять 5?

Слайд 42

Перепишем times, используя значение из Amount

Перепишем times, используя значение из Amount

Слайд 43

Где взять 2?

Где взять 2?

Слайд 44

Последний штрих

Последний штрих

Слайд 45

ToDo List

$5 + 150 RUR = $10, если курс 1:30
$5 * 2

ToDo List $5 + 150 RUR = $10, если курс 1:30 $5
= $10 <- ГОТОВО
Сделать переменную Amount закрытым членом класса
Побочные эффекты в классе Dollar?
Округление денежных величин?

Слайд 46

ЧИСТЫЙ КОД, КОТОРЫЙ РАБОТАЕТ

Clean code that works © Ron Jeffries

ЧИСТЫЙ КОД, КОТОРЫЙ РАБОТАЕТ Clean code that works © Ron Jeffries

Слайд 47

Обычный цикл TDD

Обычный цикл TDD

Слайд 48

1. Напишите тест.

Представьте, как будет реализована в коде воображаемая операция.
Придумывая её интерфейс,

1. Напишите тест. Представьте, как будет реализована в коде воображаемая операция. Придумывая
опишите все элементы, которые, как вам кажется, понадобятся.
Пример: в первом тесте мы добавили класс Dollar, функцию times и переменную-член Amount.

Слайд 49

2. Заставьте тест работать

Первоочередная задача – получить зеленую полосу.
Если ОЧЕВИДНО простое и

2. Заставьте тест работать Первоочередная задача – получить зеленую полосу. Если ОЧЕВИДНО
элегантное решение – создайте его.
Если на реализацию такого решения потребуется время – ОТЛОЖИТЕ его. Просто отметьте, что к нему придется вернуться, когда будет решена основная задача – быстро получить зеленый индикатор.
Противоречит правилам хорошей разработки?

Слайд 50

3. Улучшите решение

После того, как система работает, избавьтесь от прошлых прегрешений и

3. Улучшите решение После того, как система работает, избавьтесь от прошлых прегрешений
вернитесь к хорошей разработке.
Удалите дублирование (и другие огрехи) и быстро сделайте так, чтобы полоска снова стала зеленой.

Слайд 51

Чистый код, который работает

Сначала мы получаем код, который работает.
Затем делаем из него

Чистый код, который работает Сначала мы получаем код, который работает. Затем делаем из него чистый код.
чистый код.

Слайд 52

ToDo List

$5 + 150 RUR = $10, если курс 1:30
$5 * 2

ToDo List $5 + 150 RUR = $10, если курс 1:30 $5
= $10
Сделать переменную Amount закрытым членом класса
Побочные эффекты в классе Dollar?
Округление денежных величин?

Слайд 53

Вырождающиеся объекты

Вырождающиеся объекты

Слайд 54

Красная полоса: 30 вместо 15!

Красная полоса: 30 вместо 15!

Слайд 55

Сначала измените тест!

Сначала измените тест!

Слайд 56

Потом код

Сначала сделайте, чтобы просто компилировалось.

Потом код Сначала сделайте, чтобы просто компилировалось.

Слайд 58

Компилируется, но полоса снова красная. А это тоже прогресс!

Компилируется, но полоса снова красная. А это тоже прогресс!

Слайд 59

times() возвращает новый объект

times() возвращает новый объект

Слайд 60

Наш новый тест работает!

Наш новый тест работает!

Слайд 61

Триангуляция

Одного теста недостаточно! Необходимо минимум два.

Триангуляция Одного теста недостаточно! Необходимо минимум два.

Слайд 62

Слабые места TDD

Сложно привыкнуть.
Сложно применять TDD в ряде случаев, например, при разработке

Слабые места TDD Сложно привыкнуть. Сложно применять TDD в ряде случаев, например,
GUI.
Требуется больше времени на разработку, т.к. необходимо писать тесты.
Т.к. модульные тесты обычно пишутся теми же, кто написал код, то в случае неверной трактовки требований к приложению, и тест и тестируемый код могут содержать ошибки.
И др.

Слайд 63

Задание на дом

Скачать и установить на свой компьютер NUnit testing framework для

Задание на дом Скачать и установить на свой компьютер NUnit testing framework
C#
NUnit для .NET (С#) – http://www.nunit.org/
Быстрый старт на русском: http://goo.gl/wIQBr
По желанию:
JUnit для Java – http://www.junit.org/
CPPUnit для С++ - http://cppunit.sourceforge.net
Любой другой framework.

Слайд 64

Задание на дом

Используя методологию TDD разработать класс или набор классов, обеспечив полное

Задание на дом Используя методологию TDD разработать класс или набор классов, обеспечив
покрытие тестами.
Продемонстрировать владение умение владеть инструментом NUnit, знание основ TDD.
Величины в разных шкалах.
Обеспечить (в одной шкале): умножение и деление на число, (в одной и разных шкалах): сложение, вычитание, операции отношения (больше, меньше, эквивалентность) величин, принадлежащих разным шкалам: градусы и фаренгейты, метры и футы, мили и километры, Ватты и лошадиные силы, акры и гектары, паскали (бары) и атмосферы, узлы и км/ч, литры и галлоны, унции и караты.
Пример на следующем слайде.
Имя файла: TDD-–-Test-Driven-Development-Разработка-через-тестирование.pptx
Количество просмотров: 421
Количество скачиваний: 2