Pull to refresh
0
Инфопульс Украина
Creating Value, Delivering Excellence

Комбинаторное тестирование: генерация тестовых данных и не только

Reading time6 min
Views30K
image Хотя популярность buzzword «pairwise» уже не та, на собеседованиях до сих пор задают вопрос о том, что представляет собой эта техника тест-дизайна. Однако, далеко не все тестировщики (как те, кто приходят на собеседование, так и те, кто его проводят) могут четко сформулировать ответ на вопрос, зачем нужны комбинаторные техники в общем и pairwise в частности (подавляющее большинство ошибок, все же, находятся на атомарных значениях параметров и не зависят от других). Простой ответ на этот вопрос, на мой взгляд — для нахождения багов, возникающих вследствие явных и неявных зависимостей между параметрами. Для простых случаев техника вряд ли принесет серьезную пользу, поскольку их можно проверить вручную, а для большого числа параметров и сложных зависимостей между ними количество тестов, скорее всего, будет слишком велико для ручного тестирования. Потому основное применение комбинаторных техник (и соответственно, инструментов, осуществляющих генерацию комбинаций параметров) — автоматизированное составление наборов тестовых данных по определенным законам.

Большинство инструментов для генерации комбинаторных тестов умеют выдавать результат в виде файла с данными, который может быть передан на вход соответствующим автотестам. Такой пример (используется инструмент PICT) и будет рассмотрен ниже.

Пример 1. Серия и номер паспорта


При условии использования автоматизированного тестирования для серии и номера паспорта можно составить исчерпывающий набор позитивных тестов, поскольку требования к этому полю строги — ровно две заглавных буквы украинского алфавита (кроме Ґ, Ї, Ь) и шесть цифр от 0 до 9. Всего таких тестов будет (33-3)2*106 = 9*108. Однако, редко встречаются случаи, когда требования к полю настолько строгие, да и вряд ли нужно проводить исчерпывающее тестирование. Скорее всего, достаточно проверить возможность ввода каждой отдельной буквы и каждой отдельной цифры на каждой позиции соответственно. Задачу составления таких тестов вполне может решить инструмент комбинаторного тестирования:
SERIES_1: А,Б,В,Г,Д,Е,Є,Ж,З,І,Й,К,Л,М,Н,О,П,Р,С,Т,У,Ф,Х,Ц,Ч,Ш,Щ,Ю,Я
SERIES_2: А,Б,В,Г,Д,Е,Є,Ж,З,І,Й,К,Л,М,Н,О,П,Р,С,Т,У,Ф,Х,Ц,Ч,Ш,Щ,Ю,Я
NUMBER_1: 0,1,2,3,4,5,6,7,8,9
NUMBER_2: 0,1,2,3,4,5,6,7,8,9
NUMBER_3: 0,1,2,3,4,5,6,7,8,9
NUMBER_4: 0,1,2,3,4,5,6,7,8,9
NUMBER_5: 0,1,2,3,4,5,6,7,8,9
NUMBER_6: 0,1,2,3,4,5,6,7,8,9

{SERIES_1, SERIES_2, NUMBER_1, NUMBER_2, NUMBER_3, NUMBER_4, NUMBER_5, NUMBER_6} @ 1
Модель 1
Щ	З	4	6	3	1	1	5
І	Є	8	3	8	9	9	3
А	Н	3	0	5	8	6	2
М	С	4	3	4	1	3	1
Є	Я	4	6	7	3	1	4
Г	Ц	0	2	4	5	2	0
Часть результатов моделирования

