Top Banner
1 Ignite 2013 1 TDD Разработка через тестирование Дяченко Иван
37

Introduction into Test Driven Development

Jul 02, 2015

Download

Documents

Ivan Dyachenko
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Introduction into Test Driven Development

1 Igni

te 2

013

1

TDD Разработка через тестирование Дяченко Иван

Page 2: Introduction into Test Driven Development

2 Igni

te 2

013

2

The problem

Good

Cheap Fast

Page 3: Introduction into Test Driven Development

3 Igni

te 2

013

3

Экстремальное программирование (XP) Разработка через тестирование (TDD) Agile Manifesto в 2001 году.

Кент Бек

Page 4: Introduction into Test Driven Development

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

Page 5: Introduction into Test Driven Development

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

Page 6: Introduction into Test Driven Development

6 Igni

te 2

013

6

TDD

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

Page 7: Introduction into Test Driven Development

7 Igni

te 2

013

7

Мифы TDD

Unit tests == TDD

TDD == 100% coverage

TDD == время * 2

TDD == серебряная пуля

Page 8: Introduction into Test Driven Development

8 Igni

te 2

013

8

Два простых правила TDD

Удаляем дублирование

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

2

1

Page 9: Introduction into Test Driven Development

9 Igni

te 2

013

9

Мантра TDD – “red, green, refactor”

Page 10: Introduction into Test Driven Development

10 Igni

te 2

013

10

Page 11: Introduction into Test Driven Development

11 Igni

te 2

013

11

Почему Чак не пишет тесты ?

- Сразу пишет идельный код- У Чака идеальная память - Работает один - Рефакторинг без проблем

Page 12: Introduction into Test Driven Development

12 Igni

te 2

013

12

Почему стоит применять TDD?

Одобрен выдающимися специалистами

TDD придуман и одобрен коллективным разумом

Применяется уже далеко не первый год 3

2

1

Page 13: Introduction into Test Driven Development

13 Igni

te 2

013

13

Что такое тестирование?

Тестирование – способ обеспечения качества продукта

Page 14: Introduction into Test Driven Development

14 Igni

te 2

013

14

Что такое тестирование?

С технической точки зрения, тестирование заключается в: §  Выполнении приложения на некотором множестве исходных данных

§  Сверке получаемых результатов с заранее известными (эталонными) с целью установить соответствие различных свойств и характеристик приложения заказанным свойствам

Page 15: Introduction into Test Driven Development

15 Igni

te 2

013

15

Что такое тестирование?

§  Тестирование является одной из основных фаз разработки программного продукта (наряду с Дизайном приложения и Разработкой кода)

§  Оно характеризуется достаточно большим вкладом в суммарную трудоемкость разработки продукта

Page 16: Introduction into Test Driven Development

16 Igni

te 2

013

16

Качество ПО

Заинтересованными сторонами являются: §  Заказчик продукта §  Спонсор §  Конечный пользователь §  Разработчики §  Тестировщики продукта §  Инженеры поддержки §  Сотрудники отделов маркетинга, обучения и продаж

Page 17: Introduction into Test Driven Development

17 Igni

te 2

013

17

Качество ПО

Таким образом, постановка задачи обеспечения качества продукта выливается в задачи: §  Определения заинтересованных лиц

§  Их критериев качества

§  Нахождения оптимального решения, удовлетворяющего этим критериям

Page 18: Introduction into Test Driven Development

18 Igni

te 2

013

18

Уровни качества ПО

Готовность к

Production

Хорошай дизайн

Качество

Чистый код

Page 19: Introduction into Test Driven Development

19 Igni

te 2

013

19

Уровни тестирования

§  Cистемное тестирование, в ходе которого тестируется система в целом

§  Интеграционное тестирование, в ходе которого тестируются группы взаимодействующих модулей и компонент системы

§  Модульное тестирование, в ходе которого тестируются отдельные компоненты

Page 20: Introduction into Test Driven Development

20 Igni

te 2

013

20

Системное тестирование

Основной задачей системного тестирования является проверка как функциональных, так и

нефункциональных требований в системе в целом

Page 21: Introduction into Test Driven Development

21 Igni

te 2

013

21

Системное тестирование

В ходе системного тестирования выявляются следующие дефекты: §  Неверное использование ресурсов системы

§  Непредусмотренные комбинации данных пользовательского уровня

§  Несовместимость с окружением

§  Непредусмотренные сценарии использования

§  Отсутствующая или неверная функциональность

§  Неудобство использования и т.д.

Page 22: Introduction into Test Driven Development

22 Igni

te 2

013

22

Интеграционное тестирование

Интеграционное тестирование предназначено для проверки связи между компонентами, а также взаимодействия с различными

частями системы (операционной системой, оборудованием либо связи между различными системами)

Page 23: Introduction into Test Driven Development

23 Igni

te 2

013

23

Интеграционное тестирование

Интеграционное тестирование так же может проводиться на различных уровнях: §  Компонентный: проверяется взаимодействие между компонентами системы после проведения компонентного (модульного) тестирования

§  Системный: проверяется взаимодействие между разными системами после проведения системного тестирования

Page 24: Introduction into Test Driven Development

24 Igni

te 2

013

24

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

Модульное тестирование проверяет функциональность и ищет дефекты в частях приложения, которые доступны и могут быть протестированы по отдельности (модули программ, объекты,

классы, функции и т.д.)

Page 25: Introduction into Test Driven Development

25 Igni

te 2

013

25

Почему TDD? Потому что:

Во многих проектах: §  Тестирование запланировано позже разработки

Недостаточно времени / бюджета §  Короткий период тестирования

§  Ручное тестирование исключается

Page 26: Introduction into Test Driven Development

26 Igni

te 2

013

26

Эффективность автоматизации

Оценка распределения трудоемкости между фазами создания программного продукта: 40%-20%-40%

Page 27: Introduction into Test Driven Development

27 Igni

te 2

013

27

Эффективность автоматизации

§  Следовательно, наибольший эффект в снижении трудоемкости может быть получен прежде всего на фазах Design и Testing

§  А значит и основные вложения в автоматизацию или генерацию кода следует осуществлять, прежде всего, на этих фазах

Page 28: Introduction into Test Driven Development

28 Igni

te 2

013

28

Unit Testing

§  Облегчает работу программиста, позволяя маленькими шажками реализовывать большой функционал. И гарантирует работоспособность на каждом шаге

§  Вынуждает проектировать красивый дизайн проекта, который в дальнейшем легче использовать

§  Есть гарантия, что покрытый тестами код - работает!

§  Рефакторинг становится почти безболезненным.

Page 29: Introduction into Test Driven Development

29 Igni

te 2

013

29

TDD – это о дизайне!

Page 30: Introduction into Test Driven Development

30 Igni

te 2

013

30

Влияние хорошего дизайна

Page 31: Introduction into Test Driven Development

31 Igni

te 2

013

31

Почему автоматизированные тесты?

Page 32: Introduction into Test Driven Development

32 Igni

te 2

013

32

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

Page 33: Introduction into Test Driven Development

33 Igni

te 2

013

33

Почему Test First?

Page 34: Introduction into Test Driven Development

34 Igni

te 2

013

34

Почему Test First?

Page 35: Introduction into Test Driven Development

35 Igni

te 2

013

35

Итеративный процесс

Add Test

Watch Test Fail

Write Code

Run Tests

Refactor

Page 36: Introduction into Test Driven Development

36 Igni

te 2

013

36

Page 37: Introduction into Test Driven Development

37 Igni

te 2

013

37

Вопросы ?