четверг, 13 декабря 2012 г.

AllPairs Algorithm

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 заключается в том, что мы не будем тестировать на всех комбинациях значений для всех переменных, а только все комбинации значений каждой пары переменных.

Ну приступим. Как всегда, для начала, нам нужно определить какое количество входных параметров(переменных) у нас есть, и какие значения может принимать каждый входной параметр.

ListTextBoxCheckbox1Checkbox2
01onon
12offoff
23

34

4...

596

697

798

899

9



Если можно упростить значения переменных, то обязательно это делаем. Например, поле ввода может принимать значения от 1 до 99. Понимая бизнес логику приложения мы можем разбить значения 1 до 99 на классы эквивалентности и использовать уже их как возможные значения для комбинаторики. Либо можем использовать технику граничных значений.

Как бы там ни было, в нашем сказочном примере, для простоты, уменьшим количество возможных значений до 3х - валидное целочисленое значение, невалидное целочисленое значение, символы.

Ну и давайте уменьшим количество возможных значений для списка до 2х - 0 и любое другое значение.

Теперь наши входные данные выглядят так:

ListTextBoxCheckbox1Checkbox2
0Valid intonon
any otherInvalid intoffoff

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 Integer0

Valid Integerother

.


Invalid Integer0

Invalid Integerother

.


Alpha chars0

Alpha charsother


Пока все хорошо, у нас вышли все возможные комбинации пар значений первой и второй переменной. Думаю стоит продолжить заполнять таблицу :). Третья переменная может принимать 2 значения - on и off. Для каждого дубля значений столбца 1 мы заполняем оба значения столбца 3.

TextBox(3)List(2)Checkbox1(2)Checkbox2(2)
Valid Integer0on
Valid Integerotheroff
.


Invalid Integer0on
Invalid Integerotheroff
.


Alpha chars0on
Alpha charsotheroff

Проверяем. Есть ли все возможные комбинации значений между 1ым и 2ым столбцом? Есть. Есть все возможные комбинации значений между вторым и третьим столбцом? Нет, у нас нет комбинации {0,off} и {other, on}.

TextBox(3)List(2)Checkbox1(2)Checkbox2(2)
Valid Integer0on
Valid Integerotheroff
.


Invalid Integer0off
Invalid Integerotheron
.


Alpha chars0on
Alpha charsotheroff

О, вот теперь намного лучше. Теперь у нас есть и все возможные комбинации значений 1ой, 2ой и 3ей переменной. Давайте разбираться с 4ой переменной - чекбокс2. Чекбокс2 тоже может иметь 2 возможных значнеия. Нам нужно подставить в таблицу эти значения так, чтобы все возможные комбинации значений каждой пары переменных существовали. Пробуем.

TextBox(3)List(2)Checkbox1(2)Checkbox2(2)
Valid Integer0onChecked
Valid IntegerotheroffUnchecked
.


Invalid Integer0offChecked
Invalid IntegerotheronUnchecked
.


Alpha chars0onUnchecked
Alpha charsotheroffChecked

Проверяем. Есть все возможные комбинации первого и четвертого столбца? Есть. Есть все возможные комбинации второго и четвертого столбца? Есть. Неплохо. Есть все возможные комбинации третьего и четвертого столбца? Еcть. Отлично, мы справились в 6 тест кейсов, когда всего существует 24 возможных комбинации.

Но зачем мы оставили пустые строки? Для того чтобы это понять нам нужно усложнить пример. Добавим еще 2 чекбокса (2 бинарных входных параметра) - чекбокс3 и чекбокс4. Продолжим строить тестовые данные на основе allpairs algorithm. Добавляем значения для 5ого столбца.

TextBox(3)List(2)Checkbox1(2)Checkbox2(2)Checkbox3(2)Checkbox4(2)
Valid Integer0onCheckedYes
Valid IntegerotheroffUncheckedNo
.




Invalid Integer0offCheckedNo
Invalid IntegerotheronUncheckedYes
.




Alpha chars0onUncheckedNo
Alpha charsotheroffCheckedYes

Проверяем свежезаполненый 5ый столбец по отношению к остальным столбцам поочереди:
 * к первому - все ок. Все комбинации значений есть.
 * к второму - все ок. Все комбинации значений есть.
 * к третьему - все ок. Все комбинации значений есть.
 * к четвертому - все ок. Все комбинации значений есть.

Что ж, заполним последнюю колонку значениями.

TextBox(3)List(2)Checkbox1(2)Checkbox2(2)Checkbox3(2)Checkbox4(2)
Valid Integer0onCheckedYes1
Valid IntegerotheroffUncheckedNo2
.




Invalid Integer0offCheckedNo2
Invalid IntegerotheronUncheckedYes1
.




Alpha chars0onUncheckedNo1
Alpha charsotheroffCheckedYes2
Проверяем свежак - 5ый столбец по отношению к остальным столбцам по очереди:
 * к первому - все ок. Все комбинации значений есть.
 * к второму - все ок. Все комбинации значений есть.
 * к третьему - есть проблемы. У нас есть комбинации значений On/1 и Off/2, но нет {On, 2} и {Off, 1}.
 * к четвертой - все ок. Все комбинации значений есть.
 * к пятой - все ок. Все комбинации значений есть.

Вот тут нам и понадобятся наши загадочные пустые строки. Добавляем не хватающие комбинации 3его и 6ого столбцов.

TextBox(3)List(2)Checkbox1(2)Checkbox2(2)Checkbox3(2)Checkbox4(2)
Valid Integer0onCheckedYes1
Valid IntegerotheroffUncheckedNo2
.




Invalid Integer0offCheckedNo1
Invalid IntegerotheronUncheckedYes2
.




Alpha chars0onUncheckedNo2
Alpha charsotheroffCheckedYes1

Остальные значения переменных для добавленных строк выберем любые, ибо все комбинации значений каждой пары у нас уже есть.

TextBox(3)List(2)Checkbox1(2)Checkbox2(2)Checkbox3(2)Checkbox4(2)
Valid Integer0onCheckedYes1
Valid IntegerotheroffUncheckedNo2
Invalid Integerotheroncheckedyes2
Invalid Integer0offCheckedNo1
Invalid IntegerotheronUncheckedYes2
invalid integerotheroffuncheckedNo1
Alpha chars0onUncheckedNo2
Alpha charsotheroffCheckedYes1
Всё готово, мы закончили. Итого 8 комбинаций вместо 96.

Заимствованно с http://w1zle.blogspot.ru

Комментариев нет:

Отправить комментарий