Your SlideShare is downloading. ×
Domain-тестирование
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

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

10,912

Published on

Domain-тестирование – формальное название методики тестирования, за которым скрывается банальная работа с классами эквивалентности. Впрочем, не такая уж и банальная. Даже в популярной литературе по …

Domain-тестирование – формальное название методики тестирования, за которым скрывается банальная работа с классами эквивалентности. Впрочем, не такая уж и банальная. Даже в популярной литературе по тестированию часто упоминают только о существовании классов эквивалентности и о том, что с их граничными значениями работать очень полезно.

Мы знакомимся с основами этой методики, когда делаем первые шаги в тестировании, и больше никогда о ней не задумываемся, наивно считая, что она попала в нашу зону неосознанной компетентности и мы всегда используем ее правильно. А так ли это?

Published in: Technology
0 Comments
9 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
10,912
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
183
Comments
0
Likes
9
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. Domain-тестирование
  • 2. С чего все началось 2
  • 3. Что такое Domain-тестирование? 3
  • 4. Введем определения Domain (англ., мат.) – область определения Domain-тестирование – метод тестирования, в основе которого лежит работа с областями определений. 4
  • 5. Синхронизируем словари: Рассмотрим P = f (A, B), где P – некая программа, которая f (A, B) – является функцией A, B – двух параметров A={a1, .., an} и B={b1, .., bm} – области всех возможных значений (валидных и нет) a1, a2,.., b1, b2 .. – экземпляры (значения) класса 5
  • 6. Какие задачи решает DT? 1) разбиение областей значений на подобласти 2) выбор конкретных значений из подобластей 3) сочетание выбранных значений разных параметров 6
  • 7. Зачем нужно.. разбиение областей значений на подобласти – – невозможно протестировать на всех возможных значениях, конфигурациях и условиях 7
  • 8. Зачем нужен.. выбор конкретных значений из подобластей – – для минимизации риска ошибок, связанных с неверным выделением подобластей 8
  • 9. Зачем нужно.. сочетание выбранных значений – – для увеличения области покрытия, и обнаружения дефектов, которые зависят от взаимодействия двух и более параметров 9
  • 10. Задача №1: Разбиение на подобласти 10
  • 11. Определения Множество – набор элементов, объединенных некоторым общим признаком. Класс эквивалентности – множество, все элементы которого программа обрабатывает эквивалентно (исполняясь по одному пути). 11
  • 12. С чего начать выделение КЭ? • Требования есть всегда – формализованные или нет • Из требований можно определить характеристики параметра • Для каждой характеристики выделяются классы эквивалентности 12
  • 13. Пример 13
  • 14. Пример "Логин должен состоять из латинских символов, цифр, одинарного дефиса или точки, начинаться с буквы и заканчиваться буквой или цифрой и содержать не более 30 символов" 14
  • 15. Пример Характеристики для параметра “логин” а) длина: не более 30 символов б) первый символ: обязательно буква в) последний символ: буква или цифра г) содержащиеся символы: латинские символы, цифры, одинарный дефис, точка. 15
  • 16. Эвристические правила для выделения КЭ 1) Если характеристика определена диапазоном значений, то для нее выделяется три класса эквивалентности: • сам диапазон • значения, лежащие слева от него • значения, лежащие справа от него 16
  • 17. Пример длина: не более 30 символов Классы эквивалентности: • (- ∞, 0+, • [1, 30], • *31, + ∞) 1 30 17
  • 18. Эвристические правила для выделения КЭ 2) Если характеристика определена набором валидных (неупорядоченных) данных, то для нее выделяют два класса: • первый, с набором валидных данных, • второй, с набором невалидных. 18
  • 19. Пример содержащиеся символы: латинские символы, цифры, одинарный дефис, точка Классы эквивалентности: • валидные символы = ,a,..z,A..Z,0,..9,-,.} • невалидные символы = !,a,..z,A..Z,0,..9,-,.} – т.е. все остальные, кроме валидных 19
  • 20. Эвристические правила для выделения КЭ Если характеристика определяется условием "must be", то выделяется два класса эквивалентности: • первый, выполняющий условие, • второй – нет. 20
  • 21. Пример первый символ: обязательно буква Классы эквивалентности: • {A,..Z,a,..,z}; • !{A,..Z,a..z} 21
  • 22. Доразбиение классов – если полученный класс неоднороден, и скорее всего имеет внутри себя скрытые подклассы Например, как: !{A, .. Z, a,..,z} 22
  • 23. Доразбиение классов • по очевидным, хотя, возможно несущественным различиям элементов класса • по т.н. user profile, т. е. данным, которые чаще всего вводит пользователь вашей системы • произвольно разделив класс на подклассы равного размера 23
  • 24. Линейные и нелинейные КЭ • Линейными называют КЭ, которые могут быть представлены на числовой прямой, или в виде упорядоченных множеств. • Нелинейными — все остальные. 24
  • 25. Истинные и ложные нелинейные КЭ • Ложные: КЭ, про которые мы недостаточно знаем • Истинные: КЭ, которые определяются, например, словарем значений, и представляют собой класс вырожденных подклассов 25
  • 26. Особенности нелинейных КЭ - Не имеют граничных значений - Не имеют элементов повышенного риска 26
  • 27. Время для холивара и балалаек А вам есть что сказать про нелинейные классы эквивалентности? Истории из жизни приветствуются особо. 27
  • 28. Типичные ошибки 1) Слишком много классов эквивалентности 2) Слишком мало классов эквивалентности 3) Неверно определенные классы эквивалентности 28
  • 29. Задача №2: Выбор значений 29
  • 30. «Random Testing» Случайным образом – выбирается одно значение из класса наугад. Тонкий нюанс: использовать ли на всех последующих тестах одно и то же значение? 30
  • 31. Методы пропорционального разбиения - Что это? - Логическое продолжение техники «случайного выбора» - Зачем это? - Уменьшить риск неправильного определения КЭ 31
  • 32. Методы пропорционального разбиения 1. Несколько случайных значений из класса. Количество значений определяется стоимостью дефекта. 2. Классы разбиваются на подклассы равного размера. Из каждого выбирается по одному значению 3. Выбирается некое число, определяющее пропорцию количества выбранных значений к размеру области. 32
  • 33. Методы пропорционального разбиения Особенно хороши для нелинейных классов эквивалентности – истинных и ложных. 33
  • 34. Risk-based методы Группа техник тестирования, фокусирующаяся на выборе значений в потенциально уязвимых местах. 34
  • 35. Анализ граничных значений Самая известная и популярная техника: [min-1, min+1], [max-1, max+1] Предназначена для нахождения ошибок границ. 35
  • 36. Типовые ошибки границ 1. Ошибка закрытия 2. Сдвиг границы 3. Направление границы 4. Лишняя граница 5. Пропущенная граница 36
  • 37. Что еще сказать про граничные значения? Канер просил помнить про: - числовые границы - границы множеств - границы циклов - границы структур данных - границы пространства (многомерные объекты) - границы времени - границы конфигураций 37
  • 38. Специальные значения Дополнительные значения, выбираемые исходя из специфики предметной области 38
  • 39. Пример NextDate($some_date); – функция, которая возвращает дату следующего дня. Что здесь граничные значения, а что специальные? - конец короткого месяца, - конец длинного месяца, - конец года, - 28 февраля високосного/обычного года, - 29 февраля високосного/обычного года, - 31.12.1969 39
  • 40. Специальные значения для КЭ - исключения, дополнительные условные операторы (дополнительные пути) - вырожденные КЭ из одного элемента внутри основного класса 40
  • 41. Robustness Testing Анализ границ выходных значений. Пример: c=a/b; где a, b, c – вещественные числа типа float. а= max float, b= 0.1 c= (max float) / 0.1 = 10 * (max float) - потенциальный дефект 41
  • 42. Steeplechase Testing Еще одна разновидность работы с граничными значениями: кроме границ, накладываемых бизнес- требованиями, проверяем технические границы 42
  • 43. Worse-Case Testing Сочетание невалидных граничных значений нескольких переменных Если P=f(A,B,C), то: (min-1, min-1, min-1), (min-1, min-1, max+1), (min-1, max+1, max+1), и т д 43
  • 44. Задача №3: Сочетание значений 44
  • 45. Определения Single-mode дефект – дефект, вызываемый значением/значениями одного параметра Double-mode дефект – дефект, вызываемый значениями двух параметров Multi-mode дефект – дефект, вызываемый значениями трех и более параметров 45
  • 46. Equivalence class testing Неожиданно оказалось, что это целых четыре техники: - Weak Normal Equivalence Class Testing - Strong Normal Equivalence Class Testing - Weak Robust Equivalence Class Testing - Strong Robust Equivalence Class Testing 46
  • 47. Для иллюстрации Пусть P = f (A, B, C). A = {a1, a2, a3}, B = {b1, b2, b3, b4}, C = {c1, c2} 47
  • 48. Equivalence Class Testing Weak/Strong – single-/multi-mode дефекты Normal/Robust – валидные/все значения 48
  • 49. Weak Normal ECT (a1, ∀, ∀), A = {a1, a2, a3}, (a3, ∀, ∀) B = {b1, b2, b3, b4}, + C = {c1, c2} (∀, b2, ∀) (∀, b3, ∀) + (a1, b2, c1) (∀, ∀, c1) (a3, b3, c1) 49
  • 50. Strong Normal ECT (a1, b2, c1), A = {a1, a2, a3}, (a1, b3, c1), B = {b1, b2, b3, b4}, (a3, b2, c1), C = {c1, c2} (a3, b3, c1), – полный перебор всех сочетаний валидных значений 50
  • 51. Weak Robust ECT (a1, ∀, ∀), A = {a1, a2, a3}, (a2, ∀, ∀), B = {b1, b2, b3, b4}, (a3, ∀, ∀) C = {c1, c2} + (∀, b1, ∀) (∀, b2, ∀) (∀, b3, ∀) (∀, b4, ∀) (a1, b1, c1) + (a2, b2, c2) (∀, ∀, c1) (a3, b3, c1) (∀, ∀, c2) (a1, b4, c2) 51
  • 52. Strong Robust ECT (a1, b1, c1), A = {a1, a2, a3}, (a1, b1, c2), B = {b1, b2, b3, b4}, (a1, b2, c1), C = {c1, c2} (a1, b2, c2), (a1, b3, c1), (a1, b3, c2), (a1, b4, c1), (a1, b4, c2), итд 52
  • 53. Минусы ECT • чем больше параметров, • чем больше классов для каждого из них выделено, • чем больше значений выбрано из каждого класса – тем быстрее мы получим слишком большое количество тестов. 53
  • 54. Первая попытка избежать комбинаторного взрыва Сочетать между собой только параметры одной функции: - используя здравый смысл, - заглянув в черный ящик 54
  • 55. Input-Output Analysis Пусть есть P (A, B, C) , где A = {a1, a2, a3}, B = {b1, b2, b3, b4}, C = {c1, c2} и какие-то выходные значения Y и Z Полный перебор даст нам 3*4*2 = 24 теста 55
  • 56. Input-Output Analysis Предположим, что заглянув в черный ящик мы узнали, что: Y = f (A, C) Z = f (B) 56
  • 57. Input-Output Analysis Для Y нужны: (a1, ∀, c1) (a1, ∀, c2) (a2, ∀, c1) (a2, ∀, c2) (a3, ∀, c1) (a3, ∀, c2) 57
  • 58. Input-Output Analysis Для Z нужны: (∀, b1, ∀) (∀, b2, ∀) (∀, b3, ∀) (∀, b4, ∀) 58
  • 59. Input-Output Analysis Склеим два набора тестов: (a1, b1, c1) (a1, b2, c2) (a2, b3, c1) (a2, b4, c2) (a3, b1, c1) (a3, b2, c2) Профит? 6 тестов вместо 24 без потери покрытия 59
  • 60. Черный ящик такой черный В: Если в ящик заглянуть невозможно? О: Используйте автотесты не по назначению 60
  • 61. План спасения - Автотесты + перебор всех возможных входных значений - Выходные значения: изменились или нет? .. Профит? 61
  • 62. Профит и минусы Профит: резко сокращаем количество тестов при сохранении покрытия Минусы: часто мы выделяем функции не задумываясь, т. е. мы сталкиваемся с проблемой комбинаторного взрыва, уже применив эту технику 62
  • 63. Вторая попытка избежать комбинаторного взрыва Тестов по-прежнему слишком много. Выход: отказаться от части тестов, если это возможно 63
  • 64. Pairwise Pairwise – не волшебный способ сократить количество тестов магическим образом. Это следующий шаг сокращения количества тестов путем уменьшения покрытия до single- и double-mode дефектов. 64
  • 65. Определение Pairwise – техника тестирования, при которой каждое значение каждого параметра сочетается с каждым значением каждого другого. Т.е. тестирование всех пар значений (покрытие double-mode дефектов) 65
  • 66. Пример single-mode покрытия А= ,a1, a2, a3} B= {b1, b2, b3, b4} Всего : C= {c1, c2} {a1, b1, c1} {a2, b2, c2} {a3, b3, c1} {a1, b4, c2} 66
  • 67. Пример double-mode покрытия «Все пары»: a1 вместе с b1, b2, b3, b4, c1, c2 a2 вместе с b1, b2, b3, b4, c1, c2 a3 вместе с b1, b2, b3, b4, c1, c2 b1 вместе с c1, c2 b2 вместе с с1, с2 b3 вместе с с1, с2 b4 вместе с с1, с2 67
  • 68. Получается что-то вроде (a3, b1, c1) (a1, b4, c1) (a1, b3, c2) (a2, b4, c2) (a2, b3, c1) (a2, b1, c2) (a1, b1, c2) (a3, b2, c2) (a2, b2, c1) (a3, b4, c1) (a3, b3, c2) (a1, b2, c1) 68
  • 69. Плюсы Pairwise Чем больше параметров – тем выгоднее способ. Известный пример: • система из 75 бинарных значений • полное количество тестов - 2^75 • 28 тестов для всех пар 69
  • 70. Минусы Pairwise - Много тестов в одном наборе данных - Multi-mode дефекты при использовании этого способа могут быть обнаружены только случайно - Нетривиальный способ проектирования тестов 70
  • 71. Если double-mode дефектов недостаточно - сочетать с другими методиками - расширять тестовое покрытие на multi- mode дефекты, используя метод ортогональных массивов 71
  • 72. Время для вопросов, замечаний и помидоров Марина Широчкина, pancakyes@ya.ru 72

×