89
3 апреля 2014 года Тестирование ПО: баг не пройдет! Владислав Иофе Руководитель группы в отделе технологического развития

Тестирование ПО: баг не пройдет!

  • Upload
    custis

  • View
    192

  • Download
    3

Embed Size (px)

DESCRIPTION

Открытый семинар для студентов в компании CUSTIS (3 апреля 2014). Лектор: Владислав Иофе, руководитель группы в отделе технологического развития. Аннотация: Тестирование — один из самых важных процессов обеспечения качества ПО. На этом семинаре мы разберемся, что такое тесты, зачем они нужны и какими они бывают. Мы рассмотрим случаи, когда нужны автоматические тесты, поговорим о том, какие для этого есть инструменты, а также ответим на насущный вопрос, кто должен заниматься написанием тестов. А во второй, практической части семинара мы попробуем отловить дефекты небольшой программки при помощи тестов. Видеозапись семинара: https://vimeo.com/91396326.

Citation preview

Page 1: Тестирование ПО: баг не пройдет!

3 апреля 2014 года

Тестирование ПО:

баг не пройдет!

Владислав Иофе

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

Page 2: Тестирование ПО: баг не пройдет!

На сегодня

Что такое тестирование? Зачем нужно тестировать?

Классификация

«Ящик», уровни и назначения

Артефакты тестирования

Профессии тестировщика и QA

Автоматизированное тестирование

Тестирование через GUI и тестирование кода

XP, TDD

Болезни и best practices

Практика

2/95

Page 3: Тестирование ПО: баг не пройдет!

О компании и о себе

3/95

Page 4: Тестирование ПО: баг не пройдет!

О себе

В 2005 окончил мехмат

Ташкентского государственного университета

С 2004 занимаюсь корпоративным

программным обеспечением

Работал разработчиком, тимлидом

и техлидом

В 2008 пришел в CUSTIS

Сейчас руководитель группы в отделе

технологического развития

4/95

Page 5: Тестирование ПО: баг не пройдет!

Наша компания занимается

проектированием

5/95

Page 6: Тестирование ПО: баг не пройдет!

…разработкой

6/95

Page 7: Тестирование ПО: баг не пройдет!

…внедрением

7/95

Page 8: Тестирование ПО: баг не пройдет!

…сопровождением

8/95

Page 9: Тестирование ПО: баг не пройдет!

…и развитием ИТ-систем

9/95

Page 10: Тестирование ПО: баг не пройдет!

Для

БанковТорговых сетей

Госкорпораций Предприятий ЖКХ

10/95

Page 11: Тестирование ПО: баг не пройдет!

Структура компании

11/95

Page 12: Тестирование ПО: баг не пройдет!

Профессиональная инфраструктура

12/95

Page 13: Тестирование ПО: баг не пройдет!

«Техническая инфраструктура»

13/95

Page 14: Тестирование ПО: баг не пройдет!

Отличники

14/95

Page 15: Тестирование ПО: баг не пройдет!

Мальчики и девочки

15/95

Page 16: Тестирование ПО: баг не пройдет!

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

16/95

Page 17: Тестирование ПО: баг не пройдет!

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

Ваши версии?

Блог автора

17/95

Page 18: Тестирование ПО: баг не пройдет!

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

Это неполное, частное определение

Тестирование – процесс исполнения

программы с целью обнаружения

ошибок

Г. Майерс

18/95

Page 19: Тестирование ПО: баг не пройдет!

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

(продолжение)

Исследование программного обеспечения

для обеспечения интересантов

информацией о качестве тестируемой

системы

19/95

Page 20: Тестирование ПО: баг не пройдет!

Качество ПО

Качество продукта – функция от того,

насколько он изменил мир в лучшую сторону

Том ДеМарко

20/95

Не очень конкретно?

Качество – отдельная большая тема.

Как минимум, можно говорить

о качестве с точки зрения пользователя

(удовлетворение потребностей),

с философской точки зрения

(достижение некоего идеала),

с точки зрения производства продукта

Page 21: Тестирование ПО: баг не пройдет!

Качество ПО (продолжение)

Аспекты качества:

Надежность (Reliability)

Сопровождаемость (Maintainability)

Стоимость внесения изменений

(в т. ч. исправления дефектов)

Наблюдаемость системы

Эффективность (Efficiency)

Производительность

Удобство использования

Функциональность

Некоторые из этих

аспектов помогают

обеспечивать

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

21/95

Page 22: Тестирование ПО: баг не пройдет!

И снова: что такое тестирование?

Процесс формальной проверки

и подтверждения (верификация и валидация)

того, что ПО:

отвечает предъявляемым требованиям

