Марина Широчкина: Тестирование

Post on 11-Jul-2015

1.734 views 0 download

Transcript of Марина Широчкина: Тестирование

Марина Широчкина Руководитель группы тестирования

Тестирование Обзорная лекция

Что это такое и с чем его едят?

Введение

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/

Марина Широчкина

pancakyes@yandex.ru

Спасибо