Pairwise testing. Part 2 - AllPairs Algorithm.
Вступление.
Прошлым постом мы разобрались что такое попарное тестирование и тестирование ортогональными массивами. Теперь пришел черед allpairs algorithm. Эта комбинаторная техника была специально создана для попарного тестирования. Суть ее состоит в выборе таких комбинаций переменных, чтобы существовали все возможные комбинации значений каждой пары переменных.
Примечание: настоятельно рекомендуется перед изучением allpairs algorithm прочитать прошлый пост -orthogonal array testing.
Подход
Будем разбирать Allpairs algorithm сразу на примерах.
Начнем фантазировать. Представим что у нас есть формочка, на которой:
* Есть список - Может принимать значение от 0 до 9 включительно.
* Есть поле ввода - может принимать целочисленные значения от 1 до 99 включительно.
* Есть чекбокс1 - принимает значения on или off.
* Есть чекбокс2 - принимает значения on или off.
Сколько всего возможных комбинаций мы имеем? 99*10*2*2 = 3,960 возможных, валидных комбинаций. Тут нам придется либо умереть собственной смертью в попытках протестировать все комбинации, либо каким то способом уменьшить количество нужных нам комбинаций. Allpairs algorithm как раз и есть такой комбинаторный способ.
Суть Allpairs algorithm заключается в том, что мы не будем тестировать на всех комбинациях значений для всех переменных, а только все комбинации значений каждой пары переменных.
Ну приступим. Как всегда, для начала, нам нужно определить какое количество входных параметров(переменных) у нас есть, и какие значения может принимать каждый входной параметр.
List | TextBox | Checkbox1 | Checkbox2 |
---|---|---|---|
0 | 1 | on | on |
1 | 2 | off | off |
2 | 3 | ||
3 | 4 | ||
4 | ... | ||
5 | 96 | ||
6 | 97 | ||
7 | 98 | ||
8 | 99 | ||
9 |
Если можно упростить значения переменных, то обязательно это делаем. Например, поле ввода может принимать значения от 1 до 99. Понимая бизнес логику приложения мы можем разбить значения 1 до 99 на классы эквивалентности и использовать уже их как возможные значения для комбинаторики. Либо можем использовать технику граничных значений.
Как бы там ни было, в нашем сказочном примере, для простоты, уменьшим количество возможных значений до 3х - валидное целочисленое значение, невалидное целочисленое значение, символы.
Ну и давайте уменьшим количество возможных значений для списка до 2х - 0 и любое другое значение.
Теперь наши входные данные выглядят так:
List | TextBox | Checkbox1 | Checkbox2 |
---|---|---|---|
0 | Valid int | on | on |
any other | Invalid int | off | off |
Alpha chars |
Магичесий момент. Поменяем порядок столбцов таблицы так, чтобы переменная с наибольшим количеством значений была первой, а с наименьшим количеством значений последней.
TextBox(3) | List(2) | Checkbox1(2) | Checkbox2(2) |
Кажется пора начинать заполнять таблицу. Каждая строка таблицы будет представлять уникальный набор входных данных для теста. Внимательно, полностью сконцентрировавшись и отбросив все задние мысли смотрим сколько значений может принимать переменная второго столбца (список). Ага, 2 значения. Значит столько раз нужно вставить все значения первого столбца.
TextBox(3) | List(2) | Checkbox1(2) | Checkbox2(2) |
---|---|---|---|
Valid Integer | |||
Valid Integer | |||
. | |||
Invalid Integer | |||
Invalid Integer | |||
. | |||
Alpha chars | |||
Alpha chars |
Мы вставили 6 строк. 3 возможных значения поля ввода (а т.е. первого столбца) значения повторяются дважды. Так же мы пропустили по строке после каждого дубля значения - это важно, эпический момент, окутанный загадкой - дальше это нам понадобится.
Заполняем второй столбец. Для каждого дубля значений столбца 1 мы заполняем оба значения столбца 2.
TextBox(3) | List(2) | Checkbox1(2) | Checkbox2(2) |
---|---|---|---|
Valid Integer | 0 | ||
Valid Integer | other | ||
. | |||
Invalid Integer | 0 | ||
Invalid Integer | other | ||
. | |||
Alpha chars | 0 | ||
Alpha chars | other |
Пока все хорошо, у нас вышли все возможные комбинации пар значений первой и второй переменной. Думаю стоит продолжить заполнять таблицу :). Третья переменная может принимать 2 значения - on и off. Для каждого дубля значений столбца 1 мы заполняем оба значения столбца 3.
TextBox(3) | List(2) | Checkbox1(2) | Checkbox2(2) |
---|---|---|---|
Valid Integer | 0 | on | |
Valid Integer | other | off | |
. | |||
Invalid Integer | 0 | on | |
Invalid Integer | other | off | |
. | |||
Alpha chars | 0 | on | |
Alpha chars | other | off |
Проверяем. Есть ли все возможные комбинации значений между 1ым и 2ым столбцом? Есть. Есть все возможные комбинации значений между вторым и третьим столбцом? Нет, у нас нет комбинации {0,off} и {other, on}.
TextBox(3) | List(2) | Checkbox1(2) | Checkbox2(2) |
---|---|---|---|
Valid Integer | 0 | on | |
Valid Integer | other | off | |
. | |||
Invalid Integer | 0 | off | |
Invalid Integer | other | on | |
. | |||
Alpha chars | 0 | on | |
Alpha chars | other | off |
О, вот теперь намного лучше. Теперь у нас есть и все возможные комбинации значений 1ой, 2ой и 3ей переменной. Давайте разбираться с 4ой переменной - чекбокс2. Чекбокс2 тоже может иметь 2 возможных значнеия. Нам нужно подставить в таблицу эти значения так, чтобы все возможные комбинации значений каждой пары переменных существовали. Пробуем.
TextBox(3) | List(2) | Checkbox1(2) | Checkbox2(2) |
---|---|---|---|
Valid Integer | 0 | on | Checked |
Valid Integer | other | off | Unchecked |
. | |||
Invalid Integer | 0 | off | Checked |
Invalid Integer | other | on | Unchecked |
. | |||
Alpha chars | 0 | on | Unchecked |
Alpha chars | other | off | Checked |
Проверяем. Есть все возможные комбинации первого и четвертого столбца? Есть. Есть все возможные комбинации второго и четвертого столбца? Есть. Неплохо. Есть все возможные комбинации третьего и четвертого столбца? Еcть. Отлично, мы справились в 6 тест кейсов, когда всего существует 24 возможных комбинации.
Но зачем мы оставили пустые строки? Для того чтобы это понять нам нужно усложнить пример. Добавим еще 2 чекбокса (2 бинарных входных параметра) - чекбокс3 и чекбокс4. Продолжим строить тестовые данные на основе allpairs algorithm. Добавляем значения для 5ого столбца.
TextBox(3) | List(2) | Checkbox1(2) | Checkbox2(2) | Checkbox3(2) | Checkbox4(2) |
---|---|---|---|---|---|
Valid Integer | 0 | on | Checked | Yes | |
Valid Integer | other | off | Unchecked | No | |
. | |||||
Invalid Integer | 0 | off | Checked | No | |
Invalid Integer | other | on | Unchecked | Yes | |
. | |||||
Alpha chars | 0 | on | Unchecked | No | |
Alpha chars | other | off | Checked | Yes |
Проверяем свежезаполненый 5ый столбец по отношению к остальным столбцам поочереди:
* к первому - все ок. Все комбинации значений есть.
* к второму - все ок. Все комбинации значений есть.
* к третьему - все ок. Все комбинации значений есть.
* к четвертому - все ок. Все комбинации значений есть.
Что ж, заполним последнюю колонку значениями.
TextBox(3) | List(2) | Checkbox1(2) | Checkbox2(2) | Checkbox3(2) | Checkbox4(2) |
---|---|---|---|---|---|
Valid Integer | 0 | on | Checked | Yes | 1 |
Valid Integer | other | off | Unchecked | No | 2 |
. | |||||
Invalid Integer | 0 | off | Checked | No | 2 |
Invalid Integer | other | on | Unchecked | Yes | 1 |
. | |||||
Alpha chars | 0 | on | Unchecked | No | 1 |
Alpha chars | other | off | Checked | Yes | 2 |
* к первому - все ок. Все комбинации значений есть.
* к второму - все ок. Все комбинации значений есть.
* к третьему - есть проблемы. У нас есть комбинации значений On/1 и Off/2, но нет {On, 2} и {Off, 1}.
* к четвертой - все ок. Все комбинации значений есть.
* к пятой - все ок. Все комбинации значений есть.
Вот тут нам и понадобятся наши загадочные пустые строки. Добавляем не хватающие комбинации 3его и 6ого столбцов.
TextBox(3) | List(2) | Checkbox1(2) | Checkbox2(2) | Checkbox3(2) | Checkbox4(2) |
---|---|---|---|---|---|
Valid Integer | 0 | on | Checked | Yes | 1 |
Valid Integer | other | off | Unchecked | No | 2 |
. | |||||
Invalid Integer | 0 | off | Checked | No | 1 |
Invalid Integer | other | on | Unchecked | Yes | 2 |
. | |||||
Alpha chars | 0 | on | Unchecked | No | 2 |
Alpha chars | other | off | Checked | Yes | 1 |
Остальные значения переменных для добавленных строк выберем любые, ибо все комбинации значений каждой пары у нас уже есть.
TextBox(3) | List(2) | Checkbox1(2) | Checkbox2(2) | Checkbox3(2) | Checkbox4(2) |
---|---|---|---|---|---|
Valid Integer | 0 | on | Checked | Yes | 1 |
Valid Integer | other | off | Unchecked | No | 2 |
Invalid Integer | other | on | checked | yes | 2 |
Invalid Integer | 0 | off | Checked | No | 1 |
Invalid Integer | other | on | Unchecked | Yes | 2 |
invalid integer | other | off | unchecked | No | 1 |
Alpha chars | 0 | on | Unchecked | No | 2 |
Alpha chars | other | off | Checked | Yes | 1 |
Заимствованно с http://w1zle.blogspot.ru
Комментариев нет:
Отправить комментарий