удовлетворяет нуждам интересантов

работает, как ожидается,

или может быть сделано с заданными

характеристиками

22/95

Page 23: Тестирование ПО: баг не пройдет!

Верификация и валидация

23/95

Page 24: Тестирование ПО: баг не пройдет!

Верификация и валидация

Покупка подержанного автомобиля:

Осмотреть

Тест-драйв

Пробить по базе ГАИ

Показать в сервисе

Купить

Поставить на учет www.gibdd.ru/check/auto

24/95

Page 25: Тестирование ПО: баг не пройдет!

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

Блог автора

25/95

Page 26: Тестирование ПО: баг не пройдет!

Свойство

Тестирование может показать наличие

ошибок, но никогда не докажет

их отсутствие

Э. Дейкстра

26/95

Page 27: Тестирование ПО: баг не пройдет!

Классификация

27/95

Page 28: Тестирование ПО: баг не пройдет!

Классификация:

статика vs. динамика

Статическое тестирование

(без исполнения программы) направлено

на верификацию

Проверка синтаксиса IDE

Code review

Статический анализ кода

Динамическое – может быть направлено

на валидацию

28/95

Page 29: Тестирование ПО: баг не пройдет!

Классификация: принцип ящика

Метод тестирования белого ящика

проверяет внутренние структуры и логику

работы тестируемого фрагмента.

Необходим для:

Локализации сложных ошибок

Обеспечения требуемого покрытия кода

Метод черного ящика подразумевает

наличие информации только

о требованиях к тестируемому фрагменту

(например, входных и выходных данных)

29/95

Page 30: Тестирование ПО: баг не пройдет!

Классификация: принцип ящика

30/95

Page 31: Тестирование ПО: баг не пройдет!

Классификация: уровни

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

Модульное / Unit

Интеграционное / Integration

Системное / System

Приемочное / (User) Acceptance

* Под уровнем пока подразумевается крупность тестируемых

«строительных» блоков приложения

** Иногда выделяют компонентное тестирование (Component)

31/95

Page 32: Тестирование ПО: баг не пройдет!

Классификация: уровни

33/95

Page 33: Тестирование ПО: баг не пройдет!

Классификация: уровни и V-модель

Анализ

требований

Детальный

дизайн

Кодирование

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

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

Системное

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

Приемочное

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

Модульное

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

Дизайн

системы

Архитектура

Тестирование

и интеграция

Детализация

проекта

Время

34/95

Page 34: Тестирование ПО: баг не пройдет!

Классификация: по назначению

Регрессионное / Regression

Приемочное / Acceptance

Альфа, Бета

Функциональное / Functional

Тестирование производительности /

Performance

Нагрузочное / Load

Стресс-тестирование / Stress

35/95

Page 35: Тестирование ПО: баг не пройдет!

Классификация: по назначению

(продолжение)

Юзабилити-тестирование / Usability

Тестирование безопасности / Security

Smoke-тестирование

36/95

Page 36: Тестирование ПО: баг не пройдет!

Тестирование производительности

Блог автора

37/95

Page 37: Тестирование ПО: баг не пройдет!

Классификация:

многомерное пространство

38/95

Page 38: Тестирование ПО: баг не пройдет!

Артефакты тестирования

39/95

Page 39: Тестирование ПО: баг не пройдет!

Артефакты тестирования:

пример с бронированием билетов

Пользователь находится

на последнем шаге –

подтверждении бронирования.

Нажимает кнопку, в ответ:

Бронь успешна,

маршрут-квитанция

в почте

Места по тарифу

закончились

Сессия истекла

40/95

Page 40: Тестирование ПО: баг не пройдет!

Артефакты тестирования

41/95

Page 41: Тестирование ПО: баг не пройдет!

Артефакты тестирования

43/95

Page 42: Тестирование ПО: баг не пройдет!

Артефакты тестирования

45/95

Page 43: Тестирование ПО: баг не пройдет!

Профессии тестировщика и QA

47/95

Page 44: Тестирование ПО: баг не пройдет!

Кто тестирует?

Внедренцы

и пользователи

Бизнес-

аналитики

Системные

аналитики Тестировщики

Разработчики

Анализ

требований

Детальный

дизайн

Кодирование

Системное

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

Приемочное

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

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

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

Дизайн

системы

Архитектура

Модульное

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

48/95

Page 45: Тестирование ПО: баг не пройдет!

Профессии тестировщика и QA

QA (Quality Assurance, обеспечение

качества) – это процесс формирования

и поддержания требуемых характеристик

качества ПО по мере его создания

и сопровождения. QA захватывает все

стороны создания ПО: сбор требований,

