Тестирование весна 2014 смешанное занятие 2
-
Upload
technopark -
Category
Education
-
view
267 -
download
0
Transcript of Тестирование весна 2014 смешанное занятие 2
![Page 1: Тестирование весна 2014 смешанное занятие 2](https://reader033.fdocument.pub/reader033/viewer/2022052523/555e19c7d8b42a9e188b58c2/html5/thumbnails/1.jpg)
Модульное тестирование
Влад Алюков
![Page 2: Тестирование весна 2014 смешанное занятие 2](https://reader033.fdocument.pub/reader033/viewer/2022052523/555e19c7d8b42a9e188b58c2/html5/thumbnails/2.jpg)
О чём
Зачем нужны модульные(unit) тесты Что они из себя представляют Подходы к написанию тестов Анализ существующих тестов Антипаттерны в проектировании тестов Как написать нетестопригодный код Статический анализ кода
2
![Page 3: Тестирование весна 2014 смешанное занятие 2](https://reader033.fdocument.pub/reader033/viewer/2022052523/555e19c7d8b42a9e188b58c2/html5/thumbnails/3.jpg)
3
Модульное тестирование
![Page 4: Тестирование весна 2014 смешанное занятие 2](https://reader033.fdocument.pub/reader033/viewer/2022052523/555e19c7d8b42a9e188b58c2/html5/thumbnails/4.jpg)
UNIT test
4
![Page 5: Тестирование весна 2014 смешанное занятие 2](https://reader033.fdocument.pub/reader033/viewer/2022052523/555e19c7d8b42a9e188b58c2/html5/thumbnails/5.jpg)
Зачем писать unit-тесты?
Уменьшение количества итераций Разработка > Тестирование > Разработка
Качество кода Более лёгкое внесение изменений Документация
5
![Page 6: Тестирование весна 2014 смешанное занятие 2](https://reader033.fdocument.pub/reader033/viewer/2022052523/555e19c7d8b42a9e188b58c2/html5/thumbnails/6.jpg)
Зачем: Качество кода
6
![Page 7: Тестирование весна 2014 смешанное занятие 2](https://reader033.fdocument.pub/reader033/viewer/2022052523/555e19c7d8b42a9e188b58c2/html5/thumbnails/7.jpg)
Зачем: Простое внесение изменений
7
![Page 8: Тестирование весна 2014 смешанное занятие 2](https://reader033.fdocument.pub/reader033/viewer/2022052523/555e19c7d8b42a9e188b58c2/html5/thumbnails/8.jpg)
Зачем: Документация
8
![Page 9: Тестирование весна 2014 смешанное занятие 2](https://reader033.fdocument.pub/reader033/viewer/2022052523/555e19c7d8b42a9e188b58c2/html5/thumbnails/9.jpg)
Пирамида тестирования
9
![Page 10: Тестирование весна 2014 смешанное занятие 2](https://reader033.fdocument.pub/reader033/viewer/2022052523/555e19c7d8b42a9e188b58c2/html5/thumbnails/10.jpg)
Превосходство модульных тестов
Скорость Надёжность Стабильность
10
![Page 11: Тестирование весна 2014 смешанное занятие 2](https://reader033.fdocument.pub/reader033/viewer/2022052523/555e19c7d8b42a9e188b58c2/html5/thumbnails/11.jpg)
Скорость
11
![Page 12: Тестирование весна 2014 смешанное занятие 2](https://reader033.fdocument.pub/reader033/viewer/2022052523/555e19c7d8b42a9e188b58c2/html5/thumbnails/12.jpg)
Надёжность
12
![Page 13: Тестирование весна 2014 смешанное занятие 2](https://reader033.fdocument.pub/reader033/viewer/2022052523/555e19c7d8b42a9e188b58c2/html5/thumbnails/13.jpg)
Стабильность
13
![Page 14: Тестирование весна 2014 смешанное занятие 2](https://reader033.fdocument.pub/reader033/viewer/2022052523/555e19c7d8b42a9e188b58c2/html5/thumbnails/14.jpg)
Анатомия теста
14
Инициализация контекста (опционально)
Выполнение проверок Очистка контекста (опционально) Отчётность
![Page 15: Тестирование весна 2014 смешанное занятие 2](https://reader033.fdocument.pub/reader033/viewer/2022052523/555e19c7d8b42a9e188b58c2/html5/thumbnails/15.jpg)
Задачи фрэймворка
Структура для написания тестов Запуск тестов Отчёты
15
![Page 16: Тестирование весна 2014 смешанное занятие 2](https://reader033.fdocument.pub/reader033/viewer/2022052523/555e19c7d8b42a9e188b58c2/html5/thumbnails/16.jpg)
Пример использования фрэймворка
16
![Page 17: Тестирование весна 2014 смешанное занятие 2](https://reader033.fdocument.pub/reader033/viewer/2022052523/555e19c7d8b42a9e188b58c2/html5/thumbnails/17.jpg)
Репорты
Html Report xUnit Report Text Report
17
![Page 18: Тестирование весна 2014 смешанное занятие 2](https://reader033.fdocument.pub/reader033/viewer/2022052523/555e19c7d8b42a9e188b58c2/html5/thumbnails/18.jpg)
Тестовые фрейморки xUnit
18
unit test framework #{lang}unit test framework #{lang}
![Page 19: Тестирование весна 2014 смешанное занятие 2](https://reader033.fdocument.pub/reader033/viewer/2022052523/555e19c7d8b42a9e188b58c2/html5/thumbnails/19.jpg)
Пример тестов на фибоначчи
Разбор тестируемого метода Определение граничных значений Определение классов эквивалентности
19
![Page 20: Тестирование весна 2014 смешанное занятие 2](https://reader033.fdocument.pub/reader033/viewer/2022052523/555e19c7d8b42a9e188b58c2/html5/thumbnails/20.jpg)
Виды проверок (ассертов)
20
![Page 21: Тестирование весна 2014 смешанное занятие 2](https://reader033.fdocument.pub/reader033/viewer/2022052523/555e19c7d8b42a9e188b58c2/html5/thumbnails/21.jpg)
21
Антипаттерны в тестировании
![Page 22: Тестирование весна 2014 смешанное занятие 2](https://reader033.fdocument.pub/reader033/viewer/2022052523/555e19c7d8b42a9e188b58c2/html5/thumbnails/22.jpg)
False Positive
assertTrue(True) Пустое тело метода
22
![Page 23: Тестирование весна 2014 смешанное занятие 2](https://reader033.fdocument.pub/reader033/viewer/2022052523/555e19c7d8b42a9e188b58c2/html5/thumbnails/23.jpg)
Зависимый
Зависит от окружения Операционная система Расположение файлов
Зависит от других тестов Один тест подготавливает данные для другого
23
![Page 24: Тестирование весна 2014 смешанное занятие 2](https://reader033.fdocument.pub/reader033/viewer/2022052523/555e19c7d8b42a9e188b58c2/html5/thumbnails/24.jpg)
Inspector
Использует знание о структуре объектов (reflection api) Изменение атрибутов доступа тестируемого
класса Получение приватных значение тестируемого
класса
24
![Page 25: Тестирование весна 2014 смешанное занятие 2](https://reader033.fdocument.pub/reader033/viewer/2022052523/555e19c7d8b42a9e188b58c2/html5/thumbnails/25.jpg)
GodTest
Задействует много посторонних объектов и подсистем В случае падения трудно определить причину По большому счёту является уже больше
интеграционным тестом, нежели unit
25
![Page 26: Тестирование весна 2014 смешанное занятие 2](https://reader033.fdocument.pub/reader033/viewer/2022052523/555e19c7d8b42a9e188b58c2/html5/thumbnails/26.jpg)
Неинформативные имена
26
![Page 27: Тестирование весна 2014 смешанное занятие 2](https://reader033.fdocument.pub/reader033/viewer/2022052523/555e19c7d8b42a9e188b58c2/html5/thumbnails/27.jpg)
Медленные тесты
27
Unit-test не должны выполнятся больше секунды
Что замедляет Ввод/вывод Обработка сложных структур данных sleep
![Page 28: Тестирование весна 2014 смешанное занятие 2](https://reader033.fdocument.pub/reader033/viewer/2022052523/555e19c7d8b42a9e188b58c2/html5/thumbnails/28.jpg)
Заглушки
Эмуляция hardware интерфейсов Внешние зависимости
Виды Stub ― заглушка для объекта Mock ― эмул яция объекта Dummy – Пустой объект
28
![Page 29: Тестирование весна 2014 смешанное занятие 2](https://reader033.fdocument.pub/reader033/viewer/2022052523/555e19c7d8b42a9e188b58c2/html5/thumbnails/29.jpg)
Mock/Stub (Demo)
29
![Page 30: Тестирование весна 2014 смешанное занятие 2](https://reader033.fdocument.pub/reader033/viewer/2022052523/555e19c7d8b42a9e188b58c2/html5/thumbnails/30.jpg)
Альтернативный подход (DocTest)
30
Классический тест:
![Page 31: Тестирование весна 2014 смешанное занятие 2](https://reader033.fdocument.pub/reader033/viewer/2022052523/555e19c7d8b42a9e188b58c2/html5/thumbnails/31.jpg)
Альтернативный подход (DocTest)
31
![Page 32: Тестирование весна 2014 смешанное занятие 2](https://reader033.fdocument.pub/reader033/viewer/2022052523/555e19c7d8b42a9e188b58c2/html5/thumbnails/32.jpg)
DocTest
Преимущества Актуальные примеры использования Простота написания
Недостатки Развесистая документация Нецелевое использование docstring Неудобно работать с фикстурами
32
![Page 33: Тестирование весна 2014 смешанное занятие 2](https://reader033.fdocument.pub/reader033/viewer/2022052523/555e19c7d8b42a9e188b58c2/html5/thumbnails/33.jpg)
33
Практики написания тестов
![Page 34: Тестирование весна 2014 смешанное занятие 2](https://reader033.fdocument.pub/reader033/viewer/2022052523/555e19c7d8b42a9e188b58c2/html5/thumbnails/34.jpg)
TDD
34
![Page 35: Тестирование весна 2014 смешанное занятие 2](https://reader033.fdocument.pub/reader033/viewer/2022052523/555e19c7d8b42a9e188b58c2/html5/thumbnails/35.jpg)
TDD
Плюсы Отслеживание прогресса Документирование Архитектура “в нагрузку” Перенос процесса отладки на начальную
стадию
Минусы Высокий порог вхождения
35
![Page 36: Тестирование весна 2014 смешанное занятие 2](https://reader033.fdocument.pub/reader033/viewer/2022052523/555e19c7d8b42a9e188b58c2/html5/thumbnails/36.jpg)
Пример TDD (ruby)
36
![Page 37: Тестирование весна 2014 смешанное занятие 2](https://reader033.fdocument.pub/reader033/viewer/2022052523/555e19c7d8b42a9e188b58c2/html5/thumbnails/37.jpg)
37
Анализ существующих
тестов
![Page 38: Тестирование весна 2014 смешанное занятие 2](https://reader033.fdocument.pub/reader033/viewer/2022052523/555e19c7d8b42a9e188b58c2/html5/thumbnails/38.jpg)
Анализ покрытия
38
![Page 39: Тестирование весна 2014 смешанное занятие 2](https://reader033.fdocument.pub/reader033/viewer/2022052523/555e19c7d8b42a9e188b58c2/html5/thumbnails/39.jpg)
Метрики
По файлам По классам По состояниями По линиям кода
39
![Page 40: Тестирование весна 2014 смешанное занятие 2](https://reader033.fdocument.pub/reader033/viewer/2022052523/555e19c7d8b42a9e188b58c2/html5/thumbnails/40.jpg)
Обманчивое покрытие
Примеры когда покрытие лжет!
40
![Page 41: Тестирование весна 2014 смешанное занятие 2](https://reader033.fdocument.pub/reader033/viewer/2022052523/555e19c7d8b42a9e188b58c2/html5/thumbnails/41.jpg)
Инструменты
Emma(java) Simplecover (ruby) Sonar
41
![Page 42: Тестирование весна 2014 смешанное занятие 2](https://reader033.fdocument.pub/reader033/viewer/2022052523/555e19c7d8b42a9e188b58c2/html5/thumbnails/42.jpg)
Mutation Testing
42
![Page 43: Тестирование весна 2014 смешанное занятие 2](https://reader033.fdocument.pub/reader033/viewer/2022052523/555e19c7d8b42a9e188b58c2/html5/thumbnails/43.jpg)
Возможные мутации (мутанты)
43
![Page 44: Тестирование весна 2014 смешанное занятие 2](https://reader033.fdocument.pub/reader033/viewer/2022052523/555e19c7d8b42a9e188b58c2/html5/thumbnails/44.jpg)
Эквивалентные мутанты
44
![Page 45: Тестирование весна 2014 смешанное занятие 2](https://reader033.fdocument.pub/reader033/viewer/2022052523/555e19c7d8b42a9e188b58c2/html5/thumbnails/45.jpg)
45
Антипаттерны в разработке
![Page 46: Тестирование весна 2014 смешанное занятие 2](https://reader033.fdocument.pub/reader033/viewer/2022052523/555e19c7d8b42a9e188b58c2/html5/thumbnails/46.jpg)
Сильно связанный код
Монолитная кодовая база (инициализация классов внутри класса)
Сложность в разделении на модули Перегруженные тесты
46
![Page 47: Тестирование весна 2014 смешанное занятие 2](https://reader033.fdocument.pub/reader033/viewer/2022052523/555e19c7d8b42a9e188b58c2/html5/thumbnails/47.jpg)
“Тяжёлые” конструкторы
Конструкторы содержащие создание или настройку членов класса
Не поддаются изоляции от членов класса, для тестирования необходимо подгружать другие модули.
47
![Page 48: Тестирование весна 2014 смешанное занятие 2](https://reader033.fdocument.pub/reader033/viewer/2022052523/555e19c7d8b42a9e188b58c2/html5/thumbnails/48.jpg)
“Тяжёлые” методы
Очень большое тело метода Много аргументов на вход Передача контекстного объекта в тело
метода
Проблемы в тестировании Более сложные тесты
Вероятно метод реализует слишком много логики, необходимо разделение на объекты.
48
![Page 49: Тестирование весна 2014 смешанное занятие 2](https://reader033.fdocument.pub/reader033/viewer/2022052523/555e19c7d8b42a9e188b58c2/html5/thumbnails/49.jpg)
Цикломатическая сложность
Количество путей выполнения программы
Выше цикломатическая сложность – сложнее тестировать
Каждый дополнительный операнд у if увеличивает количество необходимых тестов минимум на 2
49
![Page 50: Тестирование весна 2014 смешанное занятие 2](https://reader033.fdocument.pub/reader033/viewer/2022052523/555e19c7d8b42a9e188b58c2/html5/thumbnails/50.jpg)
God Object
Класс «всё включено» Обычно содержит в себе тяжёлые
методы, и тяжёлый конструктор
Слишком много логики сосредоточено в объекте, сложность в тестовой декомпозиции, сложность дизайна тестов.
50
![Page 51: Тестирование весна 2014 смешанное занятие 2](https://reader033.fdocument.pub/reader033/viewer/2022052523/555e19c7d8b42a9e188b58c2/html5/thumbnails/51.jpg)
Singleton
Паттерн позволяющий создавать единственный экземпляр объекта
Отравляемый контекст
Минусы: Применение данного паттерна может
привести к неприятным side-эффектам. Конкуренции за доступ (в highload
проектах)
51
![Page 52: Тестирование весна 2014 смешанное занятие 2](https://reader033.fdocument.pub/reader033/viewer/2022052523/555e19c7d8b42a9e188b58c2/html5/thumbnails/52.jpg)
Dependency Injection
Паттерн проектирования понижающий связанность кода
Фреймворки: Guice (java) Spring (java)
52
![Page 53: Тестирование весна 2014 смешанное занятие 2](https://reader033.fdocument.pub/reader033/viewer/2022052523/555e19c7d8b42a9e188b58c2/html5/thumbnails/53.jpg)
Статический анализ кодовой базы
Связанность кода Опасные конструкции Опечатки Копипаст Утечки памяти Code Convention Цикломатическая сложность
53
![Page 54: Тестирование весна 2014 смешанное занятие 2](https://reader033.fdocument.pub/reader033/viewer/2022052523/555e19c7d8b42a9e188b58c2/html5/thumbnails/54.jpg)
Sonar
54
![Page 55: Тестирование весна 2014 смешанное занятие 2](https://reader033.fdocument.pub/reader033/viewer/2022052523/555e19c7d8b42a9e188b58c2/html5/thumbnails/55.jpg)
Sonar
55
![Page 56: Тестирование весна 2014 смешанное занятие 2](https://reader033.fdocument.pub/reader033/viewer/2022052523/555e19c7d8b42a9e188b58c2/html5/thumbnails/56.jpg)
Домашнее задание
Сделать форк проекта server с моего гитхаба
Обеспечить его тестовое покрытие не ниже 85%
Замеряем покрытие cobertura Метрика branch coverage Задание выполняется индивидуально
56
![Page 57: Тестирование весна 2014 смешанное занятие 2](https://reader033.fdocument.pub/reader033/viewer/2022052523/555e19c7d8b42a9e188b58c2/html5/thumbnails/57.jpg)
57
Вопросы?