Аналогично можно составить негативные тесты (PICT позволяет пометить их специальным символом "~").
SERIES_1: А,Б,В,Г,Д,Е,Є,Ж,З,І,Й,К,Л,М,Н,О,П,Р,С,Т,У,Ф,Х,Ц,Ч,Ш,Щ,Ю,Я
SERIES_2: А,Б,В,Г,Д,Е,Є,Ж,З,І,Й,К,Л,М,Н,О,П,Р,С,Т,У,Ф,Х,Ц,Ч,Ш,Щ,Ю,Я
NUMBER_1: 0,1,2,3,4,5,6,7,8,9,~A,~B,~C,~D,~E,~F
NUMBER_2: 0,1,2,3,4,5,6,7,8,9,~A,~B,~C,~D,~E,~F
NUMBER_3: 0,1,2,3,4,5,6,7,8,9,~A,~B,~C,~D,~E,~F
NUMBER_4: 0,1,2,3,4,5,6,7,8,9,~A,~B,~C,~D,~E,~F
NUMBER_5: 0,1,2,3,4,5,6,7,8,9,~A,~B,~C,~D,~E,~F
NUMBER_6: 0,1,2,3,4,5,6,7,8,9,~A,~B,~C,~D,~E,~F
Модель 2
З	У	1	3	7	2	7	4
Л	Ю	~B	7	3	2	7	9
А	Є	8	8	2	0	~A	8
Часть результатов моделирования

Из этих файлов потом можно будет читать построчно (разделитель — знак табуляции) и заполнять поля в приложении.

Пример 2. Увеличение тестового покрытия с помощью дополнительного параметра


Иногда баги, связанные с валидациями, зависят от того, каким образом пользователь вводит невалидные данные: с клавиатуры (физической или экранной), с помощью контекстного меню копирования-вставки, горячих клавиш, перетаскивания выделенного текста. Например, часто перетаскивание текста не обрабатывается клиентской валидацией, если таким образом вводятся некорректные данные. Способ ввода можно ввести в модель в качестве дополнительного параметра и учесть его при составлении автотестов.
SERIES_1: А,Б,В,Г,Д,Е,Є,Ж,З,І,Й,К,Л,М,Н,О,П,Р,С,Т,У,Ф,Х,Ц,Ч,Ш,Щ,Ю,Я
SERIES_2: А,Б,В,Г,Д,Е,Є,Ж,З,І,Й,К,Л,М,Н,О,П,Р,С,Т,У,Ф,Х,Ц,Ч,Ш,Щ,Ю,Я
NUMBER_1: 0,1,2,3,4,5,6,7,8,9
NUMBER_2: 0,1,2,3,4,5,6,7,8,9
NUMBER_3: 0,1,2,3,4,5,6,7,8,9
NUMBER_4: 0,1,2,3,4,5,6,7,8,9
NUMBER_5: 0,1,2,3,4,5,6,7,8,9
NUMBER_6: 0,1,2,3,4,5,6,7,8,9
INPUT: keyboard, screen keys, context menu, copy paste, drag-n-drop
Модель 3
М	Л	0	8	0	8	5	9	keyboard
Ю	У	0	0	2	3	2	2	drag-n-drop
С	Ч	5	3	6	2	1	0	screen keys
Я	Д	3	9	4	1	6	7	context menu
У	Ш	9	9	0	7	4	4	copy paste
Часть результатов моделирования

Пример 3. Тесты для систем принятия решений, валидация требований


Для систем принятия решений иногда составляются исчерпывающие тестовые наборы, которые потом можно использовать не только для тестирования, но и для валидации требований. Применяя последовательно правила системы к каждому тесту, можно посмотреть, не получаются ли противоречивые результаты.

Валидация требований — очень немаловажная часть тестирования в данном случае, поскольку можно обнаружить скрытые противоречия. Инструмент генерации комбинаторных тестов позволит не только составить тесты, но и задать условия, накладываемые на входные данные. Если эти условия делают какие-то из возможных данных недостижимыми, инструмент укажет на это, что может послужить сигналом тщательной проверки требований на непротиворечивость.
AGE: 0-17, 18-21, 22-65, >=66
CHILDREN: Y, N
SMOKING: Y, N
WORK: 0-5, 6-10, >=11

{AGE, CHILDREN, SMOKING, WORK} @ 4 

IF [AGE] = "0-17" THEN [WORK] <> ">=11";
IF [WORK] =">=11" THEN [AGE] = "0-17";
Модель 4
Constraints Warning: Restrictive constraints. Output will not contain following values
  WORK: >=11
Реакция инструмента на противоречивые требования

В данной модели есть противоречивые требования, которые отсекают значение WORK: >=11, и оно не появляется ни в одном из тестов. К сожалению, инструмент не дает ответа на вопрос, какие именно условия вызывают противоречие, только показывает, какое значение исключено из тестов. Однако, этой информации может быть достаточно, чтобы выделить из всего массива ограничений те, что влияют на этот параметр, и проанализировать их на предмет противоречивости.