проектирование, тестирование,

интеграцию и т. д.

Тестировщик ≠ QA-инженер

49/95

Page 46: Тестирование ПО: баг не пройдет!

Профессии тестировщика и QA

Quality Control Quality AssuranceTesting

50/95

Page 47: Тестирование ПО: баг не пройдет!

Кто тестирует?

В разных командах и компаниях сильно

по-разному

Бывают выделенные тестировщики

В CUSTIS на трех разработчиков

приходится один инженер, который

занимается:

аналитикой

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

внедрением и поддержкой

51/95

Page 48: Тестирование ПО: баг не пройдет!

Профессии тестировщика

Блог автора

52/95

Page 49: Тестирование ПО: баг не пройдет!

Автоматизированное тестирование

53/95

Page 50: Тестирование ПО: баг не пройдет!

Автоматизированное тестирование

Для тестирования используется отдельное ПО

(не то, что тестируется)

Сложность

Требования

к квалификации

Тоже требуется отладка

Дорого в поддержке –

кодовая база вырастает

вдвое

Надежность

Повторяемость

Повторное использование

Контроль регрессии

Разные конфигурации

Скорость

Возможность одновременного

запуска на разных машинах

Рефакторинг безопаснее

54/95

Page 51: Тестирование ПО: баг не пройдет!

Автоматизированное тестирование

через GUI

Тестировать вручную через GUI все равно

нужно!

Как минимум, приемочное тестирование

Но очень много повторяющихся рутинных

действий

Надо их автоматизировать!

Пример…

55/95

Page 52: Тестирование ПО: баг не пройдет!

Тестирование кода: юнит-тест

57/95

Page 53: Тестирование ПО: баг не пройдет!

Extreme Programming (1999)

Методология разработки,

направленная на повышение доверия

заказчика и качества ПО

Среди практик:

Test First

Парное программирование

Кент Бек

58/95

Page 54: Тестирование ПО: баг не пройдет!

Test-Driven Development (2002)

59/95

Page 55: Тестирование ПО: баг не пройдет!

Автоматизированное тестирование

Блог автора

61/95

Page 56: Тестирование ПО: баг не пройдет!

Best practices

Не пытайтесь тестировать все

Тест должен быть простым

Интеграционных тестов не должно быть

очень много

Тесты не должны зависеть друг от друга

62/95

Page 57: Тестирование ПО: баг не пройдет!

Best practices

Пишите тесты как для корректных,

так и для некорректных входных данных

Пишите тест как на положительные,

так и на отрицательные сценарии

Запускайте тесты как можно чаще.

Используйте Continuous integration

Пишите тест до кода. Или пусть тест

напишет хотя бы не автор тестируемого

кода

63/95

Page 58: Тестирование ПО: баг не пройдет!

Литература

64/95

Page 59: Тестирование ПО: баг не пройдет!

Вопросы?

Перерыв 10 минут

А потом практика

65/95

Page 60: Тестирование ПО: баг не пройдет!

Анекдот: подход

Two software testers went into a diner and

ordered two drinks. Then they produced

sandwiches from their briefcases and started

to eat. The owner became quite concerned

and marched over and told them, “You cannot

eat your own sandwiches in here!”

The testers looked at each other, shrugged their

shoulders and then exchanged sandwiches.

66/95

Page 61: Тестирование ПО: баг не пройдет!

Анекдот: тестирование с умом

У авиаторов был замечательный прибор для испытания

на прочность авиационных стекол. Прибор представлял

собой пистолет, выстреливающий «ножку Буша»

в лобовое стекло с крейсерской скоростью самолета.

Если стекло не трескалось, считалось, что настоящее

столкновение с живой птицей тоже пройдет успешно.

Железнодорожники решили позаимствовать опыт

при испытании лобового стекла локомотива.

Но у них почему-то цыпленок не только пробил лобовое

стекло, но повредил двигатель. Железнодорожники,

естественно, побежали к авиаторам выяснять,

все ли было сделано правильно.

Ответ был прост: «Разморозьте курицу».

67/95

Page 62: Тестирование ПО: баг не пройдет!

Анекдот: об ответственности

На одной конференции участникам задали

неудобный вопрос: «Вы только что оказались

на борту самолета и вдруг узнали, что ваша

команда была ответственна за разработку

ПО самолета. Кто из вас немедленно сойдет

на землю?»

Среди леса поднятых рук только один человек

оставался спокоен. Он прокомментировал

это так: «С нашей программой самолет вряд

ли даже вырулит, не говоря уже о взлете».

68/95

Page 63: Тестирование ПО: баг не пройдет!

Немного практики:

автомобильная сигнализация

