Upload
yandex
View
1.732
Download
0
Embed Size (px)
Citation preview
Марина Широчкина Руководитель группы тестирования
Тестирование Обзорная лекция
Что это такое и с чем его едят?
Введение
4
Тестирование – процесс сравнения ожидаемых результатов с полученными.
5
Тестирование – набор инженерных практик, нацеленных на раннее обнаружение дефектов.
6
Тестирование – способ предоставления и получения обратной связи: как технологической, так и продуктовой.
7
Пример продуктовой обратной связи
• «Здесь нельзя грабить корованы!» (с) пользователь
8
Пример продуктовой обратной связи
• «Здесь нельзя грабить корованы!» (с) пользователь
• «Оно делает не то, что надо!» (с) менеджер
9
Пример продуктовой обратной связи
• «Здесь нельзя грабить корованы!» (с) пользователь
• «Оно делает не то, что надо!» (с) менеджер
• «Я не могу использовать разработанный тобой API, он не возвращает все необходимые данные.»
(с) коллега-разработчик
10
Пример технической обратной связи
• «Поддержка продукта при такой архитектуре будет слишком сложна.»
(с) системный архитектор
11
Пример технической обратной связи
• «Поддержка продукта при такой архитектуре будет слишком сложна.»
(с) системный архитектор
• «Ребята, оно падает каждые полчаса, я не буду это поддерживать.»
(с) системный администратор
12
Пример технической обратной связи
• «Поддержка продукта при такой архитектуре будет слишком сложна.»
(с) системный архитектор
• «Ребята, оно падает каждые полчаса, я не буду это поддерживать.»
(с) системный администратор
• «Эта реализация не выдержит предполагаемой нагрузки.»
(с) кто-то битый жизнью
13
Раннее обнаружение проблем – залог здорового сна.
Народная мудрость
Баг лучше поймать сразу же после его создания.
Уровни тестирования
15
Unit-тесты – тесты, проверяющие корректность работы отдельных модулей программы.
16
17
18
Входные (тестовые) данные
Выходные данные (полученный результат)
19
Плюсы unit-тестов
• Можно запустить сразу после внесения изменений в код – позволяют найти дефект сразу после его «создания».
20
Плюсы unit-тестов
• Можно запустить сразу после внесения изменений в код – позволяют найти дефект сразу после его «создания».
• Могут служить документацией к коду.
21
Плюсы unit-тестов
• Можно запустить сразу после внесения изменений в код – позволяют найти дефект сразу после его «создания».
• Могут служить документацией к коду.
• Упрощают процесс рефакторинга.
22
Минусы unit-тестов
• Их надо писать.
23
Минусы unit-тестов
• Их надо писать.
• Их надо уметь писать.
24
Минусы unit-тестов
• Их надо писать.
• Их надо уметь писать.
• Их надо поддерживать.
25
Даже если все компоненты по отдельности работают правильно, то это ещё ничего не значит.
26
Интеграционные тесты – тесты, проверяющие корректность взаимодействия отдельных модулей друг с другом.
27
28
29
30
Плюсы интеграционных тестов
• Находят баги, которые не могут быть обнаружены unit-тестами.
31
Плюсы интеграционных тестов
• Находят баги, которые не могут быть обнаружены unit-тестами.
• Запускаются после сборки проекта и позволяют быстро обнаружить проблемы взаимодействия.
32
Минусы интеграционных тестов
• все минусы unit-тестов
33
Даже если все компоненты по отдельности работают правильно и корректно взаимодействуют друг с другом – это ещё ничего не значит.
34
Приёмочные тесты – тесты, проверяющие работоспособность системы целиком. В реальном окружении, с реальными данными, на реальных сценариях.
35
Железка
OS
36
Плюсы приёмочных тестов
• Находят баги, которые не могут быть обнаружены unit- и интеграционными тестами
37
Плюсы приёмочных тестов
• Находят баги, которые не могут быть обнаружены unit- и интеграционными тестами
• Позволяют оценить работоспособность продукта целиком
38
Плюсы приёмочных тестов
• Находят баги, которые не могут быть обнаружены unit- и интеграционными тестами
• Позволяют оценить работоспособность продукта целиком
• На этом уровне с продуктом могут ознакомиться будущие пользователи
39
Минусы приёмочных тестов
• Самые высокоуровневые – сложнее локализовывать проблему
40
Минусы приёмочных тестов
• Самые высокоуровневые – сложнее локализовывать проблему
• Занимают больше времени
41
Минусы приёмочных тестов
• Самые высокоуровневые – сложнее локализовывать проблему
• Занимают больше времени
• Обнаруживают проблемы с некоторой задержкой
42
Что же выбрать?
Каждому виду багов – свой вид тестирования
Виды тестирования
44
«АААА! Ничего не работает»
45
Функциональное тестирование – проверка работы кода/продукта на соответствие требованиям. Проверка логики работы.
46
«Не работает у части пользователей»
47
Конфигурационное тестирование на клиенте – проверка работоспособности на различных конфигурациях. Для веб-сайтов – в разных браузерах.
48
«Мы это выкатили, и оно перестало работать!»
49
Конфигурационное тестирование сервер-сайда – проверка работоспособности в окружении, максимально идентичном продакшену (железка, OS, утилиты, библиотеки, конфиги, версии).
50
«Всё сломалось, когда туда пришли пользователи»
51
Нагрузочное тестирование – проверка работоспособности под нагрузкой (одновременная обработка большого потока запросов).
52
«Работает, но страшно тормозит»
53
Тестирование производительности – проверка скорости работы системы.
54
Причём:
• Необходимо измерить длительность полного цикла «запрос-ответ». Оценить общее время, обратить внимание на отдельные этапы
55
Причём:
• Необходимо измерить длительность полного цикла «запрос-ответ». Оценить общее время, обратить внимание на отдельные этапы
• То же самое – под нагрузкой
56
Причём:
• Необходимо измерить длительность полного цикла «запрос-ответ». Оценить общее время, обратить внимание на отдельные этапы
• То же самое – под нагрузкой
• В пользовательских условиях (сетевые условия)
57
«Всё было хорошо, пока не пришли злые китайские хакеры»
58
Тестирование безопасности –
59
«А как этим пользоваться?»
60
купил айфон а чо с ним делать где кнопки чтобы нажимать и как мне позвонить сереге а вот и он звонит и чо
61
Тестирование юзабилити – тестирование удобства использования. Коридорный вариант доступен всем.
62
«Оно работало, а потом вдруг упало»
63
Тестирование стабильности – тестирование стабильности работы под нагрузкой, длительное время.
64
Всё?
65
Ещё много…
• Volume тестирование • Stress/Recovery тестирование • Spike тестирование • Localization тестирование • Compatibility тестирование И т. д. И т. п.
66
Какие выбрать?
67
Исходя из специфики вашего проекта.
68
Способы тестирования
69
Ручное тестирование – выполнение тестов вручную или с помощью скриптов. Ручной анализ результатов.
70
Плюсы и минусы ручного подхода
Плюсы • Более информативно – замечаются дефекты рядом
71
Плюсы и минусы ручного подхода
Плюсы • Более информативно – замечаются дефекты рядом
Минусы • Долго
72
Плюсы и минусы ручного подхода
Плюсы • Более информативно – замечаются дефекты рядом
Минусы • Долго • Дорого
73
Автоматическое тестирование – выполнение с помощью скриптов или инструментов. Оценка результатов проводится автоматически.
74
Плюсы и минусы неручного подхода Плюсы • Удобно и легко
75
Плюсы и минусы неручного подхода Плюсы • Удобно и легко
Минусы • Тесты нужно писать и поддерживать
76
Плюсы и минусы неручного подхода Плюсы • Удобно и легко
Минусы • Тесты нужно писать и поддерживать • Тесты выполняются «в лоб»
77
Плюсы и минусы неручного подхода Плюсы • Удобно и легко
Минусы • Тесты нужно писать и поддерживать • Тесты выполняются «в лоб» • Сами тесты/скрипты/инструменты могут содержать баги и порождать ложные результаты
78
Разумная комбинация методов – залог успеха.
79
Инструменты
Функциональное, приемочное тестирование: Selenium (web app): http://seleniumhq.org/ TestComplete (desktop app): http://smartbear.com/products/qa-tools/automated-testing-tools Функциональное, unit тестирование: подбирается под используемый язык, см http://clck.ru/4bsKa Нагрузочное тестирование/тестирование производительности: Яндекс.Танк: https://github.com/yandex-load/yandex-tank Jmeter: http://jmeter.apache.org/
80
Инструменты
Как сымитировать плохую сеть: Fiddler: http://www.fiddler2.com/fiddler2/ Charles: http://www.charlesproxy.com/ Утилита tc: man tc Большой зоопарк разнообразных браузеров: http://browsershots.org/