1 Ignite 2013 1 TDD Разработка через тестирование Дяченко Иван
1 Igni
te 2
013
1
TDD Разработка через тестирование Дяченко Иван
2 Igni
te 2
013
2
The problem
Good
Cheap Fast
3 Igni
te 2
013
3
Экстремальное программирование (XP) Разработка через тестирование (TDD) Agile Manifesto в 2001 году.
Кент Бек
4 Igni
te 2
013
4
Extreme Programming Practices
Whole Team
Small Releases
Planning Game
Customer Tests
Coding Standard
Sustainable Pace
Collective Ownership
Continuous Integration
Metaphor
Test-Driven Development
Simple Design
Refactoring Pair Programming
5 Igni
te 2
013
5
Extreme Programming Practices
Whole Team
Small Releases
Planning Game
Customer Tests
Coding Standard
Sustainable Pace
Collective Ownership
Continuous Integration
Metaphor
Test-Driven Development
Simple Design
Refactoring Pair Programming
6 Igni
te 2
013
6
TDD
«Чистый код, который работает»
7 Igni
te 2
013
7
Мифы TDD
Unit tests == TDD
TDD == 100% coverage
TDD == время * 2
TDD == серебряная пуля
8 Igni
te 2
013
8
Два простых правила TDD
Удаляем дублирование
Пишем новый код только тогда, когда автоматический код не сработал
2
1
9 Igni
te 2
013
9
Мантра TDD – “red, green, refactor”
10 Igni
te 2
013
10
11 Igni
te 2
013
11
Почему Чак не пишет тесты ?
- Сразу пишет идельный код- У Чака идеальная память - Работает один - Рефакторинг без проблем
12 Igni
te 2
013
12
Почему стоит применять TDD?
Одобрен выдающимися специалистами
TDD придуман и одобрен коллективным разумом
Применяется уже далеко не первый год 3
2
1
13 Igni
te 2
013
13
Что такое тестирование?
Тестирование – способ обеспечения качества продукта
14 Igni
te 2
013
14
Что такое тестирование?
С технической точки зрения, тестирование заключается в: § Выполнении приложения на некотором множестве исходных данных
§ Сверке получаемых результатов с заранее известными (эталонными) с целью установить соответствие различных свойств и характеристик приложения заказанным свойствам
15 Igni
te 2
013
15
Что такое тестирование?
§ Тестирование является одной из основных фаз разработки программного продукта (наряду с Дизайном приложения и Разработкой кода)
§ Оно характеризуется достаточно большим вкладом в суммарную трудоемкость разработки продукта
16 Igni
te 2
013
16
Качество ПО
Заинтересованными сторонами являются: § Заказчик продукта § Спонсор § Конечный пользователь § Разработчики § Тестировщики продукта § Инженеры поддержки § Сотрудники отделов маркетинга, обучения и продаж
17 Igni
te 2
013
17
Качество ПО
Таким образом, постановка задачи обеспечения качества продукта выливается в задачи: § Определения заинтересованных лиц
§ Их критериев качества
§ Нахождения оптимального решения, удовлетворяющего этим критериям
18 Igni
te 2
013
18
Уровни качества ПО
Готовность к
Production
Хорошай дизайн
Качество
Чистый код
19 Igni
te 2
013
19
Уровни тестирования
§ Cистемное тестирование, в ходе которого тестируется система в целом
§ Интеграционное тестирование, в ходе которого тестируются группы взаимодействующих модулей и компонент системы
§ Модульное тестирование, в ходе которого тестируются отдельные компоненты
20 Igni
te 2
013
20
Системное тестирование
Основной задачей системного тестирования является проверка как функциональных, так и
нефункциональных требований в системе в целом
21 Igni
te 2
013
21
Системное тестирование
В ходе системного тестирования выявляются следующие дефекты: § Неверное использование ресурсов системы
§ Непредусмотренные комбинации данных пользовательского уровня
§ Несовместимость с окружением
§ Непредусмотренные сценарии использования
§ Отсутствующая или неверная функциональность
§ Неудобство использования и т.д.
22 Igni
te 2
013
22
Интеграционное тестирование
Интеграционное тестирование предназначено для проверки связи между компонентами, а также взаимодействия с различными
частями системы (операционной системой, оборудованием либо связи между различными системами)
23 Igni
te 2
013
23
Интеграционное тестирование
Интеграционное тестирование так же может проводиться на различных уровнях: § Компонентный: проверяется взаимодействие между компонентами системы после проведения компонентного (модульного) тестирования
§ Системный: проверяется взаимодействие между разными системами после проведения системного тестирования
24 Igni
te 2
013
24
Компонентное или Модульное тестирование
Модульное тестирование проверяет функциональность и ищет дефекты в частях приложения, которые доступны и могут быть протестированы по отдельности (модули программ, объекты,
классы, функции и т.д.)
25 Igni
te 2
013
25
Почему TDD? Потому что:
Во многих проектах: § Тестирование запланировано позже разработки
Недостаточно времени / бюджета § Короткий период тестирования
§ Ручное тестирование исключается
26 Igni
te 2
013
26
Эффективность автоматизации
Оценка распределения трудоемкости между фазами создания программного продукта: 40%-20%-40%
27 Igni
te 2
013
27
Эффективность автоматизации
§ Следовательно, наибольший эффект в снижении трудоемкости может быть получен прежде всего на фазах Design и Testing
§ А значит и основные вложения в автоматизацию или генерацию кода следует осуществлять, прежде всего, на этих фазах
28 Igni
te 2
013
28
Unit Testing
§ Облегчает работу программиста, позволяя маленькими шажками реализовывать большой функционал. И гарантирует работоспособность на каждом шаге
§ Вынуждает проектировать красивый дизайн проекта, который в дальнейшем легче использовать
§ Есть гарантия, что покрытый тестами код - работает!
§ Рефакторинг становится почти безболезненным.
29 Igni
te 2
013
29
TDD – это о дизайне!
30 Igni
te 2
013
30
Влияние хорошего дизайна
31 Igni
te 2
013
31
Почему автоматизированные тесты?
32 Igni
te 2
013
32
Риски ручного тестирования
33 Igni
te 2
013
33
Почему Test First?
34 Igni
te 2
013
34
Почему Test First?
35 Igni
te 2
013
35
Итеративный процесс
Add Test
Watch Test Fail
Write Code
Run Tests
Refactor
36 Igni
te 2
013
36
37 Igni
te 2
013
37
Вопросы ?