Исчерпывающий набор тестов в дальнейшем может быть использован для техники тест-дизайна «причина-следствие».

Пример 4. Формирование параметров окружений для конфигурационного тестирования


Инструменты для комбинаторного тестирования позволяют также составлять список возможных конфигураций, который потом можно отсортировать по популярности использования, вычеркнуть неподходящие и т.д. Если не обязательно проводить все тесты для каждой из конфигураций, можно поделить их равномерно между выбранными окружениями, добавив окружение в качестве еще одного параметра для генерации тестовых данных (так, как это делалось в примере со способом ввода данных).
BROWSER: IE, Firefox, Chrome, Opera
LANG: en, ru, ua
OS: win, linux, android

{BROWSER, LANG, OS} @ 1
IF [OS] = "linux" THEN [BROWSER] <> "IE";
Модель 5
IE	ua	win
Firefox	en	win
Opera	ua	linux
Chrome	ru	android
Результаты моделирования

SERIES_1: А,Б,В,Г,Д,Е,Є,Ж,З,І,Й,К,Л,М,Н,О,П,Р,С,Т,У,Ф,Х,Ц,Ч,Ш,Щ,Ю,Я
SERIES_2: А,Б,В,Г,Д,Е,Є,Ж,З,І,Й,К,Л,М,Н,О,П,Р,С,Т,У,Ф,Х,Ц,Ч,Ш,Щ,Ю,Я
NUMBER_1: 0,1,2,3,4,5,6,7,8,9
NUMBER_2: 0,1,2,3,4,5,6,7,8,9
NUMBER_3: 0,1,2,3,4,5,6,7,8,9
NUMBER_4: 0,1,2,3,4,5,6,7,8,9
NUMBER_5: 0,1,2,3,4,5,6,7,8,9
NUMBER_6: 0,1,2,3,4,5,6,7,8,9
ENVIRONMENT: IE	ua	win, Firefox	en	win, Opera	ua	linux, Chrome	ru	android
Модель 6

Пример 5. Составление нескольких тестов с учетом большого количества ограничений


Безусловно, комбинаторное тестирование можно применять и для генерации тестов, которые выполняются вручную, но как мне кажется, это стоит делать, только если есть очень большое количество ограничений, которые трудно удержать в голове. Из-за наличия условий количество тестов может быть ограничено, так сказать, естественным образом, и инструмент позволит получить все возможные тестовые данные, подходящие под все накладываемые на них условия. При этом тесты можно выполнить и вручную.
AGE: 0-17, 18-21, 22-65, >=66
CHILDREN: 0, 1, 2, 3, 4, 5
SMOKING: Y, N
WORK: 0-5, 6-10, >=11

IF [AGE] = "0-17" THEN [WORK] <> ">=11";
IF [AGE] = "0-17" THEN [CHILDREN] = 0;
IF [AGE] = "18-21" THEN [CHILDREN] < 2;
IF [CHILDREN] > 0 THEN [SMOKING] = "N";
IF [AGE] = ">=66" THEN [WORK] <> "0-5";
IF [AGE] = "0-17" OR [AGE] = "18-21" THEN [WORK] = "0-5";
Модель 6
22-65	2	N	0-5
18-21	1	N	0-5
>=66	2	N	6-10
22-65	4	N	6-10
22-65	5	N	6-10
22-65	3	N	6-10
>=66	4	N	>=11
22-65	5	N	>=11
0-17	0	Y	0-5
>=66	3	N	>=11
22-65	4	N	0-5
22-65	2	N	>=11
18-21	0	Y	0-5
22-65	0	Y	>=11
22-65	1	N	6-10
22-65	3	N	0-5
>=66	1	N	>=11
0-17	0	N	0-5
>=66	0	Y	6-10
>=66	5	N	>=11
22-65	5	N	0-5
Результаты моделирования — 21 тест
Tags:
Hubs:
+8
Comments0

Articles

Information

Website
www.infopulse.com
Registered
Founded
1992
Employees
1,001–5,000 employees
Location
Украина