Кнопка 1 ставит на охрану

Кнопка 2 снимает

Есть датчик удара

69/95

Page 64: Тестирование ПО: баг не пройдет!

Шаг 1

70/95

Page 65: Тестирование ПО: баг не пройдет!

Диаграмма классов

71/95

Page 66: Тестирование ПО: баг не пройдет!

72/95

Page 67: Тестирование ПО: баг не пройдет!

Шаг 1

В автомобиль поставили новенькую

сигнализацию

Теперь водитель может поставить машину

на охрану

При постановке на охрану сирена «квакает»

и аварийка моргает один раз

73/95

Page 68: Тестирование ПО: баг не пройдет!

Шаг 1

74/95

Page 69: Тестирование ПО: баг не пройдет!

Шаг 1. Пример одного теста

75/95

Page 70: Тестирование ПО: баг не пройдет!

Шаг 1.

Тестовая заглушка для аварийки

76/95

Page 71: Тестирование ПО: баг не пройдет!

Шаг 2

Водитель может снять машину с охраны

При снятии с охраны сирена «квакает»

и моргает фарами или аварийкой трижды

77/95

Page 72: Тестирование ПО: баг не пройдет!

Шаг 2. У вас могло получиться

нечто похожее

78/95

Page 73: Тестирование ПО: баг не пройдет!

Шаг 2. У вас могло получиться

нечто похожее

79/95

Page 74: Тестирование ПО: баг не пройдет!

Шаг 3

Глубокой ночью сигнализация сработала

от датчика удара

Воет сирена

Заспанный хозяин может прекратить

безобразие при помощи брелока,

дав себе и соседям выспаться

80/95

Page 75: Тестирование ПО: баг не пройдет!

Шаг 3. У вас могло получиться

нечто похожее

81/95

Page 76: Тестирование ПО: баг не пройдет!

Шаг 3. У вас могло получиться

нечто похожее

82/95

Page 77: Тестирование ПО: баг не пройдет!

Шаг 3. У вас могло получиться

нечто похожее

83/95

Page 78: Тестирование ПО: баг не пройдет!

Шаг 4

Если ночью хозяин не проснулся,

то сирена срабатывает несколько раз

По таймеру сигнализация прекращает

шуметь и продолжает охранять машину

84/95

Page 79: Тестирование ПО: баг не пройдет!

Шаг 4. У вас могло получиться

нечто похожее

85/95

Page 80: Тестирование ПО: баг не пройдет!

Шаг 5

При сдаче машины в сервис хозяина

попросят отключить сигнализацию

86/95

Page 81: Тестирование ПО: баг не пройдет!

Шаг 5. У вас могло получиться

нечто похожее

87/95

Page 82: Тестирование ПО: баг не пройдет!

Шаг 5. У вас могло получиться

нечто похожее

88/95

Page 83: Тестирование ПО: баг не пройдет!

Шаг 6

Ничего

не забыли?

89/95

Page 84: Тестирование ПО: баг не пройдет!

Шаг 7

Найден баг №1. Душераздирающая история!

Сервисмен устанавливал сигнализацию в машину

Перед любыми работами с электрикой аккумулятор

отключается от бортовой сети

Ключи от машины сервисмен бросил на сиденье

Когда подключил аккумулятор, двери

заблокировались, сигнализация сработала,

ключ с брелоком – в салоне

Как такое могло

случиться?

90/95

Page 85: Тестирование ПО: баг не пройдет!

Шаг 7. У вас могло получиться

нечто похожее

Если бы этот тест был

написан раньше,

бага бы не случилось

91/95

Page 86: Тестирование ПО: баг не пройдет!

Шаг 8

Найден баг №2. Душераздирающая история!

Машина стояла в сервисе на ремонте

Сигнализация была, как полагается, выключена

Когда хозяин забирал машину, то по ошибке нажал

кнопку брелока вместо скрытой красной кнопки

в салоне

Сигнализация сработала

Как такое могло

случиться?

92/95

Page 87: Тестирование ПО: баг не пройдет!

Шаг 8. У вас могло получиться

нечто похожее

И этот тест, будь он

написан раньше,

исключил бы ошибку

93/95

Page 88: Тестирование ПО: баг не пройдет!

Краткие выводы

Тестов для простого класса – много

Но они – простые, легко читаются, легко

поддерживаются

Нужно писать тесты как для корректных,

так и для некорректных входных данных

Нужно писать тесты не только

для «прямых» случаев

Тесты полно описывают (специфицируют)

поведение тестируемого класса

94/95

Page 89: Тестирование ПО: баг не пройдет!

Спасибо!

Вопросы?

Владислав Иофе

[email protected]

95/95