Page 1
ТЕСТИРОВАНИЕКАК ПАРАРАЗРАБОТКА
@p0deje [email protected]
Page 2
• 7+ лет в тестировании
• Head QA @ Toptal
• Code monkey @ Watir
• (ex) Контрибутор @ Mozilla
АЛЕКСЕЙ РОДИОНОВ
Page 4
КАЧЕСТВОсоответствие реализации заданным характеристикам
Page 5
КАЧЕСТВОсоответствие реализации заданным характеристикам
(функциональная спека, дизайн, юзабилити, etc.)
Page 6
ТЕСТИРОВАНИЕполучение информации о качестве
Page 8
ЗАЧЕМ?изменение текущих процессов разработки
Page 9
ЗАЧЕМ?более лучшее качество
Page 10
ЗАЧЕМ?выше конкурентоспособность
Page 11
ЗАЧЕМ?увеличение прибыли
Page 13
N.B. Иллюстрация принципа “why stack” компании ThoughtWorks
Page 14
КАК?Верификация и Валидация
Page 15
ВЕРИФИКАЦИЯмы сделали то, что требовалось
Page 16
ВАЛИДАЦИЯто, что мы сделали, соответствует ожиданиям (клиента, пользователей)
Page 18
КАК?Требования, планы, кейсы, трэкер и т.д.
Page 19
КАК?Требования, планы, кейсы, трэкер и т.д. Требования, планы, кейсы, трэкер и т.д.
Page 20
КАК?Требования, планы, кейсы, трэкер и т.д. Требования, планы, кейсы, трэкер и т.д. Требования, планы, кейсы, трэкер и т.д.
Page 21
КАК?Требования, планы, трэкер и т.д. Требования, планы, трэкер и т.д. Требования, планы, трэкер и т.д.
Page 22
КАК?Требования, трэкер и т.д. Требования, трэкер и т.д. Требования, трэкер и т.д.
Page 23
КАК?Требования и т.д. Требования и т.д. Требования и т.д.
Page 25
“РЕГРЕССИОННАЯ СПИРАЛЬ СМЕРТИ”
Page 26
РУЧНОЕ ТЕСТИРОВАНИЕ НЕ МАСШТАБИРУЕТСЯ
Page 27
КОЛИЧЕСТВО ➜ КАЧЕСТВО
Page 28
АВТОМАТИЗАЦИЯ ТЕСТИРОВАНИЯ
Page 29
УРОВНИ
Юнит тесты Интеграционные тесты Системные тесты
Page 30
ЮНИТ ТЕСТЫ
• Методы и классы
• В 90% случаев разработчики
Page 31
ИНТЕГРАЦИОННЫЕ ТЕСТЫ
• Взаимодействие отдельных компонентов
• Big bang, bottom-up, top-down
Page 32
СИСТЕМНЫЕ ТЕСТЫ
• Полностью собранная система
• GUI, Exploratory, Ad hoc, Security, Usability, etc.
Page 33
Входные данные Тестируемая система Оракул
ТЕСТ
Page 34
ВХОДНЫЕ ДАННЫЕ
daysInMonthToString(days)
Page 35
ВХОДНЫЕ ДАННЫЕ
daysInMonthToString(days)daysInMonthToString(10) #=> “10 days”
Page 36
ВХОДНЫЕ ДАННЫЕ
daysInMonthToString(days)daysInMonthToString(10) #=> “10 days”
daysInMonthToString(50) #=> Error: “No more than 31 days”
Page 37
АНАЛИЗ ПОГРАНИЧНЫХ ЗНАЧЕНИЙ
… -1 0 31 32 …
Page 38
АНАЛИЗ ПОГРАНИЧНЫХ ЗНАЧЕНИЙ
… -1 0 31 32 …
Неверно НеверноВерно
Page 39
АНАЛИЗ ПОГРАНИЧНЫХ ЗНАЧЕНИЙ
daysInMonthToString(-1)daysInMonthToString(0)daysInMonthToString(31)daysInMonthToString(32)
Page 40
КЛАССЫ ЭКВИВАЛЕНТНОСТИ
Единственное число - day Множественное число - days
Page 41
КЛАССЫ ЭКВИВАЛЕНТНОСТИ
daysInMonthToString(-1)daysInMonthToString(0)
daysInMonthToString(31)daysInMonthToString(32)
daysInMonthToString(1)
Page 42
Входные данные Тестируемая система Оракул
ТЕСТ
Page 43
ОРАКУЛ
• Предсказывает поведение системы
• Определяет результат теста (pass/fail)
• Джеймс Бах / Майкл Болтон: “FEW HICCUPPS”
• Дуг Хоффман: “Таксономия оракулов”
Page 45
ЧТО ДАЛЬШЕ?Непрерывная интеграция, деплоймент, ATDD, etc.
Page 46
ЧТО ДАЛЬШЕ?Непрерывная интеграция, деплоймент, ATDD, etc. Оптимизация тестов, инфраструктура, etc.
Page 48
ТЕСТИРОВАНИЕ? ПАРАРАЗРАБОТКА!
Page 49
ПАРАДЕВЧеловек в команде разработки, который
не является разработчиком
Page 50
ПАРАДЕВЧеловек со множеством скиллов
и неограниченный формальными рамками
Page 51
ПАРАДЕВЦель тестирования - перестать тестировать
Page 52
ПАРАДЕВ“Test is dead” - Alberto Savoia
Page 53
@p0deje [email protected]
СПАСИБО!